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>
This commit is contained in:
parent
648a6c7bd8
commit
3a4b891964
contrib/pgstattuple
src
backend
bin
include/postmaster
interfaces/libpq
pl/tcl
@ -89,7 +89,7 @@ static Datum
|
|||||||
build_pgstattuple_type(pgstattuple_type *stat, FunctionCallInfo fcinfo)
|
build_pgstattuple_type(pgstattuple_type *stat, FunctionCallInfo fcinfo)
|
||||||
{
|
{
|
||||||
#define NCOLUMNS 9
|
#define NCOLUMNS 9
|
||||||
#define NCHARS 32
|
#define NCHARS 314
|
||||||
|
|
||||||
HeapTuple tuple;
|
HeapTuple tuple;
|
||||||
char *values[NCOLUMNS];
|
char *values[NCOLUMNS];
|
||||||
|
@ -3337,10 +3337,11 @@ void
|
|||||||
ExplainPropertyFloat(const char *qlabel, double value, int ndigits,
|
ExplainPropertyFloat(const char *qlabel, double value, int ndigits,
|
||||||
ExplainState *es)
|
ExplainState *es)
|
||||||
{
|
{
|
||||||
char buf[256];
|
char *buf;
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "%.*f", ndigits, value);
|
buf = psprintf("%.*f", ndigits, value);
|
||||||
ExplainProperty(qlabel, buf, true, es);
|
ExplainProperty(qlabel, buf, true, es);
|
||||||
|
pfree(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1013,7 +1013,7 @@ static const char *
|
|||||||
SSLerrmessage(unsigned long ecode)
|
SSLerrmessage(unsigned long ecode)
|
||||||
{
|
{
|
||||||
const char *errreason;
|
const char *errreason;
|
||||||
static char errbuf[32];
|
static char errbuf[36];
|
||||||
|
|
||||||
if (ecode == 0)
|
if (ecode == 0)
|
||||||
return _("no SSL error reported");
|
return _("no SSL error reported");
|
||||||
|
@ -86,7 +86,7 @@ calculate_database_size(Oid dbOid)
|
|||||||
DIR *dirdesc;
|
DIR *dirdesc;
|
||||||
struct dirent *direntry;
|
struct dirent *direntry;
|
||||||
char dirpath[MAXPGPATH];
|
char dirpath[MAXPGPATH];
|
||||||
char pathname[MAXPGPATH + 12 + sizeof(TABLESPACE_VERSION_DIRECTORY)];
|
char pathname[MAXPGPATH + 21 + sizeof(TABLESPACE_VERSION_DIRECTORY)];
|
||||||
AclResult aclresult;
|
AclResult aclresult;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -44,10 +44,6 @@ static const uint32 nan[2] = {0xffffffff, 0x7fffffff};
|
|||||||
#define NAN (*(const double *) nan)
|
#define NAN (*(const double *) nan)
|
||||||
#endif
|
#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
|
* check to see if a float4/8 val has underflowed or overflowed
|
||||||
*/
|
*/
|
||||||
@ -360,18 +356,18 @@ Datum
|
|||||||
float4out(PG_FUNCTION_ARGS)
|
float4out(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
float4 num = PG_GETARG_FLOAT4(0);
|
float4 num = PG_GETARG_FLOAT4(0);
|
||||||
char *ascii = (char *) palloc(MAXFLOATWIDTH + 1);
|
char *ascii;
|
||||||
|
|
||||||
if (isnan(num))
|
if (isnan(num))
|
||||||
PG_RETURN_CSTRING(strcpy(ascii, "NaN"));
|
PG_RETURN_CSTRING(pstrdup("NaN"));
|
||||||
|
|
||||||
switch (is_infinite(num))
|
switch (is_infinite(num))
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
strcpy(ascii, "Infinity");
|
ascii = pstrdup("Infinity");
|
||||||
break;
|
break;
|
||||||
case -1:
|
case -1:
|
||||||
strcpy(ascii, "-Infinity");
|
ascii = pstrdup("-Infinity");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
@ -380,7 +376,7 @@ float4out(PG_FUNCTION_ARGS)
|
|||||||
if (ndig < 1)
|
if (ndig < 1)
|
||||||
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 *
|
char *
|
||||||
float8out_internal(double num)
|
float8out_internal(double num)
|
||||||
{
|
{
|
||||||
char *ascii = (char *) palloc(MAXDOUBLEWIDTH + 1);
|
char *ascii;
|
||||||
|
|
||||||
if (isnan(num))
|
if (isnan(num))
|
||||||
return strcpy(ascii, "NaN");
|
return pstrdup("NaN");
|
||||||
|
|
||||||
switch (is_infinite(num))
|
switch (is_infinite(num))
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
strcpy(ascii, "Infinity");
|
ascii = pstrdup("Infinity");
|
||||||
break;
|
break;
|
||||||
case -1:
|
case -1:
|
||||||
strcpy(ascii, "-Infinity");
|
ascii = pstrdup("-Infinity");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
@ -616,7 +612,7 @@ float8out_internal(double num)
|
|||||||
if (ndig < 1)
|
if (ndig < 1)
|
||||||
ndig = 1;
|
ndig = 1;
|
||||||
|
|
||||||
snprintf(ascii, MAXDOUBLEWIDTH + 1, "%.*g", ndig, num);
|
ascii = psprintf("%.*g", ndig, num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,13 +117,6 @@
|
|||||||
#define DCH_MAX_ITEM_SIZ 12 /* max localized day name */
|
#define DCH_MAX_ITEM_SIZ 12 /* max localized day name */
|
||||||
#define NUM_MAX_ITEM_SIZ 8 /* roman number (RN has 15 chars) */
|
#define NUM_MAX_ITEM_SIZ 8 /* roman number (RN has 15 chars) */
|
||||||
|
|
||||||
/* ----------
|
|
||||||
* More is in float.c
|
|
||||||
* ----------
|
|
||||||
*/
|
|
||||||
#define MAXFLOATWIDTH 60
|
|
||||||
#define MAXDOUBLEWIDTH 500
|
|
||||||
|
|
||||||
|
|
||||||
/* ----------
|
/* ----------
|
||||||
* Format parser structs
|
* Format parser structs
|
||||||
@ -3911,9 +3904,7 @@ do_to_timestamp(text *date_txt, text *fmt,
|
|||||||
tmfc.tzm < 0 || tmfc.tzm >= MINS_PER_HOUR)
|
tmfc.tzm < 0 || tmfc.tzm >= MINS_PER_HOUR)
|
||||||
DateTimeParseError(DTERR_TZDISP_OVERFLOW, date_str, "timestamp");
|
DateTimeParseError(DTERR_TZDISP_OVERFLOW, date_str, "timestamp");
|
||||||
|
|
||||||
tz = palloc(7);
|
tz = psprintf("%c%02d:%02d",
|
||||||
|
|
||||||
snprintf(tz, 7, "%c%02d:%02d",
|
|
||||||
tmfc.tzsign > 0 ? '+' : '-', tmfc.tzh, tmfc.tzm);
|
tmfc.tzsign > 0 ? '+' : '-', tmfc.tzh, tmfc.tzm);
|
||||||
|
|
||||||
tm->tm_zone = tz;
|
tm->tm_zone = tz;
|
||||||
@ -4135,7 +4126,7 @@ int_to_roman(int number)
|
|||||||
num = 0;
|
num = 0;
|
||||||
char *p = NULL,
|
char *p = NULL,
|
||||||
*result,
|
*result,
|
||||||
numstr[5];
|
numstr[12];
|
||||||
|
|
||||||
result = (char *) palloc(16);
|
result = (char *) palloc(16);
|
||||||
*result = '\0';
|
*result = '\0';
|
||||||
@ -5441,8 +5432,7 @@ int4_to_char(PG_FUNCTION_ARGS)
|
|||||||
/* we can do it easily because float8 won't lose any precision */
|
/* we can do it easily because float8 won't lose any precision */
|
||||||
float8 val = (float8) value;
|
float8 val = (float8) value;
|
||||||
|
|
||||||
orgnum = (char *) palloc(MAXDOUBLEWIDTH + 1);
|
orgnum = (char *) psprintf("%+.*e", Num.post, val);
|
||||||
snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%+.*e", Num.post, val);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Swap a leading positive sign for a space.
|
* Swap a leading positive sign for a space.
|
||||||
@ -5641,7 +5631,6 @@ float4_to_char(PG_FUNCTION_ARGS)
|
|||||||
numstr = orgnum = int_to_roman((int) rint(value));
|
numstr = orgnum = int_to_roman((int) rint(value));
|
||||||
else if (IS_EEEE(&Num))
|
else if (IS_EEEE(&Num))
|
||||||
{
|
{
|
||||||
numstr = orgnum = (char *) palloc(MAXDOUBLEWIDTH + 1);
|
|
||||||
if (isnan(value) || is_infinite(value))
|
if (isnan(value) || is_infinite(value))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -5655,7 +5644,7 @@ float4_to_char(PG_FUNCTION_ARGS)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%+.*e", Num.post, value);
|
numstr = orgnum = psprintf("%+.*e", Num.post, value);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Swap a leading positive sign for a space.
|
* Swap a leading positive sign for a space.
|
||||||
@ -5679,8 +5668,7 @@ float4_to_char(PG_FUNCTION_ARGS)
|
|||||||
Num.pre += Num.multi;
|
Num.pre += Num.multi;
|
||||||
}
|
}
|
||||||
|
|
||||||
orgnum = (char *) palloc(MAXFLOATWIDTH + 1);
|
orgnum = (char *) psprintf("%.0f", fabs(val));
|
||||||
snprintf(orgnum, MAXFLOATWIDTH + 1, "%.0f", fabs(val));
|
|
||||||
numstr_pre_len = strlen(orgnum);
|
numstr_pre_len = strlen(orgnum);
|
||||||
|
|
||||||
/* adjust post digits to fit max float digits */
|
/* adjust post digits to fit max float digits */
|
||||||
@ -5688,7 +5676,7 @@ float4_to_char(PG_FUNCTION_ARGS)
|
|||||||
Num.post = 0;
|
Num.post = 0;
|
||||||
else if (numstr_pre_len + Num.post > FLT_DIG)
|
else if (numstr_pre_len + Num.post > FLT_DIG)
|
||||||
Num.post = FLT_DIG - numstr_pre_len;
|
Num.post = FLT_DIG - numstr_pre_len;
|
||||||
snprintf(orgnum, MAXFLOATWIDTH + 1, "%.*f", Num.post, val);
|
orgnum = psprintf("%.*f", Num.post, val);
|
||||||
|
|
||||||
if (*orgnum == '-')
|
if (*orgnum == '-')
|
||||||
{ /* < 0 */
|
{ /* < 0 */
|
||||||
@ -5747,7 +5735,6 @@ float8_to_char(PG_FUNCTION_ARGS)
|
|||||||
numstr = orgnum = int_to_roman((int) rint(value));
|
numstr = orgnum = int_to_roman((int) rint(value));
|
||||||
else if (IS_EEEE(&Num))
|
else if (IS_EEEE(&Num))
|
||||||
{
|
{
|
||||||
numstr = orgnum = (char *) palloc(MAXDOUBLEWIDTH + 1);
|
|
||||||
if (isnan(value) || is_infinite(value))
|
if (isnan(value) || is_infinite(value))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -5761,7 +5748,7 @@ float8_to_char(PG_FUNCTION_ARGS)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%+.*e", Num.post, value);
|
numstr = orgnum = (char *) psprintf("%+.*e", Num.post, value);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Swap a leading positive sign for a space.
|
* Swap a leading positive sign for a space.
|
||||||
@ -5784,15 +5771,15 @@ float8_to_char(PG_FUNCTION_ARGS)
|
|||||||
val = value * multi;
|
val = value * multi;
|
||||||
Num.pre += Num.multi;
|
Num.pre += Num.multi;
|
||||||
}
|
}
|
||||||
orgnum = (char *) palloc(MAXDOUBLEWIDTH + 1);
|
orgnum = psprintf("%.0f", fabs(val));
|
||||||
numstr_pre_len = snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%.0f", fabs(val));
|
numstr_pre_len = strlen(orgnum);
|
||||||
|
|
||||||
/* adjust post digits to fit max double digits */
|
/* adjust post digits to fit max double digits */
|
||||||
if (numstr_pre_len >= DBL_DIG)
|
if (numstr_pre_len >= DBL_DIG)
|
||||||
Num.post = 0;
|
Num.post = 0;
|
||||||
else if (numstr_pre_len + Num.post > DBL_DIG)
|
else if (numstr_pre_len + Num.post > DBL_DIG)
|
||||||
Num.post = DBL_DIG - numstr_pre_len;
|
Num.post = DBL_DIG - numstr_pre_len;
|
||||||
snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%.*f", Num.post, val);
|
orgnum = psprintf("%.*f", Num.post, val);
|
||||||
|
|
||||||
if (*orgnum == '-')
|
if (*orgnum == '-')
|
||||||
{ /* < 0 */
|
{ /* < 0 */
|
||||||
|
@ -10528,7 +10528,7 @@ check_cluster_name(char **newval, void **extra, GucSource source)
|
|||||||
static const char *
|
static const char *
|
||||||
show_unix_socket_permissions(void)
|
show_unix_socket_permissions(void)
|
||||||
{
|
{
|
||||||
static char buf[8];
|
static char buf[12];
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "%04o", Unix_socket_permissions);
|
snprintf(buf, sizeof(buf), "%04o", Unix_socket_permissions);
|
||||||
return buf;
|
return buf;
|
||||||
@ -10537,7 +10537,7 @@ show_unix_socket_permissions(void)
|
|||||||
static const char *
|
static const char *
|
||||||
show_log_file_mode(void)
|
show_log_file_mode(void)
|
||||||
{
|
{
|
||||||
static char buf[8];
|
static char buf[12];
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "%04o", Log_file_mode);
|
snprintf(buf, sizeof(buf), "%04o", Log_file_mode);
|
||||||
return buf;
|
return buf;
|
||||||
|
@ -1009,12 +1009,12 @@ static char *
|
|||||||
pretty_wal_size(int segment_count)
|
pretty_wal_size(int segment_count)
|
||||||
{
|
{
|
||||||
int sz = wal_segment_size_mb * segment_count;
|
int sz = wal_segment_size_mb * segment_count;
|
||||||
char *result = pg_malloc(11);
|
char *result = pg_malloc(14);
|
||||||
|
|
||||||
if ((sz % 1024) == 0)
|
if ((sz % 1024) == 0)
|
||||||
snprintf(result, 11, "%dGB", sz / 1024);
|
snprintf(result, 14, "%dGB", sz / 1024);
|
||||||
else
|
else
|
||||||
snprintf(result, 11, "%dMB", sz);
|
snprintf(result, 14, "%dMB", sz);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1532,7 +1532,7 @@ SetOutput(ArchiveHandle *AH, const char *filename, int compression)
|
|||||||
#ifdef HAVE_LIBZ
|
#ifdef HAVE_LIBZ
|
||||||
if (compression != 0)
|
if (compression != 0)
|
||||||
{
|
{
|
||||||
char fmode[10];
|
char fmode[14];
|
||||||
|
|
||||||
/* Don't use PG_BINARY_x since this is zlib */
|
/* Don't use PG_BINARY_x since this is zlib */
|
||||||
sprintf(fmode, "wb%d", compression);
|
sprintf(fmode, "wb%d", compression);
|
||||||
|
@ -335,7 +335,7 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode)
|
|||||||
TAR_MEMBER *tm;
|
TAR_MEMBER *tm;
|
||||||
|
|
||||||
#ifdef HAVE_LIBZ
|
#ifdef HAVE_LIBZ
|
||||||
char fmode[10];
|
char fmode[14];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (mode == 'r')
|
if (mode == 'r')
|
||||||
|
@ -3591,7 +3591,7 @@ parseQuery(Command *cmd)
|
|||||||
p = sql;
|
p = sql;
|
||||||
while ((p = strchr(p, ':')) != NULL)
|
while ((p = strchr(p, ':')) != NULL)
|
||||||
{
|
{
|
||||||
char var[12];
|
char var[13];
|
||||||
char *name;
|
char *name;
|
||||||
int eaten;
|
int eaten;
|
||||||
|
|
||||||
@ -5432,7 +5432,7 @@ threadRun(void *arg)
|
|||||||
sqlat,
|
sqlat,
|
||||||
lag,
|
lag,
|
||||||
stdev;
|
stdev;
|
||||||
char tbuf[64];
|
char tbuf[315];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add up the statistics of all threads.
|
* Add up the statistics of all threads.
|
||||||
|
@ -82,7 +82,7 @@ typedef enum
|
|||||||
|
|
||||||
#define BGW_DEFAULT_RESTART_INTERVAL 60
|
#define BGW_DEFAULT_RESTART_INTERVAL 60
|
||||||
#define BGW_NEVER_RESTART -1
|
#define BGW_NEVER_RESTART -1
|
||||||
#define BGW_MAXLEN 64
|
#define BGW_MAXLEN 96
|
||||||
#define BGW_EXTRALEN 128
|
#define BGW_EXTRALEN 128
|
||||||
|
|
||||||
typedef struct BackgroundWorker
|
typedef struct BackgroundWorker
|
||||||
|
@ -1436,7 +1436,7 @@ PQsslAttribute(PGconn *conn, const char *attribute_name)
|
|||||||
|
|
||||||
if (strcmp(attribute_name, "key_bits") == 0)
|
if (strcmp(attribute_name, "key_bits") == 0)
|
||||||
{
|
{
|
||||||
static char sslbits_str[10];
|
static char sslbits_str[12];
|
||||||
int sslbits;
|
int sslbits;
|
||||||
|
|
||||||
SSL_get_cipher_bits(conn->ssl, &sslbits);
|
SSL_get_cipher_bits(conn->ssl, &sslbits);
|
||||||
|
@ -1456,7 +1456,7 @@ compile_pltcl_function(Oid fn_oid, Oid tgreloid,
|
|||||||
Datum prosrcdatum;
|
Datum prosrcdatum;
|
||||||
bool isnull;
|
bool isnull;
|
||||||
char *proc_source;
|
char *proc_source;
|
||||||
char buf[32];
|
char buf[48];
|
||||||
Tcl_Interp *interp;
|
Tcl_Interp *interp;
|
||||||
int i;
|
int i;
|
||||||
int tcl_rc;
|
int tcl_rc;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user