[Python-modules-commits] [python-exif] 09/19: fix for UnicodeDecodeError
Wolfgang Borgert
debacle at moszumanska.debian.org
Mon Oct 6 22:18:38 UTC 2014
This is an automated email from the git hooks/post-receive script.
debacle pushed a commit to reference refs/remotes/upstream/develop
in repository python-exif.
commit bf982d4e8bf207685fa15d98f00fef2f4e867931
Author: ianaré sévi <ianare at gmail.com>
Date: Sat Dec 28 20:19:57 2013 +0100
fix for UnicodeDecodeError
---
exifread/classes.py | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/exifread/classes.py b/exifread/classes.py
index 71953ed..beff921 100644
--- a/exifread/classes.py
+++ b/exifread/classes.py
@@ -141,7 +141,7 @@ class ExifHeader:
else:
raise ValueError('unknown type %d in tag 0x%04X' % (field_type, tag))
- typelen = FIELD_TYPES[field_type][0]
+ type_length = FIELD_TYPES[field_type][0]
count = self.s2n(entry + 4, 4)
# Adjust for tag id/type/count (2+2+4 bytes)
# Now we point at either the data or the 2nd level offset
@@ -149,7 +149,7 @@ class ExifHeader:
# If the value fits in 4 bytes, it is inlined, else we
# need to jump ahead again.
- if count * typelen > 4:
+ if count * type_length > 4:
# offset is not the value; it's a pointer to the value
# if relative we set things up so s2n will seek to the right
# place when it adds self.offset. Note that this 'relative'
@@ -160,7 +160,7 @@ class ExifHeader:
tmp_offset = self.s2n(offset, 4)
offset = tmp_offset + ifd - 8
if self.fake_exif:
- offset = offset + 18
+ offset += 18
else:
offset = self.s2n(offset, 4)
@@ -170,7 +170,7 @@ class ExifHeader:
# special case: null-terminated ASCII string
# XXX investigate
# sometimes gets too big to fit in int value
- if count != 0: # and count < (2**31): # 2E31 is hardware dependant. --gd
+ if count != 0: # and count < (2**31): # 2E31 is hardware dependant. --gd
try:
self.file.seek(self.offset + offset)
values = self.file.read(count)
@@ -178,7 +178,10 @@ class ExifHeader:
# Drop any garbage after a null.
values = values.split(b'\x00', 1)[0]
if isinstance(values, bytes):
- values = values.decode("utf-8")
+ try:
+ values = values.decode("utf-8")
+ except UnicodeDecodeError:
+ logger.warning("Possibly corrupted field %s in %s IFD", tag_name, ifd_name)
except OverflowError:
values = ''
else:
@@ -195,19 +198,16 @@ class ExifHeader:
value = Ratio(self.s2n(offset, 4, signed),
self.s2n(offset + 4, 4, signed))
else:
- value = self.s2n(offset, typelen, signed)
+ value = self.s2n(offset, type_length, signed)
values.append(value)
- offset = offset + typelen
+ offset = offset + type_length
# The test above causes problems with tags that are
# supposed to have long values! Fix up one important case.
- elif tag_name in ('MakerNote',
- makernote.canon.CAMERA_INFO_TAG_NAME):
+ elif tag_name in ('MakerNote', makernote.canon.CAMERA_INFO_TAG_NAME):
for dummy in range(count):
- value = self.s2n(offset, typelen, signed)
+ value = self.s2n(offset, type_length, signed)
values.append(value)
- offset = offset + typelen
- #else :
- # print "Warning: dropping large tag:", tag, tag_name
+ offset = offset + type_length
# now 'values' is either a string or an array
if count == 1 and field_type != 2:
@@ -233,7 +233,7 @@ class ExifHeader:
self.tags[ifd_name + ' ' + tag_name] = IfdTag(printable, tag,
field_type,
values, field_offset,
- count * typelen)
+ count * type_length)
logger.debug(" %s: %s", tag_name, repr(self.tags[ifd_name + ' ' + tag_name]))
if tag_name == stop_tag:
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-exif.git
More information about the Python-modules-commits
mailing list