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

This commit is contained in:
Pablo Galindo Salgado 2022-01-20 15:34:13 +00:00 committed by GitHub
parent b04dfbbe4b
commit 650720a0cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 3 additions and 2 deletions

View File

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