mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #490 from CJentzsch/StateBug
Quick fix for OOG in deep calls
This commit is contained in:
commit
c447914a0b
@ -57,7 +57,6 @@ public:
|
|||||||
eth::State m_statePost;
|
eth::State m_statePost;
|
||||||
eth::ExtVMFace m_environment;
|
eth::ExtVMFace m_environment;
|
||||||
eth::Transaction m_transaction;
|
eth::Transaction m_transaction;
|
||||||
bytes code;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
json_spirit::mObject& m_TestObject;
|
json_spirit::mObject& m_TestObject;
|
||||||
|
@ -134,10 +134,10 @@ void doMyTests(json_spirit::mValue& v)
|
|||||||
o["pre"] = mValue(fev.exportState());
|
o["pre"] = mValue(fev.exportState());
|
||||||
|
|
||||||
fev.importExec(o["exec"].get_obj());
|
fev.importExec(o["exec"].get_obj());
|
||||||
if (!fev.code)
|
if (fev.code.empty())
|
||||||
{
|
{
|
||||||
fev.thisTxCode = get<3>(fev.addresses.at(fev.myAddress));
|
fev.thisTxCode = get<3>(fev.addresses.at(fev.myAddress));
|
||||||
fev.code = &fev.thisTxCode;
|
fev.code = fev.thisTxCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
vm.reset(fev.gas);
|
vm.reset(fev.gas);
|
||||||
|
14
state.cpp
14
state.cpp
@ -55,12 +55,6 @@ void doStateTests(json_spirit::mValue& v, bool _fillin)
|
|||||||
|
|
||||||
ImportTest importer(o, _fillin);
|
ImportTest importer(o, _fillin);
|
||||||
|
|
||||||
if (_fillin)
|
|
||||||
{
|
|
||||||
importer.code = importer.m_statePre.code(importer.m_environment.myAddress);
|
|
||||||
importer.m_environment.code = &importer.code;
|
|
||||||
}
|
|
||||||
|
|
||||||
State theState = importer.m_statePre;
|
State theState = importer.m_statePre;
|
||||||
bytes tx = importer.m_transaction.rlp();
|
bytes tx = importer.m_transaction.rlp();
|
||||||
bytes output;
|
bytes output;
|
||||||
@ -124,12 +118,4 @@ BOOST_AUTO_TEST_CASE(stSystemOperationsTest)
|
|||||||
dev::test::executeTests("stSystemOperationsTest", "/StateTests", dev::test::doStateTests);
|
dev::test::executeTests("stSystemOperationsTest", "/StateTests", dev::test::doStateTests);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(tmp)
|
|
||||||
{
|
|
||||||
int currentVerbosity = g_logVerbosity;
|
|
||||||
g_logVerbosity = 12;
|
|
||||||
dev::test::executeTests("tmp", "/StateTests", dev::test::doStateTests);
|
|
||||||
g_logVerbosity = currentVerbosity;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
{
|
|
||||||
"ABAcalls0": {
|
|
||||||
"env" : {
|
|
||||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6",
|
|
||||||
"currentNumber" : "0",
|
|
||||||
"currentGasLimit" : "10000000",
|
|
||||||
"currentDifficulty" : "256",
|
|
||||||
"currentTimestamp" : 1,
|
|
||||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"
|
|
||||||
},
|
|
||||||
"pre" : {
|
|
||||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
|
||||||
"balance" : "1000000000000000000",
|
|
||||||
"nonce" : 0,
|
|
||||||
"code" : "{ [[ (PC) ]] (CALL 1000 0x945304eb96065b2a98b57a48a06ae28d285a71b5 24 0 0 0 0) }",
|
|
||||||
"storage": {}
|
|
||||||
},
|
|
||||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
|
||||||
"balance" : "23",
|
|
||||||
"code" : " { [[ (PC) ]] (ADD 1 (CALL 500 0x095e7baea6a6c7c4c2dfeb977efac326af552d87 23 0 0 0 0)) } ",
|
|
||||||
"nonce" : "0",
|
|
||||||
"storage" : {
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
|
||||||
"balance" : "1000000000000000000",
|
|
||||||
"nonce" : 0,
|
|
||||||
"code" : "",
|
|
||||||
"storage": {}
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
|
||||||
"transaction" : {
|
|
||||||
"nonce" : "0",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"gasLimit" : "10000",
|
|
||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
|
||||||
"value" : "100000",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"data" : ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
10
vm.cpp
10
vm.cpp
@ -29,7 +29,7 @@ using namespace dev::eth;
|
|||||||
using namespace dev::test;
|
using namespace dev::test;
|
||||||
|
|
||||||
FakeExtVM::FakeExtVM(eth::BlockInfo const& _previousBlock, eth::BlockInfo const& _currentBlock, unsigned _depth): /// TODO: XXX: remove the default argument & fix.
|
FakeExtVM::FakeExtVM(eth::BlockInfo const& _previousBlock, eth::BlockInfo const& _currentBlock, unsigned _depth): /// TODO: XXX: remove the default argument & fix.
|
||||||
ExtVMFace(Address(), Address(), Address(), 0, 1, bytesConstRef(), bytesConstRef(), _previousBlock, _currentBlock, _depth) {}
|
ExtVMFace(Address(), Address(), Address(), 0, 1, bytesConstRef(), bytes(), _previousBlock, _currentBlock, _depth) {}
|
||||||
|
|
||||||
h160 FakeExtVM::create(u256 _endowment, u256* _gas, bytesConstRef _init, OnOpFunc const&)
|
h160 FakeExtVM::create(u256 _endowment, u256* _gas, bytesConstRef _init, OnOpFunc const&)
|
||||||
{
|
{
|
||||||
@ -195,11 +195,11 @@ void FakeExtVM::importExec(mObject& _o)
|
|||||||
gas = toInt(_o["gas"]);
|
gas = toInt(_o["gas"]);
|
||||||
|
|
||||||
thisTxCode.clear();
|
thisTxCode.clear();
|
||||||
code = &thisTxCode;
|
code = thisTxCode;
|
||||||
|
|
||||||
thisTxCode = importCode(_o);
|
thisTxCode = importCode(_o);
|
||||||
if (_o["code"].type() != str_type && _o["code"].type() != array_type)
|
if (_o["code"].type() != str_type && _o["code"].type() != array_type)
|
||||||
code.reset();
|
code.clear();
|
||||||
|
|
||||||
thisTxData.clear();
|
thisTxData.clear();
|
||||||
thisTxData = importData(_o);
|
thisTxData = importData(_o);
|
||||||
@ -289,10 +289,10 @@ void doVMTests(json_spirit::mValue& v, bool _fillin)
|
|||||||
o["pre"] = mValue(fev.exportState());
|
o["pre"] = mValue(fev.exportState());
|
||||||
|
|
||||||
fev.importExec(o["exec"].get_obj());
|
fev.importExec(o["exec"].get_obj());
|
||||||
if (!fev.code)
|
if (fev.code.empty())
|
||||||
{
|
{
|
||||||
fev.thisTxCode = get<3>(fev.addresses.at(fev.myAddress));
|
fev.thisTxCode = get<3>(fev.addresses.at(fev.myAddress));
|
||||||
fev.code = &fev.thisTxCode;
|
fev.code = fev.thisTxCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes output;
|
bytes output;
|
||||||
|
Loading…
Reference in New Issue
Block a user