From: Pablo Galindo Salgado Date: Sat, 20 Nov 2021 17:40:59 +0000 (+0000) Subject: bpo-45494: Fix error location in EOF tokenizer errors (GH-29108) X-Git-Tag: v3.11.0a3~192 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=79ff0d1687e3f823fb121a19f0297ad052871b1b;p=thirdparty%2FPython%2Fcpython.git bpo-45494: Fix error location in EOF tokenizer errors (GH-29108) --- diff --git a/Parser/pegen.c b/Parser/pegen.c index b3fdae487d97..b76073018907 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -382,8 +382,12 @@ _PyPegen_raise_error(Parser *p, PyObject *errtype, const char *errmsg, ...) Py_ssize_t col_offset; Py_ssize_t end_col_offset = -1; if (t->col_offset == -1) { - col_offset = Py_SAFE_DOWNCAST(p->tok->cur - p->tok->buf, - intptr_t, int); + if (p->tok->cur == p->tok->buf) { + col_offset = 0; + } else { + const char* start = p->tok->buf ? p->tok->line_start : p->tok->buf; + col_offset = Py_SAFE_DOWNCAST(p->tok->cur - start, intptr_t, int); + } } else { col_offset = t->col_offset + 1; } @@ -410,6 +414,7 @@ get_error_line(Parser *p, Py_ssize_t lineno) assert(p->tok->fp == NULL || p->tok->fp == stdin); char *cur_line = p->tok->fp_interactive ? p->tok->interactive_src_start : p->tok->str; + assert(cur_line != NULL); for (int i = 0; i < lineno - 1; i++) { cur_line = strchr(cur_line, '\n') + 1;