aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/float.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2018-03-15 11:10:41 -0400
committerPeter Eisentraut <peter_e@gmx.net>2018-03-15 11:41:42 -0400
commit3a4b891964a531aa7d242a48fcd9e41379863ead (patch)
treecda1cef77f04c277d8001bf3049b3366b551b4e5 /src/backend/utils/adt/float.c
parent648a6c7bd815f98b35709bd56f9f1ca276b33ae6 (diff)
downloadpostgresql-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.c24
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);
}
}