Yul interpreter: Fix overflows in memory pointer read/writes.

This commit is contained in:
Bhargava Shastry 2022-03-24 11:22:33 +01:00 committed by Nikola Matic
parent 0b4b1045cf
commit 0999e28e04
2 changed files with 9 additions and 9 deletions

View File

@ -7,8 +7,6 @@
// ----
// Trace:
// Memory dump:
// 0: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff07
// FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0: 00000000000000000000000000000000000000000000000000000000000000ff
// 0: 0000000000000000000000000000000000000000000000000000000000000007
// Storage dump:
// 0000000000000000000000000000000000000000000000000000000000000000: 0000000000000000000000000000000000000000000000000000000000000007
// 0000000000000000000000000000000000000000000000000000000000000001: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

View File

@ -274,15 +274,17 @@ u256 EVMInstructionInterpreter::eval(
return m_state.gaslimit;
// --------------- memory / storage / logs ---------------
case Instruction::MLOAD:
accessMemory(arg[0], 0x20);
return readMemoryWord(arg[0]);
if (accessMemory(arg[0], 0x20))
return readMemoryWord(arg[0]);
else
return 0;
case Instruction::MSTORE:
accessMemory(arg[0], 0x20);
writeMemoryWord(arg[0], arg[1]);
if (accessMemory(arg[0], 0x20))
writeMemoryWord(arg[0], arg[1]);
return 0;
case Instruction::MSTORE8:
accessMemory(arg[0], 1);
m_state.memory[arg[0]] = uint8_t(arg[1] & 0xff);
if (accessMemory(arg[0], 1))
m_state.memory[arg[0]] = uint8_t(arg[1] & 0xff);
return 0;
case Instruction::SLOAD:
return m_state.storage[h256(arg[0])];