Loading django/core/files/images.py +13 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,11 @@ Utility functions for handling images. Requires PIL, as you might imagine. """ import zlib import sys from django.core.files import File from django.utils import six class ImageFile(File): """ Loading Loading @@ -55,7 +59,15 @@ def get_image_dimensions(file_or_path, close=False): data = file.read(chunk_size) if not data: break try: p.feed(data) except zlib.error as e: # ignore zlib complaining on truncated stream, just feed more # data to parser (ticket #19457). if e.message.startswith("Error -5"): pass else: six.reraise(*sys.exc_info()) if p.image: return p.image.size chunk_size = chunk_size*2 Loading tests/regressiontests/file_storage/magic.png 0 → 100644 +68.8 KiB Loading image diff... tests/regressiontests/file_storage/tests.py +15 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ import shutil import sys import tempfile import time import zlib from datetime import datetime, timedelta from io import BytesIO Loading Loading @@ -559,6 +560,20 @@ class InconsistentGetImageDimensionsBug(unittest.TestCase): self.assertEqual(image_pil.size, size_1) self.assertEqual(size_1, size_2) @unittest.skipUnless(Image, "PIL not installed") def test_bug_19457(self): """ Regression test for #19457 get_image_dimensions fails on some pngs, while Image.size is working good on them """ img_path = os.path.join(os.path.dirname(upath(__file__)), "magic.png") try: size = get_image_dimensions(img_path) except zlib.error: self.fail("Exception raised from get_image_dimensions().") self.assertEqual(size, Image.open(img_path).size) class ContentFileTestCase(unittest.TestCase): def setUp(self): Loading Loading
django/core/files/images.py +13 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,11 @@ Utility functions for handling images. Requires PIL, as you might imagine. """ import zlib import sys from django.core.files import File from django.utils import six class ImageFile(File): """ Loading Loading @@ -55,7 +59,15 @@ def get_image_dimensions(file_or_path, close=False): data = file.read(chunk_size) if not data: break try: p.feed(data) except zlib.error as e: # ignore zlib complaining on truncated stream, just feed more # data to parser (ticket #19457). if e.message.startswith("Error -5"): pass else: six.reraise(*sys.exc_info()) if p.image: return p.image.size chunk_size = chunk_size*2 Loading
tests/regressiontests/file_storage/tests.py +15 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ import shutil import sys import tempfile import time import zlib from datetime import datetime, timedelta from io import BytesIO Loading Loading @@ -559,6 +560,20 @@ class InconsistentGetImageDimensionsBug(unittest.TestCase): self.assertEqual(image_pil.size, size_1) self.assertEqual(size_1, size_2) @unittest.skipUnless(Image, "PIL not installed") def test_bug_19457(self): """ Regression test for #19457 get_image_dimensions fails on some pngs, while Image.size is working good on them """ img_path = os.path.join(os.path.dirname(upath(__file__)), "magic.png") try: size = get_image_dimensions(img_path) except zlib.error: self.fail("Exception raised from get_image_dimensions().") self.assertEqual(size, Image.open(img_path).size) class ContentFileTestCase(unittest.TestCase): def setUp(self): Loading