The 'audit #8 invariant' the test was anchored on (core.images imported without core.cache first) is about to become moot when images.py is removed in a follow-up commit. Swap to core.config to keep the same coverage shape: any non-cache submodule import must still trigger __init__.py and install the PIL cap.
59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
"""Tests for the project-wide PIL decompression-bomb cap (audit #8).
|
|
|
|
The cap lives in `booru_viewer/core/__init__.py` so any import of
|
|
any `booru_viewer.core.*` submodule installs it first — independent
|
|
of whether `core.cache` is on the import path. Both checks are run
|
|
in a fresh subprocess so the assertion isn't masked by some other
|
|
test's previous import.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import subprocess
|
|
import sys
|
|
|
|
EXPECTED = 256 * 1024 * 1024
|
|
|
|
|
|
def _run(code: str) -> str:
|
|
result = subprocess.run(
|
|
[sys.executable, "-c", code],
|
|
capture_output=True,
|
|
text=True,
|
|
check=True,
|
|
)
|
|
return result.stdout.strip()
|
|
|
|
|
|
def test_core_package_import_installs_cap():
|
|
"""Importing the core package alone must set MAX_IMAGE_PIXELS."""
|
|
out = _run(
|
|
"import booru_viewer.core; "
|
|
"from PIL import Image; "
|
|
"print(Image.MAX_IMAGE_PIXELS)"
|
|
)
|
|
assert int(out) == EXPECTED
|
|
|
|
|
|
def test_core_submodule_import_installs_cap():
|
|
"""Importing any non-cache core submodule must still set the cap —
|
|
the invariant is that the package __init__.py runs before any
|
|
submodule code, regardless of which submodule is the entry point."""
|
|
out = _run(
|
|
"from booru_viewer.core import config; "
|
|
"from PIL import Image; "
|
|
"print(Image.MAX_IMAGE_PIXELS)"
|
|
)
|
|
assert int(out) == EXPECTED
|
|
|
|
|
|
def test_core_cache_import_still_installs_cap():
|
|
"""Regression: the old code path (importing cache first) must keep
|
|
working after the move."""
|
|
out = _run(
|
|
"from booru_viewer.core import cache; "
|
|
"from PIL import Image; "
|
|
"print(Image.MAX_IMAGE_PIXELS)"
|
|
)
|
|
assert int(out) == EXPECTED
|