Re: git: 4456846a1a0d - main - bin/date: Upgrade calculations
Date: Tue, 04 Jul 2023 03:34:07 UTC
Hmm ... Dragonfly has no armv7 or i386, so they didn't get it too wrong.I guess the int64_t would be a quick fix or another option, which I was consideirng, was to look at unsigning it but taking care of the edge cases ... I was too lazy for that. Please go ahead and do the quick fix ;) Pedro. On Monday, July 3, 2023 at 10:12:13 PM GMT-5, Warner Losh <imp@bsdimp.com> wrote: This is a nope on armv7 and i386. So it has no effect there. DF got it wrong. These should likely be int64_t to avoid the overflow. No? Warner On Mon, Jul 3, 2023, 9:08 PM Pedro F. Giffuni <pfg@freebsd.org> wrote: The branch main has been updated by pfg: URL: https://cgit.FreeBSD.org/src/commit/?id=4456846a1a0d8cb6d0e6bae89f1134fa0a1af5cf commit 4456846a1a0d8cb6d0e6bae89f1134fa0a1af5cf Author: Pedro F. Giffuni <pfg@FreeBSD.org> AuthorDate: 2023-07-03 02:32:10 +0000 Commit: Pedro F. Giffuni <pfg@FreeBSD.org> CommitDate: 2023-07-04 03:08:01 +0000 bin/date: Upgrade calculations Use long instead of int for numerous calculations, fixing a number of date calculation overflow issues. Obtained from: DragonflyBSD Git log: 4238ce6f0c6df33ce677ae298b245c62cd60fb43 (only partial) --- bin/date/vary.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/bin/date/vary.c b/bin/date/vary.c index 5f0123110ee3..6f3c59950ecf 100644 --- a/bin/date/vary.c +++ b/bin/date/vary.c @@ -34,7 +34,7 @@ __FBSDID("$FreeBSD$"); #include "vary.h" struct trans { - int val; + long val; const char *str; }; @@ -52,7 +52,7 @@ static struct trans trans_wday[] = { }; static char digits[] = "0123456789"; -static int adjhour(struct tm *, char, int, int); +static int adjhour(struct tm *, char, long, int); static int domktime(struct tm *t, char type) @@ -125,7 +125,7 @@ daysinmonth(const struct tm *t) static int -adjyear(struct tm *t, char type, int val, int mk) +adjyear(struct tm *t, char type, long val, int mk) { switch (type) { case '+': @@ -146,7 +146,7 @@ adjyear(struct tm *t, char type, int val, int mk) } static int -adjmon(struct tm *t, char type, int val, int istext, int mk) +adjmon(struct tm *t, char type, long val, int istext, int mk) { int lmdays; @@ -206,7 +206,7 @@ adjmon(struct tm *t, char type, int val, int istext, int mk) } static int -adjday(struct tm *t, char type, int val, int mk) +adjday(struct tm *t, char type, long val, int mk) { int lmdays; @@ -250,7 +250,7 @@ adjday(struct tm *t, char type, int val, int mk) } static int -adjwday(struct tm *t, char type, int val, int istext, int mk) +adjwday(struct tm *t, char type, long val, int istext, int mk) { if (val < 0) return 0; @@ -286,7 +286,7 @@ adjwday(struct tm *t, char type, int val, int istext, int mk) } static int -adjhour(struct tm *t, char type, int val, int mk) +adjhour(struct tm *t, char type, long val, int mk) { if (val < 0) return 0; @@ -331,7 +331,7 @@ adjhour(struct tm *t, char type, int val, int mk) } static int -adjmin(struct tm *t, char type, int val, int mk) +adjmin(struct tm *t, char type, long val, int mk) { if (val < 0) return 0; @@ -372,7 +372,7 @@ adjmin(struct tm *t, char type, int val, int mk) } static int -adjsec(struct tm *t, char type, int val, int mk) +adjsec(struct tm *t, char type, long val, int mk) { if (val < 0) return 0; @@ -419,7 +419,7 @@ vary_apply(const struct vary *v, struct tm *t) char which; char *arg; size_t len; - int val; + long val; for (; v; v = v->next) { type = *v->arg;