mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 17:36:18 +03:00
33dabf986f
The unittest in helper.py has not offered an interesting abstraction
since dbe9f85c7d
so import from the more
typical stdlib location.
47 lines
1.4 KiB
Python
Executable File
47 lines
1.4 KiB
Python
Executable File
import unittest
|
|
from io import BytesIO
|
|
|
|
from PIL import Image
|
|
|
|
from .helper import PillowTestCase, is_win32
|
|
|
|
# Limits for testing the leak
|
|
mem_limit = 1024 * 1048576
|
|
stack_size = 8 * 1048576
|
|
iterations = int((mem_limit / stack_size) * 2)
|
|
codecs = dir(Image.core)
|
|
test_file = "Tests/images/rgb_trns_ycbc.jp2"
|
|
|
|
|
|
@unittest.skipIf(is_win32(), "requires Unix or macOS")
|
|
class TestJpegLeaks(PillowTestCase):
|
|
def setUp(self):
|
|
if "jpeg2k_encoder" not in codecs or "jpeg2k_decoder" not in codecs:
|
|
self.skipTest("JPEG 2000 support not available")
|
|
|
|
def test_leak_load(self):
|
|
from resource import setrlimit, RLIMIT_AS, RLIMIT_STACK
|
|
|
|
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()
|
|
|
|
def test_leak_save(self):
|
|
from resource import setrlimit, RLIMIT_AS, RLIMIT_STACK
|
|
|
|
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()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|