mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-11-10 19:56:47 +03:00
Do not allow TIFF to seek to a past frame
This commit is contained in:
parent
8354fa4929
commit
9ac888262a
BIN
Tests/images/multipage_multiple_frame_loop.tiff
Normal file
BIN
Tests/images/multipage_multiple_frame_loop.tiff
Normal file
Binary file not shown.
BIN
Tests/images/multipage_out_of_order.tiff
Normal file
BIN
Tests/images/multipage_out_of_order.tiff
Normal file
Binary file not shown.
BIN
Tests/images/multipage_single_frame_loop.tiff
Normal file
BIN
Tests/images/multipage_single_frame_loop.tiff
Normal file
Binary file not shown.
|
@ -301,6 +301,19 @@ class TestFileTiff:
|
||||||
assert im.size == (20, 20)
|
assert im.size == (20, 20)
|
||||||
assert im.convert("RGB").getpixel((0, 0)) == (0, 0, 255)
|
assert im.convert("RGB").getpixel((0, 0)) == (0, 0, 255)
|
||||||
|
|
||||||
|
def test_frame_order(self):
|
||||||
|
# A frame can't progress to itself after reading
|
||||||
|
with Image.open("Tests/images/multipage_single_frame_loop.tiff") as im:
|
||||||
|
assert im.n_frames == 1
|
||||||
|
|
||||||
|
# A frame can't progress to a frame that has already been read
|
||||||
|
with Image.open("Tests/images/multipage_multiple_frame_loop.tiff") as im:
|
||||||
|
assert im.n_frames == 2
|
||||||
|
|
||||||
|
# Frames don't have to be in sequence
|
||||||
|
with Image.open("Tests/images/multipage_out_of_order.tiff") as im:
|
||||||
|
assert im.n_frames == 3
|
||||||
|
|
||||||
def test___str__(self):
|
def test___str__(self):
|
||||||
filename = "Tests/images/pil136.tiff"
|
filename = "Tests/images/pil136.tiff"
|
||||||
with Image.open(filename) as im:
|
with Image.open(filename) as im:
|
||||||
|
|
|
@ -1067,7 +1067,12 @@ class TiffImageFile(ImageFile.ImageFile):
|
||||||
self._frame_pos.append(self.__next)
|
self._frame_pos.append(self.__next)
|
||||||
logger.debug("Loading tags, location: %s" % self.fp.tell())
|
logger.debug("Loading tags, location: %s" % self.fp.tell())
|
||||||
self.tag_v2.load(self.fp)
|
self.tag_v2.load(self.fp)
|
||||||
self.__next = self.tag_v2.next
|
if self.tag_v2.next in self._frame_pos:
|
||||||
|
# This IFD has already been processed
|
||||||
|
# Declare this to be the end of the image
|
||||||
|
self.__next = 0
|
||||||
|
else:
|
||||||
|
self.__next = self.tag_v2.next
|
||||||
if self.__next == 0:
|
if self.__next == 0:
|
||||||
self._n_frames = frame + 1
|
self._n_frames = frame + 1
|
||||||
if len(self._frame_pos) == 1:
|
if len(self._frame_pos) == 1:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user