mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
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
f8ebe3bcc5
commit
af0f20092c
@ -490,9 +490,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…
Reference in New Issue
Block a user