Execution-Aware Program Reduction for WebAssembly via Record and Replay
Doehyun Baek, Daniel Lehmann, Ben L. Titzer, Sukyoung Ryu, Michael Pradel
TL;DR
This paper tackles the challenge of debugging WebAssembly engines by reducing large bug-triggering inputs. It introduces RR-Reduce, an execution-aware reduction technique that uses selective record-and-replay to preserve only the interactions necessary for a bug, and Hybrid-Reduce, which combines RR-Reduce with existing reducers to achieve even smaller outputs. Empirical evaluation across 28 Wasm programs demonstrates that RR-Reduce markedly lowers reduction size and time, while Hybrid-Reduce delivers the smallest results, often enabling rapid manual debugging. The work demonstrates that leveraging execution behavior yields substantial gains over traditional, execution-unaware reduction approaches, and provides open-source tooling to enable broader adoption. These methods can significantly accelerate on-demand debugging of Wasm engines and may generalize to other languages with record-and-replay capabilities.
Abstract
WebAssembly (Wasm) programs may trigger bugs in their engine implementations. To aid debugging, program reduction techniques try to produce a smaller variant of the input program that still triggers the bug. However, existing execution-unaware program reduction techniques struggle with large and complex Wasm programs, because they rely on static information and apply syntactic transformations, while ignoring the valuable information offered by the input program's execution behavior. We present RR-Reduce and Hybrid-Reduce, novel execution-aware program reduction techniques that leverage execution behaviors via record and replay. RR-Reduce identifies a bug-triggering function as the target function, isolates that function from the rest of the program, and generates a reduced program that replays only the interactions between the target function and the rest of the program. Hybrid-Reduce combines a complementary execution-unaware reduction technique with RR-Reduce to further reduce program size. We evaluate RR-Reduce and Hybrid-Reduce on 28 Wasm programs that trigger a diverse set of bugs in three engines. On average, RR-Reduce reduces the programs to 1.20 percent of their original size in 14.5 minutes, which outperforms the state of the art by 33.15 times in terms of reduction time. Hybrid-Reduce reduces the programs to 0.13 percent of their original size in 3.5 hours, which outperforms the state of the art by 3.42 times in terms of reduced program size and 2.26 times in terms of reduction time. We envision RR-Reduce as the go-to tool for rapid, on-demand debugging in minutes, and Hybrid-Reduce for scenarios where developers require the smallest possible programs.
