[fuzz] Fix order of operands passed in to wasm-spec-interpreter (#4672)

In #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 #4671 and adds an
additional unit test to keep it fixed.
This commit is contained in:
Andrew Brown
2022-08-10 07:55:33 -07:00
committed by GitHub
parent 63c2d1e0c3
commit 7fa89c4a4f
3 changed files with 21 additions and 1 deletions

View File

@@ -55,7 +55,7 @@ let extract_exported_func export = match export with
(** Interpret the first exported function and return the result. Use provided (** Interpret the first exported function and return the result. Use provided
parameters if they exist, otherwise use default (zeroed) values. *) parameters if they exist, otherwise use default (zeroed) values. *)
let interpret_exn module_bytes opt_params = 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 module_ = parse module_bytes in
let m_isa = Ast_convert.convert_module (module_.it) in let m_isa = Ast_convert.convert_module (module_.it) in
let fuel = Z.of_string "4611686018427387904" in let fuel = Z.of_string "4611686018427387904" in

View File

@@ -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)]);
}
} }

View File

@@ -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))
)