From: Michael Gehring Date: Sat, 13 Jun 2015 08:53:06 +0000 (+0200) Subject: archive/tar: add missing error checks X-Git-Tag: go1.5beta1~202 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7733a7cad81d1e356a11a8e83221a32e5d622869;p=gostls13.git 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 --- diff --git a/src/archive/tar/reader.go b/src/archive/tar/reader.go index 8662e5643b..67daca27a9 100644 --- a/src/archive/tar/reader.go +++ b/src/archive/tar/reader.go @@ -110,7 +110,13 @@ func (tr *Reader) Next() (*Header, error) { // We actually read the whole file, // but this skips alignment padding tr.skipUnread() + if tr.err != nil { + return nil, tr.err + } hdr = tr.readHeader() + if hdr == nil { + return nil, tr.err + } mergePAX(hdr, headers) // Check for a PAX format sparse file diff --git a/src/archive/tar/reader_test.go b/src/archive/tar/reader_test.go index 311db77641..da01f26591 100644 --- a/src/archive/tar/reader_test.go +++ b/src/archive/tar/reader_test.go @@ -781,3 +781,18 @@ func TestIssue10968(t *testing.T) { t.Fatalf("expected %q, got %q", io.ErrUnexpectedEOF, err) } } + +// Do not panic if there are errors in header blocks after the pax header. +// Issue 11169 +func TestIssue11169(t *testing.T) { + f, err := os.Open("testdata/issue11169.tar") + if err != nil { + t.Fatal(err) + } + defer f.Close() + r := NewReader(f) + _, err = r.Next() + if err == nil { + t.Fatal("Unexpected success") + } +} diff --git a/src/archive/tar/testdata/issue11169.tar b/src/archive/tar/testdata/issue11169.tar new file mode 100644 index 0000000000..4d71fa1526 Binary files /dev/null and b/src/archive/tar/testdata/issue11169.tar differ