classification
Title: zipfile.py:1047: DeprecationWarning: 'H' format requires 0 <= number <= 65535
Type: behavior Stage:
Components: Library (Lib) Versions: Python 2.7
process
Status: closed Resolution: duplicate
Dependencies: Superseder: zipfile: Bad error message when zipping a file with timestamp before 1980
View: 6090
Assigned To: Nosy List: alanmcintyre, amaury.forgeotdarc, gnezdo, petri.lehtinen
Priority: normal Keywords:

Created on 2011-05-27 18:44 by gnezdo, last changed 2011-07-06 20:32 by petri.lehtinen. This issue is now closed.

Messages (3)
msg137093 - (view) Author: Greg Steuck (gnezdo) Date: 2011-05-27 18:44
zipfile.py displays warning when trying to write files timestamped before 1980.

% cat /tmp/a.py
import zipfile
import os

z = zipfile.ZipFile('/tmp/a.zip', 'w')
open("/tmp/a", "w")
os.utime("/tmp/a", (0,0))
z.write("/tmp/a", "a")
% python -V
Python 2.6.5
% uname -mo
x86_64 GNU/Linux
% uname -mor
2.6.32-gg426-generic x86_64 GNU/Linux
% python /tmp/a.py
/usr/lib/python2.6/zipfile.py:1047: DeprecationWarning: struct integer overflow masking is deprecated
 self.fp.write(zinfo.FileHeader())
/usr/lib/python2.6/zipfile.py:1047: DeprecationWarning: 'H' format requires 0 <= number <= 65535
 self.fp.write(zinfo.FileHeader())
/usr/lib/python2.6/zipfile.py:1123: DeprecationWarning: struct integer overflow masking is deprecated
 self.close()
/usr/lib/python2.6/zipfile.py:1123: DeprecationWarning: 'H' format requires 0 <= number <= 65535
 self.close()

Similar to, but different from http://bugs.python.org/issue1526.

Amaury Forgeot d'Arc says:

The ZIP file format is unable to store dates before 1980.  With version 3.2, your script even raises an exception.  Please file this in a different issue.
msg137249 - (view) Author: Petri Lehtinen (petri.lehtinen) * (Python committer) Date: 2011-05-30 09:02
On 2.7, your example raises an error:

Traceback (most recent call last):
  File "a.py", line 7, in <module>
    z.write("a", "a")
  File "/home/petri/tmp/cpython/cpython/Lib/zipfile.py", line 1071, in write
    self.fp.write(zinfo.FileHeader())
  File "/home/petri/tmp/cpython/cpython/Lib/zipfile.py", line 348, in FileHeader
    len(filename), len(extra))
struct.error: ushort format requires 0 <= number <= USHRT_MAX

I doubt this can be fixed in 2.6 anymore, as it's in security fix only -mode.

What comes to the error on 2.7, it could be better. If zip files simply don't support dates before 1980, an error describing this could be raised. Another possibility would be to clamp too old dates to 1980.
msg139951 - (view) Author: Petri Lehtinen (petri.lehtinen) * (Python committer) Date: 2011-07-06 20:32
Setting as duplicate of #6090.
History
Date User Action Args
2011-07-06 20:32:52petri.lehtinensetstatus: open -> closed
resolution: duplicate
superseder: zipfile: Bad error message when zipping a file with timestamp before 1980
messages: + msg139951
2011-06-07 11:44:00pitrousetnosy: + amaury.forgeotdarc
2011-06-03 20:57:48terry.reedysetnosy: + alanmcintyre

versions: + Python 2.7, - Python 2.6
2011-05-30 09:02:32petri.lehtinensetnosy: + petri.lehtinen
messages: + msg137249
2011-05-27 18:44:26gnezdocreate