From 5ca57520b6d028b1a3ad81cbf927aa3ab219c9f1 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 11:39:57 +1000 Subject: [PATCH] Added Test for JPEG2000 memory leak, before the fix is added --- Tests/test_jp2k_leak.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Tests/test_jp2k_leak.py diff --git a/Tests/test_jp2k_leak.py b/Tests/test_jp2k_leak.py new file mode 100644 index 000000000..ffd061e00 --- /dev/null +++ b/Tests/test_jp2k_leak.py @@ -0,0 +1,30 @@ +from helper import unittest, PillowTestCase, tearDownModule +import sys + +from PIL import Image +from resource import setrlimit, RLIMIT_AS, RLIMIT_STACK + +# Limits for testing the leak +mem_limit = 512*1048576 +stack_size = 8*1048576 +iterations = (mem_limit/stack_size)*2 +codecs = dir(Image.core) +test_file = "Tests/images/rgb_trns_ycbc.jp2" + +@unittest.skipIf(sys.platform.startswith('win32'), "requires Unix or MacOS") +class TestJp2kLeak(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(self): + setrlimit(RLIMIT_STACK, (stack_size, stack_size)) + setrlimit(RLIMIT_AS, (mem_limit, mem_limit)) + for count in range(iterations): + with Image.open(test_file) as im: + im.load() + im.close() + + +if __name__ == '__main__': + unittest.main()