diff --git a/lib/emscripten/src/lib.rs b/lib/emscripten/src/lib.rs index 41f408c42..af77b4a4e 100644 --- a/lib/emscripten/src/lib.rs +++ b/lib/emscripten/src/lib.rs @@ -436,7 +436,7 @@ pub struct EmscriptenGlobals { } impl EmscriptenGlobals { - pub fn new(module: &Module /*, static_bump: u32 */) -> Self { + pub fn new(module: &Module /*, static_bump: u32 */) -> Result { let mut use_old_abort_on_cannot_grow_memory = false; for ( index, @@ -458,7 +458,7 @@ impl EmscriptenGlobals { } } - let (table_min, table_max) = get_emscripten_table_size(&module); + let (table_min, table_max) = get_emscripten_table_size(&module)?; let (memory_min, memory_max, shared) = get_emscripten_memory_size(&module); // Memory initialization @@ -530,14 +530,14 @@ impl EmscriptenGlobals { } } - Self { + Ok(Self { data, memory, table, memory_min, memory_max, null_func_names, - } + }) } } diff --git a/lib/emscripten/src/utils.rs b/lib/emscripten/src/utils.rs index 37d3ae870..84ad7486d 100644 --- a/lib/emscripten/src/utils.rs +++ b/lib/emscripten/src/utils.rs @@ -33,13 +33,12 @@ pub fn is_emscripten_module(module: &Module) -> bool { false } -pub fn get_emscripten_table_size(module: &Module) -> (u32, Option) { - assert!( - module.info().imported_tables.len() > 0, - "Emscripten requires at least one imported table" - ); +pub fn get_emscripten_table_size(module: &Module) -> Result<(u32, Option), String> { + if module.info().imported_tables.len() == 0 { + return Err("Emscripten requires at least one imported table".to_string()); + } let (_, table) = &module.info().imported_tables[ImportedTableIndex::new(0)]; - (table.minimum, table.maximum) + Ok((table.minimum, table.maximum)) } pub fn get_emscripten_memory_size(module: &Module) -> (Pages, Option, bool) { diff --git a/src/bin/wasmer.rs b/src/bin/wasmer.rs index d36a53a32..be0939e43 100644 --- a/src/bin/wasmer.rs +++ b/src/bin/wasmer.rs @@ -544,7 +544,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> { // TODO: refactor this if wasmer_emscripten::is_emscripten_module(&module) { - let mut emscripten_globals = wasmer_emscripten::EmscriptenGlobals::new(&module); + let mut emscripten_globals = wasmer_emscripten::EmscriptenGlobals::new(&module)?; let import_object = wasmer_emscripten::generate_emscripten_env(&mut emscripten_globals); let mut instance = module .instantiate(&import_object)