aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Tsai <joetsai@digital-static.net>2016-03-28 02:29:18 -0700
committerJoe Tsai <thebrokentoaster@gmail.com>2016-05-09 19:19:24 +0000
commit7ba54d45732219af86bde9a5b73c145db82b70c6 (patch)
tree56d93ba8048742f4b3b34bea965327c5e910f26a
parent5934523e75e2aa3725c4e709be56d9e84c472bfe (diff)
downloadgo-7ba54d45732219af86bde9a5b73c145db82b70c6.tar.gz
go-7ba54d45732219af86bde9a5b73c145db82b70c6.zip
compress: update documentation regarding footer verification
Address two documentation issues: 1) Document that the GZIP and ZLIB footer is only verified when the reader has been fully consumed. 2) The zlib reader is guaranteed to not read past the EOF if the input io.Reader is also a io.ByteReader. This functionality was documented in the flate and gzip packages but not on zlib. Fixes #14867 Change-Id: I43d46b93e38f98a04901dc7d4f18ed2f9e09f6fb Reviewed-on: https://go-review.googlesource.com/21218 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r--src/compress/gzip/gunzip.go2
-rw-r--r--src/compress/zlib/reader.go5
2 files changed, 6 insertions, 1 deletions
diff --git a/src/compress/gzip/gunzip.go b/src/compress/gzip/gunzip.go
index 926bae88c7..7e640692f3 100644
--- a/src/compress/gzip/gunzip.go
+++ b/src/compress/gzip/gunzip.go
@@ -282,4 +282,6 @@ func (z *Reader) Read(p []byte) (n int, err error) {
}
// Close closes the Reader. It does not close the underlying io.Reader.
+// In order for the GZIP checksum to be verified, the reader must be
+// fully consumed until the io.EOF.
func (z *Reader) Close() error { return z.decompressor.Close() }
diff --git a/src/compress/zlib/reader.go b/src/compress/zlib/reader.go
index 30535fd980..2efa193035 100644
--- a/src/compress/zlib/reader.go
+++ b/src/compress/zlib/reader.go
@@ -62,7 +62,8 @@ type Resetter interface {
// NewReader creates a new ReadCloser.
// Reads from the returned ReadCloser read and decompress data from r.
-// The implementation buffers input and may read more data than necessary from r.
+// If r does not implement io.ByteReader, the decompressor may read more
+// data than necessary from r.
// It is the caller's responsibility to call Close on the ReadCloser when done.
//
// The ReadCloser returned by NewReader also implements Resetter.
@@ -115,6 +116,8 @@ func (z *reader) Read(p []byte) (int, error) {
}
// Calling Close does not close the wrapped io.Reader originally passed to NewReader.
+// In order for the ZLIB checksum to be verified, the reader must be
+// fully consumed until the io.EOF.
func (z *reader) Close() error {
if z.err != nil && z.err != io.EOF {
return z.err