diff --git a/libethereum/VM.h b/libethereum/VM.h index caafc64b0..2f7d1fcaf 100644 --- a/libethereum/VM.h +++ b/libethereum/VM.h @@ -162,21 +162,29 @@ template void eth::VM::go(Ext& _ext, uint64_t _steps) break; case Instruction::DIV: require(2); + if (!m_stack[m_stack.size() - 2]) + return; m_stack[m_stack.size() - 2] = m_stack.back() / m_stack[m_stack.size() - 2]; m_stack.pop_back(); break; case Instruction::SDIV: require(2); + if (!m_stack[m_stack.size() - 2]) + return; (s256&)m_stack[m_stack.size() - 2] = (s256&)m_stack.back() / (s256&)m_stack[m_stack.size() - 2]; m_stack.pop_back(); break; case Instruction::MOD: require(2); + if (!m_stack[m_stack.size() - 2]) + return; m_stack[m_stack.size() - 2] = m_stack.back() % m_stack[m_stack.size() - 2]; m_stack.pop_back(); break; case Instruction::SMOD: require(2); + if (!m_stack[m_stack.size() - 2]) + return; (s256&)m_stack[m_stack.size() - 2] = (s256&)m_stack.back() % (s256&)m_stack[m_stack.size() - 2]; m_stack.pop_back(); break;