summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gustafsson <dgustafsson@postgresql.org>2021-10-19 12:59:50 +0200
committerDaniel Gustafsson <dgustafsson@postgresql.org>2021-10-19 12:59:50 +0200
commitabdf81a20ba2ddc06a0ebdd58ee8747306fb2004 (patch)
tree1fd64d0589f7932cfa2a10cde6e68c146afa872a
parentd36bdc4e9d3ecfc47d2db4fe4cc84eb5baa0cf9c (diff)
Fix sscanf limits in pg_dump
Make sure that the string parsing is limited by the size of the destination buffer. The buffer is bounded by MAXPGPATH, and thus the limit must be inserted via preprocessor expansion and the buffer increased by one to account for the terminator. There is no risk of overflow here, since in this case, the buffer scanned is smaller than the destination buffer. Backpatch all the way down to 9.6. Reviewed-by: Tom Lane Discussion: https://postgr.es/m/B14D3D7B-F98C-4E20-9459-C122C67647FB@yesql.se Backpatch-through: 9.6
-rw-r--r--src/bin/pg_dump/pg_backup_directory.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c
index acf7a485e92..27615bfa9b6 100644
--- a/src/bin/pg_dump/pg_backup_directory.c
+++ b/src/bin/pg_dump/pg_backup_directory.c
@@ -458,11 +458,11 @@ _LoadBlobs(ArchiveHandle *AH)
/* Read the blobs TOC file line-by-line, and process each blob */
while ((cfgets(ctx->blobsTocFH, line, MAXPGPATH)) != NULL)
{
- char fname[MAXPGPATH];
+ char fname[MAXPGPATH + 1];
char path[MAXPGPATH];
/* Can't overflow because line and fname are the same length. */
- if (sscanf(line, "%u %s\n", &oid, fname) != 2)
+ if (sscanf(line, "%u %" CppAsString2(MAXPGPATH) "s\n", &oid, fname) != 2)
exit_horribly(modulename, "invalid line in large object TOC file \"%s\": \"%s\"\n",
fname, line);