From 29c3373823a5f84e779c7365133c437fe3532137 Mon Sep 17 00:00:00 2001 From: Eric Soroos Date: Wed, 25 Oct 2017 13:42:51 +0000 Subject: [PATCH 1/2] fix for issue #2811 --- libImaging/GifDecode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libImaging/GifDecode.c b/libImaging/GifDecode.c index 1b9206b29..58cf54400 100644 --- a/libImaging/GifDecode.c +++ b/libImaging/GifDecode.c @@ -71,7 +71,7 @@ ImagingGifDecode(Imaging im, ImagingCodecState state, UINT8* buffer, int bytes) if (!state->state) { /* Initialise state */ - if (context->bits < 0 || context->bits > 8) { + if (context->bits < 0 || context->bits > 12) { state->errcode = IMAGING_CODEC_CONFIG; return -1; } From fcabe1c08ce5f0483fb6a1b1da0a8185a5028583 Mon Sep 17 00:00:00 2001 From: Eric Soroos Date: Wed, 25 Oct 2017 13:52:33 +0000 Subject: [PATCH 2/2] Tests for issue #2811 --- Tests/images/issue_2811.gif | Bin 0 -> 5914 bytes Tests/test_file_gif.py | 7 +++++++ 2 files changed, 7 insertions(+) create mode 100644 Tests/images/issue_2811.gif diff --git a/Tests/images/issue_2811.gif b/Tests/images/issue_2811.gif new file mode 100644 index 0000000000000000000000000000000000000000..a32ba0bce2e67ae848b07c0b288660e1d3da035f GIT binary patch literal 5914 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 literal 0 HcmV?d00001 diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index 0b52d7b44..bc53895e8 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -536,6 +536,13 @@ class TestFileGif(PillowTestCase): finally: GifImagePlugin._FORCE_OPTIMIZE = False + def test_lzw_bits(self): + # see https://github.com/python-pillow/Pillow/issues/2811 + im = Image.open('Tests/images/issue_2811.gif') + + self.assertEqual(im.tile[0][3][0], 11) # LZW bits + # codec error prepatch + im.load() if __name__ == '__main__': unittest.main()