All unintended VM exceptions work like OOG in tests

This commit is contained in:
Christoph Jentzsch 2014-11-10 22:26:07 +01:00
parent 9b14af5c15
commit d3910593a0
2 changed files with 20 additions and 5 deletions

View File

@ -32,6 +32,7 @@
#include <libdevcore/CommonIO.h> #include <libdevcore/CommonIO.h>
#include <libdevcore/CommonData.h> #include <libdevcore/CommonData.h>
#include <libevmcore/Instruction.h> #include <libevmcore/Instruction.h>
#include <libevm/VM.h>
#include "vm.h" #include "vm.h"
using namespace std; using namespace std;
@ -142,10 +143,16 @@ void doMyTests(json_spirit::mValue& v)
vm.reset(fev.gas); vm.reset(fev.gas);
bytes output; bytes output;
u256 gas;
try try
{ {
output = vm.go(fev).toBytes(); 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) catch (Exception const& _e)
{ {
cnote << "VM did throw an exception: " << diagnostic_information(_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["post"] = mValue(fev.exportState());
o["callcreates"] = fev.exportCallCreates(); o["callcreates"] = fev.exportCallCreates();
o["out"] = "0x" + toHex(output); o["out"] = "0x" + toHex(output);
fev.push(o, "gas", vm.gas()); fev.push(o, "gas", gas);
} }
} }

16
vm.cpp
View File

@ -298,19 +298,27 @@ void doVMTests(json_spirit::mValue& v, bool _fillin)
bytes output; bytes output;
VM vm(fev.gas); VM vm(fev.gas);
u256 gas;
try try
{ {
output = vm.go(fev, fev.simpleTrace()).toVector(); 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) catch (Exception const& _e)
{ {
cnote << "VM did throw an exception: " << diagnostic_information(_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) catch (std::exception const& _e)
{ {
cnote << "VM did throw an exception: " << _e.what(); 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 // 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["post"] = mValue(fev.exportState());
o["callcreates"] = fev.exportCallCreates(); o["callcreates"] = fev.exportCallCreates();
o["out"] = "0x" + toHex(output); o["out"] = "0x" + toHex(output);
fev.push(o, "gas", vm.gas()); fev.push(o, "gas", gas);
} }
else else
{ {
@ -352,7 +360,7 @@ void doVMTests(json_spirit::mValue& v, bool _fillin)
checkOutput(output, o); checkOutput(output, o);
BOOST_CHECK_EQUAL(toInt(o["gas"]), vm.gas()); BOOST_CHECK_EQUAL(toInt(o["gas"]), gas);
auto& expectedAddrs = test.addresses; auto& expectedAddrs = test.addresses;
auto& resultAddrs = fev.addresses; auto& resultAddrs = fev.addresses;