mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +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:
		@@ -364,3 +364,11 @@ a3nsOzKTXUfS9VyaXo8IrncM6n7fdaXpwba/3tNsAhJG4lDv1k4g9v8Ix2dfv6Rs
 | 
			
		||||
(1 row)
 | 
			
		||||
 | 
			
		||||
-- 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)
 | 
			
		||||
		return pullf_read(src, len, data_p);
 | 
			
		||||
 | 
			
		||||
	if (pkt->len == 0)
 | 
			
		||||
	while (pkt->len == 0)
 | 
			
		||||
	{
 | 
			
		||||
		/* this was last chunk in stream */
 | 
			
		||||
		if (pkt->type == PKT_NORMAL)
 | 
			
		||||
 
 | 
			
		||||
@@ -264,3 +264,7 @@ a3nsOzKTXUfS9VyaXo8IrncM6n7fdaXpwba/3tNsAhJG4lDv1k4g9v8Ix2dfv6Rs
 | 
			
		||||
-----END PGP MESSAGE-----
 | 
			
		||||
'), 'key', 'convert-crlf=1'), 'sha1'), 'hex');
 | 
			
		||||
-- 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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user