From: Guillaume J. Charmes Date: Thu, 15 May 2014 22:18:05 +0000 (-0700) Subject: archive/tar: Do not panic on Read if uninitialized X-Git-Tag: go1.3beta2~48 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6d63d4f3be32bfd3dbc57fe6872d315369c59c6d;p=gostls13.git archive/tar: Do not panic on Read if uninitialized Calling tar.Reader.Read() used to work fine, but without this patch it panics. Simply return EOF to indicate the tar.Reader.Next() needs to be called. LGTM=iant, bradfitz R=golang-codereviews, bradfitz, iant, mikioh.mikioh, dominik.honnef CC=golang-codereviews https://golang.org/cl/94530043 --- diff --git a/src/pkg/archive/tar/reader.go b/src/pkg/archive/tar/reader.go index e6ac538aad..920a9b08f9 100644 --- a/src/pkg/archive/tar/reader.go +++ b/src/pkg/archive/tar/reader.go @@ -724,6 +724,9 @@ func (tr *Reader) numBytes() int64 { // It returns 0, io.EOF when it reaches the end of that entry, // until Next is called to advance to the next entry. func (tr *Reader) Read(b []byte) (n int, err error) { + if tr.curr == nil { + return 0, io.EOF + } n, err = tr.curr.Read(b) if err != nil && err != io.EOF { tr.err = err diff --git a/src/pkg/archive/tar/reader_test.go b/src/pkg/archive/tar/reader_test.go index ed058978cc..9601ffe459 100644 --- a/src/pkg/archive/tar/reader_test.go +++ b/src/pkg/archive/tar/reader_test.go @@ -725,3 +725,19 @@ func TestReadGNUSparseMap1x0(t *testing.T) { t.Errorf("Incorrect sparse map: got %v, wanted %v", sp, expected) } } + +func TestUninitializedRead(t *testing.T) { + test := gnuTarTest + f, err := os.Open(test.file) + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + defer f.Close() + + tr := NewReader(f) + _, err = tr.Read([]byte{}) + if err == nil || err != io.EOF { + t.Errorf("Unexpected error: %v, wanted %v", err, io.EOF) + } + +}