diff options
author | nagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-09-11 16:16:19 +0000 |
---|---|---|
committer | nagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-09-11 16:16:19 +0000 |
commit | e4d528752a1235f17f1622827f7cec693e34157a (patch) | |
tree | b5ccf2d17f07be67b9b001c8278eb268dbbdf743 /test | |
parent | 089106508261787f7b43840b0249a1f9e1fea9a0 (diff) |
merge revision(s) 42596,42597,42598,42599: [Backport #8795]
* time.c (time_mload): ignore invalid offset and zone.
[ruby-core:56648] [Bug #8795]
* time.c (time_mload): ignore auxiliary data, offset and zone, if
invalid. [ruby-core:56648] [Bug #8795]
* test/ruby/test_time.rb: use the in_timezone() helper
and define it at the top with other helpers.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@42912 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_time.rb | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/test/ruby/test_time.rb b/test/ruby/test_time.rb index 22df27067f..02ebc6ac38 100644 --- a/test/ruby/test_time.rb +++ b/test/ruby/test_time.rb @@ -15,6 +15,15 @@ class TestTime < Test::Unit::TestCase $VERBOSE = @verbose end + def in_timezone(zone) + orig_zone = ENV['TZ'] + + ENV['TZ'] = zone + yield + ensure + ENV['TZ'] = orig_zone + end + def no_leap_seconds? # 1972-06-30T23:59:60Z is the first leap second. Time.utc(1972, 7, 1, 0, 0, 0) - Time.utc(1972, 6, 30, 23, 59, 59) == 1 @@ -291,18 +300,15 @@ class TestTime < Test::Unit::TestCase end def test_marshal_zone - orig_zone = ENV['TZ'] - t = Time.utc(2013, 2, 24) assert_equal('UTC', t.zone) assert_equal('UTC', Marshal.load(Marshal.dump(t)).zone) - ENV['TZ'] = 'JST-9' - t = Time.local(2013, 2, 24) - assert_equal('JST', Time.local(2013, 2, 24).zone) - assert_equal('JST', Marshal.load(Marshal.dump(t)).zone) - ensure - ENV['TZ'] = orig_zone + in_timezone('JST-9') do + t = Time.local(2013, 2, 24) + assert_equal('JST', Time.local(2013, 2, 24).zone) + assert_equal('JST', Marshal.load(Marshal.dump(t)).zone) + end end def test_marshal_to_s @@ -322,6 +328,34 @@ class TestTime < Test::Unit::TestCase end end + Bug8795 = '[ruby-core:56648] [Bug #8795]' + + def test_marshal_broken_offset + data = "\x04\bIu:\tTime\r\xEFF\x1C\x80\x00\x00\x00\x00\x06:\voffset" + t1 = t2 = nil + in_timezone('UTC') do + assert_nothing_raised(TypeError, ArgumentError, Bug8795) do + t1 = Marshal.load(data + "T") + t2 = Marshal.load(data + "\"\x0ebadoffset") + end + assert_equal(0, t1.utc_offset) + assert_equal(0, t2.utc_offset) + end + end + + def test_marshal_broken_zone + data = "\x04\bIu:\tTime\r\xEFF\x1C\x80\x00\x00\x00\x00\x06:\tzone" + t1 = t2 = nil + in_timezone('UTC') do + assert_nothing_raised(TypeError, ArgumentError, Bug8795) do + t1 = Marshal.load(data + "T") + t2 = Marshal.load(data + "\"\b\0\0\0") + end + assert_equal('UTC', t1.zone) + assert_equal('UTC', t2.zone) + end + end + def test_at3 t2000 = get_t2000 assert_equal(t2000, Time.at(t2000)) |