diff options
author | Mark Wielaard <mark@klomp.org> | 2018-10-14 17:29:51 +0200 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2018-10-20 00:13:09 +0200 |
commit | 4cdb0fd0d3b4255a9994ce302d6df76d251f7b75 (patch) | |
tree | 6814f8530dc47cf6437117632c5e384683311f96 | |
parent | 577511f66842c324c811d1530eea32792f2bee29 (diff) |
ar: Assume epoch if ar_date is bogus.
If the ar header contains a bogus ar_date then in verbose mode we would
get a NULL pointer from localtime. Just assume the entry was created
during the epoch.
https://sourceware.org/bugzilla/show_bug.cgi?id=23754
Signed-off-by: Mark Wielaard <mark@klomp.org>
-rw-r--r-- | src/ChangeLog | 4 | ||||
-rw-r--r-- | src/ar.c | 10 |
2 files changed, 12 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index d057669c..40de5a09 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2018-10-14 Mark Wielaard <mark@klomp.org> + * ar.c (do_oper_extract): Assume epoch if ar_date is bogus. + +2018-10-14 Mark Wielaard <mark@klomp.org> + * findtextrel.c (process_file): Check that sh_entsize is not zero. 2018-09-13 Mark Wielaard <mark@klomp.org> @@ -539,8 +539,14 @@ do_oper_extract (int oper, const char *arfname, char **argv, int argc, else if (oper == oper_list) { char datestr[100]; - strftime (datestr, sizeof (datestr), "%b %e %H:%M %Y", - localtime (&arhdr->ar_date)); + struct tm *tp = localtime (&arhdr->ar_date); + if (tp == NULL) + { + time_t time = 0; + tp = localtime (&time); + } + + strftime (datestr, sizeof (datestr), "%b %e %H:%M %Y", tp); printf ("%c%c%c%c%c%c%c%c%c %u/%u %6ju %s %s\n", (arhdr->ar_mode & S_IRUSR) ? 'r' : '-', |