[Debian-astro-maintainers] Bug#939523: iraf-fitsutil: autopkgtest fail with glibc 2.29 due to missing tm_isdst initialization
Aurelien Jarno
aurel32 at debian.org
Thu Sep 5 22:06:05 BST 2019
Package: iraf-fitsutil
Version: 2018.07.06-3
Severity: normal
Tags: patch upstream
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 at 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:
--- iraf-fitsutil-2018.07.06.orig/src/fgread.c
+++ iraf-fitsutil-2018.07.06/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();
-- System Information:
Debian Release: bullseye/sid
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
More information about the Debian-astro-maintainers
mailing list