Skip to content

Commit

Permalink
Merge pull request #7804 from twolife/fix_flc
Browse files Browse the repository at this point in the history
  • Loading branch information
hugovk committed Feb 22, 2024
2 parents b8722f3 + e45477e commit e08e1f8
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
Binary file added Tests/images/2422.flc
Binary file not shown.
25 changes: 23 additions & 2 deletions Tests/test_file_fli.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,20 @@

import pytest

from PIL import FliImagePlugin, Image
from PIL import FliImagePlugin, Image, ImageFile

from .helper import assert_image_equal, assert_image_equal_tofile, is_pypy

# created as an export of a palette image from Gimp2.6
# save as...-> hopper.fli, default options.
static_test_file = "Tests/images/hopper.fli"

# From https://samples.libav.org/fli-flc/
# From https://samples.ffmpeg.org/fli-flc/
animated_test_file = "Tests/images/a.fli"

# From https://samples.ffmpeg.org/fli-flc/
animated_test_file_with_prefix_chunk = "Tests/images/2422.flc"


def test_sanity() -> None:
with Image.open(static_test_file) as im:
Expand All @@ -32,6 +35,24 @@ def test_sanity() -> None:
assert im.is_animated


def test_prefix_chunk() -> None:
ImageFile.LOAD_TRUNCATED_IMAGES = True
try:
with Image.open(animated_test_file_with_prefix_chunk) as im:
assert im.mode == "P"
assert im.size == (320, 200)
assert im.format == "FLI"
assert im.info["duration"] == 171
assert im.is_animated

palette = im.getpalette()
assert palette[3:6] == [255, 255, 255]
assert palette[381:384] == [204, 204, 12]
assert palette[765:] == [252, 0, 0]
finally:
ImageFile.LOAD_TRUNCATED_IMAGES = False


@pytest.mark.skipif(is_pypy(), reason="Requires CPython")
def test_unclosed_file() -> None:
def open() -> None:
Expand Down
1 change: 1 addition & 0 deletions src/PIL/FliImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ def _open(self):
if i16(s, 4) == 0xF100:
# prefix chunk; ignore it
self.__offset = self.__offset + i32(s)
self.fp.seek(self.__offset)
s = self.fp.read(16)

if i16(s, 4) == 0xF1FA:
Expand Down

0 comments on commit e08e1f8

Please sign in to comment.