This commit is contained in:
Zeecka
2026-01-02 01:06:39 +01:00
parent 24fd977613
commit c5f7efafc1
2 changed files with 12 additions and 8 deletions
+5
View File
@@ -18,6 +18,11 @@ class PngcheckAnalyzer(SubprocessAnalyzer):
def is_error(self, returncode: int, stdout: str, stderr: str, zip_exist: bool) -> bool: def is_error(self, returncode: int, stdout: str, stderr: str, zip_exist: bool) -> bool:
return "this is neither a PNG or JNG image nor a MNG stream" in stdout return "this is neither a PNG or JNG image nor a MNG stream" in stdout
def process_error(self, stdout: str, stderr: str) -> str:
"""Process the stderr."""
if "this is neither a PNG or JNG image nor a MNG stream" in stdout:
return "The file format of the file is not supported (PNG or JNG only)."
return stdout
def analyze_pngcheck(input_img: Path, output_dir: Path) -> None: def analyze_pngcheck(input_img: Path, output_dir: Path) -> None:
"""Analyze an image submission using pngcheck.""" """Analyze an image submission using pngcheck."""
+7 -8
View File
@@ -36,16 +36,19 @@ class SteghideAnalyzer(SubprocessAnalyzer):
def is_error(self, returncode: int, stdout: str, stderr: str, zip_exist: bool) -> bool: def is_error(self, returncode: int, stdout: str, stderr: str, zip_exist: bool) -> bool:
"""Check if the result is an error.""" """Check if the result is an error."""
match = re.search(r'embedded file "([^"]+)"', stdout) match = re.search(r'embedded file "([^"]+)".*', stdout + stderr)
embedded_filename = match.group(1) if match else None embedded_filename = match.group(1) if match else None
match = re.search(r'wrote extracted data to "([^"]+)".*', stdout + stderr)
extracted_filename = match.group(1) if match else None
# if bad file format or wrong password, raise an error # if bad file format or wrong password, raise an error
return returncode != 0 or embedded_filename is None return embedded_filename is None and extracted_filename is None
def process_output(self, stdout: str, stderr: str) -> str | list[str] | dict[str, str]: def process_output(self, stdout: str, stderr: str) -> str | list[str] | dict[str, str]:
"""Process the stdout into a list of lines.""" """Process the stdout into a list of lines."""
out = [] out = []
for line in stderr.split("\n"): for line in (stdout + '\n' + stderr).split("\n"):
if line.startswith('wrote extracted data to "'): if line.startswith('wrote extracted data to "'):
out.append(line) out.append(line)
return out return out
@@ -54,11 +57,7 @@ class SteghideAnalyzer(SubprocessAnalyzer):
"""Process stderr.""" """Process stderr."""
if "the file format of the file" in stderr and "not supported" in stderr: if "the file format of the file" in stderr and "not supported" in stderr:
return "The file format of the file is not supported (JPEG or BMP only)." return "The file format of the file is not supported (JPEG or BMP only)."
out = "" return stderr
for line in stderr.split("\n"):
if line and not line.startswith('wrote extracted data to "'):
out += line + "\n"
return out
def analyze_steghide(input_img: Path, output_dir: Path, password: Optional[str] = None) -> None: def analyze_steghide(input_img: Path, output_dir: Path, password: Optional[str] = None) -> None: