From ddcfd259cf2619e32c9a27a66e8dddca3fa346a2 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 29 Aug 2019 19:36:46 +1000 Subject: [PATCH] Corrected short and long range checks --- Tests/test_file_tiff_metadata.py | 12 ++++++++++++ src/PIL/TiffImagePlugin.py | 10 ++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Tests/test_file_tiff_metadata.py b/Tests/test_file_tiff_metadata.py index 8ee0aa64f9c..535eadf1bdd 100644 --- a/Tests/test_file_tiff_metadata.py +++ b/Tests/test_file_tiff_metadata.py @@ -274,6 +274,18 @@ def test_ifd_signed_rational(self): self.assertEqual(numerator, reloaded.tag_v2[37380].numerator) self.assertEqual(denominator, reloaded.tag_v2[37380].denominator) + def test_ifd_signed_long(self): + im = hopper() + info = TiffImagePlugin.ImageFileDirectory_v2() + + info[37000] = -60000 + + out = self.tempfile("temp.tiff") + im.save(out, tiffinfo=info, compression="raw") + + reloaded = Image.open(out) + self.assertEqual(reloaded.tag_v2[37000], -60000) + def test_expty_values(self): data = io.BytesIO( b"II*\x00\x08\x00\x00\x00\x03\x00\x1a\x01\x05\x00\x00\x00\x00\x00" diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index 71dc4fe7476..2a3e68b34c6 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -575,12 +575,10 @@ def _setitem(self, tag, value, legacy_api): else TiffTags.SIGNED_RATIONAL ) elif all(isinstance(v, int) for v in values): - if all(v < 2 ** 16 for v in values): - self.tagtype[tag] = ( - TiffTags.SHORT - if all(v >= 0 for v in values) - else TiffTags.SIGNED_SHORT - ) + if all(0 <= v < 2 ** 16 for v in values): + self.tagtype[tag] = TiffTags.SHORT + elif all(-2 ** 15 < v < 2 ** 15 for v in values): + self.tagtype[tag] = TiffTags.SIGNED_SHORT else: self.tagtype[tag] = ( TiffTags.LONG