From fdbcb62adcb37edd09528fcf6d556f66595cf5f8 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Fri, 19 Apr 2024 14:42:28 +0100 Subject: [PATCH] `scripts/fuzz-parser`: work around race condition from running `cargo build` concurrently (#11039) --- scripts/fuzz-parser/fuzz.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/scripts/fuzz-parser/fuzz.py b/scripts/fuzz-parser/fuzz.py index d64aba8e32..00d5da28e8 100644 --- a/scripts/fuzz-parser/fuzz.py +++ b/scripts/fuzz-parser/fuzz.py @@ -89,12 +89,17 @@ def fuzz_code(seed: Seed, only_new_bugs: bool) -> FuzzResult: try: new_code = minimize_repro(code, contains_bug) except ValueError: - # `pysource_minimize.minimize()` sometimes raises `ValueError` internally. - # Just ignore it if so, and use the original generated code; - # minimizing the repro is a nice-to-have, but isn't crucial. - new_code = code - return FuzzResult(seed, MinimizedSourceCode(new_code)) - return FuzzResult(seed, None) + # `pysource_minimize.minimize()` failed to reproduce the bug. + # This could indicate that `contains_bug()` failed due to a race condition + # from running `cargo build` concurrently, so double-check that the + # original snippet does actually reproduce the bug. If so, just go with the + # original snippet; if not, report the fuzzing as successful: + maybe_bug = MinimizedSourceCode(code) if contains_bug(code) else None + else: + maybe_bug = MinimizedSourceCode(new_code) + else: + maybe_bug = None + return FuzzResult(seed, maybe_bug) def run_fuzzer_concurrently(args: ResolvedCliArgs) -> list[FuzzResult]: