Skip to content

Commit

Permalink
Merge pull request #5839 from radarhere/tiff
Browse files Browse the repository at this point in the history
  • Loading branch information
hugovk committed Nov 21, 2021
2 parents c857366 + 7d4a866 commit b692faf
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
17 changes: 17 additions & 0 deletions Tests/test_file_libtiff.py
Expand Up @@ -920,6 +920,23 @@ def test_strip_planar_16bit_RGBa(self):
with Image.open("Tests/images/tiff_strip_planar_16bit_RGBa.tiff") as im:
assert_image_equal_tofile(im, "Tests/images/tiff_16bit_RGBa_target.png")

@pytest.mark.parametrize("compression", (None, "jpeg"))
def test_block_tile_tags(self, compression, tmp_path):
im = hopper()
out = str(tmp_path / "temp.tif")

tags = {
TiffImagePlugin.TILEWIDTH: 256,
TiffImagePlugin.TILELENGTH: 256,
TiffImagePlugin.TILEOFFSETS: 256,
TiffImagePlugin.TILEBYTECOUNTS: 256,
}
im.save(out, exif=tags, compression=compression)

with Image.open(out) as reloaded:
for tag in tags.keys():
assert tag not in reloaded.getexif()

def test_old_style_jpeg(self):
with Image.open("Tests/images/old-style-jpeg-compression.tif") as im:
assert_image_equal_tofile(im, "Tests/images/old-style-jpeg-compression.png")
Expand Down
8 changes: 7 additions & 1 deletion src/PIL/TiffImagePlugin.py
Expand Up @@ -89,7 +89,10 @@
ARTIST = 315
PREDICTOR = 317
COLORMAP = 320
TILEWIDTH = 322
TILELENGTH = 323
TILEOFFSETS = 324
TILEBYTECOUNTS = 325
SUBIFD = 330
EXTRASAMPLES = 338
SAMPLEFORMAT = 339
Expand Down Expand Up @@ -1649,6 +1652,7 @@ def _save(im, fp, filename):
}.items():
ifd.setdefault(tag, value)

blocklist = [TILEWIDTH, TILELENGTH, TILEOFFSETS, TILEBYTECOUNTS]
if libtiff:
if "quality" in encoderinfo:
quality = encoderinfo["quality"]
Expand Down Expand Up @@ -1680,7 +1684,7 @@ def _save(im, fp, filename):
# BITSPERSAMPLE, etc), passing arrays with a different length will result in
# segfaults. Block these tags until we add extra validation.
# SUBIFD may also cause a segfault.
blocklist = [
blocklist += [
REFERENCEBLACKWHITE,
SAMPLEFORMAT,
STRIPBYTECOUNTS,
Expand Down Expand Up @@ -1753,6 +1757,8 @@ def _save(im, fp, filename):
raise OSError(f"encoder error {s} when writing image file")

else:
for tag in blocklist:
del ifd[tag]
offset = ifd.save(fp)

ImageFile._save(
Expand Down

0 comments on commit b692faf

Please sign in to comment.