]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
zipimport: fix "can't find module ..." error message
authorVictor Stinner <victor.stinner@haypocalc.com>
Mon, 18 Oct 2010 21:21:02 +0000 (21:21 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Mon, 18 Oct 2010 21:21:02 +0000 (21:21 +0000)
I cannot use %U: fullname is a bytes object, not an unicode object. %A format
cannot be used, it adds 'b' (bytes) prefix. So create cant_find_module()
function to decode the filename and raise the error message.

Modules/zipimport.c

index c943a41ffe6d9065acec34a8ee284ac7f29e549d..b59fd50fc6ad6d5403f70dc8a5f288fcb6b3113a 100644 (file)
@@ -399,6 +399,20 @@ zipimporter_get_filename(PyObject *obj, PyObject *args)
     return modpath;
 }
 
+static void
+cant_find_module(PyObject *bytes)
+{
+    PyObject *unicode = PyUnicode_DecodeFSDefaultAndSize(
+        PyBytes_AS_STRING(bytes), PyBytes_GET_SIZE(bytes));
+    if (unicode != NULL) {
+        PyErr_Format(ZipImportError, "can't find module %U",
+                     unicode);
+        Py_DECREF(unicode);
+    }
+    else
+        PyErr_Format(ZipImportError, "can't find module");
+}
+
 /* Return a bool signifying whether the module is a package or not. */
 static PyObject *
 zipimporter_is_package(PyObject *obj, PyObject *args)
@@ -415,8 +429,7 @@ zipimporter_is_package(PyObject *obj, PyObject *args)
     if (mi == MI_ERROR)
         goto error;
     if (mi == MI_NOT_FOUND) {
-        PyErr_Format(ZipImportError, "can't find module '%.200U'",
-                     fullname);
+        cant_find_module(fullname);
         goto error;
     }
     Py_DECREF(fullname);
@@ -511,8 +524,7 @@ zipimporter_get_source(PyObject *obj, PyObject *args)
         return NULL;
     }
     if (mi == MI_NOT_FOUND) {
-        PyErr_Format(ZipImportError, "can't find module '%.200U'",
-                     fullname);
+        cant_find_module(fullname);
         Py_DECREF(fullname);
         return NULL;
     }