]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Check for fseeko() failure in pg_dump's _tarAddFile().
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 9 Aug 2020 16:39:08 +0000 (12:39 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 9 Aug 2020 16:39:08 +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 921918e382982ee6f52df33b00ec64783f73de9c..4cc9015ea51084cf5c8489728d6f76da4987744c 100644 (file)
@@ -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);