From 03ebc8ee7bb19ee80c62d0c935b783d7bc75c2e9 Mon Sep 17 00:00:00 2001 From: Chris Gillis Date: Thu, 17 Jun 2021 21:53:31 -0400 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 --- 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 e580ab049e..468ec822d9 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 }