aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Gustafsson <dgustafsson@postgresql.org>2021-10-19 12:59:54 +0200
committerDaniel Gustafsson <dgustafsson@postgresql.org>2021-10-19 12:59:54 +0200
commit038892c8101845b6b4364cf2f5773207c4a4525c (patch)
tree50f7675224a42c8d7475a151cea2f72b40fa2853 /src
parent931f3926a9f69e8de4a673b05b8e7a1fffc1d0d9 (diff)
downloadpostgresql-038892c8101845b6b4364cf2f5773207c4a4525c.tar.gz
postgresql-038892c8101845b6b4364cf2f5773207c4a4525c.zip
Fix bug in TOC file error message printing
If the blob TOC file cannot be parsed, the error message was failing to print the filename as the variable holding it was shadowed by the destination buffer for parsing. When the filename fails to parse, the error will print an empty string: ./pg_restore -d foo -F d dump pg_restore: error: invalid line in large object TOC file "": .. ..instead of the intended error message: ./pg_restore -d foo -F d dump pg_restore: error: invalid line in large object TOC file "dump/blobs.toc": .. Fix by renaming both variables as the shared name was too generic to store either and still convey what the variable held. Backpatch all the way down to 9.6. Reviewed-by: Tom Lane Discussion: https://postgr.es/m/A2B151F5-B32B-4F2C-BA4A-6870856D9BDE@yesql.se Backpatch-through: 9.6
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_backup_directory.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c
index 2c75caec488..4efd8c7bbd8 100644
--- a/src/bin/pg_dump/pg_backup_directory.c
+++ b/src/bin/pg_dump/pg_backup_directory.c
@@ -442,42 +442,42 @@ _LoadBlobs(ArchiveHandle *AH)
{
Oid oid;
lclContext *ctx = (lclContext *) AH->formatData;
- char fname[MAXPGPATH];
+ char tocfname[MAXPGPATH];
char line[MAXPGPATH];
StartRestoreBlobs(AH);
- setFilePath(AH, fname, "blobs.toc");
+ setFilePath(AH, tocfname, "blobs.toc");
- ctx->blobsTocFH = cfopen_read(fname, PG_BINARY_R);
+ ctx->blobsTocFH = cfopen_read(tocfname, PG_BINARY_R);
if (ctx->blobsTocFH == NULL)
exit_horribly(modulename, "could not open large object TOC file \"%s\" for input: %s\n",
- fname, strerror(errno));
+ tocfname, strerror(errno));
/* Read the blobs TOC file line-by-line, and process each blob */
while ((cfgets(ctx->blobsTocFH, line, MAXPGPATH)) != NULL)
{
- char fname[MAXPGPATH + 1];
+ char blobfname[MAXPGPATH + 1];
char path[MAXPGPATH];
- /* Can't overflow because line and fname are the same length. */
- if (sscanf(line, "%u %" CppAsString2(MAXPGPATH) "s\n", &oid, fname) != 2)
+ /* Can't overflow because line and blobfname are the same length. */
+ if (sscanf(line, "%u %" CppAsString2(MAXPGPATH) "s\n", &oid, blobfname) != 2)
exit_horribly(modulename, "invalid line in large object TOC file \"%s\": \"%s\"\n",
- fname, line);
+ tocfname, line);
StartRestoreBlob(AH, oid, AH->public.ropt->dropSchema);
- snprintf(path, MAXPGPATH, "%s/%s", ctx->directory, fname);
+ snprintf(path, MAXPGPATH, "%s/%s", ctx->directory, blobfname);
_PrintFileData(AH, path);
EndRestoreBlob(AH, oid);
}
if (!cfeof(ctx->blobsTocFH))
exit_horribly(modulename, "error reading large object TOC file \"%s\"\n",
- fname);
+ tocfname);
if (cfclose(ctx->blobsTocFH) != 0)
exit_horribly(modulename, "could not close large object TOC file \"%s\": %s\n",
- fname, strerror(errno));
+ tocfname, strerror(errno));
ctx->blobsTocFH = NULL;