]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix the caret position in some syntax errors in interactive mode (GH-30718)
authorPablo Galindo Salgado <Pablogsal@gmail.com>
Thu, 20 Jan 2022 15:34:13 +0000 (15:34 +0000)
committerGitHub <noreply@github.com>
Thu, 20 Jan 2022 15:34:13 +0000 (15:34 +0000)
Parser/pegen_errors.c

index f348ac3000ddaf469f7b3cc6c1cf579a92c584ca..0be9df0ae55357e4f11099471ab16570369c6f20 100644 (file)
@@ -251,14 +251,15 @@ get_error_line_from_tokenizer_buffers(Parser *p, Py_ssize_t lineno)
     assert(cur_line != NULL);
 
     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;
 
     for (int i = 0; i < relative_lineno - 1; i++) {
         char *new_line = strchr(cur_line, '\n') + 1;
         // The assert is here for debug builds but the conditional that
         // follows is there so in release builds we do not crash at the cost
         // to report a potentially wrong line.
-        assert(new_line != NULL && new_line < p->tok->inp);
-        if (new_line == NULL || new_line >= p->tok->inp) {
+        assert(new_line != NULL && new_line <= buf_end);
+        if (new_line == NULL || new_line > buf_end) {
             break;
         }
         cur_line = new_line;