for {
f := &File{zip: z, zipr: r}
err = readDirectoryHeader(f, buf)
+
+ // For compatibility with other zip programs,
+ // if we have a non-zero base offset and can't read
+ // the first directory header, try again with a zero
+ // base offset.
+ if err == ErrFormat && z.baseOffset != 0 && len(z.File) == 0 {
+ z.baseOffset = 0
+ if _, err = rs.Seek(int64(end.directoryOffset), io.SeekStart); err != nil {
+ return err
+ }
+ buf = bufio.NewReader(rs)
+ continue
+ }
+
if err == ErrFormat || err == io.ErrUnexpectedEOF {
break
}
},
},
},
+ {
+ Name: "test-baddirsz.zip",
+ Comment: "This is a zipfile comment.",
+ File: []ZipTestFile{
+ {
+ Name: "test.txt",
+ Content: []byte("This is a test text file.\n"),
+ Modified: time.Date(2010, 9, 5, 12, 12, 1, 0, timeZone(+10*time.Hour)),
+ Mode: 0644,
+ },
+ {
+ Name: "gophercolor16x16.png",
+ File: "gophercolor16x16.png",
+ Modified: time.Date(2010, 9, 5, 15, 52, 58, 0, timeZone(+10*time.Hour)),
+ Mode: 0644,
+ },
+ },
+ },
{
Name: "r.zip",
Source: returnRecursiveZip,