aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Symonds <dsymonds@golang.org>2014-06-04 11:21:08 +1000
committerDavid Symonds <dsymonds@golang.org>2014-06-04 11:21:08 +1000
commit6e3d786dbf90669d2c7027d723057d0d584f7d2d (patch)
tree2cfa2f3d00848237b67cfc533f9f8876e29b818a
parent764cb069db2757a1604c5865b75f4496a4f22a73 (diff)
downloadgo-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.go6
-rw-r--r--src/pkg/compress/gzip/gunzip_test.go14
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)
+ }
+}