Pillow

Форк
0
/
test_fuzzers.py 
67 строк · 1.8 Кб
1
from __future__ import annotations
2

3
import subprocess
4
import sys
5

6
import fuzzers
7
import packaging
8
import pytest
9

10
from PIL import Image, UnidentifiedImageError, features
11
from Tests.helper import skip_unless_feature
12

13
if sys.platform.startswith("win32"):
14
    pytest.skip("Fuzzer is linux only", allow_module_level=True)
15
libjpeg_turbo_version = features.version("libjpeg_turbo")
16
if libjpeg_turbo_version is not None:
17
    version = packaging.version.parse(libjpeg_turbo_version)
18
    if version.major == 2 and version.minor == 0:
19
        pytestmark = pytest.mark.valgrind_known_error(
20
            reason="Known failing with libjpeg_turbo 2.0"
21
        )
22

23

24
@pytest.mark.parametrize(
25
    "path",
26
    subprocess.check_output("find Tests/images -type f", shell=True).split(b"\n"),
27
)
28
def test_fuzz_images(path: str) -> None:
29
    fuzzers.enable_decompressionbomb_error()
30
    try:
31
        with open(path, "rb") as f:
32
            fuzzers.fuzz_image(f.read())
33
            assert True
34
    except (
35
        OSError,
36
        SyntaxError,
37
        MemoryError,
38
        ValueError,
39
        NotImplementedError,
40
        OverflowError,
41
    ):
42
        # Known exceptions that are through from Pillow
43
        assert True
44
    except (
45
        Image.DecompressionBombError,
46
        Image.DecompressionBombWarning,
47
        UnidentifiedImageError,
48
    ):
49
        # Known Image.* exceptions
50
        assert True
51
    finally:
52
        fuzzers.disable_decompressionbomb_error()
53

54

55
@skip_unless_feature("freetype2")
56
@pytest.mark.parametrize(
57
    "path", subprocess.check_output("find Tests/fonts -type f", shell=True).split(b"\n")
58
)
59
def test_fuzz_fonts(path: str) -> None:
60
    if not path:
61
        return
62
    with open(path, "rb") as f:
63
        try:
64
            fuzzers.fuzz_font(f.read())
65
        except (Image.DecompressionBombError, Image.DecompressionBombWarning, OSError):
66
            pass
67
        assert True
68

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.