From 1a2ecccbebb7e0aab8b292874c75734c5d058728 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 7 Apr 2020 12:05:28 -0500 Subject: [PATCH] Make too many imports an instantiation error (#1478) * Make too many imports an instantiation error Previously we'd accidentally only take the head of the list when instantiating, but instead this changes the API to require exactly the right number of imports. --- crates/api/src/instance.rs | 8 ++++++++ crates/api/tests/instance.rs | 13 +++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 crates/api/tests/instance.rs 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(()) +}