]> granicus.if.org Git - postgresql/commitdiff
pg_dump: Fix inconsistent sscanf() conversions
authorPeter Eisentraut <peter_e@gmx.net>
Fri, 19 Feb 2016 01:12:38 +0000 (20:12 -0500)
committerPeter Eisentraut <peter_e@gmx.net>
Fri, 19 Feb 2016 01:12:38 +0000 (20:12 -0500)
It was using %u to read a string that was earlier produced by snprintf with %d
into a signed integer variable.  This seems to work in practice but is
incorrect.

found by cppcheck

src/bin/pg_dump/pg_backup_custom.c
src/bin/pg_dump/pg_backup_directory.c

index be6dbca056636a0bc05fc169c275f8032e9cf56e..66329dc90c2ea58ff6e0c92910784f7f40f41776 100644 (file)
@@ -871,7 +871,7 @@ _MasterEndParallelItem(ArchiveHandle *AH, TocEntry *te, const char *str, T_Actio
        /* no parallel dump in the custom archive */
        Assert(act == ACT_RESTORE);
 
-       sscanf(str, "%u %u %u%n", &dumpId, &status, &n_errors, &nBytes);
+       sscanf(str, "%d %d %d%n", &dumpId, &status, &n_errors, &nBytes);
 
        Assert(nBytes == strlen(str));
        Assert(dumpId == te->dumpId);
index 727a7fe06fb85a886e21f9c24f75735ed6ab6405..1d7b0cc66adad816b51142072c3dd115c8d2aa92 100644 (file)
@@ -859,14 +859,14 @@ _MasterEndParallelItem(ArchiveHandle *AH, TocEntry *te, const char *str, T_Actio
 
        if (act == ACT_DUMP)
        {
-               sscanf(str, "%u%n", &dumpId, &nBytes);
+               sscanf(str, "%d%n", &dumpId, &nBytes);
 
                Assert(dumpId == te->dumpId);
                Assert(nBytes == strlen(str));
        }
        else if (act == ACT_RESTORE)
        {
-               sscanf(str, "%u %u %u%n", &dumpId, &status, &n_errors, &nBytes);
+               sscanf(str, "%d %d %d%n", &dumpId, &status, &n_errors, &nBytes);
 
                Assert(dumpId == te->dumpId);
                Assert(nBytes == strlen(str));