diff -r 29148c027986 Lib/test/test_zipimport.py --- a/Lib/test/test_zipimport.py Sat Jun 02 19:40:20 2012 +0200 +++ b/Lib/test/test_zipimport.py Mon Jun 04 23:33:05 2012 +0200 @@ -196,6 +196,7 @@ for name, (mtime, data) in files.items(): zinfo = ZipInfo(name, time.localtime(mtime)) zinfo.compress_type = self.compression + zinfo.comment = b"spam" z.writestr(zinfo, data) z.close() @@ -245,6 +246,7 @@ for name, (mtime, data) in files.items(): zinfo = ZipInfo(name, time.localtime(mtime)) zinfo.compress_type = self.compression + zinfo.comment = b"eggs" z.writestr(zinfo, data) z.close() diff -r 29148c027986 Modules/zipimport.c --- a/Modules/zipimport.c Sat Jun 02 19:40:20 2012 +0200 +++ b/Modules/zipimport.c Mon Jun 04 23:33:05 2012 +0200 @@ -857,7 +857,7 @@ Py_ssize_t file_offset, header_position, header_offset; long l, count; Py_ssize_t i; - char name[MAXPATHLEN + 5]; + char name[MAXPATHLEN + 5], dummy[8]; PyObject *nameobj = NULL; char *p, endof_central_dir[22]; Py_ssize_t arc_offset; /* Absolute offset to start of the zip-archive. */ @@ -896,15 +896,16 @@ /* Start of Central Directory */ count = 0; + fseek(fp, header_offset, 0); for (;;) { PyObject *t; int err; - fseek(fp, header_offset, 0); /* Start of file header */ + /* Start of file header */ l = PyMarshal_ReadLongFromFile(fp); if (l != 0x02014B50) break; /* Bad: Central Dir File Header */ - fseek(fp, header_offset + 8, 0); + fread(dummy, 4, 1, fp); /* dummy read for unused fields */ flags = (unsigned short)PyMarshal_ReadShortFromFile(fp); compress = PyMarshal_ReadShortFromFile(fp); time = PyMarshal_ReadShortFromFile(fp); @@ -913,10 +914,10 @@ data_size = PyMarshal_ReadLongFromFile(fp); file_size = PyMarshal_ReadLongFromFile(fp); name_size = PyMarshal_ReadShortFromFile(fp); - header_size = 46 + name_size + + header_size = name_size + PyMarshal_ReadShortFromFile(fp) + PyMarshal_ReadShortFromFile(fp); - fseek(fp, header_offset + 42, 0); + fread(dummy, 8, 1, fp); /* dummy read for unused fields */ file_offset = PyMarshal_ReadLongFromFile(fp) + arc_offset; if (name_size > MAXPATHLEN) name_size = MAXPATHLEN; @@ -929,7 +930,8 @@ p++; } *p = 0; /* Add terminating null byte */ - header_offset += header_size; + for (; i < header_size; i++) + (void)getc(fp); bootstrap = 0; if (flags & 0x0800)