From 1eb8eb55c27b19e36d5bd23ce27f7ec2b9a7f521 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Tue, 12 Jan 2021 17:24:43 +0900 Subject: [PATCH] Convert time component strings to integers more strictly https://bugs.ruby-lang.org/issues/17485#change-89871 --- test/ruby/test_time.rb | 1 + time.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/test/ruby/test_time.rb b/test/ruby/test_time.rb index e49753e143..e5da0d6343 100644 --- a/test/ruby/test_time.rb +++ b/test/ruby/test_time.rb @@ -46,6 +46,7 @@ class TestTime < Test::Unit::TestCase t = Time.new(*tm, "-12:00") assert_equal([2001,2,28,23,59,30,-43200], [t.year, t.month, t.mday, t.hour, t.min, t.sec, t.gmt_offset], bug4090) assert_raise(ArgumentError) { Time.new(2000,1,1, 0,0,0, "+01:60") } + assert_raise(ArgumentError) { Time.new(2021, 1, 1, "+09:99") } end def test_time_add() diff --git a/time.c b/time.c index a3952743da..e7a211baa5 100644 --- a/time.c +++ b/time.c @@ -2793,7 +2793,7 @@ static int obj2int(VALUE obj) { if (RB_TYPE_P(obj, T_STRING)) { - obj = rb_str_to_inum(obj, 10, FALSE); + obj = rb_str_to_inum(obj, 10, TRUE); } return NUM2INT(obj); @@ -2815,7 +2815,7 @@ static VALUE obj2vint(VALUE obj) { if (RB_TYPE_P(obj, T_STRING)) { - obj = rb_str_to_inum(obj, 10, FALSE); + obj = rb_str_to_inum(obj, 10, TRUE); } else { obj = rb_to_int(obj); @@ -2830,7 +2830,7 @@ obj2subsecx(VALUE obj, VALUE *subsecx) VALUE subsec; if (RB_TYPE_P(obj, T_STRING)) { - obj = rb_str_to_inum(obj, 10, FALSE); + obj = rb_str_to_inum(obj, 10, TRUE); *subsecx = INT2FIX(0); } else { @@ -2844,7 +2844,7 @@ static VALUE usec2subsecx(VALUE obj) { if (RB_TYPE_P(obj, T_STRING)) { - obj = rb_str_to_inum(obj, 10, FALSE); + obj = rb_str_to_inum(obj, 10, TRUE); } return mulquov(num_exact(obj), INT2FIX(TIME_SCALE), INT2FIX(1000000));