From 8c8ed0a799b41636327bc2950ed8c00d741be97d Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 18 Oct 2010 21:21:02 +0000 Subject: 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. --- Modules/zipimport.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Modules/zipimport.c b/Modules/zipimport.c index c943a41..b59fd50 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -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; } -- cgit v0.12