1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

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
This commit is contained in:
Michael Paquier
2020-02-04 13:56:04 +09:00
parent 1c7a0b387d
commit 177be9edf4

View File

@ -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)
{