From 9b9763e6a7499d78373fb42bac3dc2ee68a14b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?=
Date: Wed, 28 Aug 2024 12:33:17 +0100 Subject: [PATCH] all: fix error checking in gl/lib/xdectoint.c This issue was noticed with -flto on GCC 14.2.1 * gl/lib/xdectoint.c (__xnumtoint): Only inspect the returned value if LONGINT_INVALID is not set, as the returned value is uninitialized in that case. Fixes https://bugs.gnu.org/72842 --- gl/lib/xdectoint.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/gl/lib/xdectoint.c b/gl/lib/xdectoint.c index bb38431f3..05534701c 100644 --- a/gl/lib/xdectoint.c +++ b/gl/lib/xdectoint.c @@ -49,24 +49,27 @@ __xnumtoint (char const *n_str, int base, __xdectoint_t min, __xdectoint_t max, /* Errno value to report if there is an overflow. */ int overflow_errno; - if (tnum < min) + if (s_err != LONGINT_INVALID) { - r = min; - overflow_errno = flags & XTOINT_MIN_RANGE ? ERANGE : EOVERFLOW; - if (s_err == LONGINT_OK) - s_err = LONGINT_OVERFLOW; - } - else if (max < tnum) - { - r = max; - overflow_errno = flags & XTOINT_MAX_RANGE ? ERANGE : EOVERFLOW; - if (s_err == LONGINT_OK) - s_err = LONGINT_OVERFLOW; - } - else - { - r = tnum; - overflow_errno = EOVERFLOW; + if (tnum < min) + { + r = min; + overflow_errno = flags & XTOINT_MIN_RANGE ? ERANGE : EOVERFLOW; + if (s_err == LONGINT_OK) + s_err = LONGINT_OVERFLOW; + } + else if (max < tnum) + { + r = max; + overflow_errno = flags & XTOINT_MAX_RANGE ? ERANGE : EOVERFLOW; + if (s_err == LONGINT_OK) + s_err = LONGINT_OVERFLOW; + } + else + { + r = tnum; + overflow_errno = EOVERFLOW; + } } int e = s_err == LONGINT_OVERFLOW ? overflow_errno : 0; -- 2.46.0