Commit d7be6346 authored by Victor Stinner's avatar Victor Stinner

zipimport: fix "can't find module ..." error message

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.
parent 5d1e6e0e
......@@ -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;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment