From 8ef9e9c4ad7e095a9e954bca91c2da4966d31a39 Mon Sep 17 00:00:00 2001 From: kourin Date: Wed, 4 Dec 2024 20:10:58 +0900 Subject: [PATCH] Add overflow checks for addition of AccessList cost in IntrinsicGas --- core/state_transition.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/state_transition.go b/core/state_transition.go index acab219086..7f69cbfe82 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -141,8 +141,17 @@ func IntrinsicGas(data []byte, accessList types.AccessList, isContractCreation, } if accessList != nil { - gas += uint64(len(accessList)) * params.TxAccessListAddressGas - gas += uint64(accessList.StorageKeys()) * params.TxAccessListStorageKeyGas + numItems := uint64(len(accessList)) + if (math.MaxUint64-gas)/params.TxAccessListAddressGas < numItems { + return 0, ErrGasUintOverflow + } + gas += numItems * params.TxAccessListAddressGas + + numStorageKeys := uint64(accessList.StorageKeys()) + if (math.MaxUint64-gas)/params.TxAccessListStorageKeyGas < numStorageKeys { + return 0, ErrGasUintOverflow + } + gas += numStorageKeys * params.TxAccessListStorageKeyGas } return gas, nil }