Correctly handle test durations of more than 2147s in pg_test_timing.
authorAndres Freund <andres@anarazel.de>
Sun, 4 Jan 2015 14:44:49 +0000 (15:44 +0100)
committerAndres Freund <andres@anarazel.de>
Sun, 4 Jan 2015 14:55:00 +0000 (15:55 +0100)
Previously the computation of the total test duration, measured in
microseconds, accidentally overflowed due to accidentally using signed
32bit arithmetic.  As the only consequence is that pg_test_timing
invocations with such, overly large, durations never finished the
practical consequences of this bug are minor.

Pointed out by Coverity.

Backpatch to 9.2 where pg_test_timing was added.

contrib/pg_test_timing/pg_test_timing.c

index b3f98abe5cb6b1bc37253d00d0ba68b6fd75e543..6bf4e880af2421277c706b057b014ad605f4dc9e 100644 (file)
@@ -115,7 +115,7 @@ test_timing(int32 duration)
    static int64 histogram[32];
    char        buf[100];
 
-   total_time = duration > 0 ? duration * 1000000 : 0;
+   total_time = duration > 0 ? duration * INT64CONST(1000000) : 0;
 
    INSTR_TIME_SET_CURRENT(start_time);
    cur = INSTR_TIME_GET_MICROSEC(start_time);