summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/date/date_parse.c4
-rw-r--r--test/date/test_date_strptime.rb5
2 files changed, 7 insertions, 2 deletions
diff --git a/ext/date/date_parse.c b/ext/date/date_parse.c
index 7349c75d84..c6f26ecb91 100644
--- a/ext/date/date_parse.c
+++ b/ext/date/date_parse.c
@@ -486,14 +486,14 @@ date_zone_to_diff(VALUE str)
#define out_of_range(v, min, max) ((v) < (min) || (max) < (v))
hour = STRTOUL(s, &p, 10);
if (*p == ':') {
- if (out_of_range(sec, 0, 59)) return Qnil;
+ if (out_of_range(hour, 0, 23)) return Qnil;
s = ++p;
min = STRTOUL(s, &p, 10);
if (out_of_range(min, 0, 59)) return Qnil;
if (*p == ':') {
s = ++p;
sec = STRTOUL(s, &p, 10);
- if (out_of_range(hour, 0, 23)) return Qnil;
+ if (out_of_range(sec, 0, 59)) return Qnil;
}
}
else if (*p == ',' || *p == '.') {
diff --git a/test/date/test_date_strptime.rb b/test/date/test_date_strptime.rb
index 521bf92916..4efe1a47d0 100644
--- a/test/date/test_date_strptime.rb
+++ b/test/date/test_date_strptime.rb
@@ -296,6 +296,11 @@ class TestDateStrptime < Test::Unit::TestCase
assert_not_nil(Date._strptime('Januari', '%B'))
assert_nil(Date._strptime('Sundai,', '%A,'))
assert_nil(Date._strptime('Januari,', '%B,'))
+
+ assert_nil(Date._strptime('+24:00', '%Z')[:offset])
+ assert_nil(Date._strptime('+23:60', '%Z')[:offset])
+ assert_nil(Date._strptime('+23:00:60', '%Z')[:offset])
+ assert_nil(Date._strptime('+23:00:60', '%Z')[:offset])
end
def test_strptime