]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-32381: Rewrite PyErr_ProgramText() (GH-23700)
authorVictor Stinner <vstinner@python.org>
Tue, 8 Dec 2020 22:51:26 +0000 (23:51 +0100)
committerGitHub <noreply@github.com>
Tue, 8 Dec 2020 22:51:26 +0000 (23:51 +0100)
PyErr_ProgramText() now calls PyErr_ProgramTextObject().

Python/errors.c

index 213108f681bb7995193eeca2450708a858d407af..9bac7ba70f5d5e94858481edd065e2a8f1673dd8 100644 (file)
@@ -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 *