1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-13 07:41:39 +03:00

Fix more format truncation issues

Fix the warnings created by the compiler warning options
-Wformat-overflow=2 -Wformat-truncation=2, supported since GCC 7.  This
is a more aggressive variant of the fixes in
6275f5d28a, which GCC 7 warned about by
default.

The issues are all harmless, but some dubious coding patterns are
cleaned up.

One issue that is of external interest is that BGW_MAXLEN is increased
from 64 to 96.  Apparently, the old value would cause the bgw_name of
logical replication workers to be truncated in some circumstances.

But this doesn't actually add those warning options.  It appears that
the warnings depend a bit on compilation and optimization options, so it
would be annoying to have to keep up with that.  This is more of a
once-in-a-while cleanup.

Reviewed-by: Michael Paquier <michael@paquier.xyz>
This commit is contained in:
Peter Eisentraut
2018-03-15 11:10:41 -04:00
parent 648a6c7bd8
commit 3a4b891964
14 changed files with 38 additions and 54 deletions

View File

@ -44,10 +44,6 @@ static const uint32 nan[2] = {0xffffffff, 0x7fffffff};
#define NAN (*(const double *) nan)
#endif
/* not sure what the following should be, but better to make it over-sufficient */
#define MAXFLOATWIDTH 64
#define MAXDOUBLEWIDTH 128
/*
* check to see if a float4/8 val has underflowed or overflowed
*/
@ -360,18 +356,18 @@ Datum
float4out(PG_FUNCTION_ARGS)
{
float4 num = PG_GETARG_FLOAT4(0);
char *ascii = (char *) palloc(MAXFLOATWIDTH + 1);
char *ascii;
if (isnan(num))
PG_RETURN_CSTRING(strcpy(ascii, "NaN"));
PG_RETURN_CSTRING(pstrdup("NaN"));
switch (is_infinite(num))
{
case 1:
strcpy(ascii, "Infinity");
ascii = pstrdup("Infinity");
break;
case -1:
strcpy(ascii, "-Infinity");
ascii = pstrdup("-Infinity");
break;
default:
{
@ -380,7 +376,7 @@ float4out(PG_FUNCTION_ARGS)
if (ndig < 1)
ndig = 1;
snprintf(ascii, MAXFLOATWIDTH + 1, "%.*g", ndig, num);
ascii = psprintf("%.*g", ndig, num);
}
}
@ -596,18 +592,18 @@ float8out(PG_FUNCTION_ARGS)
char *
float8out_internal(double num)
{
char *ascii = (char *) palloc(MAXDOUBLEWIDTH + 1);
char *ascii;
if (isnan(num))
return strcpy(ascii, "NaN");
return pstrdup("NaN");
switch (is_infinite(num))
{
case 1:
strcpy(ascii, "Infinity");
ascii = pstrdup("Infinity");
break;
case -1:
strcpy(ascii, "-Infinity");
ascii = pstrdup("-Infinity");
break;
default:
{
@ -616,7 +612,7 @@ float8out_internal(double num)
if (ndig < 1)
ndig = 1;
snprintf(ascii, MAXDOUBLEWIDTH + 1, "%.*g", ndig, num);
ascii = psprintf("%.*g", ndig, num);
}
}