mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Restore use of zlib default compression in pg_dump directory mode.
This was broken by commit 0e7e355f27 and
friends, which ignored the fact that gzopen() will treat "-1" in the
mode argument as an invalid character, which it ignores, and a flag for
compression level 1. Now, when this value is encountered no compression
level flag is passed  to gzopen, leaving it to use the zlib default.
Also, enforce the documented allowed range for pg_dump's -Z option,
namely 0 .. 9, and remove some consequently dead code from
pg_backup_tar.c.
Problem reported by Marc Mamin.
Backpatch to 9.1, like the patch that introduced the bug.
			
			
This commit is contained in:
		@@ -547,11 +547,21 @@ cfopen(const char *path, const char *mode, int compression)
 | 
			
		||||
	if (compression != 0)
 | 
			
		||||
	{
 | 
			
		||||
#ifdef HAVE_LIBZ
 | 
			
		||||
		char		mode_compression[32];
 | 
			
		||||
		if (compression != Z_DEFAULT_COMPRESSION)
 | 
			
		||||
		{
 | 
			
		||||
			/* user has specified a compression level, so tell zlib to use it */
 | 
			
		||||
			char		mode_compression[32];
 | 
			
		||||
 | 
			
		||||
			snprintf(mode_compression, sizeof(mode_compression), "%s%d",
 | 
			
		||||
					 mode, compression);
 | 
			
		||||
			fp->compressedfp = gzopen(path, mode_compression);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			/* don't specify a level, just use the zlib default */
 | 
			
		||||
			fp->compressedfp = gzopen(path, mode);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		snprintf(mode_compression, sizeof(mode_compression), "%s%d",
 | 
			
		||||
				 mode, compression);
 | 
			
		||||
		fp->compressedfp = gzopen(path, mode_compression);
 | 
			
		||||
		fp->uncompressedfp = NULL;
 | 
			
		||||
		if (fp->compressedfp == NULL)
 | 
			
		||||
		{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user