From f46d65d0a4ab79e61c69ce1436b118954b01314a Mon Sep 17 00:00:00 2001 From: homm Date: Tue, 15 Sep 2015 20:12:16 +0300 Subject: [PATCH] test for this --- Tests/images/broken_data_stream.png | Bin 0 -> 34560 bytes Tests/test_imagefile.py | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 Tests/images/broken_data_stream.png diff --git a/Tests/images/broken_data_stream.png b/Tests/images/broken_data_stream.png new file mode 100644 index 0000000000000000000000000000000000000000..4626bc576119dcc6003f61a28dc12d67e1c7f602 GIT binary patch literal 34560 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 Ang9R* literal 0 HcmV?d00001 diff --git a/Tests/test_imagefile.py b/Tests/test_imagefile.py index 857df1441..5705180ff 100644 --- a/Tests/test_imagefile.py +++ b/Tests/test_imagefile.py @@ -115,6 +115,26 @@ class TestImageFile(PillowTestCase): finally: ImageFile.LOAD_TRUNCATED_IMAGES = False + def test_broken_datastream_with_errors(self): + if "zip_encoder" not in codecs: + self.skipTest("PNG (zlib) encoder not available") + + im = Image.open("Tests/images/broken_data_stream.png") + with self.assertRaises(IOError): + im.load() + + def test_broken_datastream_without_errors(self): + if "zip_encoder" not in codecs: + self.skipTest("PNG (zlib) encoder not available") + + im = Image.open("Tests/images/broken_data_stream.png") + + ImageFile.LOAD_TRUNCATED_IMAGES = True + try: + im.load() + finally: + ImageFile.LOAD_TRUNCATED_IMAGES = False + if __name__ == '__main__': unittest.main()