mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-12-19 06:22:24 +01:00
date: avoid crash on invalid time
localtime(3) returns NULL when passed an invalid time_t but date(1) previously did not handle it. Exit with an error in that case. PR: 220828 Reported by: Vinícius Zavam Reviewed by: cem, kevans Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D11660
This commit is contained in:
parent
9dd6ca9602
commit
819129649d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=321293
@ -85,7 +85,7 @@ main(int argc, char *argv[])
|
||||
int set_timezone;
|
||||
struct vary *v;
|
||||
const struct vary *badv;
|
||||
struct tm lt;
|
||||
struct tm *lt;
|
||||
struct stat sb;
|
||||
|
||||
v = NULL;
|
||||
@ -174,8 +174,10 @@ main(int argc, char *argv[])
|
||||
if (*argv && **argv == '+')
|
||||
format = *argv + 1;
|
||||
|
||||
lt = *localtime(&tval);
|
||||
badv = vary_apply(v, <);
|
||||
lt = localtime(&tval);
|
||||
if (lt == NULL)
|
||||
errx(1, "invalid time");
|
||||
badv = vary_apply(v, lt);
|
||||
if (badv) {
|
||||
fprintf(stderr, "%s: Cannot apply date adjustment\n",
|
||||
badv->arg);
|
||||
@ -191,7 +193,7 @@ main(int argc, char *argv[])
|
||||
*/
|
||||
setlocale(LC_TIME, "C");
|
||||
|
||||
(void)strftime(buf, sizeof(buf), format, <);
|
||||
(void)strftime(buf, sizeof(buf), format, lt);
|
||||
(void)printf("%s\n", buf);
|
||||
if (fflush(stdout))
|
||||
err(1, "stdout");
|
||||
@ -210,6 +212,8 @@ setthetime(const char *fmt, const char *p, int jflag, int nflag)
|
||||
int century;
|
||||
|
||||
lt = localtime(&tval);
|
||||
if (lt == NULL)
|
||||
errx(1, "invalid time");
|
||||
lt->tm_isdst = -1; /* divine correct DST */
|
||||
|
||||
if (fmt != NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user