[Python-checkins] bpo-42923: Fix _Py_DumpExtensionModules() for NULL sysdict (GH-25262)

vstinner webhook-mailer at python.org
Wed Apr 7 17:13:03 EDT 2021


https://github.com/python/cpython/commit/3d55aa9e7365af76e40680271328deece27a7339
commit: 3d55aa9e7365af76e40680271328deece27a7339
branch: master
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2021-04-07T23:12:45+02:00
summary:

bpo-42923: Fix _Py_DumpExtensionModules() for NULL sysdict (GH-25262)

Fix Py_FatalError() is called before interp->sysdict is set.

files:
M Python/pylifecycle.c

diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 64723ce82d76c..0ad1796e3cbc6 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -2551,12 +2551,14 @@ _Py_DumpExtensionModules(int fd, PyInterpreterState *interp)
     // memory cannot be allocated on the heap in a signal handler.
     // Iterate on the dict instead.
     PyObject *stdlib_module_names = NULL;
-    pos = 0;
-    while (PyDict_Next(interp->sysdict, &pos, &key, &value)) {
-        if (PyUnicode_Check(key)
-           && PyUnicode_CompareWithASCIIString(key, "stdlib_module_names") == 0) {
-            stdlib_module_names = value;
-            break;
+    if (interp->sysdict != NULL) {
+        pos = 0;
+        while (PyDict_Next(interp->sysdict, &pos, &key, &value)) {
+            if (PyUnicode_Check(key)
+               && PyUnicode_CompareWithASCIIString(key, "stdlib_module_names") == 0) {
+                stdlib_module_names = value;
+                break;
+            }
         }
     }
     // If we failed to get sys.stdlib_module_names or it's not a frozenset,



More information about the Python-checkins mailing list