commit: 6db49bc56848ccf9d23ff5940b87084545160267
parent 508f78b935d0f2ebd66bfeb64624f03e1e1b31a2
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Sat, 3 Jun 2023 13:24:16 +0200
lib/iso_parse: Use strtol for @ to detect overflows
Diffstat:
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/lib/iso_parse.c b/lib/iso_parse.c
@@ -6,6 +6,7 @@
#define _XOPEN_SOURCE 700 // strptime (NetBSD)
#define _POSIX_C_SOURCE 200809L // st_atim/st_mtim
+#include <errno.h> /* errno */
#include <stdio.h> /* perror, sscanf */
#include <stdlib.h> /* exit */
#include <string.h> /* memset */
@@ -23,7 +24,14 @@ iso_parse(char *arg)
if(arg[0] == '@')
{
arg++;
- if(sscanf(arg, "%ld", &time.tv_sec) < 1) exit(EXIT_FAILURE);
+ errno = 0;
+
+ time.tv_sec = strtol(arg, NULL, 10);
+ if(errno != 0)
+ {
+ perror("strtol");
+ exit(EXIT_FAILURE);
+ }
return time;
}
diff --git a/test-cmd/date b/test-cmd/date
@@ -62,7 +62,7 @@ timestamp_body() {
atf_check -s 'exit:1' -e "inline:date: Error: Missing operand for option: '-d'\ndate [-uR][-d datetime] [+format]\n" ../cmd/date -u -d
# 36893488147419103232 = 2^65
- #atf_check -s 'exit:1' -e not-empty ../cmd/date -u -d @36893488147419103232
+ atf_check -s 'exit:1' -e not-empty ../cmd/date -u -d @36893488147419103232
}
atf_test_case isodate