Fix corner case with PGP decompression in pgcrypto A compressed stream may end with an empty packet, and PGP decompression finished before reading this empty packet in the remaining stream. This caused a failure in pgcrypto, handling this case as corrupted data. This commit makes sure to consume such extra data, avoiding a failure when decompression the entire stream. This corner case was reproducible with a data length of 16kB, and existed since its introduction in e94dd6a. A cheap regression test is added to cover this case.
Thanks to Jeff Janes for the extra investigation. Reported-by: Frank Gagnepain Author: Kyotaro Horiguchi, Michael Paquier Discussion: https://postgr.es/m/[email protected] Backpatch-through: 9.5 Branch ------ REL_10_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/5bfd0936b46082e7c3265d83313d12e3608f8093 Modified Files -------------- contrib/pgcrypto/expected/pgp-compression.out | 30 +++++++++++++++++++++++++++ contrib/pgcrypto/pgp-compress.c | 22 ++++++++++---------- contrib/pgcrypto/sql/pgp-compression.sql | 21 +++++++++++++++++++ 3 files changed, 62 insertions(+), 11 deletions(-)
