Skip to content

Commit 2ebe93c

Browse files
bors[bot]bjfish
andauthored
Merge #687
687: Fix emscripten table assertion panic r=bjfish a=bjfish Fixes #686 Co-authored-by: Brandon Fish <[email protected]>
2 parents 6e8baf3 + 57e621d commit 2ebe93c

File tree

4 files changed

+17
-19
lines changed

4 files changed

+17
-19
lines changed

lib/emscripten-tests/tests/emtests/_common.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ macro_rules! assert_emscripten_output {
4242

4343
// let module = compile(&wasm_bytes[..])
4444
// .map_err(|err| format!("Can't create the WebAssembly module: {}", err)).unwrap(); // NOTE: Need to figure what the unwrap is for ??
45-
let mut emscripten_globals = EmscriptenGlobals::new(&module);
45+
let mut emscripten_globals = EmscriptenGlobals::new(&module).expect("globals are valid");
4646
let import_object = generate_emscripten_env(&mut emscripten_globals);
4747

4848
let mut instance = module.instantiate(&import_object)

lib/emscripten/src/lib.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ pub struct EmscriptenGlobals {
436436
}
437437

438438
impl EmscriptenGlobals {
439-
pub fn new(module: &Module /*, static_bump: u32 */) -> Self {
439+
pub fn new(module: &Module /*, static_bump: u32 */) -> Result<Self, String> {
440440
let mut use_old_abort_on_cannot_grow_memory = false;
441441
for (
442442
index,
@@ -458,8 +458,8 @@ impl EmscriptenGlobals {
458458
}
459459
}
460460

461-
let (table_min, table_max) = get_emscripten_table_size(&module);
462-
let (memory_min, memory_max, shared) = get_emscripten_memory_size(&module);
461+
let (table_min, table_max) = get_emscripten_table_size(&module)?;
462+
let (memory_min, memory_max, shared) = get_emscripten_memory_size(&module)?;
463463

464464
// Memory initialization
465465
let memory_type = MemoryDescriptor {
@@ -530,14 +530,14 @@ impl EmscriptenGlobals {
530530
}
531531
}
532532

533-
Self {
533+
Ok(Self {
534534
data,
535535
memory,
536536
table,
537537
memory_min,
538538
memory_max,
539539
null_func_names,
540-
}
540+
})
541541
}
542542
}
543543

lib/emscripten/src/utils.rs

+10-12
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,20 @@ pub fn is_emscripten_module(module: &Module) -> bool {
3333
false
3434
}
3535

36-
pub fn get_emscripten_table_size(module: &Module) -> (u32, Option<u32>) {
37-
assert!(
38-
module.info().imported_tables.len() > 0,
39-
"Emscripten requires at least one imported table"
40-
);
36+
pub fn get_emscripten_table_size(module: &Module) -> Result<(u32, Option<u32>), String> {
37+
if module.info().imported_tables.len() == 0 {
38+
return Err("Emscripten requires at least one imported table".to_string());
39+
}
4140
let (_, table) = &module.info().imported_tables[ImportedTableIndex::new(0)];
42-
(table.minimum, table.maximum)
41+
Ok((table.minimum, table.maximum))
4342
}
4443

45-
pub fn get_emscripten_memory_size(module: &Module) -> (Pages, Option<Pages>, bool) {
46-
assert!(
47-
module.info().imported_tables.len() > 0,
48-
"Emscripten requires at least one imported memory"
49-
);
44+
pub fn get_emscripten_memory_size(module: &Module) -> Result<(Pages, Option<Pages>, bool), String> {
45+
if module.info().imported_memories.len() == 0 {
46+
return Err("Emscripten requires at least one imported memory".to_string());
47+
}
5048
let (_, memory) = &module.info().imported_memories[ImportedMemoryIndex::new(0)];
51-
(memory.minimum, memory.maximum, memory.shared)
49+
Ok((memory.minimum, memory.maximum, memory.shared))
5250
}
5351

5452
/// Reads values written by `-s EMIT_EMSCRIPTEN_METADATA=1`

src/bin/wasmer.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> {
544544

545545
// TODO: refactor this
546546
if wasmer_emscripten::is_emscripten_module(&module) {
547-
let mut emscripten_globals = wasmer_emscripten::EmscriptenGlobals::new(&module);
547+
let mut emscripten_globals = wasmer_emscripten::EmscriptenGlobals::new(&module)?;
548548
let import_object = wasmer_emscripten::generate_emscripten_env(&mut emscripten_globals);
549549
let mut instance = module
550550
.instantiate(&import_object)

0 commit comments

Comments
 (0)