summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/compileall.py5
-rw-r--r--Lib/test/test_compileall.py26
-rw-r--r--Misc/NEWS8
-rw-r--r--Tools/msi/msi.py2
4 files changed, 38 insertions, 3 deletions
diff --git a/Lib/compileall.py b/Lib/compileall.py
index 9451a60..2432842 100644
--- a/Lib/compileall.py
+++ b/Lib/compileall.py
@@ -77,7 +77,10 @@ def compile_dir(dir, maxlevels=10, ddir=None,
print('*** Error compiling', fullname, '...')
else:
print('*** ', end='')
- print(err.msg)
+ # escape non-printable characters in msg
+ msg = err.msg.encode(sys.stdout.encoding, 'backslashreplace')
+ msg = msg.decode(sys.stdout.encoding)
+ print(msg)
success = 0
except (SyntaxError, UnicodeError, IOError) as e:
if quiet:
diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py
index 49b6448..fe1dcf7 100644
--- a/Lib/test/test_compileall.py
+++ b/Lib/test/test_compileall.py
@@ -1,3 +1,4 @@
+import sys
import compileall
import imp
import os
@@ -9,6 +10,7 @@ import tempfile
import time
from test import support
import unittest
+import io
class CompileallTests(unittest.TestCase):
@@ -55,8 +57,30 @@ class CompileallTests(unittest.TestCase):
self.recreation_check(b'\0\0\0\0')
+class EncodingTest(unittest.TestCase):
+ 'Issue 6716: compileall should escape source code when printing errors to stdout.'
+
+ def setUp(self):
+ self.directory = tempfile.mkdtemp()
+ self.source_path = os.path.join(self.directory, '_test.py')
+ with open(self.source_path, 'w', encoding='utf-8') as file:
+ file.write('# -*- coding: utf-8 -*-\n')
+ file.write('print u"\u20ac"\n')
+
+ def tearDown(self):
+ shutil.rmtree(self.directory)
+
+ def test_error(self):
+ try:
+ orig_stdout = sys.stdout
+ sys.stdout = io.TextIOWrapper(io.BytesIO(),encoding='ascii')
+ compileall.compile_dir(self.directory)
+ finally:
+ sys.stdout = orig_stdout
+
def test_main():
- support.run_unittest(CompileallTests)
+ support.run_unittest(CompileallTests,
+ EncodingTest)
if __name__ == "__main__":
diff --git a/Misc/NEWS b/Misc/NEWS
index 9d42ce6..57d084d 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -9,9 +9,17 @@ What's New in Python 3.1.3?
*Release date: 20XX-XX-XX*
+Library
+-------
+
+- Issue #6716/2: Backslash-replace error output in compilall.
+
Build
-----
+- Issue #6716: Quote -x arguments of compileall in MSI installer.
+ Exclude 2to3 tests from compileall.
+
- Issue #1628484: The Makefile doesn't ignore the CFLAGS environment
variable anymore. It also forwards the LDFLAGS settings to the linker
when building a shared library.
diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py
index cd67e99..027af07 100644
--- a/Tools/msi/msi.py
+++ b/Tools/msi/msi.py
@@ -403,7 +403,7 @@ def add_ui(db):
("VerdanaRed9", "Verdana", 9, 255, 0),
])
- compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x bad_coding|badsyntax|site-packages|py2_ "[TARGETDIR]Lib"'
+ compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py2_|lib2to3\\tests" "[TARGETDIR]Lib"'
lib2to3args = r'-c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"'
# See "CustomAction Table"
add_data(db, "CustomAction", [