@@ -176,9 +176,12 @@ func (f *File) DataOffset() (offset int64, err error) {
176
176
func (f * File ) Open () (io.ReadCloser , error ) {
177
177
bodyOffset , err := f .findBodyOffset ()
178
178
if err != nil {
179
+ if f .hasDataDescriptor () {
180
+ f .descErr = err
181
+ }
179
182
return nil , err
180
183
}
181
- f .readDataDescriptor ()
184
+ f .readDataDescriptor (bodyOffset )
182
185
size := int64 (f .CompressedSize64 )
183
186
r := io .NewSectionReader (f .zipr , f .headerOffset + bodyOffset , size )
184
187
dcomp := f .zip .decompressor (f .Method )
@@ -199,24 +202,21 @@ func (f *File) Open() (io.ReadCloser, error) {
199
202
func (f * File ) OpenRaw () (io.Reader , error ) {
200
203
bodyOffset , err := f .findBodyOffset ()
201
204
if err != nil {
205
+ if f .hasDataDescriptor () {
206
+ f .descErr = err
207
+ }
202
208
return nil , err
203
209
}
204
- f .readDataDescriptor ()
210
+ f .readDataDescriptor (bodyOffset )
205
211
r := io .NewSectionReader (f .zipr , f .headerOffset + bodyOffset , int64 (f .CompressedSize64 ))
206
212
return r , nil
207
213
}
208
214
209
- func (f * File ) readDataDescriptor () {
215
+ func (f * File ) readDataDescriptor (bodyOffset int64 ) {
210
216
if ! f .hasDataDescriptor () {
211
217
return
212
218
}
213
219
214
- bodyOffset , err := f .findBodyOffset ()
215
- if err != nil {
216
- f .descErr = err
217
- return
218
- }
219
-
220
220
// In section 4.3.9.2 of the spec: "However ZIP64 format MAY be used
221
221
// regardless of the size of a file. When extracting, if the zip64
222
222
// extended information extra field is present for the file the
0 commit comments