[glibc/azanella/ubsan-undef] stdlib: Fix UB in tst-limits.c
Adhemerval Zanella
azanella@sourceware.org
Thu May 8 14:02:51 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=8ee1efc90d6b07c326af702f2c4231621b90434d
commit 8ee1efc90d6b07c326af702f2c4231621b90434d
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date: Wed Apr 23 12:37:16 2025 -0300
stdlib: Fix UB in tst-limits.c
UBSAN: Undefined behaviour in tst-limits.c:14:16 left shift of 1 by 63 cannot be represented in type 'long long int'
Diff:
---
stdlib/tst-limits.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/stdlib/tst-limits.c b/stdlib/tst-limits.c
index 9aabc360f6..310096005e 100644
--- a/stdlib/tst-limits.c
+++ b/stdlib/tst-limits.c
@@ -15,6 +15,14 @@ bitval (int bits)
return val;
}
+static unsigned long long int
+ubitval (int bits)
+{
+ unsigned long long int val = 0;
+ while (bits-- > 0)
+ val |= 1ull << bits;
+ return val;
+}
static int
do_test (void)
@@ -41,19 +49,19 @@ do_test (void)
TEST (INT_MIN, "d", (int) -bitval (sizeof (int) * CHAR_BIT - 1) - 1);
TEST (INT_MAX, "d", (int) bitval (sizeof (int) * CHAR_BIT - 1));
TEST (UINT_MAX, "u",
- (unsigned int) bitval (sizeof (unsigned int) * CHAR_BIT));
+ (unsigned int) ubitval (sizeof (unsigned int) * CHAR_BIT));
TEST (LONG_MIN, "ld",
(long int) -bitval (sizeof (long int) * CHAR_BIT - 1) - 1);
TEST (LONG_MAX, "ld", (long int) bitval (sizeof (long int) * CHAR_BIT - 1));
TEST (ULONG_MAX, "lu",
- (unsigned long int) bitval (sizeof (unsigned long int) * CHAR_BIT));
+ (unsigned long int) ubitval (sizeof (unsigned long int) * CHAR_BIT));
TEST (LLONG_MIN, "lld", -bitval (sizeof (long long int) * CHAR_BIT - 1) - 1);
TEST (LLONG_MAX, "lld", bitval (sizeof (long long int) * CHAR_BIT - 1));
TEST (ULLONG_MAX, "llu",
- (unsigned long long int) bitval (sizeof (unsigned long long int)
- * CHAR_BIT));
+ (unsigned long long int) ubitval (sizeof (unsigned long long int)
+ * CHAR_BIT));
/* Values from POSIX and Unix. */
#ifdef PAGESIZE
More information about the Glibc-cvs
mailing list