From 79ff0d1687e3f823fb121a19f0297ad052871b1b Mon Sep 17 00:00:00 2001 From: Pablo Galindo Salgado Date: Sat, 20 Nov 2021 17:40:59 +0000 Subject: [PATCH] bpo-45494: Fix error location in EOF tokenizer errors (GH-29108) --- Parser/pegen.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Parser/pegen.c b/Parser/pegen.c index b3fdae487d9..b7607301890 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;