summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--lib/rdoc/parser/changelog.rb8
-rw-r--r--lib/time.rb3
-rw-r--r--test/test_time.rb3
4 files changed, 23 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 352ddf0746..0eecdacedb 100644
--- a/ChangeLog
+++ b/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>
* 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