]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-100227: cleanup initialization of global interned dict (#102682)
authorKumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
Tue, 14 Mar 2023 08:52:21 +0000 (14:22 +0530)
committerGitHub <noreply@github.com>
Tue, 14 Mar 2023 08:52:21 +0000 (14:22 +0530)
Objects/unicodeobject.c

index 2d50f9c340f2f36eb500ce3f8cd572cafaa94ebe..b9fb53147b9b511dee9021e304136dd7c7fb44bb 100644 (file)
@@ -14533,6 +14533,15 @@ _PyUnicode_InitGlobalObjects(PyInterpreterState *interp)
         return _PyStatus_OK();
     }
 
+    // Initialize the global interned dict
+    PyObject *interned = PyDict_New();
+    if (interned == NULL) {
+        PyErr_Clear();
+        return _PyStatus_ERR("failed to create interned dict");
+    }
+
+    set_interned_dict(interned);
+
     /* Intern statically allocated string identifiers and deepfreeze strings.
      * This must be done before any module initialization so that statically
      * allocated string identifiers are used instead of heap allocated strings.
@@ -14600,14 +14609,7 @@ PyUnicode_InternInPlace(PyObject **p)
     }
 
     PyObject *interned = get_interned_dict();
-    if (interned == NULL) {
-        interned = PyDict_New();
-        if (interned == NULL) {
-            PyErr_Clear(); /* Don't leave an exception */
-            return;
-        }
-        set_interned_dict(interned);
-    }
+    assert(interned != NULL);
 
     PyObject *t = PyDict_SetDefault(interned, s, s);
     if (t == NULL) {