From 1b7c5c394f14e1a7aebbaf14b7d681733d1d97c2 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Fri, 7 Oct 2022 14:12:30 +0900 Subject: [PATCH] [ruby/date] Fix misplaced time zone offset checks https://github.com/ruby/date/commit/d21c69450a --- ext/date/date_parse.c | 4 ++-- test/date/test_date_strptime.rb | 5 +++++ 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