This addresses CVE-2018-{1060,1061,14647,1000802}.
* gnu/packages/patches/python2-CVE-2018-1000802.patch,
gnu/packages/patches/python2-CVE-2018-1060.patch,
gnu/packages/patches/python2-CVE-2018-1061.patch,
gnu/packages/patches/python2-CVE-2018-14647.patch: New files.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/python.scm (python-2/fixed): New variable.
(python-2.7)[replacement]: New field.
(python2-minimal): Use PACKAGE/INHERIT.
		
	
			
		
			
				
	
	
		
			47 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Fix CVE-2018-1000802:
 | 
						|
 | 
						|
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000802
 | 
						|
 | 
						|
Taken from upstream commit (sans NEWS):
 | 
						|
https://github.com/python/cpython/commit/d8b103b8b3ef9644805341216963a64098642435
 | 
						|
 | 
						|
diff --git a/Lib/shutil.py b/Lib/shutil.py
 | 
						|
index 3462f7c5e9..0ab1a06f52 100644
 | 
						|
--- a/Lib/shutil.py
 | 
						|
+++ b/Lib/shutil.py
 | 
						|
@@ -413,17 +413,21 @@ def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0,
 | 
						|
 
 | 
						|
     return archive_name
 | 
						|
 
 | 
						|
-def _call_external_zip(base_dir, zip_filename, verbose=False, dry_run=False):
 | 
						|
+def _call_external_zip(base_dir, zip_filename, verbose, dry_run, logger):
 | 
						|
     # XXX see if we want to keep an external call here
 | 
						|
     if verbose:
 | 
						|
         zipoptions = "-r"
 | 
						|
     else:
 | 
						|
         zipoptions = "-rq"
 | 
						|
-    from distutils.errors import DistutilsExecError
 | 
						|
-    from distutils.spawn import spawn
 | 
						|
+    cmd = ["zip", zipoptions, zip_filename, base_dir]
 | 
						|
+    if logger is not None:
 | 
						|
+        logger.info(' '.join(cmd))
 | 
						|
+    if dry_run:
 | 
						|
+        return
 | 
						|
+    import subprocess
 | 
						|
     try:
 | 
						|
-        spawn(["zip", zipoptions, zip_filename, base_dir], dry_run=dry_run)
 | 
						|
-    except DistutilsExecError:
 | 
						|
+        subprocess.check_call(cmd)
 | 
						|
+    except subprocess.CalledProcessError:
 | 
						|
         # XXX really should distinguish between "couldn't find
 | 
						|
         # external 'zip' command" and "zip failed".
 | 
						|
         raise ExecError, \
 | 
						|
@@ -458,7 +462,7 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None):
 | 
						|
         zipfile = None
 | 
						|
 
 | 
						|
     if zipfile is None:
 | 
						|
-        _call_external_zip(base_dir, zip_filename, verbose, dry_run)
 | 
						|
+        _call_external_zip(base_dir, zip_filename, verbose, dry_run, logger)
 | 
						|
     else:
 | 
						|
         if logger is not None:
 | 
						|
             logger.info("creating '%s' and adding '%s' to it",
 |