Commit 38f60f17 authored by Michael Paquier's avatar Michael Paquier

Revert "Fix corner case with PGP decompression in pgcrypto"

This reverts commit 9e108984, 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
parent a57d312a
......@@ -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)
......@@ -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;
......
......@@ -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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment