From 9f5162ef43c52396c4365b9cabfdffb4e4bf716d Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 23 Jul 2020 08:29:14 +0900 Subject: [PATCH] Revert "Fix corner case with PGP decompression in pgcrypto" This reverts commit 9e10898, after finding out that buildfarm members running SLES 15 on z390 complain on the compression and decompression logic of the new test: pipistrelles, barbthroat and steamerduck. Those hosts are visibly using hardware-specific changes to improve zlib performance, requiring more investigation. Thanks to Tom Lane for the discussion. Discussion: https://postgr.es/m/20200722093749.GA2564@paquier.xyz Backpatch-through: 9.5 --- contrib/pgcrypto/expected/pgp-compression.out | 30 ------------------- contrib/pgcrypto/pgp-compress.c | 22 +++++++------- contrib/pgcrypto/sql/pgp-compression.sql | 21 ------------- 3 files changed, 11 insertions(+), 62 deletions(-) diff --git a/contrib/pgcrypto/expected/pgp-compression.out b/contrib/pgcrypto/expected/pgp-compression.out index d4c57feba30..32b350b8fe0 100644 --- a/contrib/pgcrypto/expected/pgp-compression.out +++ b/contrib/pgcrypto/expected/pgp-compression.out @@ -48,33 +48,3 @@ select pgp_sym_decrypt( Secret message (1 row) --- check corner case involving an input string of 16kB, as per bug #16476. -SELECT setseed(0); - setseed ---------- - -(1 row) - -WITH random_string AS -( - -- This generates a random string of 16366 bytes. This is chosen - -- as random so that it does not get compressed, and the decompression - -- would work on a string with the same length as the origin, making the - -- test behavior more predictible. lpad() ensures that the generated - -- hexadecimal value is completed by extra zero characters if random() - -- has generated a value strictly lower than 16. - SELECT string_agg(decode(lpad(to_hex((random()*256)::int), 2, '0'), 'hex'), '') as bytes - FROM generate_series(0, 16365) -) -SELECT bytes = - pgp_sym_decrypt_bytea( - pgp_sym_encrypt_bytea(bytes, 'key', - 'compress-algo=1,compress-level=1'), - 'key', 'expect-compress-algo=1') - AS is_same - FROM random_string; - is_same ---------- - t -(1 row) - diff --git a/contrib/pgcrypto/pgp-compress.c b/contrib/pgcrypto/pgp-compress.c index 17f5b2ef93d..0505bdee923 100644 --- a/contrib/pgcrypto/pgp-compress.c +++ b/contrib/pgcrypto/pgp-compress.c @@ -243,17 +243,6 @@ decompress_read(void *priv, PullFilter *src, int len, struct DecomprData *dec = priv; restart: - if (dec->stream.avail_in == 0) - { - uint8 *tmp; - - res = pullf_read(src, 8192, &tmp); - if (res < 0) - return res; - dec->stream.next_in = tmp; - dec->stream.avail_in = res; - } - if (dec->buf_data > 0) { if (len > dec->buf_data) @@ -267,6 +256,17 @@ restart: if (dec->eof) return 0; + if (dec->stream.avail_in == 0) + { + uint8 *tmp; + + res = pullf_read(src, 8192, &tmp); + if (res < 0) + return res; + dec->stream.next_in = tmp; + dec->stream.avail_in = res; + } + dec->stream.next_out = dec->buf; dec->stream.avail_out = dec->buf_len; dec->pos = dec->buf; diff --git a/contrib/pgcrypto/sql/pgp-compression.sql b/contrib/pgcrypto/sql/pgp-compression.sql index 87c59c6cabc..ca9ee1fc008 100644 --- a/contrib/pgcrypto/sql/pgp-compression.sql +++ b/contrib/pgcrypto/sql/pgp-compression.sql @@ -28,24 +28,3 @@ select pgp_sym_decrypt( pgp_sym_encrypt('Secret message', 'key', 'compress-algo=2, compress-level=0'), 'key', 'expect-compress-algo=0'); - --- check corner case involving an input string of 16kB, as per bug #16476. -SELECT setseed(0); -WITH random_string AS -( - -- This generates a random string of 16366 bytes. This is chosen - -- as random so that it does not get compressed, and the decompression - -- would work on a string with the same length as the origin, making the - -- test behavior more predictible. lpad() ensures that the generated - -- hexadecimal value is completed by extra zero characters if random() - -- has generated a value strictly lower than 16. - SELECT string_agg(decode(lpad(to_hex((random()*256)::int), 2, '0'), 'hex'), '') as bytes - FROM generate_series(0, 16365) -) -SELECT bytes = - pgp_sym_decrypt_bytea( - pgp_sym_encrypt_bytea(bytes, 'key', - 'compress-algo=1,compress-level=1'), - 'key', 'expect-compress-algo=1') - AS is_same - FROM random_string;