mirror of
https://github.com/postgres/postgres.git
synced 2026-04-09 19:16:17 -04: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
622077b8bc
commit
13ec0bda2a
1 changed files with 7 additions and 1 deletions
|
|
@ -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…
Reference in a new issue