diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2014-05-26 22:23:33 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2014-05-26 22:23:33 -0400 |
commit | b8cf89c041d0789d9353a2875a1041c77429037c (patch) | |
tree | 9e5a3c3db32eea0c956274eaba4ad3dc62a77897 /contrib/pg_stat_statements/pg_stat_statements.c | |
parent | 0266a9c78139d0f0d64dc1c440e60b8f30172046 (diff) | |
download | postgresql-b8cf89c041d0789d9353a2875a1041c77429037c.tar.gz postgresql-b8cf89c041d0789d9353a2875a1041c77429037c.zip |
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
Diffstat (limited to 'contrib/pg_stat_statements/pg_stat_statements.c')
-rw-r--r-- | contrib/pg_stat_statements/pg_stat_statements.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 87044cece27..5a841d79d47 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -809,7 +809,7 @@ pgss_ProcessUtility(Node *parsetree, const char *queryString, { instr_time start; instr_time duration; - uint64 rows = 0; + uint64 rows; BufferUsage bufusage_start, bufusage; uint32 queryId; @@ -842,7 +842,15 @@ pgss_ProcessUtility(Node *parsetree, const char *queryString, /* parse command tag to retrieve the number of affected rows. */ if (completionTag && - sscanf(completionTag, "COPY " UINT64_FORMAT, &rows) != 1) + strncmp(completionTag, "COPY ", 5) == 0) + { +#ifdef HAVE_STRTOULL + rows = strtoull(completionTag + 5, NULL, 10); +#else + rows = strtoul(completionTag + 5, NULL, 10); +#endif + } + else rows = 0; /* calc differences of buffer counters. */ |