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