Fix pg_size_pretty() to avoid overflow for inputs close to INT64_MAX.
The expression that tried to round the value to the nearest TB could overflow, leading to bogus output as reported in bug #5993 from Nicola Cossu. This isn't likely to ever happen in the intended usage of the function (if it could, we'd be needing to use a wider datatype instead); but it's not hard to give the expected output, so let's do so.
This commit is contained in:
parent
622077b8bc
commit
13ec0bda2a
@ -402,9 +402,15 @@ pg_size_pretty(PG_FUNCTION_ARGS)
|
||||
(size + mult / 2) / mult);
|
||||
else
|
||||
{
|
||||
/* Here we have to worry about avoiding overflow */
|
||||
int64 val;
|
||||
|
||||
mult *= 1024;
|
||||
val = size / mult;
|
||||
if ((size % mult) >= (mult / 2))
|
||||
val++;
|
||||
snprintf(buf, sizeof(buf), INT64_FORMAT " TB",
|
||||
(size + mult / 2) / mult);
|
||||
val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user