Skip to content

Commit

Permalink
feat: update autobisect and fuzzfetch
Browse files Browse the repository at this point in the history
  • Loading branch information
pyoor committed Dec 3, 2024
1 parent 8d33320 commit d48703f
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 64 deletions.
75 changes: 38 additions & 37 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ repository = "https://github.com/MozillaSecurity/bugmon"
version = "4.1.0"

[tool.poetry.dependencies]
autobisect = "^7.5.0"
autobisect = "^8.0.0"
bugsy = {git = "https://github.com/AutomatedTester/Bugsy.git"}
fuzzfetch = "^2.4.2"
fuzzfetch = "^10.0.0"
python = "^3.9.0"
typing-extensions = "^4.2.0"

Expand Down
9 changes: 5 additions & 4 deletions src/bugmon/bug.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,10 +274,11 @@ def initial_build_id(self) -> str:
creation_time = self.creation_time.split("T")[0]
try:
instance = Fetcher(
self.branch,
creation_time,
self.build_flags,
self.platform,
branch=self.branch,
build=creation_time,
flags=self.build_flags,
targets=[],
platform=self.platform,
nearest=BuildSearchOrder.ASC,
)
self._initial_build_id = instance.changeset
Expand Down
3 changes: 2 additions & 1 deletion src/bugmon/bugmon.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ def _pernosco(self) -> None:
log.info("Attempting to record a pernosco session...")

# Update config to use no-opt
config.build_flags = config.build_flags._replace(no_opt=True)
config.build_flags.no_opt = True
# Update evaluator settings
config.evaluator.logs = self.log_dir
config.evaluator.pernosco = True
Expand Down Expand Up @@ -422,6 +422,7 @@ def _reproduce_bug(
branch,
bid,
config.build_flags,
config.evaluator.target,
self.bug.platform,
nearest=direction,
)
Expand Down
15 changes: 8 additions & 7 deletions src/bugmon/evaluator_configs/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
import itertools
from abc import ABC, abstractmethod
from copy import copy
from dataclasses import fields
from pathlib import Path
from typing import Any, Dict, Iterator, Tuple
from typing import Any, Dict, Iterator, Tuple, cast

from autobisect import Evaluator
from fuzzfetch import BuildFlags
Expand Down Expand Up @@ -34,7 +36,7 @@ def iter_build_flags(cls, bug: EnhancedBug) -> Iterator[BuildFlags]:
"""
yielded = []
# Ignore opt builds and non-fuzzing enabled builds
is_opt = all(flag is False for flag in bug.build_flags)
is_opt = all(cast(bool, flag) is False for flag in fields(bug.build_flags))
if not is_opt and bug.build_flags.fuzzing:
yielded.append(bug.build_flags)
yield bug.build_flags
Expand All @@ -49,17 +51,16 @@ def iter_build_flags(cls, bug: EnhancedBug) -> Iterator[BuildFlags]:
if not asan and not debug:
continue

raw_flags = dict.fromkeys(bug.build_flags._asdict(), False)
new_flags = copy(bug.build_flags)
if asan:
raw_flags["asan"] = asan
new_flags.asan = True

if debug:
raw_flags["debug"] = debug
new_flags.debug = True

if fuzzing:
raw_flags["fuzzing"] = fuzzing
new_flags.fuzzing = True

new_flags = BuildFlags(**raw_flags)
if not any(flags == new_flags for flags in yielded):
yield new_flags

Expand Down
12 changes: 1 addition & 11 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -213,17 +213,7 @@ def bugmon(tmp_path, request, bug, bugsy):

@pytest.fixture
def build_flags():
return BuildFlags(
asan=False,
tsan=False,
debug=False,
fuzzing=False,
coverage=False,
valgrind=False,
no_opt=False,
fuzzilli=False,
nyx=False,
)
return BuildFlags()


@pytest.fixture
Expand Down
6 changes: 4 additions & 2 deletions tests/test_configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def test_bug_configuration_iter_build_flags_001(bug_data):
# Check that all results are BuildFlags
assert all(isinstance(x, BuildFlags) for x in build_flags)
# Check for duplicates
assert len(build_flags) == len(set(build_flags))
assert build_flags[0] != build_flags[1]


def test_bug_configuration_iter_build_flags_002(bug_data):
Expand All @@ -45,7 +45,9 @@ def test_bug_configuration_iter_build_flags_002(bug_data):
# Check that all results are BuildFlags
assert all(isinstance(x, BuildFlags) for x in build_flags)
# Check for duplicates
assert len(build_flags) == len(set(build_flags))
for i in range(len(build_flags)):
for j in range(i + 1, len(build_flags)):
assert build_flags[i] != build_flags[j]


def test_bug_configuration_iter_tests_001():
Expand Down

0 comments on commit d48703f

Please sign in to comment.