diff options
Diffstat (limited to '')
-rw-r--r-- | tests/scanner/data/bad/bad_compression.zip | bin | 0 -> 28046 bytes | |||
-rw-r--r-- | tests/scanner/data/bad/bad_entry.zip | bin | 0 -> 126 bytes | |||
-rw-r--r-- | tests/scanner/test_scanner.py | 40 |
3 files changed, 28 insertions, 12 deletions
diff --git a/tests/scanner/data/bad/bad_compression.zip b/tests/scanner/data/bad/bad_compression.zip Binary files differnew file mode 100644 index 0000000..4dbbc1f --- /dev/null +++ b/tests/scanner/data/bad/bad_compression.zip diff --git a/tests/scanner/data/bad/bad_entry.zip b/tests/scanner/data/bad/bad_entry.zip Binary files differnew file mode 100644 index 0000000..0bf6e13 --- /dev/null +++ b/tests/scanner/data/bad/bad_entry.zip diff --git a/tests/scanner/test_scanner.py b/tests/scanner/test_scanner.py index 45a966f..141698c 100644 --- a/tests/scanner/test_scanner.py +++ b/tests/scanner/test_scanner.py @@ -3,11 +3,12 @@ import os import shutil from datetime import datetime, timezone from pathlib import Path -from zipfile import ZipFile +from zipfile import BadZipFile, ZipFile -import hircine.thumbnailer import pytest from conftest import DB + +import hircine.thumbnailer from hircine.config import DirectoryStructure from hircine.db.models import Archive, Image, Page from hircine.scanner import Scanner, Status @@ -103,18 +104,17 @@ async def test_scanner_dedups_archive_contents(archive, scanner, capsys): archive = await DB.add(archive) dedup_path = archive.path + ".dedup" - with ZipFile(archive.path, "r") as zin: - with ZipFile(dedup_path, "w") as zout: - for info in zin.infolist(): - base, ext = os.path.splitext(info.filename) + with ZipFile(archive.path, "r") as zin, ZipFile(dedup_path, "w") as zout: + for info in zin.infolist(): + base, ext = os.path.splitext(info.filename) - if base == "03": - continue + if base == "03": + continue - if ext == ".png": - zout.writestr(f"0{base}.png", zin.read(info)) - else: - zout.writestr(info.filename, zin.read(info)) + if ext == ".png": + zout.writestr(f"0{base}.png", zin.read(info)) + else: + zout.writestr(info.filename, zin.read(info)) await scanner.scan() added_archive = await DB.get(Archive, 2, full=True) @@ -309,3 +309,19 @@ async def test_scanner_reprocess(archive, data, scanner, capsys): captured = capsys.readouterr() assert captured.out == "[~] archive.zip\n" + + +@pytest.mark.anyio +async def test_scanner_handles_bad_zip_entry(data, scanner): + Path(data("bad/bad_entry.zip")).rename(data("contents/bad_entry.zip")) + + with pytest.raises(BadZipFile): + await scanner.scan() + + +@pytest.mark.anyio +async def test_scanner_handles_bad_zip_compression(data, scanner): + Path(data("bad/bad_compression.zip")).rename(data("contents/bad_compression.zip")) + + with pytest.raises(BadZipFile): + await scanner.scan() |