From ebe1ab2b547088532e9a9d090009bf99fb59c38f Mon Sep 17 00:00:00 2001 From: Olexandr88 Date: Fri, 19 Dec 2025 12:17:19 +0200 Subject: [PATCH] Add test for DoCall ApplyMessage nil return --- internal/ethapi/api.go | 5 ++++- internal/ethapi/api_test.go | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 8ef961597c..c90ba101c8 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -1002,9 +1002,12 @@ func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash // Execute the message. gp := new(core.GasPool).AddGas(math.MaxUint64) result, err := core.ApplyMessage(evm, msg, gp) + if result == nil && err == nil { + return nil, errors.New("EVM ApplyMessage returned nil result without error") + } if err := vmError(); err != nil { return nil, err - } + } // If the timer caused an abort, return an appropriate error message if evm.Cancelled() { diff --git a/internal/ethapi/api_test.go b/internal/ethapi/api_test.go index 762dc8337d..9639943227 100644 --- a/internal/ethapi/api_test.go +++ b/internal/ethapi/api_test.go @@ -157,3 +157,24 @@ func allTransactionTypes(addr common.Address, config *params.ChainConfig) []type }, } } +type mockBackend struct { + evmResult *ExecutionResult + evmError error +} + +func (m *mockBackend) StateAndHeaderByNumberOrHash(_ context.Context, _ rpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error) { + return &state.StateDB{}, &types.Header{}, nil +} + +func (m *mockBackend) Apply(_ *state.StateDB) error { + return nil +} + +func (m *mockBackend) EVM(ctx context.Context, msg Message, state *state.StateDB, header *types.Header, cfg vm.Config) (*ExecutionResult, error) { + return m.evmResult, m.evmError +} + +func TestDoCall_ApplyMessageReturnsNil(t *testing.T) { + backend := &mockBackend{ + evmResult: nil, + evmError: