[Python-checkins] Fix the caret position in some syntax errors in interactive mode (GH-30718)

pablogsal webhook-mailer at python.org
Thu Jan 20 10:34:24 EST 2022


https://github.com/python/cpython/commit/650720a0cfa1673938e6d1bad53b6c37c9edb47d
commit: 650720a0cfa1673938e6d1bad53b6c37c9edb47d
branch: main
author: Pablo Galindo Salgado <Pablogsal at gmail.com>
committer: pablogsal <Pablogsal at gmail.com>
date: 2022-01-20T15:34:13Z
summary:

Fix the caret position in some syntax errors in interactive mode (GH-30718)

files:
M Parser/pegen_errors.c

diff --git a/Parser/pegen_errors.c b/Parser/pegen_errors.c
index f348ac3000dda..0be9df0ae5535 100644
--- a/Parser/pegen_errors.c
+++ b/Parser/pegen_errors.c
@@ -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;



More information about the Python-checkins mailing list