diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2020-08-09 12:39:08 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2020-08-09 12:39:08 -0400 |
commit | 26037705159489aff046d93227ab469d71616baf (patch) | |
tree | d5af14fdf9fe384b3d20048f7215947d86365cd7 | |
parent | ae2d34478c20f185927cc9d4713a0d44d5ab554f (diff) | |
download | postgresql-26037705159489aff046d93227ab469d71616baf.tar.gz postgresql-26037705159489aff046d93227ab469d71616baf.zip |
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.
-rw-r--r-- | src/bin/pg_dump/pg_backup_tar.c | 8 |
1 files 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 007be1298fb..a0f761d6503 100644 --- a/src/bin/pg_dump/pg_backup_tar.c +++ b/src/bin/pg_dump/pg_backup_tar.c @@ -1096,12 +1096,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); |