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

ruby-changes:69489

From: Nobuyoshi <ko1@a...>
Date: Thu, 28 Oct 2021 14:45:32 +0900 (JST)
Subject: [ruby-changes:69489] 1d666ed50f (master): Fix leap day with UTC offset [Bug #18274]

https://git.ruby-lang.org/ruby.git/commit/?id=1d666ed50f

From 1d666ed50f8b4b3779583381882a0b3edd3cff0e Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Thu, 28 Oct 2021 12:06:34 +0900
Subject: Fix leap day with UTC offset [Bug #18274]

`struct vtm::year` is a Ruby integer instance, but not a C integer
type.
---
 test/ruby/test_time.rb | 1 +
 time.c                 | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/test/ruby/test_time.rb b/test/ruby/test_time.rb
index fc21c740789..85667e2d1fb 100644
--- a/test/ruby/test_time.rb
+++ b/test/ruby/test_time.rb
@@ -39,6 +39,7 @@ class TestTime < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_time.rb#L39
   def test_new
     assert_equal(Time.utc(2000,2,10), Time.new(2000,2,10, 11,0,0, 3600*11))
     assert_equal(Time.utc(2000,2,10), Time.new(2000,2,9, 13,0,0, -3600*11))
+    assert_equal(Time.utc(2000,2,29,23,0,0), Time.new(2000, 3, 1, 0, 0, 0, 3600))
     assert_equal(Time.utc(2000,2,10), Time.new(2000,2,10, 11,0,0, "+11:00"))
     assert_equal(Rational(1,2), Time.new(2000,2,10, 11,0,5.5, "+11:00").subsec)
     bug4090 = '[ruby-dev:42631]'
diff --git a/time.c b/time.c
index fee12d34ff8..6fa4047e297 100644
--- a/time.c
+++ b/time.c
@@ -784,6 +784,7 @@ static const int8_t leap_year_days_in_month[] = { https://github.com/ruby/ruby/blob/trunk/time.c#L784
 
 #define days_in_month_of(leap) ((leap) ? leap_year_days_in_month : common_year_days_in_month)
 #define days_in_month_in(y) days_in_month_of(leap_year_p(y))
+#define days_in_month_in_v(y) days_in_month_of(leap_year_v_p(y))
 
 #define M28(m) \
     (m),(m),(m),(m),(m),(m),(m),(m),(m),(m), \
@@ -2033,7 +2034,7 @@ vtm_add_offset(struct vtm *vtm, VALUE off, int sign) https://github.com/ruby/ruby/blob/trunk/time.c#L2034
                 vtm->yday = leap_year_v_p(vtm->year) ? 366 : 365;
             }
             else if (vtm->mday == 1) {
-                const int8_t *days_in_month = days_in_month_in(vtm->year);
+                const int8_t *days_in_month = days_in_month_in_v(vtm->year);
                 vtm->mon--;
                 vtm->mday = days_in_month[vtm->mon-1];
                 vtm->yday--;
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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