summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2020-08-09 12:39:08 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2020-08-09 12:39:08 -0400
commit105dbff8755b35f88eafcbb48d2a3247abf54aa7 (patch)
tree8671f013fbe638c5e14e223d694054f9c95f522e /src
parent011aa7c0bc85f9cf47b2d58ef3baff1120403aa8 (diff)
Check for fseeko() failure in pg_dump's _tarAddFile().
Coverity pointed out, not unreasonably, that we checked fseeko's result at every other call site but these. Failure to seek in the temp file (note this is NOT pg_dump's output file) seems quite unlikely, and even if it did happen the file length cross-check further down would probably detect the problem. Still, that's a poor excuse for not checking the result of a system call.
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_backup_tar.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c
index e9d54354ada..72de4e0d7b6 100644
--- a/src/bin/pg_dump/pg_backup_tar.c
+++ b/src/bin/pg_dump/pg_backup_tar.c
@@ -1094,12 +1094,16 @@ _tarAddFile(ArchiveHandle *AH, TAR_MEMBER *th)
/*
* Find file len & go back to start.
*/
- fseeko(tmp, 0, SEEK_END);
+ if (fseeko(tmp, 0, SEEK_END) != 0)
+ exit_horribly(modulename, "error during file seek: %s\n",
+ strerror(errno));
th->fileLen = ftello(tmp);
if (th->fileLen < 0)
exit_horribly(modulename, "could not determine seek position in archive file: %s\n",
strerror(errno));
- fseeko(tmp, 0, SEEK_SET);
+ if (fseeko(tmp, 0, SEEK_SET) != 0)
+ exit_horribly(modulename, "error during file seek: %s\n",
+ strerror(errno));
_tarWriteHeader(th);