mirror of
https://github.com/mvt-project/mvt.git
synced 2026-09-18 15:42:15 +02:00
Report an unreadable sysdiagnose archive instead of aborting silently (#920)
A sysdiagnose tarball whose download stopped halfway ends in an EOFError from gzip while check-sysdiagnose extracts it. Click turns EOFError into click.Abort, so the command printed nothing but "Aborted!", even with -v. The extraction now catches the read errors an archive can raise, names the file and the reason at critical level, says the file may be truncated or not a gzip tarball, and exits 1. A plain .tar given to the gzip reader gets the same message rather than a traceback.
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
import logging
|
||||
import os
|
||||
import tarfile
|
||||
|
||||
from click.testing import CliRunner
|
||||
|
||||
@@ -62,3 +64,29 @@ def test_check_sysdiagnose_warns_without_a_custom_module(tmp_path, caplog):
|
||||
|
||||
assert result.exit_code == 0
|
||||
assert "No forensic sysdiagnose modules have been loaded" in caplog.text
|
||||
|
||||
|
||||
def _create_truncated_sysdiagnose_archive(tmp_path):
|
||||
folder = tmp_path / "sysdiagnose_2026.01.01_00-00-00+0000_iPhone-OS_iPhone_23A000"
|
||||
folder.mkdir()
|
||||
(folder / "sysdiagnose.log").write_bytes(os.urandom(200_000))
|
||||
archive = tmp_path / "sysdiagnose.tar.gz"
|
||||
with tarfile.open(archive, "w:gz") as tar:
|
||||
tar.add(folder, arcname=folder.name)
|
||||
data = archive.read_bytes()
|
||||
archive.write_bytes(data[: len(data) // 2])
|
||||
return archive
|
||||
|
||||
|
||||
def test_check_sysdiagnose_reports_a_truncated_archive(tmp_path, caplog):
|
||||
# A download that stopped halfway ends in EOFError from gzip, which Click
|
||||
# would otherwise turn into a bare "Aborted!" with no reason given.
|
||||
archive = _create_truncated_sysdiagnose_archive(tmp_path)
|
||||
|
||||
with caplog.at_level(logging.CRITICAL, logger="mvt"):
|
||||
result = CliRunner().invoke(check_sysdiagnose, [str(archive)])
|
||||
|
||||
assert result.exit_code == 1
|
||||
assert "Unable to read the sysdiagnose archive" in caplog.text
|
||||
assert "truncated" in caplog.text
|
||||
assert "Aborted!" not in result.output
|
||||
|
||||
Reference in New Issue
Block a user