[issue19081] zipimport behaves badly when the zip file changes while the process is running

Gregory P. Smith report at bugs.python.org
Tue Sep 24 06:00:03 CEST 2013


New submission from Gregory P. Smith:

If you are

1) using zipimport
2) zipimport.c has cached the zip file's central index during an import.
3) the .zip file is modified or replaced while the process is running
4) you try to import something new from that .zip file.

you're gonna have a bad time... Typically a ZipImportError or some other form of ImportError.

What happen's is that Modules/zipimport.c is caching the end-of-zipfile central index for the .zip file and reusing that data on subsequent imports from that .zip without either (a) keeping the file handle open or (b) confirming that the .zip file has not changed.

I doubt many users are running into this.  But one situation where you do is when you zip up the Python standard library for your installed python and a long running process encounters data using a different encoding which triggers an import of an encodings.foo module after another process has come along and upgraded the standard library .zip file as part of updating your python installation...

I've got a fix in the works.  Test attached.

For the fix I am going with option (b) to reconfirm the validity of the .zip file any time something is imported from it rather than option (a) as leaving a new file handle open for the duration of the process, while the _correct ideal design_ seems intrusive for stable bug fix release.

I have only confirmed the bug on Python 2.7 & 3.3; i'll test default (3.4) after working on those two.

----------
assignee: gregory.p.smith
files: zipimport_modify_zip_test.patch
keywords: patch
messages: 198351
nosy: gregory.p.smith
priority: normal
severity: normal
status: open
title: zipimport behaves badly when the zip file changes while the process is running
type: behavior
versions: Python 2.7, Python 3.3, Python 3.4
Added file: http://bugs.python.org/file31854/zipimport_modify_zip_test.patch

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue19081>
_______________________________________


More information about the Python-bugs-list mailing list