postgres.git / summary / log / commit / refs

commit    dd63a71ebe3937e0ec965248513fb71e45ee0ec8
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Sun Aug 09 16:39:08 2020 +0000
First released in: 14.0, 9.5.23, 9.6.19, 10.14, 11.9, 12.4, 13.0

    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.


src/bin/pg_dump/pg_backup_tar.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c index d5bfa556461..407c9fa5e8a 100644 --- a/src/bin/pg_dump/pg_backup_tar.c +++ b/src/bin/pg_dump/pg_backup_tar.c @@ -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); [parent: 900429d0c036]