summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelmut Grohne <helmut@subdivi.de>2013-03-18 16:51:17 +0100
committerHelmut Grohne <helmut@subdivi.de>2013-03-18 16:51:17 +0100
commit8693afe74a0d9f33b0f23cb1fb60ede5c051608d (patch)
tree66692448f5db5b2242244a4dea207e46fed21dd3
parent11838a6850068bd272197fecfb75e8a607faa1bd (diff)
downloaddebian-dedup-8693afe74a0d9f33b0f23cb1fb60ede5c051608d.tar.gz
dedup.image: mask errors from PIL
-rw-r--r--dedup/image.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/dedup/image.py b/dedup/image.py
index e05e7da..acbf0ca 100644
--- a/dedup/image.py
+++ b/dedup/image.py
@@ -50,7 +50,10 @@ class ImageHash(object):
pos = self.content.tell()
try:
self.content.seek(0)
- img = PIL.Image.open(self.content)
+ try:
+ img = PIL.Image.open(self.content)
+ except IOError:
+ raise ValueError("broken png header")
width, height = img.size
pack = lambda elem: struct.pack("BBBB", *elem)
# special casing easy modes reduces memory usage
@@ -60,8 +63,11 @@ class ImageHash(object):
pack = lambda elem: struct.pack("BBBB", *(elem + (255,)))
elif img.mode != "RGBA":
img = img.convert("RGBA")
- for elem in img.getdata():
- hashobj.update(pack(elem))
+ try:
+ for elem in img.getdata():
+ hashobj.update(pack(elem))
+ except (SyntaxError, IndexError, IOError): # crazy stuff from PIL
+ raise ValueError("error reading png image")
finally:
self.content.seek(pos)
return "%s%8.8x%8.8x" % (hashobj.hexdigest(), width, height)