]> Cypherpunks repositories - gostls13.git/commitdiff
archive/tar: add missing error checks
authorMichael Gehring <mg@ebfe.org>
Sat, 13 Jun 2015 08:53:06 +0000 (10:53 +0200)
committerRuss Cox <rsc@golang.org>
Thu, 18 Jun 2015 16:02:34 +0000 (16:02 +0000)
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 <rsc@golang.org>
src/archive/tar/reader.go
src/archive/tar/reader_test.go
src/archive/tar/testdata/issue11169.tar [new file with mode: 0644]

index 8662e5643b47b9f19ed2790079e5ac30e867ec97..67daca27a95b4aa9d4968c66bad117165d6e278b 100644 (file)
@@ -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
index 311db7764128fb28dd5ac9bfd38f9b0098d790bd..da01f265911806985c60c2be78a5fa67301fe875 100644 (file)
@@ -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 (file)
index 0000000..4d71fa1
Binary files /dev/null and b/src/archive/tar/testdata/issue11169.tar differ