Check for fseeko() failure in pg_dump's _tarAddFile().
authorTom Lane <[email protected]>
Sun, 9 Aug 2020 16:39:07 +0000 (12:39 -0400)
committerTom Lane <[email protected]>
Sun, 9 Aug 2020 16:39:07 +0000 (12:39 -0400)
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

index b4f59429592701080e746e440035c5e90b582f78..c601ec07012aabb6fdb3b180d383fe3a79c196ba 100644 (file)
@@ -1082,11 +1082,13 @@ _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)
+       fatal("error during file seek: %m");
    th->fileLen = ftello(tmp);
    if (th->fileLen < 0)
        fatal("could not determine seek position in archive file: %m");
-   fseeko(tmp, 0, SEEK_SET);
+   if (fseeko(tmp, 0, SEEK_SET) != 0)
+       fatal("error during file seek: %m");
 
    _tarWriteHeader(th);