fuzz: txgraph: fix real_is_optimal flag propagation in CommitStaging

In the `txgraph` fuzz test, the `CommitStaging` step updates the
`SimTxGraph` levels simply by erasing the front (=main) one in the
`sims` vector, i.e. the staging level instance takes the place of the
main level instance. This also includes the `real_is_optimal` flag
(reflecting whether the corresponding real graph is known to be
optimally linearized), without taking into account that this flag
should only be set if _both_ levels before the commiting are optimal.

E.g. in case of #33097, the main level is not optimally linearized,
while the staging level is, and due to the incorrect propagation of the
latter to the simulation incorrectly assumes that the main level is
optimal, leading to the assertion fail. Fix this by setting the flag
in the resulting main level explicitly.

Resolves the fuzzing assertion fail in issue #33097.
This commit is contained in:
Sebastian Falbesoner
2025-08-04 01:34:04 +02:00
parent 83a2216f52
commit 444dcb2f99

View File

@@ -668,7 +668,10 @@ FUZZ_TARGET(txgraph)
} else if (block_builders.empty() && sims.size() > 1 && command-- == 0) {
// CommitStaging.
real->CommitStaging();
// Resulting main level is only guaranteed to be optimal if all levels are
const bool main_optimal = std::all_of(sims.cbegin(), sims.cend(), [](const auto &sim) { return sim.real_is_optimal; });
sims.erase(sims.begin());
sims.front().real_is_optimal = main_optimal;
break;
} else if (sims.size() > 1 && command-- == 0) {
// AbortStaging.