[tz] zdump bug in Asia/Singapore
Paul Eggert
eggert at cs.ucla.edu
Sat Sep 6 23:37:26 UTC 2014
Thanks for reporting that. A proposed patch is attached.
-------------- next part --------------
From 53d5038b3fe50afcd5cb523aad48f88b231fd207 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert at cs.ucla.edu>
Date: Sat, 6 Sep 2014 16:34:00 -0700
Subject: [PROPOSED PATCH] * zdump.c (main): Fix bug with 'zdump -Vc 1981,1982
Asia/Singapore'
missing the end-of-1981 transition. Problem reported by Tim Parenti in:
http://mm.icann.org/pipermail/tz/2014-September/021565.html
---
NEWS | 3 +++
zdump.c | 9 ++++-----
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/NEWS b/NEWS
index 91ce1e7..6955f70 100644
--- a/NEWS
+++ b/NEWS
@@ -17,6 +17,9 @@ Unreleased, experimental changes
Changes affecting code
+ zdump -c no longer mishandles transitions near year boundaries.
+ (Thanks to Tim Parenti for reporting the problem.)
+
An access to uninitalized data has been fixed.
(Thanks to Jörg Richter for reporting the problem.)
diff --git a/zdump.c b/zdump.c
index 2d82fe5..3dfa768 100644
--- a/zdump.c
+++ b/zdump.c
@@ -654,12 +654,11 @@ main(int argc, char *argv[])
tmp = my_localtime_rz(tz, &t, &tm);
if (tmp)
ab = saveabbr(&abbrev, &abbrevsize, &tm);
- for ( ; ; ) {
- newt = (t < absolute_max_time - SECSPERDAY / 2
+ while (t < cuthitime) {
+ newt = ((t < absolute_max_time - SECSPERDAY / 2
+ && t + SECSPERDAY / 2 < cuthitime)
? t + SECSPERDAY / 2
- : absolute_max_time);
- if (cuthitime <= newt)
- break;
+ : cuthitime);
newtmp = localtime_rz(tz, &newt, &newtm);
if ((tmp == NULL || newtmp == NULL) ? (tmp != newtmp) :
(delta(&newtm, &tm) != (newt - t) ||
--
1.9.1
More information about the tz
mailing list