Skip to content

Commit db3ba77

Browse files
authored
fix: Handle panic when unpack info is missing (#117)
1 parent fbb30a6 commit db3ba77

File tree

4 files changed

+19
-3
lines changed

4 files changed

+19
-3
lines changed

export_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package sevenzip
2+
3+
var ErrMissingUnpackInfo = errMissingUnpackInfo

reader_test.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ func TestOpenReader(t *testing.T) {
4747
tables := []struct {
4848
name, file string
4949
volumes []string
50+
err error
5051
}{
5152
{
5253
name: "no header compression",
@@ -140,6 +141,11 @@ func TestOpenReader(t *testing.T) {
140141
name: "issue 87",
141142
file: "issue87.7z",
142143
},
144+
{
145+
name: "issue 113",
146+
file: "COMPRESS-492.7z",
147+
err: sevenzip.ErrMissingUnpackInfo,
148+
},
143149
}
144150

145151
for _, table := range tables {
@@ -149,7 +155,9 @@ func TestOpenReader(t *testing.T) {
149155
t.Parallel()
150156
r, err := sevenzip.OpenReader(filepath.Join("testdata", table.file))
151157
if err != nil {
152-
t.Fatal(err)
158+
assert.ErrorIs(t, err, table.err)
159+
160+
return
153161
}
154162
defer r.Close()
155163

testdata/COMPRESS-492.7z

39 Bytes
Binary file not shown.

types.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ const (
4646
)
4747

4848
var (
49-
errIncompleteRead = errors.New("sevenzip: incomplete read")
50-
errUnexpectedID = errors.New("sevenzip: unexpected id")
49+
errIncompleteRead = errors.New("sevenzip: incomplete read")
50+
errUnexpectedID = errors.New("sevenzip: unexpected id")
51+
errMissingUnpackInfo = errors.New("sevenzip: missing unpack info")
5152
)
5253

5354
func readUint64(r io.ByteReader) (uint64, error) {
@@ -510,6 +511,10 @@ func readStreamsInfo(r util.Reader) (*streamsInfo, error) {
510511
}
511512

512513
if id == idSubStreamsInfo {
514+
if s.unpackInfo == nil {
515+
return nil, errMissingUnpackInfo
516+
}
517+
513518
if s.subStreamsInfo, err = readSubStreamsInfo(r, s.unpackInfo.folder); err != nil {
514519
return nil, err
515520
}

0 commit comments

Comments
 (0)