core/vm: fix initNewContract logic

This commit is contained in:
Marius van der Wijden 2026-03-10 17:59:43 +01:00
parent 7f045f6c4c
commit 3f41dd1c5b

View file

@ -625,10 +625,9 @@ func (evm *EVM) initNewContract(contract *Contract, address common.Address) ([]b
return ret, err return ret, err
} }
// Check code validity once upfront. // Check prefix before gas calculation.
codeErr := CheckMaxCodeSize(&evm.chainRules, uint64(len(ret))) if len(ret) >= 1 && ret[0] == 0xEF && evm.chainRules.IsLondon {
if codeErr == nil && len(ret) >= 1 && ret[0] == 0xEF && evm.chainRules.IsLondon { return ret, ErrInvalidCode
codeErr = ErrInvalidCode
} }
// Charge code storage gas. // Charge code storage gas.
@ -660,8 +659,9 @@ func (evm *EVM) initNewContract(contract *Contract, address common.Address) ([]b
} }
} }
if codeErr != nil { // Verify max code size after gas calculation.
return ret, codeErr if err := CheckMaxCodeSize(&evm.chainRules, uint64(len(ret))); err != nil {
return ret, err
} }
if len(ret) > 0 { if len(ret) > 0 {