diff --git a/CHANGELOG.md b/CHANGELOG.md index c9106293688..37b74d52deb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Blocks of changes will separated by version increments. ## **[Unreleased]** +- [#809](https://github.com/wasmerio/wasmer/pull/809) Fix bugs leading to panics in `LocalBacking`. - [#822](https://github.com/wasmerio/wasmer/pull/822) Update Cranelift fork version to `0.43.1` - [#829](https://github.com/wasmerio/wasmer/pull/829) Fix deps on `make bench-*` commands; benchmarks don't compile other backends now - [#807](https://github.com/wasmerio/wasmer/pull/807) Implement Send for `Instance`, breaking change on `ImportObject`, remove method `get_namespace` replaced with `with_namespace` and `maybe_with_namespace` diff --git a/lib/runtime-core/src/backing.rs b/lib/runtime-core/src/backing.rs index ef43bd58c64..fb9cb571484 100644 --- a/lib/runtime-core/src/backing.rs +++ b/lib/runtime-core/src/backing.rs @@ -152,6 +152,11 @@ impl LocalBacking { }]); } Initializer::GetGlobal(import_global_index) => { + if import_global_index.index() >= imports.globals.len() { + return Err(vec![LinkError::Generic { + message: "incorrect global index for initializer".to_string(), + }]); + } if let Value::I32(x) = imports.globals[import_global_index].get() { x as u32 } else { @@ -208,6 +213,11 @@ impl LocalBacking { }]); } Initializer::GetGlobal(import_global_index) => { + if import_global_index.index() >= imports.globals.len() { + return Err(vec![LinkError::Generic { + message: "incorrect global index for initializer".to_string(), + }]); + } if let Value::I32(x) = imports.globals[import_global_index].get() { x as u32 } else { @@ -276,6 +286,11 @@ impl LocalBacking { }]); } Initializer::GetGlobal(import_global_index) => { + if import_global_index.index() >= imports.globals.len() { + return Err(vec![LinkError::Generic { + message: "incorrect global index for initializer".to_string(), + }]); + } if let Value::I32(x) = imports.globals[import_global_index].get() { x as u32 } else { @@ -329,6 +344,11 @@ impl LocalBacking { }]); } Initializer::GetGlobal(import_global_index) => { + if import_global_index.index() >= imports.globals.len() { + return Err(vec![LinkError::Generic { + message: "incorrect global index for initializer".to_string(), + }]); + } if let Value::I32(x) = imports.globals[import_global_index].get() { x as u32 } else {