mirror of
https://github.com/postgres/postgres.git
synced 2025-05-12 16:21:30 +03:00
Loop when necessary in contrib/pgcrypto's pktreader_pull().
This fixes a scenario in which pgp_sym_decrypt() failed with "Wrong key or corrupt data" on messages whose length is 6 less than a power of 2. Per bug #11905 from Connor Penhale. Fix by Marko Tiikkaja, regression test case from Jeff Janes.
This commit is contained in:
parent
2a83e0349c
commit
419de696a7
@ -364,3 +364,11 @@ a3nsOzKTXUfS9VyaXo8IrncM6n7fdaXpwba/3tNsAhJG4lDv1k4g9v8Ix2dfv6Rs
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- expected: 7efefcab38467f7484d6fa43dc86cf5281bd78e2
|
-- expected: 7efefcab38467f7484d6fa43dc86cf5281bd78e2
|
||||||
|
-- check BUG #11905, problem with messages 6 less than a power of 2.
|
||||||
|
select pgp_sym_decrypt(pgp_sym_encrypt(repeat('x',65530),'1'),'1') = repeat('x',65530);
|
||||||
|
?column?
|
||||||
|
----------
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- expected: true
|
||||||
|
@ -182,7 +182,7 @@ pktreader_pull(void *priv, PullFilter *src, int len,
|
|||||||
if (pkt->type == PKT_CONTEXT)
|
if (pkt->type == PKT_CONTEXT)
|
||||||
return pullf_read(src, len, data_p);
|
return pullf_read(src, len, data_p);
|
||||||
|
|
||||||
if (pkt->len == 0)
|
while (pkt->len == 0)
|
||||||
{
|
{
|
||||||
/* this was last chunk in stream */
|
/* this was last chunk in stream */
|
||||||
if (pkt->type == PKT_NORMAL)
|
if (pkt->type == PKT_NORMAL)
|
||||||
|
@ -264,3 +264,7 @@ a3nsOzKTXUfS9VyaXo8IrncM6n7fdaXpwba/3tNsAhJG4lDv1k4g9v8Ix2dfv6Rs
|
|||||||
-----END PGP MESSAGE-----
|
-----END PGP MESSAGE-----
|
||||||
'), 'key', 'convert-crlf=1'), 'sha1'), 'hex');
|
'), 'key', 'convert-crlf=1'), 'sha1'), 'hex');
|
||||||
-- expected: 7efefcab38467f7484d6fa43dc86cf5281bd78e2
|
-- expected: 7efefcab38467f7484d6fa43dc86cf5281bd78e2
|
||||||
|
|
||||||
|
-- check BUG #11905, problem with messages 6 less than a power of 2.
|
||||||
|
select pgp_sym_decrypt(pgp_sym_encrypt(repeat('x',65530),'1'),'1') = repeat('x',65530);
|
||||||
|
-- expected: true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user