From 6979c547933901b21dab28e2c08fd4cc730f9860 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Thu, 19 Jul 2018 22:05:21 +0200 Subject: utils_test: fix isqrt_test calculation range Multiplying the uint16_t x by itself seems to default to be calculated in int32_t range, while it obviously needs uint32_t. This causes sporadic sanitizer barfs: Testing integer square-root utils_test.c:445:18: runtime error: signed integer overflow: 60369 * 60369 cannot be represented in type 'int' The final result is still correct, because it is in fact interpreted as uint32_t. Cast to uint32_t to make sure the sanitizer doesn't complain. Related: OS#3407 Change-Id: I83c14e38deaa466d977ee43c9420534ed90f090d --- tests/utils/utils_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/utils') diff --git a/tests/utils/utils_test.c b/tests/utils/utils_test.c index cb4e476c..84964f57 100644 --- a/tests/utils/utils_test.c +++ b/tests/utils/utils_test.c @@ -439,7 +439,7 @@ static void isqrt_test(void) x = r * (UINT16_MAX/RAND_MAX); else x = r; - uint32_t sq = x*x; + uint32_t sq = (uint32_t)x*x; uint32_t y = osmo_isqrt32(sq); if (y != x) printf("ERROR: x=%u, sq=%u, osmo_isqrt(%u) = %u\n", x, sq, sq, y); -- cgit v1.2.3