summaryrefslogtreecommitdiffstatshomepage
path: root/tests/scanner
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/scanner/data/bad/bad_compression.zipbin0 -> 28046 bytes
-rw-r--r--tests/scanner/data/bad/bad_entry.zipbin0 -> 126 bytes
-rw-r--r--tests/scanner/test_scanner.py40
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
new file mode 100644
index 0000000..4dbbc1f
--- /dev/null
+++ b/tests/scanner/data/bad/bad_compression.zip
Binary files differ
diff --git a/tests/scanner/data/bad/bad_entry.zip b/tests/scanner/data/bad/bad_entry.zip
new file mode 100644
index 0000000..0bf6e13
--- /dev/null
+++ b/tests/scanner/data/bad/bad_entry.zip
Binary files differ
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()