summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-01-06 12:41:20 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-01-06 12:41:20 +0000
commit9bbe6b9d0ce6f3228b082aba3f70cdefd3415a22 (patch)
treed07276c95c318147da10836a1eb8062a7c870dcb
parentc0ee6f2af98a8322e842bb2847492bfc56cb21b9 (diff)
* time.c (timelocalw): Set tm_isdst field -1 if vtm->isdst is
VTM_ISDST_INITVAL. This bug is introduced at packing struct vtm (r45155). [ruby-core:67345] [Bug #10698] Reported by Boris Ruf. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49162 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog7
-rw-r--r--test/ruby/test_time_tz.rb8
-rw-r--r--time.c2
3 files changed, 16 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 19110f780c..cc882cc3e2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Tue Jan 6 21:41:04 2015 Tanaka Akira <akr@fsij.org>
+
+ * time.c (timelocalw): Set tm_isdst field -1 if vtm->isdst is
+ VTM_ISDST_INITVAL. This bug is introduced at packing struct
+ vtm (r45155).
+ [ruby-core:67345] [Bug #10698] Reported by Boris Ruf.
+
Tue Jan 6 03:10:54 2015 Koichi Sasada <ko1@atdot.net>
* test/fiddle/test_handle.rb: fix syntax.
diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb
index 5fb00557c8..6f3e05f4cc 100644
--- a/test/ruby/test_time_tz.rb
+++ b/test/ruby/test_time_tz.rb
@@ -155,6 +155,14 @@ class TestTimeTZ < Test::Unit::TestCase
}
end
+ def test_europe_berlin
+ with_tz(tz="Europe/Berlin") {
+ assert_time_constructor(tz, "2011-10-30 02:00:00 +0100", :local, [2011,10,30,2,0,0], "[ruby-core:67345] [Bug #10698]")
+ assert_time_constructor(tz, "2011-10-30 02:00:00 +0100", :local, [0,0,2,30,10,2011,nil,nil,false,nil])
+ assert_time_constructor(tz, "2011-10-30 02:00:00 +0200", :local, [0,0,2,30,10,2011,nil,nil,true,nil])
+ }
+ end
+
def test_europe_lisbon
with_tz("Europe/Lisbon") {
assert_equal("LMT", Time.new(-0x1_0000_0000_0000_0000).zone)
diff --git a/time.c b/time.c
index ddd27ca8dd..044a049981 100644
--- a/time.c
+++ b/time.c
@@ -1548,7 +1548,7 @@ timelocalw(struct vtm *vtm)
tm.tm_hour = vtm->hour;
tm.tm_min = vtm->min;
tm.tm_sec = vtm->sec;
- tm.tm_isdst = vtm->isdst;
+ tm.tm_isdst = vtm->isdst == VTM_ISDST_INITVAL ? -1 : vtm->isdst;
if (find_time_t(&tm, 0, &t))
goto no_localtime;