diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index 4e76379c0..b95fde51d 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -1153,8 +1153,11 @@ def _save(im, fp, filename): # following tiffcp.c->cpTag->TIFF_RATIONAL atts[k] = float(v[0][0])/float(v[0][1]) continue - if type(v) == tuple and len(v) > 2: + if (type(v) == tuple and + (len(v) > 2 or + (len(v) == 2 and v[1] == 0))): # List of ints? + # Avoid divide by zero in next if-clause if type(v[0]) in (int, float): atts[k] = list(v) continue diff --git a/Tests/images/total-pages-zero.tif b/Tests/images/total-pages-zero.tif new file mode 100644 index 000000000..50df07af3 Binary files /dev/null and b/Tests/images/total-pages-zero.tif differ diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index cf809d5d0..2241123ac 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -299,6 +299,26 @@ class TestFileTiff(PillowTestCase): self.assertEqual(ret, [0, 1]) + def test_page_number_x_0(self): + # Issue 973 + # Test TIFF with tag 297 (Page Number) having value of 0 0. + # The first number is the current page number. + # The second is the total number of pages, zero means not available. + + # Arrange + outfile = self.tempfile("temp.tif") + + # Created by printing a page in Chrome to PDF, then: + # /usr/bin/gs -q -sDEVICE=tiffg3 -sOutputFile=total-pages-zero.tif + # -dNOPAUSE /tmp/test.pdf -c quit + infile = "Tests/images/total-pages-zero.tif" + im = Image.open(infile) + + # Act / Assert + # Should not divide by zero + im.save(outfile) + + if __name__ == '__main__': unittest.main()