From 3d7cf547238f7824e615d6fe5a5893e37faa4519 Mon Sep 17 00:00:00 2001 From: navelbuffle Date: Sat, 4 Jan 2025 16:01:04 +0300 Subject: [PATCH] added error ReadUintOutOfRange --- onchain/src/Push3Interpreter.sol | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/onchain/src/Push3Interpreter.sol b/onchain/src/Push3Interpreter.sol index db5e4e9..93727f3 100644 --- a/onchain/src/Push3Interpreter.sol +++ b/onchain/src/Push3Interpreter.sol @@ -9,6 +9,8 @@ import "forge-std/console.sol"; * a token-based bytecode approach. */ contract Push3Interpreter { + // ReadUint`numBits` out of the code range. + error ReadUintOutOfRange(uint256 numBits); // ----------------------------------------------------- // 0. CONSTANTS // ----------------------------------------------------- @@ -137,14 +139,15 @@ contract Push3Interpreter { * @dev Read `x` bytes from `code` at `start` as uint. */ function readUint(bytes calldata code, uint32 start, uint256 numBytes) internal pure returns (uint256 word) { - if (start + bytesNum) > code.length) revert ReadUintOutOfRange(); + uint256 numBits = numBytes * 8; + if (start + bytesNum) > code.length) revert ReadUintOutOfRange(numBits); assembly { let buf := mload(0x40) // free memory // copy exactly x bytes from code into buf calldatacopy(buf, add(code.offset, start), numBytes) word := mload(buf) } - word >>= 256 - numBytes * 8; + word >>= 256 - numBits; } /**