summaryrefslogtreecommitdiff
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
commit5c240ac0ac3d93e2771b91673b4e6f2e140a8f41 (patch)
tree2fd5833ef150d788d878bd3234d50e553fe3f13b
parentdc51ed17615d1a646908ed6617afc8f397b2421c (diff)
downloadgo-5c240ac0ac3d93e2771b91673b4e6f2e140a8f41.tar.gz
[release-branch.go1.3] compress/gzip: allow Reset on Reader without NewReader
??? CL 103020044 / 318b56ffe04b compress/gzip: allow Reset on Reader without NewReader Fixes issue 8126. LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews https://codereview.appspot.com/103020044 ??? TBR=rsc R=rsc CC=golang-codereviews https://codereview.appspot.com/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 d18269cfd..4f398b194 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 1d5d8d9cc..2471038f5 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)
+ }
+}