pgsql: Don't rely on zlib's gzgetc() macro. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Don't rely on zlib's gzgetc() macro.
Date
Msg-id E1vAYHL-002UWO-0Q@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Don't rely on zlib's gzgetc() macro.

It emerges that zlib's configuration logic is not robust enough
to guarantee that the macro will have the same ideas about struct
field layout as the library itself does, leading to corruption of
zlib's state struct followed by unintelligible failure messages.
This hazard has existed for a long time, but we'd not noticed
for several reasons:

(1) We only use gzgetc() when trying to read a manually-compressed
TOC file within a directory-format dump, which is a rarely-used
scenario that we weren't even testing before 20ec99589.

(2) No corruption actually occurs unless sizeof(long) is different
from sizeof(off_t) and the platform is big-endian.

(3) Some platforms have already fixed the configuration instability,
at least sufficiently for their environments.

Despite (3), it seems foolish to assume that the problem isn't
going to be present in some environments for a long time to come.
Hence, avoid relying on this macro.  We can just #undef it and
fall back on the underlying function of the same name.

Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/2122679.1760846783@sss.pgh.pa.us
Backpatch-through: 13

Branch
------
REL_16_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/c865f5b9f090bc1325f5667b11f883a46f5d96dd

Modified Files
--------------
src/bin/pg_dump/compress_gzip.c | 9 +++++++++
1 file changed, 9 insertions(+)


pgsql-committers by date:

Previous
From: Tatsuo Ishii
Date:
Subject: pgsql: Fix Coverity issue reported in commit 2273fa32bce.
Next
From: Tom Lane
Date:
Subject: pgsql: Add static assertion that RELSEG_SIZE fits in an int.