diff --git a/Tests/images/seek_too_large.tif b/Tests/images/seek_too_large.tif new file mode 100644 index 000000000..094c3057c Binary files /dev/null and b/Tests/images/seek_too_large.tif differ diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index 21d52462e..8821fb46a 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -113,6 +113,10 @@ class TestFileTiff: outfile = str(tmp_path / "temp.tif") im.save(outfile, save_all=True, append_images=[im], tiffinfo=im.tag_v2) + def test_seek_too_large(self): + with pytest.raises(ValueError, match="Unable to seek to frame"): + Image.open("Tests/images/seek_too_large.tif") + def test_set_legacy_api(self) -> None: ifd = TiffImagePlugin.ImageFileDirectory_v2() with pytest.raises(Exception) as e: diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index bcb3547eb..8bfcd2907 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -1167,6 +1167,9 @@ class TiffImageFile(ImageFile.ImageFile): self.__next, self.fp.tell(), ) + if self.__next >= 2**63: + msg = "Unable to seek to frame" + raise ValueError(msg) self.fp.seek(self.__next) self._frame_pos.append(self.__next) logger.debug("Loading tags, location: %s", self.fp.tell())