ruby-changes:69762
From: Jean <ko1@a...>
Date: Tue, 16 Nov 2021 23:02:46 +0900 (JST)
Subject: [ruby-changes:69762] fa674cf723 (master): [ruby/date] `Date._<format>(nil)` should return an empty Hash
https://git.ruby-lang.org/ruby.git/commit/?id=fa674cf723 From fa674cf7230e40bc96625ee97a6057e48bb20f0f Mon Sep 17 00:00:00 2001 From: Jean Boussier <jean.boussier@g...> Date: Mon, 15 Nov 2021 11:37:40 +0100 Subject: [ruby/date] `Date._<format>(nil)` should return an empty Hash Fix: https://github.com/ruby/date/issues/39 This is how versions previous to 3.2.1 behaved and Active Support currently rely on this behavior. https://github.com/rails/rails/blob/90357af08048ef5076730505f6e7b14a81f33d0c/activesupport/lib/active_support/values/time_zone.rb#L383-L384 Any Rails application upgrading to date `3.2.1` might run into unexpected errors. https://github.com/ruby/date/commit/8f2d7a0c7e --- ext/date/date_core.c | 2 ++ test/date/test_date_parse.rb | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/ext/date/date_core.c b/ext/date/date_core.c index e372a12cd72..d1d03fe407e 100644 --- a/ext/date/date_core.c +++ b/ext/date/date_core.c @@ -4342,6 +4342,8 @@ get_limit(VALUE opt) https://github.com/ruby/ruby/blob/trunk/ext/date/date_core.c#L4342 static void check_limit(VALUE str, VALUE opt) { + if (NIL_P(str)) return; + StringValue(str); size_t slen = RSTRING_LEN(str); size_t limit = get_limit(opt); diff --git a/test/date/test_date_parse.rb b/test/date/test_date_parse.rb index a486451ece3..1217ee8be68 100644 --- a/test/date/test_date_parse.rb +++ b/test/date/test_date_parse.rb @@ -848,6 +848,9 @@ class TestDateParse < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/date/test_date_parse.rb#L848 h = Date._iso8601('') assert_equal({}, h) + + h = Date._iso8601(nil) + assert_equal({}, h) end def test__rfc3339 @@ -863,6 +866,9 @@ class TestDateParse < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/date/test_date_parse.rb#L866 h = Date._rfc3339('') assert_equal({}, h) + + h = Date._rfc3339(nil) + assert_equal({}, h) end def test__xmlschema @@ -945,6 +951,9 @@ class TestDateParse < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/date/test_date_parse.rb#L951 h = Date._xmlschema('') assert_equal({}, h) + + h = Date._xmlschema(nil) + assert_equal({}, h) end def test__rfc2822 @@ -977,6 +986,9 @@ class TestDateParse < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/date/test_date_parse.rb#L986 h = Date._rfc2822('') assert_equal({}, h) + + h = Date._rfc2822(nil) + assert_equal({}, h) end def test__httpdate @@ -997,6 +1009,9 @@ class TestDateParse < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/date/test_date_parse.rb#L1009 h = Date._httpdate('') assert_equal({}, h) + + h = Date._httpdate(nil) + assert_equal({}, h) end def test__jisx0301 @@ -1073,6 +1088,9 @@ class TestDateParse < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/date/test_date_parse.rb#L1088 h = Date._jisx0301('') assert_equal({}, h) + + h = Date._jisx0301(nil) + assert_equal({}, h) end def test_iso8601 -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/