diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | lib/rdoc/parser/changelog.rb | 8 | ||||
-rw-r--r-- | lib/time.rb | 3 | ||||
-rw-r--r-- | test/test_time.rb | 3 |
4 files changed, 23 insertions, 3 deletions
@@ -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> * ext/win32ole/win32ole.c: refactoring. diff --git a/lib/rdoc/parser/changelog.rb b/lib/rdoc/parser/changelog.rb index 782d8f09bf..75fcaaad85 100644 --- a/lib/rdoc/parser/changelog.rb +++ b/lib/rdoc/parser/changelog.rb @@ -145,10 +145,14 @@ class RDoc::Parser::ChangeLog < RDoc::Parser # HACK Ruby 1.8 does not raise ArgumentError for Time.parse "Other" entry_name = nil unless entry_name =~ /#{time.year}/ rescue NoMethodError + # HACK Ruby 2.1.2 and earlier raises NoMethodError if time part is absent time, = entry_name.split ' ', 2 - time = Time.parse time 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 entry_body = [] diff --git a/lib/time.rb b/lib/time.rb index 3728fef59c..2225f68abb 100644 --- a/lib/time.rb +++ b/lib/time.rb @@ -214,7 +214,8 @@ class Time if o != 0 then hour += o; o, hour = hour.divmod(24); off += o end if off != 0 day += off - if month_days(year, mon) < day + days = month_days(year, mon) + if days and days < day mon += 1 if 12 < mon mon = 1 diff --git a/test/test_time.rb b/test/test_time.rb index c516d29227..ecf07b21e9 100644 --- a/test/test_time.rb +++ b/test/test_time.rb @@ -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("\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)") } + + # Out of range arguments + assert_raise(ArgumentError) { Time.parse("2014-13-13T18:00:00-0900") } end def test_zone_0000 |