For entries written with writestr ZipFile doesn't record the file type in the unix external attributes block. It should set it to "regular file" (S_IFREG). The attached sample creates a zip file. If you inspect it with zipinfo -v, you will see that the unix file type is not correct for the entry stored with writestr. [ts@roadrunner ~]$ zipinfo -v test.zip |grep "Unix file attributes" Unix file attributes (000600 octal): ?rw------- Unix file attributes (100664 octal): -rw-rw-r--
I'm not very familiar with zipfile, but my immediate reaction is, why should it? It can't know that the file is a unix file, and indeed if the program is running on windows it may not be. Perhaps instead there's something missing in the API to allow you to set the correct value when using writestr?
It does know that the entry is a regular file, and that is the bit of information that is missing in the unix external file attributes. Having said that you do have a point - perhaps it shouldn't record unix external file attributes at all, when the entry isn't picked up from the file system. What it does now is to create unix external file attributes that are invalid.