diff --git a/export_test.go b/export_test.go new file mode 100644 index 0000000..7a0bdc8 --- /dev/null +++ b/export_test.go @@ -0,0 +1,3 @@ +package sevenzip + +var ErrMissingUnpackInfo = errMissingUnpackInfo diff --git a/reader_test.go b/reader_test.go index ce6e380..241d32c 100644 --- a/reader_test.go +++ b/reader_test.go @@ -47,6 +47,7 @@ func TestOpenReader(t *testing.T) { tables := []struct { name, file string volumes []string + err error }{ { name: "no header compression", @@ -140,6 +141,11 @@ func TestOpenReader(t *testing.T) { name: "issue 87", file: "issue87.7z", }, + { + name: "issue 113", + file: "COMPRESS-492.7z", + err: sevenzip.ErrMissingUnpackInfo, + }, } for _, table := range tables { @@ -149,7 +155,9 @@ func TestOpenReader(t *testing.T) { t.Parallel() r, err := sevenzip.OpenReader(filepath.Join("testdata", table.file)) if err != nil { - t.Fatal(err) + assert.ErrorIs(t, err, table.err) + + return } defer r.Close() diff --git a/testdata/COMPRESS-492.7z b/testdata/COMPRESS-492.7z new file mode 100644 index 0000000..53edfbc Binary files /dev/null and b/testdata/COMPRESS-492.7z differ diff --git a/types.go b/types.go index 12e0df8..51cb7d2 100644 --- a/types.go +++ b/types.go @@ -46,8 +46,9 @@ const ( ) var ( - errIncompleteRead = errors.New("sevenzip: incomplete read") - errUnexpectedID = errors.New("sevenzip: unexpected id") + errIncompleteRead = errors.New("sevenzip: incomplete read") + errUnexpectedID = errors.New("sevenzip: unexpected id") + errMissingUnpackInfo = errors.New("sevenzip: missing unpack info") ) func readUint64(r io.ByteReader) (uint64, error) { @@ -510,6 +511,10 @@ func readStreamsInfo(r util.Reader) (*streamsInfo, error) { } if id == idSubStreamsInfo { + if s.unpackInfo == nil { + return nil, errMissingUnpackInfo + } + if s.subStreamsInfo, err = readSubStreamsInfo(r, s.unpackInfo.folder); err != nil { return nil, err }