classification
Title: ZipFile unix external attributes incorrect for entry written with writestr
Type: behavior Stage:
Components: Library (Lib) Versions:
process
Status: closed Resolution: out of date
Dependencies: Superseder: zipfile.writestr doesn't set external attributes, so files are extracted mode 000 on Unix
View: 3394
Assigned To: Nosy List: Thomas.Sondergaard, amaury.forgeotdarc, r.david.murray
Priority: normal Keywords:

Created on 2010-09-11 12:11 by Thomas.Sondergaard, last changed 2010-09-14 11:18 by amaury.forgeotdarc. This issue is now closed.

Files
File name Uploaded Description Edit
test.py Thomas.Sondergaard, 2010-09-11 12:11
Messages (4)
msg116093 - (view) Author: Thomas Sondergaard (Thomas.Sondergaard) Date: 2010-09-11 12:11
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--
msg116098 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2010-09-11 14:21
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?
msg116103 - (view) Author: Thomas Sondergaard (Thomas.Sondergaard) Date: 2010-09-11 15:32
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.
msg116383 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2010-09-14 11:18
This has already been corrected by issue3394, and is at least present in python 2.6.
History
Date User Action Args
2010-09-14 11:18:39amaury.forgeotdarcsetstatus: open -> closed

nosy: + amaury.forgeotdarc
messages: + msg116383

superseder: zipfile.writestr doesn't set external attributes, so files are extracted mode 000 on Unix
resolution: out of date
2010-09-11 15:32:50Thomas.Sondergaardsetmessages: + msg116103
2010-09-11 14:21:42r.david.murraysetnosy: + r.david.murray
messages: + msg116098
2010-09-11 12:11:59Thomas.Sondergaardcreate