summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Galindo <Pablogsal@gmail.com>2020-05-11 00:41:26 (GMT)
committerGitHub <noreply@github.com>2020-05-11 00:41:26 (GMT)
commit5b956ca42de37c761562e9c9aeb96a0e67606e33 (patch)
tree5f7ce29546bf89d847ae222a91acc924af84c949
parent2cc9b8486dd924214f9e5657672fdeb24449d206 (diff)
downloadcpython-5b956ca42de37c761562e9c9aeb96a0e67606e33.zip
cpython-5b956ca42de37c761562e9c9aeb96a0e67606e33.tar.gz
cpython-5b956ca42de37c761562e9c9aeb96a0e67606e33.tar.bz2
bpo-40585: Normalize errors messages in codeop when comparing them (GH-20030)
With the new parser, the error message contains always the trailing newlines, causing the comparison of the repr of the error messages in codeop to fail. This commit makes the new parser mirror the old parser's behaviour regarding trailing newlines.
-rw-r--r--Lib/test/test_codeop.py9
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2020-05-11-00-19-42.bpo-40585.yusknY.rst2
-rw-r--r--Parser/pegen/pegen.c6
3 files changed, 17 insertions, 0 deletions
diff --git a/Lib/test/test_codeop.py b/Lib/test/test_codeop.py
index 1f27830..0c5e362f 100644
--- a/Lib/test/test_codeop.py
+++ b/Lib/test/test_codeop.py
@@ -288,6 +288,15 @@ class CodeopTests(unittest.TestCase):
ai("[i for i in range(10)] = (1, 2, 3)")
+ def test_invalid_exec(self):
+ ai = self.assertInvalid
+ ai("raise = 4", symbol="exec")
+ ai('def a-b', symbol='exec')
+ ai('await?', symbol='exec')
+ ai('=!=', symbol='exec')
+ ai('a await raise b', symbol='exec')
+ ai('a await raise b?+1', symbol='exec')
+
def test_filename(self):
self.assertEqual(compile_command("a = 1\n", "abc").co_filename,
compile("a = 1\n", "abc", 'single').co_filename)
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-05-11-00-19-42.bpo-40585.yusknY.rst b/Misc/NEWS.d/next/Core and Builtins/2020-05-11-00-19-42.bpo-40585.yusknY.rst
new file mode 100644
index 0000000..7a9258e
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-05-11-00-19-42.bpo-40585.yusknY.rst
@@ -0,0 +1,2 @@
+Fixed a bug when using :func:`codeop.compile_command` that was causing
+exceptions to be swallowed with the new parser. Patch by Pablo Galindo
diff --git a/Parser/pegen/pegen.c b/Parser/pegen/pegen.c
index 06af53b..c80f086 100644
--- a/Parser/pegen/pegen.c
+++ b/Parser/pegen/pegen.c
@@ -310,6 +310,12 @@ get_error_line(char *buffer, int is_file)
newline = strchr(buffer, '\n');
}
+ if (is_file) {
+ while (newline > buffer && newline[-1] == '\n') {
+ --newline;
+ }
+ }
+
if (newline) {
return PyUnicode_DecodeUTF8(buffer, newline - buffer, "replace");
}