From: Tom Lane Date: Sun, 9 Aug 2020 16:39:08 +0000 (-0400) Subject: Check for fseeko() failure in pg_dump's _tarAddFile(). X-Git-Tag: REL9_5_23~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=af3677ef1bc0c76069ff7dd00cd0339f26d372e9;p=thirdparty%2Fpostgresql.git 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. --- 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);