Skip to content

Commit b8cf89c

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 0266a9c commit b8cf89c

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;
@@ -842,7 +842,15 @@ pgss_ProcessUtility(Node *parsetree, const char *queryString,
842842

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

848856
/* 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