From 3aa4b8165da23a2f094d0eeffacbda5484f4c1f6 Mon Sep 17 00:00:00 2001 From: Anton Baklanov Date: Thu, 13 Dec 2012 18:26:34 +0200 Subject: [PATCH] Fixed #19457 -- ImageField size detection failed for some files. This was caused by PIL raising a zlib truncated stream error since we fed the parser with chunks instead of the whole image. --- django/core/files/images.py | 14 +++++++++++++- tests/regressiontests/file_storage/magic.png | Bin 0 -> 70445 bytes tests/regressiontests/file_storage/tests.py | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 tests/regressiontests/file_storage/magic.png diff --git a/django/core/files/images.py b/django/core/files/images.py index 7d7eac65db9..a8d3d8018b1 100644 --- a/django/core/files/images.py +++ b/django/core/files/images.py @@ -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): """ @@ -55,7 +59,15 @@ def get_image_dimensions(file_or_path, close=False): data = file.read(chunk_size) if not data: break - p.feed(data) + 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 diff --git a/tests/regressiontests/file_storage/magic.png b/tests/regressiontests/file_storage/magic.png new file mode 100644 index 0000000000000000000000000000000000000000..a06449f9e9795a3bea688f47fa79110e2762fd9c GIT binary patch literal 70445 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 literal 0 HcmV?d00001 diff --git a/tests/regressiontests/file_storage/tests.py b/tests/regressiontests/file_storage/tests.py index b6d3e1ff0b5..4872ce87b95 100644 --- a/tests/regressiontests/file_storage/tests.py +++ b/tests/regressiontests/file_storage/tests.py @@ -7,6 +7,7 @@ import shutil import sys import tempfile import time +import zlib from datetime import datetime, timedelta from io import BytesIO @@ -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):