diff options
author | David Symonds <dsymonds@golang.org> | 2014-06-04 11:21:08 +1000 |
---|---|---|
committer | David Symonds <dsymonds@golang.org> | 2014-06-04 11:21:08 +1000 |
commit | 6e3d786dbf90669d2c7027d723057d0d584f7d2d (patch) | |
tree | 2cfa2f3d00848237b67cfc533f9f8876e29b818a | |
parent | 764cb069db2757a1604c5865b75f4496a4f22a73 (diff) | |
download | go-6e3d786dbf90669d2c7027d723057d0d584f7d2d.tar.gz go-6e3d786dbf90669d2c7027d723057d0d584f7d2d.zip |
[release-branch.go1.3] compress/gzip: allow Reset on Reader without NewReader
««« CL 103020044 / 318b56ffe04b
compress/gzip: allow Reset on Reader without NewReader
Fixes #8126.
LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/103020044
»»»
TBR=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/105820043
-rw-r--r-- | src/pkg/compress/gzip/gunzip.go | 6 | ||||
-rw-r--r-- | src/pkg/compress/gzip/gunzip_test.go | 14 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/pkg/compress/gzip/gunzip.go b/src/pkg/compress/gzip/gunzip.go index d18269cfd1..4f398b194a 100644 --- a/src/pkg/compress/gzip/gunzip.go +++ b/src/pkg/compress/gzip/gunzip.go @@ -94,7 +94,11 @@ func NewReader(r io.Reader) (*Reader, error) { // This permits reusing a Reader rather than allocating a new one. func (z *Reader) Reset(r io.Reader) error { z.r = makeReader(r) - z.digest.Reset() + if z.digest == nil { + z.digest = crc32.NewIEEE() + } else { + z.digest.Reset() + } z.size = 0 z.err = nil return z.readHeader(true) diff --git a/src/pkg/compress/gzip/gunzip_test.go b/src/pkg/compress/gzip/gunzip_test.go index 1d5d8d9cc5..2471038f53 100644 --- a/src/pkg/compress/gzip/gunzip_test.go +++ b/src/pkg/compress/gzip/gunzip_test.go @@ -353,3 +353,17 @@ func TestIssue6550(t *testing.T) { // ok } } + +func TestInitialReset(t *testing.T) { + var r Reader + if err := r.Reset(bytes.NewReader(gunzipTests[1].gzip)); err != nil { + t.Error(err) + } + var buf bytes.Buffer + if _, err := io.Copy(&buf, &r); err != nil { + t.Error(err) + } + if s := buf.String(); s != gunzipTests[1].raw { + t.Errorf("got %q want %q", s, gunzipTests[1].raw) + } +} |