mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Yul interpreter: Fix overflows in memory pointer read/writes.
This commit is contained in:
parent
0b4b1045cf
commit
0999e28e04
@ -7,8 +7,6 @@
|
||||
// ----
|
||||
// Trace:
|
||||
// Memory dump:
|
||||
// 0: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff07
|
||||
// FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0: 00000000000000000000000000000000000000000000000000000000000000ff
|
||||
// 0: 0000000000000000000000000000000000000000000000000000000000000007
|
||||
// Storage dump:
|
||||
// 0000000000000000000000000000000000000000000000000000000000000000: 0000000000000000000000000000000000000000000000000000000000000007
|
||||
// 0000000000000000000000000000000000000000000000000000000000000001: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
|
@ -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])];
|
||||
|
Loading…
Reference in New Issue
Block a user