From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Sat, 20 Nov 2021 17:59:34 +0000 (-0800) Subject: bpo-45494: Fix error location in EOF tokenizer errors (GH-29108) X-Git-Tag: v3.10.1~45 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a427eb862f11888fa69fee520eb8a20bd396fcdb;p=thirdparty%2FPython%2Fcpython.git bpo-45494: Fix error location in EOF tokenizer errors (GH-29108) (cherry picked from commit 79ff0d1687e3f823fb121a19f0297ad052871b1b) Co-authored-by: Pablo Galindo Salgado --- diff --git a/Parser/pegen.c b/Parser/pegen.c index 98f07a13c92c..464a902173df 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -403,8 +403,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; } @@ -431,6 +435,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;