get_code_from_data() uses the filesystem encoding to encode the module path,

instead of utf-8.
This commit is contained in:
Victor Stinner 2010-10-18 12:15:34 +00:00
parent d36c8217e1
commit 2a94f4c0ef
1 changed files with 7 additions and 8 deletions

View File

@ -1137,24 +1137,23 @@ get_code_from_data(ZipImporter *self, int ispackage, int isbytecode,
time_t mtime, PyObject *toc_entry) time_t mtime, PyObject *toc_entry)
{ {
PyObject *data, *code; PyObject *data, *code;
char *modpath; PyObject *modpath;
data = get_data(self->archive, toc_entry); data = get_data(self->archive, toc_entry);
if (data == NULL) if (data == NULL)
return NULL; return NULL;
modpath = _PyUnicode_AsString(PyTuple_GetItem(toc_entry, 0)); modpath = PyUnicode_EncodeFSDefault(PyTuple_GetItem(toc_entry, 0));
if (modpath == NULL) { if (modpath == NULL) {
Py_DECREF(data); Py_DECREF(data);
return NULL; return NULL;
} }
if (isbytecode) { if (isbytecode)
code = unmarshal_code(modpath, data, mtime); code = unmarshal_code(PyBytes_AS_STRING(modpath), data, mtime);
} else
else { code = compile_source(PyBytes_AS_STRING(modpath), data);
code = compile_source(modpath, data); Py_DECREF(modpath);
}
Py_DECREF(data); Py_DECREF(data);
return code; return code;
} }