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)
 | 
					(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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user