From 315b87c718d6c8dc9c60b48cf1c5bf24d22184de Mon Sep 17 00:00:00 2001 From: Patrick Ventuzelo Date: Wed, 18 Sep 2019 10:28:49 +0200 Subject: [PATCH] check index before accessing imports.globals --- lib/runtime-core/src/backing.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/runtime-core/src/backing.rs b/lib/runtime-core/src/backing.rs index 814dc56e7..710471d15 100644 --- a/lib/runtime-core/src/backing.rs +++ b/lib/runtime-core/src/backing.rs @@ -149,6 +149,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 { @@ -205,6 +210,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 { @@ -273,6 +283,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 { @@ -326,6 +341,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 {