diff --git a/src/evm/opcode_handlers.cpp b/src/evm/opcode_handlers.cpp index 2204e5665..97c0fcc80 100644 --- a/src/evm/opcode_handlers.cpp +++ b/src/evm/opcode_handlers.cpp @@ -597,18 +597,10 @@ void ExtCodeCopyHandler::doExecute() { Frame->Msg.gas -= ADDITIONAL_COLD_ACCOUNT_ACCESS_COST; } - size_t CodeSize = Frame->Host->get_code_size(Addr); - - if (Offset >= CodeSize) { - // If Offset is beyond the code size, fill with zeros - if (Size > 0) { - std::memset(Frame->Memory.data() + DestOffset, 0, Size); - } - } else { + if (Size > 0) { // Copy code to memory - auto CopySize = std::min(Size, CodeSize - Offset); size_t CopiedSize = Frame->Host->copy_code( - Addr, Offset, Frame->Memory.data() + DestOffset, CopySize); + Addr, Offset, Frame->Memory.data() + DestOffset, Size); if (CopiedSize < Size) { // If the copied size is less than requested, fill the rest with zeros std::memset(Frame->Memory.data() + DestOffset + CopiedSize, 0, diff --git a/tests/evmone_unittests/EVMOneInterpreterUnitTestsRunList.txt b/tests/evmone_unittests/EVMOneInterpreterUnitTestsRunList.txt index 262b7ee84..b5c0beda2 100644 --- a/tests/evmone_unittests/EVMOneInterpreterUnitTestsRunList.txt +++ b/tests/evmone_unittests/EVMOneInterpreterUnitTestsRunList.txt @@ -209,3 +209,7 @@ multi_vm/evm.exp/external_vm multi_vm/evm.exp_oog/external_vm multi_vm/evm.exp_pre_spurious_dragon/external_vm multi_vm/evm.shift_overflow/external_vm +multi_vm/evm.eip2929_case2/external_vm +multi_vm/evm.extcode/external_vm +multi_vm/evm.extcodecopy_nonzero_index/external_vm +multi_vm/evm.extcodecopy_fill_tail/external_vm