yulInterpreter: Add timeout based on the number of interpreted statements.

This commit is contained in:
Bhargava Shastry 2019-03-27 12:05:54 +01:00
parent 97818f6582
commit 10c3b31fa4
3 changed files with 9 additions and 0 deletions

View File

@ -24,6 +24,7 @@ void yulFuzzerUtil::interpret(ostream& _os, shared_ptr<yul::Block> _ast)
{
InterpreterState state;
state.maxTraceSize = 75;
state.maxSteps = 10000;
Interpreter interpreter(state);
try
{

View File

@ -128,6 +128,12 @@ void Interpreter::operator()(Continue const&)
void Interpreter::operator()(Block const& _block)
{
m_state.numSteps++;
if (m_state.maxSteps > 0 && m_state.numSteps >= m_state.maxSteps)
{
m_state.trace.emplace_back("Interpreter execution step limit reached.");
throw InterpreterTerminated();
}
openScope();
// Register functions.
for (auto const& statement: _block.statements)

View File

@ -75,6 +75,8 @@ struct InterpreterState
/// Memory size limit. Anything beyond this will still work, but it has
/// deterministic yet not necessarily consistent behaviour.
size_t maxMemSize = 0x200;
size_t maxSteps = 0;
size_t numSteps = 0;
LoopState loopState = LoopState::Default;
};