diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2018-03-15 11:10:41 -0400 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2018-03-15 11:41:42 -0400 |
commit | 3a4b891964a531aa7d242a48fcd9e41379863ead (patch) | |
tree | cda1cef77f04c277d8001bf3049b3366b551b4e5 /src/backend/utils/adt/float.c | |
parent | 648a6c7bd815f98b35709bd56f9f1ca276b33ae6 (diff) | |
download | postgresql-3a4b891964a531aa7d242a48fcd9e41379863ead.tar.gz postgresql-3a4b891964a531aa7d242a48fcd9e41379863ead.zip |
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
6275f5d28a1577563f53f2171689d4f890a46881, 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>
Diffstat (limited to 'src/backend/utils/adt/float.c')
-rw-r--r-- | src/backend/utils/adt/float.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index aadb92de663..6522c0816ef 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -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); } } |