Skip to content

Commit 9a21ac0

Browse files
committed
Avoid unportable usage of sscanf(UINT64_FORMAT).
On Mingw, it seems that scanf() doesn't necessarily accept the same format codes that printf() does, and in particular it may fail to recognize %llu even though printf() does. Since configure only probes printf() behavior while setting up the INT64_FORMAT macros, this means it's unsafe to use those macros with scanf(). We had only one instance of such a coding pattern, in contrib/pg_stat_statements, so change that code to avoid the problem. Per buildfarm warnings. Back-patch to 9.0 where the troublesome code was introduced. Michael Paquier
1 parent 31f579f commit 9a21ac0

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

contrib/pg_stat_statements/pg_stat_statements.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -809,7 +809,7 @@ pgss_ProcessUtility(Node *parsetree, const char *queryString,
809809
{
810810
instr_time start;
811811
instr_time duration;
812-
uint64 rows = 0;
812+
uint64 rows;
813813
BufferUsage bufusage_start,
814814
bufusage;
815815
uint32 queryId;
@@ -840,7 +840,15 @@ pgss_ProcessUtility(Node *parsetree, const char *queryString,
840840

841841
/* parse command tag to retrieve the number of affected rows. */
842842
if (completionTag &&
843-
sscanf(completionTag, "COPY " UINT64_FORMAT, &rows) != 1)
843+
strncmp(completionTag, "COPY ", 5) == 0)
844+
{
845+
#ifdef HAVE_STRTOULL
846+
rows = strtoull(completionTag + 5, NULL, 10);
847+
#else
848+
rows = strtoul(completionTag + 5, NULL, 10);
849+
#endif
850+
}
851+
else
844852
rows = 0;
845853

846854
/* calc differences of buffer counters. */

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy