Skip to content

Commit

Permalink
Check the signature of host function. (bytecodealliance#84)
Browse files Browse the repository at this point in the history
  • Loading branch information
pepyakin authored and NikVolf committed Apr 18, 2018
1 parent 22b260a commit 5cda9a0
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,14 @@ impl<'a, E: Externals> Interpreter<'a, E> {
FuncInstanceInternal::Host { ref signature, .. } => {
let args = prepare_function_args(signature, &mut function_context.value_stack);
let return_val = FuncInstance::invoke(&nested_func, &args, self.externals)?;

// Check if `return_val` matches the signature.
let value_ty = return_val.clone().map(|val| val.value_type());
let expected_ty = nested_func.signature().return_type();
if value_ty != expected_ty {
return Err(TrapKind::UnexpectedSignature.into());
}

if let Some(return_val) = return_val {
function_context.value_stack_mut().push(return_val).map_err(Trap::new)?;
}
Expand Down

0 comments on commit 5cda9a0

Please sign in to comment.