postgres.git / summary / log / commit / refs
commit af3677ef1bc0c76069ff7dd00cd0339f26d372e9
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun Aug 09 16:39:08 2020 +0000
First released in: 14.0, 9.5.23, 9.6.19, 10.14, 11.9, 12.4, 13.0
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.
src/bin/pg_dump/pg_backup_tar.c | 8 ++++++--
1 file 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 921918e3829..4cc9015ea51 100644
--- a/src/bin/pg_dump/pg_backup_tar.c
+++ b/src/bin/pg_dump/pg_backup_tar.c
@@ -1093,12 +1093,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);
[parent: bc77fb7e47d4]