aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2020-07-23 08:29:08 +0900
committerMichael Paquier <michael@paquier.xyz>2020-07-23 08:29:08 +0900
commit38f60f174e3279069b5547b5f4015eb4a8492037 (patch)
treea2815210c9179278a29b3a6a7fd8002bc3a2ad2c
parenta57d312a7706321d850faa048a562a0c0c01b835 (diff)
downloadpostgresql-38f60f174e3279069b5547b5f4015eb4a8492037.tar.gz
postgresql-38f60f174e3279069b5547b5f4015eb4a8492037.zip
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
-rw-r--r--contrib/pgcrypto/expected/pgp-compression.out30
-rw-r--r--contrib/pgcrypto/pgp-compress.c22
-rw-r--r--contrib/pgcrypto/sql/pgp-compression.sql21
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;