From: Pádraig Brady
Date: Wed, 28 Aug 2024 11:33:17 +0000 (+0100) Subject: all: fix error checking in gl/lib/xdectoint.c X-Git-Tag: v9.6~172 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9b9763e6a7499d78373fb42bac3dc2ee68a14b69;p=thirdparty%2Fcoreutils.git 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 --- diff --git a/gl/lib/xdectoint.c b/gl/lib/xdectoint.c index bb38431f39..05534701c6 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;