[Python-checkins] bpo-32381: Rewrite PyErr_ProgramText() (GH-23700)

vstinner webhook-mailer at python.org
Tue Dec 8 17:51:35 EST 2020


https://github.com/python/cpython/commit/815506d852daabc40e14ff0987c1142c0205fbe7
commit: 815506d852daabc40e14ff0987c1142c0205fbe7
branch: master
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2020-12-08T23:51:26+01:00
summary:

bpo-32381: Rewrite PyErr_ProgramText() (GH-23700)

PyErr_ProgramText() now calls PyErr_ProgramTextObject().

files:
M Python/errors.c

diff --git a/Python/errors.c b/Python/errors.c
index 213108f681bb7..9bac7ba70f5d5 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -1697,13 +1697,18 @@ err_programtext(PyThreadState *tstate, FILE *fp, int lineno)
 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 *



More information about the Python-checkins mailing list