From 815506d852daabc40e14ff0987c1142c0205fbe7 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 8 Dec 2020 23:51:26 +0100 Subject: [PATCH] bpo-32381: Rewrite PyErr_ProgramText() (GH-23700) PyErr_ProgramText() now calls PyErr_ProgramTextObject(). --- Python/errors.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Python/errors.c b/Python/errors.c index 213108f681b..9bac7ba70f5 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -1697,13 +1697,18 @@ after_loop: PyObject * PyErr_ProgramText(const char *filename, int lineno) { - FILE *fp; - if (filename == NULL || *filename == '\0' || lineno <= 0) { + if (filename == NULL) { return NULL; } - PyThreadState *tstate = _PyThreadState_GET(); - fp = _Py_fopen(filename, "r" PY_STDIOTEXTMODE); - return err_programtext(tstate, fp, lineno); + + PyObject *filename_obj = PyUnicode_DecodeFSDefault(filename); + if (filename_obj == NULL) { + PyErr_Clear(); + return NULL; + } + PyObject *res = PyErr_ProgramTextObject(filename_obj, lineno); + Py_DECREF(filename_obj); + return res; } PyObject *