1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-27 12:41:57 +03: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  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:
Tom Lane
2011-04-25 16:22:12 -04:00
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);
}
}
}