]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #3080: PyImport_ImportModuleNoBlock() uses Unicode
authorVictor Stinner <victor.stinner@haypocalc.com>
Mon, 14 Mar 2011 01:57:27 +0000 (21:57 -0400)
committerVictor Stinner <victor.stinner@haypocalc.com>
Mon, 14 Mar 2011 01:57:27 +0000 (21:57 -0400)
Python/import.c

index 00a9eccaf879e586ea8a99e2647b025a3799522d..08237aff958e17a3c8f413c8ec5c2660a6a8c536 100644 (file)
@@ -2591,8 +2591,7 @@ PyImport_ImportModule(const char *name)
 PyObject *
 PyImport_ImportModuleNoBlock(const char *name)
 {
-    PyObject *result;
-    PyObject *modules;
+    PyObject *nameobj, *modules, *result;
     long me;
 
     /* Try to get the module from sys.modules[name] */
@@ -2600,14 +2599,16 @@ PyImport_ImportModuleNoBlock(const char *name)
     if (modules == NULL)
         return NULL;
 
-    result = PyDict_GetItemString(modules, name);
+    nameobj = PyUnicode_FromString(name);
+    if (nameobj == NULL)
+        return NULL;
+    result = PyDict_GetItem(modules, nameobj);
     if (result != NULL) {
+        Py_DECREF(nameobj);
         Py_INCREF(result);
         return result;
     }
-    else {
-        PyErr_Clear();
-    }
+    PyErr_Clear();
 #ifdef WITH_THREAD
     /* check the import lock
      * me might be -1 but I ignore the error here, the lock function
@@ -2615,18 +2616,20 @@ PyImport_ImportModuleNoBlock(const char *name)
     me = PyThread_get_thread_ident();
     if (import_lock_thread == -1 || import_lock_thread == me) {
         /* no thread or me is holding the lock */
-        return PyImport_ImportModule(name);
+        result = PyImport_Import(nameobj);
     }
     else {
         PyErr_Format(PyExc_ImportError,
-                     "Failed to import %.200s because the import lock"
+                     "Failed to import %U because the import lock"
                      "is held by another thread.",
-                     name);
-        return NULL;
+                     nameobj);
+        result = NULL;
     }
 #else
-    return PyImport_ImportModule(name);
+    result = PyImport_Import(nameobj);
 #endif
+    Py_DECREF(nameobj);
+    return result;
 }
 
 /* Forward declarations for helper routines */