Skip to content

Commit c8186b3

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 42279b2 commit c8186b3

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
@@ -603,7 +603,7 @@ pgss_ProcessUtility(Node *parsetree, const char *queryString,
603603
{
604604
instr_time start;
605605
instr_time duration;
606-
uint64 rows = 0;
606+
uint64 rows;
607607
BufferUsage bufusage;
608608

609609
bufusage = pgBufferUsage;
@@ -632,7 +632,15 @@ pgss_ProcessUtility(Node *parsetree, const char *queryString,
632632

633633
/* parse command tag to retrieve the number of affected rows. */
634634
if (completionTag &&
635-
sscanf(completionTag, "COPY " UINT64_FORMAT, &rows) != 1)
635+
strncmp(completionTag, "COPY ", 5) == 0)
636+
{
637+
#ifdef HAVE_STRTOULL
638+
rows = strtoull(completionTag + 5, NULL, 10);
639+
#else
640+
rows = strtoul(completionTag + 5, NULL, 10);
641+
#endif
642+
}
643+
else
636644
rows = 0;
637645

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