Guard against division by zero in test_int128 module.
authorDean Rasheed <[email protected]>
Sat, 25 Oct 2025 10:08:46 +0000 (11:08 +0100)
committerDean Rasheed <[email protected]>
Sat, 25 Oct 2025 10:08:46 +0000 (11:08 +0100)
When testing 128/32-bit division in the test_int128 test module, make
sure that we don't attempt to divide by zero.

While at it, use pg_prng_int64() and pg_prng_int32() to generate the
random numbers required for the tests, rather than pg_prng_uint64().
This eliminates the need for any implicit or explicit type casts.

Author: Dean Rasheed <[email protected]>
Reported-by: Andres Freund <[email protected]>
Discussion: https://postgr.es/m/da4wqngd6gwz5s4yf5y5f75xj7gpja62l4dbp6w4j3vs7fcjue@upvolcu4e6o2

src/test/modules/test_int128/test_int128.c

index c9c17a73a4e85f1128095691882bf3788ec7979f..1efd4ff68b3a69bb2f9ab306495afff129f3c3dd 100644 (file)
@@ -90,17 +90,21 @@ main(int argc, char **argv)
 
    while (count-- > 0)
    {
-       int64       x = pg_prng_uint64(&pg_global_prng_state);
-       int64       y = pg_prng_uint64(&pg_global_prng_state);
-       int64       z = pg_prng_uint64(&pg_global_prng_state);
-       int64       w = pg_prng_uint64(&pg_global_prng_state);
-       int32       z32 = (int32) z;
+       int64       x = pg_prng_int64(&pg_global_prng_state);
+       int64       y = pg_prng_int64(&pg_global_prng_state);
+       int64       z = pg_prng_int64(&pg_global_prng_state);
+       int64       w = pg_prng_int64(&pg_global_prng_state);
+       int32       z32 = pg_prng_int32(&pg_global_prng_state);
        test128     t1;
        test128     t2;
        test128     t3;
        int32       r1;
        int32       r2;
 
+       /* prevent division by zero in the 128/32-bit division test */
+       while (z32 == 0)
+           z32 = pg_prng_int32(&pg_global_prng_state);
+
        /* check unsigned addition */
        t1.hl.hi = x;
        t1.hl.lo = y;