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