Skip to content

Commit 7733a7c

Browse files
ebfersc
authored andcommitted
archive/tar: add missing error checks
Check for errors when reading the headers following the pax headers. Fixes #11169. Change-Id: Ifec4a949ec8df8b49fa7cb7a67eb826fe2282ad8 Reviewed-on: https://go-review.googlesource.com/11031 Reviewed-by: Russ Cox <[email protected]>
1 parent 1b26946 commit 7733a7c

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

src/archive/tar/reader.go

+6
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,13 @@ func (tr *Reader) Next() (*Header, error) {
110110
// We actually read the whole file,
111111
// but this skips alignment padding
112112
tr.skipUnread()
113+
if tr.err != nil {
114+
return nil, tr.err
115+
}
113116
hdr = tr.readHeader()
117+
if hdr == nil {
118+
return nil, tr.err
119+
}
114120
mergePAX(hdr, headers)
115121

116122
// Check for a PAX format sparse file

src/archive/tar/reader_test.go

+15
Original file line numberDiff line numberDiff line change
@@ -781,3 +781,18 @@ func TestIssue10968(t *testing.T) {
781781
t.Fatalf("expected %q, got %q", io.ErrUnexpectedEOF, err)
782782
}
783783
}
784+
785+
// Do not panic if there are errors in header blocks after the pax header.
786+
// Issue 11169
787+
func TestIssue11169(t *testing.T) {
788+
f, err := os.Open("testdata/issue11169.tar")
789+
if err != nil {
790+
t.Fatal(err)
791+
}
792+
defer f.Close()
793+
r := NewReader(f)
794+
_, err = r.Next()
795+
if err == nil {
796+
t.Fatal("Unexpected success")
797+
}
798+
}
602 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)