File: Add-missing-tm_isdst-initialization.patch

package info (click to toggle)
iraf-fitsutil 2018.07.06-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 828 kB
  • sloc: ansic: 2,957; lisp: 530; sh: 201; makefile: 27
file content (64 lines) | stat: -rw-r--r-- 2,213 bytes parent folder | download
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();