From d3910593a08bf1718b35136d2119462c36e12920 Mon Sep 17 00:00:00 2001 From: Christoph Jentzsch Date: Mon, 10 Nov 2014 22:26:07 +0100 Subject: [PATCH] All unintended VM exceptions work like OOG in tests --- createRandomTest.cpp | 9 ++++++++- vm.cpp | 16 ++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/createRandomTest.cpp b/createRandomTest.cpp index f74be9304..60a2039c8 100644 --- a/createRandomTest.cpp +++ b/createRandomTest.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include "vm.h" using namespace std; @@ -142,10 +143,16 @@ void doMyTests(json_spirit::mValue& v) vm.reset(fev.gas); bytes output; + u256 gas; try { output = vm.go(fev).toBytes(); } + catch (eth::VMException const& _e) + { + cnote << "VM did throw an exception: " << diagnostic_information(_e); + gas = 0; + } catch (Exception const& _e) { cnote << "VM did throw an exception: " << diagnostic_information(_e); @@ -176,6 +183,6 @@ void doMyTests(json_spirit::mValue& v) o["post"] = mValue(fev.exportState()); o["callcreates"] = fev.exportCallCreates(); o["out"] = "0x" + toHex(output); - fev.push(o, "gas", vm.gas()); + fev.push(o, "gas", gas); } } diff --git a/vm.cpp b/vm.cpp index b36d3dc2b..cacbf94cc 100644 --- a/vm.cpp +++ b/vm.cpp @@ -298,19 +298,27 @@ void doVMTests(json_spirit::mValue& v, bool _fillin) bytes output; VM vm(fev.gas); + + u256 gas; try { output = vm.go(fev, fev.simpleTrace()).toVector(); + gas = vm.gas(); + } + catch (VMException const& _e) + { + cnote << "VM did throw an exception: " << diagnostic_information(_e); + gas = 0; } catch (Exception const& _e) { cnote << "VM did throw an exception: " << diagnostic_information(_e); - //BOOST_ERROR("Failed VM Test with Exception: " << e.what()); + BOOST_ERROR("Failed VM Test with Exception: " << _e.what()); } catch (std::exception const& _e) { cnote << "VM did throw an exception: " << _e.what(); - //BOOST_ERROR("Failed VM Test with Exception: " << e.what()); + BOOST_ERROR("Failed VM Test with Exception: " << _e.what()); } // delete null entries in storage for the sake of comparison @@ -337,7 +345,7 @@ void doVMTests(json_spirit::mValue& v, bool _fillin) o["post"] = mValue(fev.exportState()); o["callcreates"] = fev.exportCallCreates(); o["out"] = "0x" + toHex(output); - fev.push(o, "gas", vm.gas()); + fev.push(o, "gas", gas); } else { @@ -352,7 +360,7 @@ void doVMTests(json_spirit::mValue& v, bool _fillin) checkOutput(output, o); - BOOST_CHECK_EQUAL(toInt(o["gas"]), vm.gas()); + BOOST_CHECK_EQUAL(toInt(o["gas"]), gas); auto& expectedAddrs = test.addresses; auto& resultAddrs = fev.addresses;