From 217ac21a111676bd235b6d5db315340ac3db1ed1 Mon Sep 17 00:00:00 2001 From: Noah Gibbs Date: Fri, 3 Jun 2016 09:40:23 -0700 Subject: [PATCH] Patch for bug #12297, date parsing --- ChangeLog | 6 ++++++ ext/date/date_strptime.c | 2 ++ test/date/test_date_strptime.rb | 3 +++ 3 files changed, 11 insertions(+) diff --git a/ChangeLog b/ChangeLog index d03170d..0e4e2ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sat Jun 4 01:38:30 2016 Noah Gibbs + + * ext/date/date_strptime.c: don't permit 0 as a year for strptime's + %Y format. Raise an ArgumentError. + [Bug #12297] + Fri Jun 3 21:27:22 2016 Nobuyoshi Nakada * ruby.c (process_options): rb_str_conv_enc() never set encoding diff --git a/ext/date/date_strptime.c b/ext/date/date_strptime.c index 4f93219..528bd4a 100644 --- a/ext/date/date_strptime.c +++ b/ext/date/date_strptime.c @@ -544,6 +544,8 @@ date__strptime_internal(const char *str, size_t slen, READ_DIGITS_MAX(n) if (sign == -1) n = f_negate(n); + if (n == 0) + fail(); set_hash("year", n); goto matched; } diff --git a/test/date/test_date_strptime.rb b/test/date/test_date_strptime.rb index 15fdc94..a0de426 100644 --- a/test/date/test_date_strptime.rb +++ b/test/date/test_date_strptime.rb @@ -483,6 +483,9 @@ def test_strptime__ex assert_raise(ArgumentError) do Date.strptime('01-31-2011', '%m/%d/%Y') end + assert_raise(ArgumentError) do + Date.strptime('01-31-0000', '%m/%d/%Y') + end end def test_given_string