aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2020-07-23 08:29:38 +0900
committerMichael Paquier <michael@paquier.xyz>2020-07-23 08:29:38 +0900
commit43e21fd8f6e8680df0153a0286af394c22123694 (patch)
treeea98b5c12fbf3b63aa5a76f403cc14eae452a275
parentdbf17ca1bfab1aec5783a1768d784875fb73a603 (diff)
downloadpostgresql-43e21fd8f6e8680df0153a0286af394c22123694.tar.gz
postgresql-43e21fd8f6e8680df0153a0286af394c22123694.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 631caa13693..57efe733386 100644
--- a/contrib/pgcrypto/pgp-compress.c
+++ b/contrib/pgcrypto/pgp-compress.c
@@ -244,17 +244,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)
@@ -268,6 +257,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;