From 17e3392052984a6c84d1d9bb6abb7baf1de5ea3f Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Thu, 17 Sep 2020 21:08:57 -0700 Subject: [PATCH] Avoid unary negation of INT64_MIN in modp_litoa10 Overlow can occur in that case, which is undefined behavior. --- src/modp_numtoa.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modp_numtoa.c b/src/modp_numtoa.c index e7b074d876..ab6b2c95e8 100644 --- a/src/modp_numtoa.c +++ b/src/modp_numtoa.c @@ -57,7 +57,7 @@ void modp_uitoa10(uint32_t value, char* str) void modp_litoa10(int64_t value, char* str) { char* wstr=str; - uint64_t uvalue = (value < 0) ? -value : value; + uint64_t uvalue = (value < 0) ? (value == INT64_MIN ? (uint64_t)(INT64_MAX) + 1 : -value) : value; // Conversion. Number is reversed. do *wstr++ = (char)(48 + (uvalue % 10)); while(uvalue /= 10);