diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-01-15 08:53:40 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-01-15 08:53:40 +0000 |
commit | a88f8e34b2e932a0f70eb3dd026fdf80a4d2c05a (patch) | |
tree | 215b18ef06a9ee7641ed531cf50656071a37f39b /lib | |
parent | 6e7f39829d6ce1cc80964d4cab85e1d33f1e1595 (diff) |
merge revision(s) 66735: [Backport #15506]
Fix mday overflow
[ruby-core:90897] [Bug #15506]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_6@66825 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r-- | lib/time.rb | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/time.rb b/lib/time.rb index 8058446a83..81c0ebd7ba 100644 --- a/lib/time.rb +++ b/lib/time.rb @@ -201,6 +201,9 @@ class Time end if yday + unless (1..366) === yday + raise ArgumentError, "yday #{yday} out of range" + end mon, day = (yday-1).divmod(31) mon += 1 day += 1 @@ -208,6 +211,12 @@ class Time diff = yday - t.yday return t if diff.zero? day += diff + if day > 28 and day > (mday = month_days(off_year, mon)) + if (mon += 1) > 12 + raise ArgumentError, "yday #{yday} out of range" + end + day -= mday + end return make_time(date, year, nil, mon, day, hour, min, sec, sec_fraction, zone, now) end @@ -433,7 +442,7 @@ class Time # def strptime(date, format, now=self.now) d = Date._strptime(date, format) - raise ArgumentError, "invalid strptime format - `#{format}'" unless d + raise ArgumentError, "invalid date or strptime format - `#{date}' `#{format}'" unless d if seconds = d[:seconds] if sec_fraction = d[:sec_fraction] usec = sec_fraction * 1000000 |