mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
yulInterpreter: Add timeout based on the number of interpreted statements.
This commit is contained in:
parent
97818f6582
commit
10c3b31fa4
@ -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
|
||||
{
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user