summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregory P. Smith <greg@krypto.org>2014-01-08 02:39:48 (GMT)
committerGregory P. Smith <greg@krypto.org>2014-01-08 02:39:48 (GMT)
commit6de726087745468e40c94df71f2b78f04a1bd184 (patch)
treefbfac857ebbba0e4cae45feec918c206393db930
parent9be238d313190d6dcb9b273ee20ce911c4e8ac85 (diff)
downloadcpython-6de726087745468e40c94df71f2b78f04a1bd184.zip
cpython-6de726087745468e40c94df71f2b78f04a1bd184.tar.gz
cpython-6de726087745468e40c94df71f2b78f04a1bd184.tar.bz2
cleanup for the issue 19081 fix - pull the file open and close outside of the
zip_searchorder scanning loop in get_module_code(). [already done in 3.3 and 3.4]
-rw-r--r--Modules/zipimport.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/Modules/zipimport.c b/Modules/zipimport.c
index f458ec6..ff8dedf 100644
--- a/Modules/zipimport.c
+++ b/Modules/zipimport.c
@@ -1292,6 +1292,8 @@ get_module_code(ZipImporter *self, char *fullname,
char *subname, path[MAXPATHLEN + 1];
int len;
struct st_zip_searchorder *zso;
+ FILE *fp;
+ char *archive;
subname = get_subname(fullname);
@@ -1299,10 +1301,12 @@ get_module_code(ZipImporter *self, char *fullname,
if (len < 0)
return NULL;
+ fp = safely_reopen_archive(self, &archive);
+ if (fp == NULL)
+ return NULL;
+
for (zso = zip_searchorder; *zso->suffix; zso++) {
PyObject *code = NULL;
- FILE *fp;
- char *archive;
strcpy(path + len, zso->suffix);
if (Py_VerboseFlag > 1)
@@ -1310,10 +1314,6 @@ get_module_code(ZipImporter *self, char *fullname,
PyString_AsString(self->archive),
SEP, path);
- fp = safely_reopen_archive(self, &archive);
- if (fp == NULL)
- return NULL;
-
toc_entry = PyDict_GetItemString(self->files, path);
if (toc_entry != NULL) {
time_t mtime = 0;
@@ -1327,7 +1327,6 @@ get_module_code(ZipImporter *self, char *fullname,
code = get_code_from_data(archive, fp, ispackage,
isbytecode, mtime,
toc_entry);
- fclose(fp);
if (code == Py_None) {
/* bad magic number or non-matching mtime
in byte code, try next */
@@ -1337,11 +1336,12 @@ get_module_code(ZipImporter *self, char *fullname,
if (code != NULL && p_modpath != NULL)
*p_modpath = PyString_AsString(
PyTuple_GetItem(toc_entry, 0));
+ fclose(fp);
return code;
}
- fclose(fp);
}
PyErr_Format(ZipImportError, "can't find module '%.200s'", fullname);
+ fclose(fp);
return NULL;
}