[Python-checkins] cpython (3.2): Issue #12004: Fix an internal error in PyZipFile when writing an invalid

serhiy.storchaka python-checkins at python.org
Tue Jan 29 19:22:41 CET 2013


http://hg.python.org/cpython/rev/3a1ac42435f9
changeset: 81828:3a1ac42435f9
branch: 3.2
parent: 81822:e558adb2ebaa
user: Serhiy Storchaka <storchaka at gmail.com>
date: Tue Jan 29 20:10:28 2013 +0200
summary:
 Issue #12004: Fix an internal error in PyZipFile when writing an invalid
Python file. Patch by Ben Morgan.
files:
 Lib/test/test_zipfile.py | 25 ++++++++++++++++++++++++-
 Lib/zipfile.py | 2 +-
 Misc/ACKS | 1 +
 Misc/NEWS | 3 +++
 4 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -19,7 +19,8 @@
 from random import randint, random
 from unittest import skipUnless
 
-from test.support import TESTFN, run_unittest, findfile, unlink
+from test.support import (TESTFN, run_unittest, findfile, unlink,
+ captured_stdout)
 
 TESTFN2 = TESTFN + "2"
 TESTFNDIR = TESTFN + "d"
@@ -735,6 +736,28 @@
 self.assertRaises(RuntimeError, zipfp.writepy, TESTFN)
 os.remove(TESTFN)
 
+ def test_write_pyfile_bad_syntax(self):
+ os.mkdir(TESTFN2)
+ try:
+ with open(os.path.join(TESTFN2, "mod1.py"), "w") as fp:
+ fp.write("Bad syntax in python file\n")
+
+ with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp:
+ # syntax errors are printed to stdout
+ with captured_stdout() as s:
+ zipfp.writepy(os.path.join(TESTFN2, "mod1.py"))
+
+ self.assertIn("SyntaxError", s.getvalue())
+
+ # as it will not have compiled the python file, it will
+ # include the .py file not .pyc or .pyo
+ names = zipfp.namelist()
+ self.assertIn('mod1.py', names)
+ self.assertNotIn('mod1.pyc', names)
+ self.assertNotIn('mod1.pyo', names)
+
+ finally:
+ shutil.rmtree(TESTFN2)
 
 class OtherTests(unittest.TestCase):
 zips_with_bad_crc = {
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -1436,7 +1436,7 @@
 print("Compiling", file)
 try:
 py_compile.compile(file, doraise=True, optimize=optimize)
- except py_compile.PyCompileError as error:
+ except py_compile.PyCompileError as err:
 print(err.msg)
 return False
 return True
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -741,6 +741,7 @@
 Skip Montanaro
 Paul Moore
 Ross Moore
+Ben Morgan
 Derek Morr
 James A Morrison
 Alessandro Moura
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -216,6 +216,9 @@
 Library
 -------
 
+- Issue #12004: Fix an internal error in PyZipFile when writing an invalid
+ Python file. Patch by Ben Morgan.
+
 - Issue #9290: In IDLE the sys.std* streams now implement io.TextIOBase
 interface and support all mandatory methods and properties.
 
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /