v0.0.56: КРИТИЧНО — mapping.csv (ключ расшифровки) убран из выходного ZIP, CSV только отдельно
Deploy drhider / validate (push) Canceled after 0s

This commit is contained in:
“Naeel”
2026-08-20 09:38:28 +03:00
parent dfa325a5c5
commit 670f533f48
4 changed files with 36 additions and 20 deletions
+6 -8
View File
@@ -50,17 +50,15 @@ with zipfile.ZipFile(io.BytesIO(zip_data)) as zf:
check("mapping.csv нет", "mapping.csv" not in names)
check("договор читается", "Договор" in zf.read("договор_obfuscated.md").decode("utf-8"))
# 3. ZIP с mapping.csv
# 3. ZIP с mapping.csv — mapping НЕ должен попадать в архив (секрет, хранится отдельно)
zip_data = build_zip(
[("file.md", b"data")],
mapping_csv="тип,оригинал,замена\nperson,Иванов,Иванов_0001\n"
)
with zipfile.ZipFile(io.BytesIO(zip_data)) as zf:
names = zf.namelist()
check("mapping.csv есть", "mapping.csv" in names)
csv_content = zf.read("mapping.csv").decode("utf-8")
check("mapping с BOM", csv_content.startswith('\ufeff'))
check("данные в mapping", "Иванов_0001" in csv_content)
check("mapping.csv НЕ в архиве", "mapping.csv" not in names)
check("только file.md", len(names) == 1)
# 4. ZIP с кириллицей в именах
zip_data = build_zip([("договор_№123.md", "текст".encode("utf-8"))])
@@ -116,11 +114,11 @@ csv = build_mapping_csv(mapping)
zip_data = build_zip([("doc.md", "# Договор с Иванов_0001".encode("utf-8"))], mapping_csv=csv)
with zipfile.ZipFile(io.BytesIO(zip_data)) as zf:
check("два файла в ZIP", len(zf.namelist()) == 2)
check("только doc.md в ZIP (без mapping)", len(zf.namelist()) == 1)
doc = zf.read("doc.md").decode("utf-8")
check("doc с заменой", "Иванов_0001" in doc)
csv_content = zf.read("mapping.csv").decode("utf-8")
check("CSV с обеими заменами", "Иванов_0001" in csv_content and "ООО_Технология_0001" in csv_content)
check("mapping.csv не в архиве", "mapping.csv" not in zf.namelist())
check("CSV отдаётся отдельной строкой", "Иванов_0001" in csv and "ООО_Технология_0001" in csv)
# ═══════════════════════════════════════════════════════════════