1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-03 22:24:49 +03:00

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.
This commit is contained in:
Tom Lane 2020-08-09 12:39:08 -04:00
parent 011aa7c0bc
commit 105dbff875

View File

@ -1094,12 +1094,16 @@ _tarAddFile(ArchiveHandle *AH, TAR_MEMBER *th)
/* /*
* Find file len & go back to start. * 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); th->fileLen = ftello(tmp);
if (th->fileLen < 0) if (th->fileLen < 0)
exit_horribly(modulename, "could not determine seek position in archive file: %s\n", exit_horribly(modulename, "could not determine seek position in archive file: %s\n",
strerror(errno)); 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); _tarWriteHeader(th);