Fix corner case with PGP decompression in pgcrypto
Michael Paquier <michael@paquier.xyz>
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/16476-692ef7b84e5fb893@postgresql.org Backpatch-through: 9.5
Files
| Path | Change | +/− |
|---|---|---|
| contrib/pgcrypto/expected/pgp-compression.out | modified | +30 −0 |
| contrib/pgcrypto/pgp-compress.c | modified | +11 −11 |
| contrib/pgcrypto/sql/pgp-compression.sql | modified | +21 −0 |
Discussion
- BUG #16476: pgp_sym_encrypt_bytea with compress-level=6 : Wrong key or corrupt data 21 messages · 2020-06-03 → 2020-07-27