From bbac6f8da1f2cdc80243a5b84773cecf57b97992 Mon Sep 17 00:00:00 2001 From: Gav <gavin@parity.io> Date: Fri, 26 Jan 2018 15:24:12 +0100 Subject: [PATCH] Handle panics in native execution. --- substrate/executor/src/native_executor.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/substrate/executor/src/native_executor.rs b/substrate/executor/src/native_executor.rs index e195e8f8d77..14e08f8e80c 100644 --- a/substrate/executor/src/native_executor.rs +++ b/substrate/executor/src/native_executor.rs @@ -1,3 +1,4 @@ +use std::panic::catch_unwind; use primitives::contract::CallData; use state_machine::{Externalities, CodeExecutor}; use error::{Error, ErrorKind, Result}; @@ -22,9 +23,8 @@ impl CodeExecutor for NativeExecutor { let native_equivalent = include_bytes!("../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm"); if code == &native_equivalent[..] { runtime_support::with_externalities(ext, || match method { - // TODO: Panic handler that comes back with error. - "execute_block" => Ok(runtime::execute_block(&data.0)), - "execute_transaction" => Ok(runtime::execute_transaction(&data.0)), + "execute_block" => catch_unwind(|| runtime::execute_block(&data.0)).map_err(|_| ErrorKind::Runtime.into()), + "execute_transaction" => catch_unwind(|| runtime::execute_transaction(&data.0)).map_err(|_| ErrorKind::Runtime.into()), _ => Err(ErrorKind::MethodNotFound(method.to_owned()).into()), }) } else { -- GitLab