Pillow/Tests/check_j2k_leaks.py

42 lines
1.1 KiB
Python
Raw Normal View History

from io import BytesIO
2020-03-28 04:51:28 +03:00
import pytest
from PIL import Image
2020-03-28 04:51:28 +03:00
from .helper import is_win32, skip_unless_feature
# Limits for testing the leak
2019-06-13 18:53:42 +03:00
mem_limit = 1024 * 1048576
stack_size = 8 * 1048576
iterations = int((mem_limit / stack_size) * 2)
test_file = "Tests/images/rgb_trns_ycbc.jp2"
2020-03-28 04:51:28 +03:00
pytestmark = [
pytest.mark.skipif(is_win32(), reason="requires Unix or macOS"),
skip_unless_feature("jpg_2000"),
]
2019-06-13 18:53:42 +03:00
2020-03-28 04:51:28 +03:00
def test_leak_load():
from resource import setrlimit, RLIMIT_AS, RLIMIT_STACK
2020-03-28 04:51:28 +03:00
setrlimit(RLIMIT_STACK, (stack_size, stack_size))
setrlimit(RLIMIT_AS, (mem_limit, mem_limit))
for _ in range(iterations):
with Image.open(test_file) as im:
im.load()
2019-06-13 18:53:42 +03:00
2020-03-28 04:51:28 +03:00
def test_leak_save():
from resource import setrlimit, RLIMIT_AS, RLIMIT_STACK
2020-03-28 04:51:28 +03:00
setrlimit(RLIMIT_STACK, (stack_size, stack_size))
setrlimit(RLIMIT_AS, (mem_limit, mem_limit))
for _ in range(iterations):
with Image.open(test_file) as im:
im.load()
test_output = BytesIO()
im.save(test_output, "JPEG2000")
test_output.seek(0)
test_output.read()