Commit a914a041 authored by Peter Eisentraut's avatar Peter Eisentraut

pg_dump: Fix inconsistent sscanf() conversions

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
parent 19a54114
...@@ -871,7 +871,7 @@ _MasterEndParallelItem(ArchiveHandle *AH, TocEntry *te, const char *str, T_Actio ...@@ -871,7 +871,7 @@ _MasterEndParallelItem(ArchiveHandle *AH, TocEntry *te, const char *str, T_Actio
/* no parallel dump in the custom archive */ /* no parallel dump in the custom archive */
Assert(act == ACT_RESTORE); 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(nBytes == strlen(str));
Assert(dumpId == te->dumpId); Assert(dumpId == te->dumpId);
......
...@@ -859,14 +859,14 @@ _MasterEndParallelItem(ArchiveHandle *AH, TocEntry *te, const char *str, T_Actio ...@@ -859,14 +859,14 @@ _MasterEndParallelItem(ArchiveHandle *AH, TocEntry *te, const char *str, T_Actio
if (act == ACT_DUMP) if (act == ACT_DUMP)
{ {
sscanf(str, "%u%n", &dumpId, &nBytes); sscanf(str, "%d%n", &dumpId, &nBytes);
Assert(dumpId == te->dumpId); Assert(dumpId == te->dumpId);
Assert(nBytes == strlen(str)); Assert(nBytes == strlen(str));
} }
else if (act == ACT_RESTORE) 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(dumpId == te->dumpId);
Assert(nBytes == strlen(str)); Assert(nBytes == strlen(str));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment