diff options
author | Florian Weimer <fweimer@redhat.com> | 2023-05-16 23:26:40 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2023-05-17 08:23:59 +0200 |
commit | 10a81dd4cf89276f7b1208ed044b93ae846800ce (patch) | |
tree | 1acf0f6bce2f22ed86780e8df844aa6f80d37592 | |
parent | 8812b9900e5fba3b696f1b34bd6014211327190f (diff) | |
download | glibc-10a81dd4cf89276f7b1208ed044b93ae846800ce.tar.gz glibc-10a81dd4cf89276f7b1208ed044b93ae846800ce.tar.xz glibc-10a81dd4cf89276f7b1208ed044b93ae846800ce.zip |
stdlib: Avoid undefined behavior in stdlib/tst-labs
The last loop could attempt to overflow beyond INT_MAX on 32-bit architectures. Also switch to GNU style. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
-rw-r--r-- | stdlib/tst-labs.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/stdlib/tst-labs.c b/stdlib/tst-labs.c index 92b456745a..a8d2381f87 100644 --- a/stdlib/tst-labs.c +++ b/stdlib/tst-labs.c @@ -25,25 +25,26 @@ static int do_test (void) { - long i; + long int i; - TEST_COMPARE(labs(LONG_MAX), LONG_MAX); - TEST_COMPARE(labs(LONG_MIN + 1), LONG_MAX); - TEST_COMPARE(labs(-1), 1); - TEST_COMPARE(labs(0), 0); - TEST_COMPARE(labs(1), 1); + TEST_COMPARE (labs (LONG_MAX), LONG_MAX); + TEST_COMPARE (labs (LONG_MIN + 1), LONG_MAX); + TEST_COMPARE (labs (-1), 1); + TEST_COMPARE (labs (0), 0); + TEST_COMPARE (labs (1), 1); for (i = LONG_MIN + 1; i < LONG_MIN + INT_MAX; i += LARGE_PRIME) - TEST_COMPARE(labs(i), -i); + TEST_COMPARE (labs (i), -i); - for (i = LONG_MAX - INT_MAX; i < LONG_MAX - LARGE_PRIME; i += LARGE_PRIME) - TEST_COMPARE(labs(i), i); + for (i = LONG_MAX - INT_MAX; i < LONG_MAX - LARGE_PRIME; + i += LARGE_PRIME) + TEST_COMPARE (labs (i), i); for (i = INT_MIN + 1; i < 0; i += LARGE_PRIME) - TEST_COMPARE(labs(i), -i); + TEST_COMPARE (labs (i), -i); - for (i = 0; i < INT_MAX; i += LARGE_PRIME) - TEST_COMPARE(labs(i), i); + for (i = 0; i <= INT_MAX - LARGE_PRIME; i += LARGE_PRIME) + TEST_COMPARE (labs (i), i); return EXIT_SUCCESS; } |