diff --git a/crates/api/src/instance.rs b/crates/api/src/instance.rs index 391754c42b52..d60c3d17f90c 100644 --- a/crates/api/src/instance.rs +++ b/crates/api/src/instance.rs @@ -124,6 +124,14 @@ impl Instance { } } + if imports.len() != module.imports().len() { + bail!( + "wrong number of imports provided, {} != {}", + imports.len(), + module.imports().len() + ); + } + module.register_frame_info(); let config = store.engine().config(); let instance_handle = instantiate( diff --git a/crates/api/tests/instance.rs b/crates/api/tests/instance.rs new file mode 100644 index 000000000000..c0f3db86a296 --- /dev/null +++ b/crates/api/tests/instance.rs @@ -0,0 +1,13 @@ +use anyhow::Result; +use wasmtime::*; + +#[test] +fn wrong_import_numbers() -> Result<()> { + let store = Store::default(); + let module = Module::new(&store, r#"(module (import "" "" (func)))"#)?; + + assert!(Instance::new(&module, &[]).is_err()); + let func = Func::wrap(&store, || {}); + assert!(Instance::new(&module, &[func.clone().into(), func.into()]).is_err()); + Ok(()) +}