]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
all: fix error checking in gl/lib/xdectoint.c
authorPádraig Brady <P@draigBrady.com>
Wed, 28 Aug 2024 11:33:17 +0000 (12:33 +0100)
committerPádraig Brady <P@draigBrady.com>
Wed, 28 Aug 2024 11:35:07 +0000 (12:35 +0100)
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

index bb38431f3909f8afb191dbdd8de3b444dee7bc8c..05534701c65361b9ab1d497cb9ead043a7f3a662 100644 (file)
@@ -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;