From 4d07d1a340e4d9c3a3592debfdf32be8bdc1a0cc Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 6 Jun 2019 00:38:07 +0200 Subject: [PATCH] rust: unwind execution panics in evmc-declare --- bindings/rust/evmc-declare/src/lib.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/bindings/rust/evmc-declare/src/lib.rs b/bindings/rust/evmc-declare/src/lib.rs index 9deaf8c6b..4a1a998fe 100644 --- a/bindings/rust/evmc-declare/src/lib.rs +++ b/bindings/rust/evmc-declare/src/lib.rs @@ -363,7 +363,15 @@ fn build_execute_fn(names: &VMNameSet) -> proc_macro2::TokenStream { ::evmc_vm::EvmcContainer::<#type_name_ident>::from_ffi_pointer(instance) }; - let result = container.execute(code_ref, &execution_context); + let result = ::std::panic::catch_unwind(|| { + container.execute(code_ref, &execution_context) + }); + + let result = if result.is_err() { + ::evmc_vm::ExecutionResult::new(::evmc_vm::ffi::evmc_status_code::EVMC_INTERNAL_ERROR, 0, None) + } else { + result.unwrap() + }; unsafe { ::evmc_vm::EvmcContainer::into_ffi_pointer(container);