]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-112387: Fix error positions for decoded strings with backwards tokenize errors...
authorPablo Galindo Salgado <Pablogsal@gmail.com>
Mon, 27 Nov 2023 18:37:48 +0000 (18:37 +0000)
committerGitHub <noreply@github.com>
Mon, 27 Nov 2023 18:37:48 +0000 (18:37 +0000)
Signed-off-by: Pablo Galindo <pablogsal@gmail.com>
Lib/test/test_syntax.py
Misc/NEWS.d/next/Core and Builtins/2023-11-25-22-39-44.gh-issue-112387.AbBq5W.rst [new file with mode: 0644]
Parser/pegen_errors.c

index e80e95383b897d2fca8f7d9c889700f45f127cbd..99433df73387d0f6e9ad9f71d3d27a88b8f8a4ea 100644 (file)
@@ -2334,6 +2334,10 @@ func(
 """
         self._check_error(code, "parenthesis '\\)' does not match opening parenthesis '\\['")
 
+        # Examples with dencodings
+        s = b'# coding=latin\n(aaaaaaaaaaaaaaaaa\naaaaaaaaaaa\xb5'
+        self._check_error(s, "'\(' was never closed")
+
     def test_error_string_literal(self):
 
         self._check_error("'blech", r"unterminated string literal \(.*\)$")
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-11-25-22-39-44.gh-issue-112387.AbBq5W.rst b/Misc/NEWS.d/next/Core and Builtins/2023-11-25-22-39-44.gh-issue-112387.AbBq5W.rst
new file mode 100644 (file)
index 0000000..adac11b
--- /dev/null
@@ -0,0 +1,2 @@
+Fix error positions for decoded strings with backwards tokenize errors.
+Patch by Pablo Galindo
index 2528d4502b3c0c7a7e74ba4eab8e9853ea06b7ee..20232f3a26a2cc241b08dbc7a03bd7d0e6e65708 100644 (file)
@@ -282,6 +282,10 @@ get_error_line_from_tokenizer_buffers(Parser *p, Py_ssize_t lineno)
     Py_ssize_t relative_lineno = p->starting_lineno ? lineno - p->starting_lineno + 1 : lineno;
     const char* buf_end = p->tok->fp_interactive ? p->tok->interactive_src_end : p->tok->inp;
 
+    if (buf_end < cur_line) {
+        buf_end = cur_line + strlen(cur_line);
+    }
+
     for (int i = 0; i < relative_lineno - 1; i++) {
         char *new_line = strchr(cur_line, '\n');
         // The assert is here for debug builds but the conditional that