rasta/rasta_exp/tester/flowdroid_tester.py
Jean-Marie Mineau cd1e91bb99
first commit
2023-11-16 14:30:24 +01:00

36 lines
1.2 KiB
Python

from .abstract_tester import abstract_tester
import utils
import error_collector as errors
import datetime
import re
from typing import Type
from pathlib import Path
class flowdroid_tester(abstract_tester):
EXPECTED_ERROR_TYPES: list = [
errors.JavaError,
errors.NoPrefixJavaError,
errors.FlowdroidLog4jError,
]
TOOL_NAME = "flowdroid"
RE_SUCCESS = re.compile(
r"\[.*?\] INFO soot.jimple.infoflow.android.SetupApplication\$InPlaceInfoflow - Data flow solver took (\d*) seconds. Maximum memory consumption: (\d*) MB\n"
r"\[.*?\] INFO soot.jimple.infoflow.android.SetupApplication - Found (\d*) leaks",
re.MULTILINE,
)
def __init__(self):
super().__init__()
@classmethod
def check_success(cls, path: Path, apk_filename: str):
report = utils.parse_report(path / "report")
l1, l2 = "", ""
# TODO: find a better way to do it
with (path / "stderr").open("r", errors="replace") as file:
for l in file:
l1, l2 = l2, l
last_lines = l1 + l2
match = flowdroid_tester.RE_SUCCESS.match(last_lines)
return match is not None