mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Issue #12004: Fix an internal error in PyZipFile when writing an invalid
Python file. Patch by Ben Morgan.
This commit is contained in:
parent
a97c57c8fd
commit
45c4375ea7
4 changed files with 29 additions and 2 deletions
|
@ -19,7 +19,8 @@ from tempfile import TemporaryFile
|
||||||
from random import randint, random
|
from random import randint, random
|
||||||
from unittest import skipUnless
|
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"
|
TESTFN2 = TESTFN + "2"
|
||||||
TESTFNDIR = TESTFN + "d"
|
TESTFNDIR = TESTFN + "d"
|
||||||
|
@ -735,6 +736,28 @@ class PyZipFileTests(unittest.TestCase):
|
||||||
self.assertRaises(RuntimeError, zipfp.writepy, TESTFN)
|
self.assertRaises(RuntimeError, zipfp.writepy, TESTFN)
|
||||||
os.remove(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):
|
class OtherTests(unittest.TestCase):
|
||||||
zips_with_bad_crc = {
|
zips_with_bad_crc = {
|
||||||
|
|
|
@ -1436,7 +1436,7 @@ class PyZipFile(ZipFile):
|
||||||
print("Compiling", file)
|
print("Compiling", file)
|
||||||
try:
|
try:
|
||||||
py_compile.compile(file, doraise=True, optimize=optimize)
|
py_compile.compile(file, doraise=True, optimize=optimize)
|
||||||
except py_compile.PyCompileError as error:
|
except py_compile.PyCompileError as err:
|
||||||
print(err.msg)
|
print(err.msg)
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -741,6 +741,7 @@ The Dragon De Monsyne
|
||||||
Skip Montanaro
|
Skip Montanaro
|
||||||
Paul Moore
|
Paul Moore
|
||||||
Ross Moore
|
Ross Moore
|
||||||
|
Ben Morgan
|
||||||
Derek Morr
|
Derek Morr
|
||||||
James A Morrison
|
James A Morrison
|
||||||
Alessandro Moura
|
Alessandro Moura
|
||||||
|
|
|
@ -216,6 +216,9 @@ Core and Builtins
|
||||||
Library
|
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
|
- Issue #9290: In IDLE the sys.std* streams now implement io.TextIOBase
|
||||||
interface and support all mandatory methods and properties.
|
interface and support all mandatory methods and properties.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue