From b4c124af1e2953e010200fe50651f5ffc967a346 Mon Sep 17 00:00:00 2001 From: Chris Gillis Date: Fri, 18 Jun 2021 02:14:28 +0000 Subject: [PATCH] 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) --- src/image/gif/reader.go | 4 ++++ src/image/gif/reader_test.go | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) 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 } -- 2.50.0