From 7f68b588657ea14050971efa86682e55e2c7e21b Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 19 Dec 2025 17:10:43 -0800 Subject: [PATCH] os: make FormatInt64() handle LONG_MIN correctly When compiling with gcc 15.2.0 using -O3 -m64 on Solaris SPARC & x64, we'd get a test failure of: Assertion failed: strcmp(logmsg, expected) == 0, file ../test/signal-logging.c, line 339, function logging_format because 'num *= 1' produced a value that was out of the range of the int64_t it was being stored in. (Compiling with -O2 worked fine with the same compiler/configuration/platform though.) Signed-off-by: Alan Coopersmith Part-of: --- os/fmt.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/os/fmt.c b/os/fmt.c index c5c61bdba..7bda7014a 100644 --- a/os/fmt.c +++ b/os/fmt.c @@ -16,12 +16,14 @@ void FormatInt64(int64_t num, char *string) { + uint64_t unum = num; + if (num < 0) { string[0] = '-'; - num *= -1; + unum = num * -1; string++; } - FormatUInt64(num, string); + FormatUInt64(unum, string); } /* Format a number into a string in a signal safe manner. The string should be