Skip to content

Commit

Permalink
[fuzz] Fix order of operands passed in to wasm-spec-interpreter
Browse files Browse the repository at this point in the history
In bytecodealliance#4671, the meta-differential fuzz target was finding errors when
running certain Wasm modules (specifically `shr_s` in that case).
@conrad-watt diagnosed the issue as a missing reversal in the operands
passed to the spec interpreter. This change fixes bytecodealliance#4671 and adds an
additional unit test to keep it fixed.
  • Loading branch information
abrown committed Aug 10, 2022
1 parent b28b757 commit be78c8b
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 1 deletion.
2 changes: 1 addition & 1 deletion crates/fuzzing/wasm-spec-interpreter/ocaml/interpret.ml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ let extract_exported_func export = match export with
(** Interpret the first exported function and return the result. Use provided
parameters if they exist, otherwise use default (zeroed) values. *)
let interpret_exn module_bytes opt_params =
let opt_params_ = Option.map (List.map convert_to_wasm) opt_params in
let opt_params_ = Option.map (List.rev_map convert_to_wasm) opt_params in
let module_ = parse module_bytes in
let m_isa = Ast_convert.convert_module (module_.it) in
let fuel = Z.of_string "4611686018427387904" in
Expand Down
11 changes: 11 additions & 0 deletions crates/fuzzing/wasm-spec-interpreter/src/with_library.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,4 +119,15 @@ mod tests {
])]
);
}

// See issue https://github.com/bytecodealliance/wasmtime/issues/4671.
#[test]
fn order_of_params() {
let module = wat::parse_file("tests/shr_s.wat").unwrap();

let parameters = Some(vec![Value::I32(1795123818), Value::I32(-2147483648)]);
let results = interpret(&module, parameters.clone()).unwrap();

assert_eq!(results, vec![Value::I32(1795123818)]);
}
}
9 changes: 9 additions & 0 deletions crates/fuzzing/wasm-spec-interpreter/tests/shr_s.wat
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
(module
(type (;0;) (func (param i32 i32) (result i32)))
(func (;0;) (type 0) (param i32 i32) (result i32)
local.get 0
local.get 1
i32.shr_s
)
(export "test" (func 0))
)

0 comments on commit be78c8b

Please sign in to comment.