1*c7d25dfdSNick Fitzgerald #![cfg(arc_try_new)]
2*c7d25dfdSNick Fitzgerald
3*c7d25dfdSNick Fitzgerald use wasmtime::{Config, Engine, Linker, Module, Result, Store};
4*c7d25dfdSNick Fitzgerald use wasmtime_fuzzing::oom::OomTest;
5*c7d25dfdSNick Fitzgerald
6*c7d25dfdSNick Fitzgerald #[test]
instance_pre_instantiate() -> Result<()>7*c7d25dfdSNick Fitzgerald fn instance_pre_instantiate() -> Result<()> {
8*c7d25dfdSNick Fitzgerald let module_bytes = {
9*c7d25dfdSNick Fitzgerald let mut config = Config::new();
10*c7d25dfdSNick Fitzgerald config.concurrency_support(false);
11*c7d25dfdSNick Fitzgerald let engine = Engine::new(&config)?;
12*c7d25dfdSNick Fitzgerald let module = Module::new(
13*c7d25dfdSNick Fitzgerald &engine,
14*c7d25dfdSNick Fitzgerald r#"
15*c7d25dfdSNick Fitzgerald (module
16*c7d25dfdSNick Fitzgerald (import "module" "func" (func (param i32) (result i32)))
17*c7d25dfdSNick Fitzgerald
18*c7d25dfdSNick Fitzgerald (memory (export "memory") 1)
19*c7d25dfdSNick Fitzgerald (data (i32.const 0) "a")
20*c7d25dfdSNick Fitzgerald
21*c7d25dfdSNick Fitzgerald (table (export "table") 1 funcref)
22*c7d25dfdSNick Fitzgerald (elem (i32.const 0) func 1)
23*c7d25dfdSNick Fitzgerald
24*c7d25dfdSNick Fitzgerald (func (export "func") (param i32) (result i32)
25*c7d25dfdSNick Fitzgerald (call 0 (local.get 0))
26*c7d25dfdSNick Fitzgerald )
27*c7d25dfdSNick Fitzgerald )
28*c7d25dfdSNick Fitzgerald "#,
29*c7d25dfdSNick Fitzgerald )?;
30*c7d25dfdSNick Fitzgerald module.serialize()?
31*c7d25dfdSNick Fitzgerald };
32*c7d25dfdSNick Fitzgerald
33*c7d25dfdSNick Fitzgerald let mut config = Config::new();
34*c7d25dfdSNick Fitzgerald config.enable_compiler(false);
35*c7d25dfdSNick Fitzgerald config.concurrency_support(false);
36*c7d25dfdSNick Fitzgerald
37*c7d25dfdSNick Fitzgerald let engine = Engine::new(&config)?;
38*c7d25dfdSNick Fitzgerald
39*c7d25dfdSNick Fitzgerald let mut linker = Linker::<()>::new(&engine);
40*c7d25dfdSNick Fitzgerald linker.func_wrap("module", "func", |x: i32| x * 2)?;
41*c7d25dfdSNick Fitzgerald
42*c7d25dfdSNick Fitzgerald let module = unsafe { Module::deserialize(&engine, &module_bytes)? };
43*c7d25dfdSNick Fitzgerald let instance_pre = linker.instantiate_pre(&module)?;
44*c7d25dfdSNick Fitzgerald
45*c7d25dfdSNick Fitzgerald OomTest::new().test(|| {
46*c7d25dfdSNick Fitzgerald let mut store = Store::try_new(&engine, ())?;
47*c7d25dfdSNick Fitzgerald let _ = instance_pre.instantiate(&mut store)?;
48*c7d25dfdSNick Fitzgerald Ok(())
49*c7d25dfdSNick Fitzgerald })
50*c7d25dfdSNick Fitzgerald }
51