Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion reai_toolkit/app/components/dialogs/analyse_dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,13 +177,23 @@ def _on_ok(self) -> None:
file_path=self.file_path,
symbols=AnalyseDialog.cached_symbols,
debug_file_path=self.debug_file_path,
tags=[],
tags=self._parse_tags(),
public=self.ui.radioButton_2.isChecked(),
thread_callback=self.callback,
)

self.accept()

def _parse_tags(self) -> list[str]:
seen: set[str] = set()
tags: list[str] = []
for raw in self.ui.apiTags.text().split(","):
tag: str = raw.strip()
if tag and tag not in seen:
seen.add(tag)
tags.append(tag)
return tags

def initialize_function_boundaries(self) -> None:
symbols: Symbols | None = collect_symbols_from_ida()
if symbols is None:
Expand Down
3 changes: 2 additions & 1 deletion reai_toolkit/app/services/upload/upload_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from revengai.models.analysis_create_request import AnalysisCreateRequest
from revengai.models.analysis_create_response import AnalysisCreateResponse
from revengai.models.analysis_scope import AnalysisScope
from revengai.models.tag import Tag
from revengai.models.upload_file_type import UploadFileType
from revengai.models.base_response_upload_response import BaseResponseUploadResponse

Expand Down Expand Up @@ -212,7 +213,7 @@ def analyse(
filename=file_name,
sha_256_hash=binary_sha256,
debug_hash=debug_sha256,
tags=tags or [],
tags=[Tag(name=tag) for tag in (tags or [])],
analysis_scope=AnalysisScope.PUBLIC if public else AnalysisScope.PRIVATE,
symbols=symbols,
)
Expand Down
34 changes: 34 additions & 0 deletions tests/unit/upload/test_service.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from unittest.mock import MagicMock

import pytest
from revengai.models.function_boundary import FunctionBoundary
from revengai.models.symbols import Symbols
from revengai.models.tag import Tag
from revengai.models.upload_file_type import UploadFileType

from reai_toolkit.app.services.upload import upload_service as svc_mod
Expand All @@ -22,6 +25,16 @@ def sdk(mocker):
return api_inst


@pytest.fixture
def symbols():
return Symbols(
base_address=0,
function_boundaries=[
FunctionBoundary(mangled_name="main", start_address=0, end_address=16)
],
)


def test_upload_file_passes_tuple_to_sdk(service, sdk):
result = service._upload_file_req(
upload_file_type=UploadFileType.BINARY,
Expand Down Expand Up @@ -55,3 +68,24 @@ def test_upload_file_defaults_force_overwrite_false(service, sdk):
)

assert sdk.upload_file.call_args.kwargs["force_overwrite"] is False


@pytest.mark.parametrize(
"tags, expected",
[
(["malware", "linux", "trojan"], ["malware", "linux", "trojan"]),
(["solo"], ["solo"]),
([], []),
(None, []),
],
)
def test_analyse_converts_tags_to_tag_models(service, sdk, symbols, tags, expected):
service.analyse(
file_name="binary.elf",
binary_sha256="deadbeef",
symbols=symbols,
tags=tags,
)

request = sdk.create_analysis.call_args.kwargs["analysis_create_request"]
assert request.tags == [Tag(name=name) for name in expected]
Loading