From: Chris Gillis Date: Fri, 18 Jun 2021 02:14:28 +0000 (+0000) Subject: image/gif: avoid decoding past the first frame in decode() X-Git-Tag: go1.20rc1~1483 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b4c124af1e2953e010200fe50651f5ffc967a346;p=gostls13.git image/gif: avoid decoding past the first frame in decode() The existing decode() method offers the ability to keep just one frame of the GIF image, however it will read and decompress all subsequent frames regardless. Fixes #41142 Change-Id: I0c3c11f9c11cd487b6c365e9a8b98e617d555db0 GitHub-Last-Rev: 03ebc8ee7bb19ee80c62d0c935b783d7bc75c2e9 GitHub-Pull-Request: golang/go#46813 Reviewed-on: https://go-review.googlesource.com/c/go/+/329329 Auto-Submit: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov TryBot-Result: Gopher Robot Reviewed-by: Dmitri Shuralyov Reviewed-by: Paul Tyng Run-TryBot: Dmitri Shuralyov Reviewed-by: Nigel Tao (INACTIVE; USE @golang.org INSTEAD) --- diff --git a/src/image/gif/reader.go b/src/image/gif/reader.go index 9e8268c86f..0867b10295 100644 --- a/src/image/gif/reader.go +++ b/src/image/gif/reader.go @@ -250,6 +250,10 @@ func (d *decoder) decode(r io.Reader, configOnly, keepAllFrames bool) error { return err } + if !keepAllFrames && len(d.image) == 1 { + return nil + } + case sTrailer: if len(d.image) == 0 { return fmt.Errorf("gif: missing image data") diff --git a/src/image/gif/reader_test.go b/src/image/gif/reader_test.go index 5eec5ecb4a..a7f943adeb 100644 --- a/src/image/gif/reader_test.go +++ b/src/image/gif/reader_test.go @@ -379,7 +379,7 @@ func TestLoopCount(t *testing.T) { func TestUnexpectedEOF(t *testing.T) { for i := len(testGIF) - 1; i >= 0; i-- { - _, err := Decode(bytes.NewReader(testGIF[:i])) + _, err := DecodeAll(bytes.NewReader(testGIF[:i])) if err == errNotEnough { continue }