[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]