From 6de726087745468e40c94df71f2b78f04a1bd184 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Tue, 7 Jan 2014 18:39:48 -0800 Subject: [PATCH] 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] --- Modules/zipimport.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Modules/zipimport.c b/Modules/zipimport.c index f458ec68413..ff8dedf7798 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; }