1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
From: Aurelien Jarno <aurel32@debian.org>
Date: Thu, 5 Sep 2019 23:06:05 +0200
Subject: Add missing tm_isdst initialization
As discussed in bug#939048, the autopkgtest from iraf-fitsutil fail in a
strange way when run with glibc 2.29 instead of glibc 2.28:
| cl> fitsutil
| This is the initial release of the IRAF FITSUTIL package
| to include support for FITS tile compression via 'fpack'.
| Please send comments and questions to seaman@noao.edu.
|
| cl> copy dev$pix.pix pix.pix
| cl> copy dev$pix.imh pix.imh
| cl> fgwrite "pix.pix pix.imh" pix.fits verb-
| cl> mkdir out
| cl> cd out
| cl> fgread ../pix.fits "" "" verb-
| cl> sum32 *
| ERROR: No write permission on file (String_File)
| "directory (img, long+) | scan (junk, junk, filsiz)"
| line 42: fitsutil$src/sum32.cl
| called as: `sum32 (input=*)'
| called as: `cl ()'
| "clbye()"
| line 41: fitsutil$fitsutil.cl
| called as: `fitsutil ()'
| called as: `cl ()'
| Error while reading login.cl file - may need to rebuild with mkiraf
| Fatal startup error. CL dies.
This happens because the error checking in mktime() have been improved
in case a non-valid date is provided in the tm struct. More precisely
in fgread.c, it should be noted that strptime does NOT setup the
tm_isdst of tm struct, which is instead getting a random value from the
stack. For this field 0 means no DST, positive value means DST and
negative values means that the value should be computed by mktime().
In the iraf-fitsutil, tm_isdst is not known from the file so it should
be set to -1, just like it's done in the POSIX.1-2018 strptime example:
https://pubs.opengroup.org/onlinepubs/9699919799/
Therefore the following patch fixes the issue.
Closes: #939523
---
src/fgread.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/fgread.c b/src/fgread.c
index cb849e8..42042bb 100644
--- a/src/fgread.c
+++ b/src/fgread.c
@@ -469,6 +469,9 @@ char *type; /* Extension type */
s = kwdb_GetValue (kwdb, "FG_MTIME");
+ /* Not set by strptime(); tells mktime() to determine whether daylight
+ * saving time is in effect */
+ tm.tm_isdst = -1;
strptime (s, "%Y-%m-%dT%T",&tm);
fh->mtime = mktime(&tm) - get_timezone();
|