Guard against division by zero in test_int128 module.
authorDean Rasheed <dean.a.rasheed@gmail.com>
Sat, 25 Oct 2025 10:08:46 +0000 (11:08 +0100)
committerDean Rasheed <dean.a.rasheed@gmail.com>
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 <dean.a.rasheed@gmail.com>
Reported-by: Andres Freund <andres@anarazel.de>
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;