mirror of
https://github.com/mvt-project/mvt.git
synced 2026-10-02 22:16:58 +02:00
Merge branch 'main' into fix/accessibility-installed-service-count
This commit is contained in:
3 files changed
+115
-5
No files matched your search
@@ -0,0 +1,56 @@
|
||||
# Mobile Verification Toolkit (MVT)
|
||||
# Copyright (c) 2021-2023 The MVT Authors.
|
||||
# Use of this software is governed by the MVT License 1.1 that can be found at
|
||||
# https://license.mvt.re/1.1/
|
||||
"""An OEM wrapper archive must not read as an empty bug report.
|
||||
|
||||
MIUI / HyperOS hands out a zip of app logs with the real
|
||||
`bugreport-<device>-<timestamp>.zip` nested inside. The outer archive has
|
||||
none of the entry points the modules read, so every module
|
||||
reported it found nothing and the command still exited 0 — an empty analysis
|
||||
that looks like a finished one.
|
||||
"""
|
||||
|
||||
import io
|
||||
import zipfile
|
||||
|
||||
from mvt.android.cmd_check_bugreport import CmdAndroidCheckBugreport
|
||||
|
||||
DUMPSTATE = "== dumpstate: 2026-01-01 00:00:00\nDUMP OF SERVICE package:\n"
|
||||
|
||||
|
||||
def _inner_zip() -> bytes:
|
||||
buffer = io.BytesIO()
|
||||
with zipfile.ZipFile(buffer, "w") as inner:
|
||||
inner.writestr("main_entry.txt", "bugreport-test-2026-01-01-00-00-00.txt")
|
||||
inner.writestr("bugreport-test-2026-01-01-00-00-00.txt", DUMPSTATE)
|
||||
return buffer.getvalue()
|
||||
|
||||
|
||||
def _wrapper_zip() -> zipfile.ZipFile:
|
||||
buffer = io.BytesIO()
|
||||
with zipfile.ZipFile(buffer, "w") as outer:
|
||||
outer.writestr("app_logs/hilog.txt", "unrelated OEM log\n")
|
||||
outer.writestr("bugreport-test-2026-01-01-00-00-00.zip", _inner_zip())
|
||||
return zipfile.ZipFile(io.BytesIO(buffer.getvalue()))
|
||||
|
||||
|
||||
class TestCheckBugreportWrapper:
|
||||
def test_nested_bugreport_is_used(self, tmp_path):
|
||||
cmd = CmdAndroidCheckBugreport(results_path=str(tmp_path))
|
||||
cmd.from_zip(_wrapper_zip())
|
||||
module = cmd.modules[0](results_path=str(tmp_path))
|
||||
cmd.module_init(module)
|
||||
assert "main_entry.txt" in module.zip_files
|
||||
|
||||
def test_plain_bugreport_is_left_alone(self, tmp_path):
|
||||
buffer = io.BytesIO()
|
||||
with zipfile.ZipFile(buffer, "w") as archive:
|
||||
archive.writestr("main_entry.txt", "bugreport.txt")
|
||||
archive.writestr("bugreport.txt", DUMPSTATE)
|
||||
archive.writestr("attachments/extra.zip", _inner_zip())
|
||||
cmd = CmdAndroidCheckBugreport(results_path=str(tmp_path))
|
||||
cmd.from_zip(zipfile.ZipFile(io.BytesIO(buffer.getvalue())))
|
||||
module = cmd.modules[0](results_path=str(tmp_path))
|
||||
cmd.module_init(module)
|
||||
assert "attachments/extra.zip" in module.zip_files
|
||||
Reference in new issue
Block a user