From 00ee14e814d35587ac55f89c7de871a01360c876 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Wed, 17 Nov 2021 16:24:43 -0800 Subject: [3.9] bpo-45820: Fix a segfault when the parser fails without reading any input (GH-29580) (GH-29584) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Pablo Galindo Salgado Co-authored-by: Ɓukasz Langa --- .gitignore | 2 ++ .../Core and Builtins/2021-11-16-19-00-27.bpo-45820.2X6Psr.rst | 2 ++ Parser/pegen/pegen.c | 8 ++++++++ 3 files changed, 12 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-11-16-19-00-27.bpo-45820.2X6Psr.rst diff --git a/.gitignore b/.gitignore index 8641524..0dd3aee 100644 --- a/.gitignore +++ b/.gitignore @@ -136,5 +136,7 @@ Tools/ssl/win32 !/Python/ # Artifacts generated by 3.11 lying around when switching branches: +/_bootstrap_python /Programs/_freeze_module +/Python/deepfreeze/ /Python/frozen_modules/ \ No newline at end of file diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-11-16-19-00-27.bpo-45820.2X6Psr.rst b/Misc/NEWS.d/next/Core and Builtins/2021-11-16-19-00-27.bpo-45820.2X6Psr.rst new file mode 100644 index 0000000..c2ec3d6 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-11-16-19-00-27.bpo-45820.2X6Psr.rst @@ -0,0 +1,2 @@ +Fix a segfault when the parser fails without reading any input. Patch by +Pablo Galindo diff --git a/Parser/pegen/pegen.c b/Parser/pegen/pegen.c index 2e986c5..cdfbc12 100644 --- a/Parser/pegen/pegen.c +++ b/Parser/pegen/pegen.c @@ -364,6 +364,14 @@ tokenizer_error(Parser *p) void * _PyPegen_raise_error(Parser *p, PyObject *errtype, const char *errmsg, ...) { + if (p->fill == 0) { + va_list va; + va_start(va, errmsg); + _PyPegen_raise_error_known_location(p, errtype, 0, 0, errmsg, va); + va_end(va); + return NULL; + } + Token *t = p->known_err_token != NULL ? p->known_err_token : p->tokens[p->fill - 1]; Py_ssize_t col_offset; if (t->col_offset == -1) { -- cgit v0.12