Skip to content

Commit 43a498d

Browse files
committed
archive/zip: reuse body offset read
Reuse previous body offset read in file data descriptor.
1 parent d9d4165 commit 43a498d

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/archive/zip/reader.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,12 @@ func (f *File) DataOffset() (offset int64, err error) {
176176
func (f *File) Open() (io.ReadCloser, error) {
177177
bodyOffset, err := f.findBodyOffset()
178178
if err != nil {
179+
if f.hasDataDescriptor() {
180+
f.descErr = err
181+
}
179182
return nil, err
180183
}
181-
f.readDataDescriptor()
184+
f.readDataDescriptor(bodyOffset)
182185
size := int64(f.CompressedSize64)
183186
r := io.NewSectionReader(f.zipr, f.headerOffset+bodyOffset, size)
184187
dcomp := f.zip.decompressor(f.Method)
@@ -199,24 +202,21 @@ func (f *File) Open() (io.ReadCloser, error) {
199202
func (f *File) OpenRaw() (io.Reader, error) {
200203
bodyOffset, err := f.findBodyOffset()
201204
if err != nil {
205+
if f.hasDataDescriptor() {
206+
f.descErr = err
207+
}
202208
return nil, err
203209
}
204-
f.readDataDescriptor()
210+
f.readDataDescriptor(bodyOffset)
205211
r := io.NewSectionReader(f.zipr, f.headerOffset+bodyOffset, int64(f.CompressedSize64))
206212
return r, nil
207213
}
208214

209-
func (f *File) readDataDescriptor() {
215+
func (f *File) readDataDescriptor(bodyOffset int64) {
210216
if !f.hasDataDescriptor() {
211217
return
212218
}
213219

214-
bodyOffset, err := f.findBodyOffset()
215-
if err != nil {
216-
f.descErr = err
217-
return
218-
}
219-
220220
// In section 4.3.9.2 of the spec: "However ZIP64 format MAY be used
221221
// regardless of the size of a file. When extracting, if the zip64
222222
// extended information extra field is present for the file the

0 commit comments

Comments
 (0)