Commit 177be9ed authored by Michael Paquier's avatar Michael Paquier

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
parent 1c7a0b38
...@@ -1022,7 +1022,20 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) ...@@ -1022,7 +1022,20 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
#ifdef HAVE_LIBZ #ifdef HAVE_LIBZ
if (compresslevel != 0) 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, if (gzsetparams(state.ztarfile, compresslevel,
Z_DEFAULT_STRATEGY) != Z_OK) Z_DEFAULT_STRATEGY) != Z_OK)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment