summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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");
}