Block TIFFTAG_SUBIFD

This commit is contained in:
Andrew Murray 2020-12-22 11:38:02 +11:00
parent 0eddc82157
commit 8794610c76
2 changed files with 12 additions and 1 deletions

View File

@ -4,7 +4,7 @@ from io import BytesIO
import pytest
from PIL import Image, TiffImagePlugin
from PIL.TiffImagePlugin import RESOLUTION_UNIT, X_RESOLUTION, Y_RESOLUTION
from PIL.TiffImagePlugin import RESOLUTION_UNIT, SUBIFD, X_RESOLUTION, Y_RESOLUTION
from .helper import (
assert_image_equal,
@ -161,6 +161,14 @@ class TestFileTiff:
reloaded.load()
assert (round(dpi), round(dpi)) == reloaded.info["dpi"]
def test_subifd(self, tmp_path):
outfile = str(tmp_path / "temp.tif")
with Image.open("Tests/images/g4_orientation_6.tif") as im:
im.tag_v2[SUBIFD] = 10000
# Should not segfault
im.save(outfile)
def test_save_setting_missing_resolution(self):
b = BytesIO()
Image.open("Tests/images/10ct_32bit_128.tiff").save(

View File

@ -89,6 +89,7 @@ ARTIST = 315
PREDICTOR = 317
COLORMAP = 320
TILEOFFSETS = 324
SUBIFD = 330
EXTRASAMPLES = 338
SAMPLEFORMAT = 339
JPEGTABLES = 347
@ -1559,12 +1560,14 @@ def _save(im, fp, filename):
# The other tags expect arrays with a certain length (fixed or depending on
# 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 = [
REFERENCEBLACKWHITE,
SAMPLEFORMAT,
STRIPBYTECOUNTS,
STRIPOFFSETS,
TRANSFERFUNCTION,
SUBIFD,
]
atts = {}