mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Fix Time.parse
for out of range arguments with an offset
* lib/time.rb (Time#apply_offset): Guards against a `nil` return value from `Time.month_days` when offsetting date. Out of range values are then caught when `Time.utc` is called (as usual). Previously a `nil` return value from `Time.month_days` would have the `<` operator called on it, and raise `NoMethodError`. [fix GH-667] * lib/rdoc/parser/changelog.rb (RDoc#parse_entries): fix dirty hack. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
595d057e60
commit
f75b676cc4
4 changed files with 23 additions and 3 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
Sat Jul 19 11:56:36 2014 Grey Baker <greysteil@gmail.com>
|
||||||
|
|
||||||
|
* lib/time.rb (Time#apply_offset): Guards against a `nil` return
|
||||||
|
value from `Time.month_days` when offsetting date. Out of range
|
||||||
|
values are then caught when `Time.utc` is called (as usual).
|
||||||
|
|
||||||
|
Previously a `nil` return value from `Time.month_days` would
|
||||||
|
have the `<` operator called on it, and raise `NoMethodError`.
|
||||||
|
[fix GH-667]
|
||||||
|
|
||||||
|
* lib/rdoc/parser/changelog.rb (RDoc#parse_entries): fix dirty hack.
|
||||||
|
|
||||||
Sat Jul 19 06:19:01 2014 Masaki Suketa <masaki.suketa@nifty.ne.jp>
|
Sat Jul 19 06:19:01 2014 Masaki Suketa <masaki.suketa@nifty.ne.jp>
|
||||||
|
|
||||||
* ext/win32ole/win32ole.c: refactoring.
|
* ext/win32ole/win32ole.c: refactoring.
|
||||||
|
|
|
@ -145,10 +145,14 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
|
||||||
# HACK Ruby 1.8 does not raise ArgumentError for Time.parse "Other"
|
# HACK Ruby 1.8 does not raise ArgumentError for Time.parse "Other"
|
||||||
entry_name = nil unless entry_name =~ /#{time.year}/
|
entry_name = nil unless entry_name =~ /#{time.year}/
|
||||||
rescue NoMethodError
|
rescue NoMethodError
|
||||||
|
# HACK Ruby 2.1.2 and earlier raises NoMethodError if time part is absent
|
||||||
time, = entry_name.split ' ', 2
|
time, = entry_name.split ' ', 2
|
||||||
time = Time.parse time
|
|
||||||
rescue ArgumentError
|
rescue ArgumentError
|
||||||
entry_name = nil
|
if /out of range/ =~ $!.message
|
||||||
|
time = Time.parse(entry_name.split(' ', 2)[0]) rescue entry_name = nil
|
||||||
|
else
|
||||||
|
entry_name = nil
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
entry_body = []
|
entry_body = []
|
||||||
|
|
|
@ -214,7 +214,8 @@ class Time
|
||||||
if o != 0 then hour += o; o, hour = hour.divmod(24); off += o end
|
if o != 0 then hour += o; o, hour = hour.divmod(24); off += o end
|
||||||
if off != 0
|
if off != 0
|
||||||
day += off
|
day += off
|
||||||
if month_days(year, mon) < day
|
days = month_days(year, mon)
|
||||||
|
if days and days < day
|
||||||
mon += 1
|
mon += 1
|
||||||
if 12 < mon
|
if 12 < mon
|
||||||
mon = 1
|
mon = 1
|
||||||
|
|
|
@ -307,6 +307,9 @@ class TestTimeExtension < Test::Unit::TestCase # :nodoc:
|
||||||
assert_raise(ArgumentError) { Time.rfc2822("=?iso-8859-1?Q?(=C5=DA),?= 10 2 2001 23:32:26 +0900 (JST)") }
|
assert_raise(ArgumentError) { Time.rfc2822("=?iso-8859-1?Q?(=C5=DA),?= 10 2 2001 23:32:26 +0900 (JST)") }
|
||||||
assert_raise(ArgumentError) { Time.rfc2822("\307\341\314\343\332\311, 30 \344\346\335\343\310\321 2001 10:01:06") }
|
assert_raise(ArgumentError) { Time.rfc2822("\307\341\314\343\332\311, 30 \344\346\335\343\310\321 2001 10:01:06") }
|
||||||
assert_raise(ArgumentError) { Time.rfc2822("=?iso-8859-1?Q?(=BF=E5),?= 12 =?iso-8859-1?Q?9=B7=EE?= 2001 14:52:41\n+0900 (JST)") }
|
assert_raise(ArgumentError) { Time.rfc2822("=?iso-8859-1?Q?(=BF=E5),?= 12 =?iso-8859-1?Q?9=B7=EE?= 2001 14:52:41\n+0900 (JST)") }
|
||||||
|
|
||||||
|
# Out of range arguments
|
||||||
|
assert_raise(ArgumentError) { Time.parse("2014-13-13T18:00:00-0900") }
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_zone_0000
|
def test_zone_0000
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue