[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnats/414: Wrong dates in PRs if no %z support in strftime(3)
From: |
Lars . Henriksen |
Subject: |
gnats/414: Wrong dates in PRs if no %z support in strftime(3) |
Date: |
Thu, 12 Sep 2002 10:18:07 -0400 |
>Number: 414
>Category: gnats
>Synopsis: Wrong dates in PRs if no %z support in strftime(3)
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: unassigned
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Sep 12 10:18:07 -0400 2002
>Originator: Lars Henriksen
>Release: 4.0-beta1
>Organization:
>Environment:
Tru64
>Description:
On systems where strftime(3) does not support the format
code %z (numeric GMT offset), the dates in PRs are not correct if the local
timezone is different from GMT.
The cause is a bug in gnats_strftime(). The problem is the
brokentime pointer passed to gnats_strftime(). It points to
static data that may be overwritten by calls to (among others) gmtime().
Exactly this happens in the routine minutes_gmt_offset(),
whereupon the now invalid brokentime pointer is passed on
to strftime().
Patch supplied.
>How-To-Repeat:
>Fix:
Index: misc.c
===================================================================
RCS file: /cvsroot/gnats/gnats/gnats/misc.c,v
retrieving revision 1.36
diff -u -r1.36 misc.c
--- misc.c 6 Jan 2002 16:13:20 -0000 1.36
+++ misc.c 12 Sep 2002 14:16:12 -0000
@@ -568,6 +568,11 @@
char *fixed_template = (char*)xmalloc (strlen(template)+FORMAT_PADDING);
const char *in = template;
char *out = fixed_template;
+ /* Because brokentime points to static data (allocated
+ * by localtime()), it cannot be passed to a subroutine
+ * and then later be relied on to point to the same data. */
+ struct tm btime = *brokentime;
+ int result;
while (*in != '\0')
{
@@ -602,12 +607,9 @@
}
}
*out = '\0';
-
- {
- int result = strftime (s, size, fixed_template, brokentime);
- free (fixed_template);
- return result;
- }
+ result = strftime (s, size, fixed_template, &btime);
+ free (fixed_template);
+ return result;
}
}
>Unformatted:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnats/414: Wrong dates in PRs if no %z support in strftime(3),
Lars . Henriksen <=