From: Michael Paquier Date: Tue, 4 Feb 2020 04:56:04 +0000 (+0900) Subject: Fix fuzzy error handling in pg_basebackup when opening gzFile X-Git-Tag: REL_13_BETA1~775 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=177be9edf4bb966400db7769d61e479aa0fe0201;p=thirdparty%2Fpostgresql.git Fix fuzzy error handling in pg_basebackup when opening gzFile First, this code did not bother checking for a failure when calling dup(). Then, per zlib, gzerror() returns NULL for a NULL input, which can happen if passing down to gzdopen() an invalid file descriptor or if there was an allocation failure. No back-patch is done as this would unlikely be a problem in the field. Per Coverity. Reported-by: Tom Lane --- diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 556a0af9160..4e12cdb4467 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -1022,7 +1022,20 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) #ifdef HAVE_LIBZ if (compresslevel != 0) { - state.ztarfile = gzdopen(dup(fileno(stdout)), "wb"); + int fd = dup(fileno(stdout)); + if (fd < 0) + { + pg_log_error("could not duplicate stdout: %m"); + exit(1); + } + + state.ztarfile = gzdopen(fd, "wb"); + if (state.ztarfile == NULL) + { + pg_log_error("could not open output file: %m"); + exit(1); + } + if (gzsetparams(state.ztarfile, compresslevel, Z_DEFAULT_STRATEGY) != Z_OK) {