From 118c5ea2241af4b146319b3861dbfd01a2dcc1be Mon Sep 17 00:00:00 2001 From: cl507523 Date: Thu, 26 Feb 2026 06:36:31 +0000 Subject: [PATCH] fix(evm): use deque for execution cache to prevent pointer invalidation Runtime functions like evmGetExtCodeHash and evmGetKeccak256 return pointers to bytes32 values stored in ExecutionCache vectors. The JIT defers loading these bytes until the value is consumed by a later opcode. When a second push_back triggers vector reallocation, all previously returned pointers become dangling, causing the JIT to read garbage data and spuriously trip the out-of-gas or overflow traps. Replace std::vector with std::deque for ExtcodeHashes and Keccak256Results, since deque::push_back preserves references to existing elements. Made-with: Cursor --- src/runtime/evm_instance.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/runtime/evm_instance.h b/src/runtime/evm_instance.h index a21a36b9..0570d1a7 100644 --- a/src/runtime/evm_instance.h +++ b/src/runtime/evm_instance.h @@ -11,6 +11,7 @@ #include "runtime/evm_module.h" #include "runtime/instance.h" #include +#include #include #include @@ -141,8 +142,8 @@ class EVMInstance final : public RuntimeObject { std::unordered_map, evmc::bytes32, PairHash> CalldataLoads; - std::vector ExtcodeHashes; - std::vector Keccak256Results; + std::deque ExtcodeHashes; + std::deque Keccak256Results; bool TxContextCached = false; };