From 7dc47014767ac27827f66afaa27e5266df11d33a Mon Sep 17 00:00:00 2001 From: Daniel Liu <139250065@qq.com> Date: Mon, 3 Nov 2025 15:15:19 +0800 Subject: [PATCH] all: handle err from func `rlp.Encode`, close XFN-127 (#1692) --- consensus/XDPoS/engines/engine_v1/utils.go | 4 +++- consensus/XDPoS/engines/engine_v2/utils.go | 4 +++- consensus/clique/clique.go | 4 +++- core/rawdb/accessors_chain_test.go | 4 +++- internal/ethapi/api.go | 4 +++- internal/ethapi/trie_proof_test.go | 8 ++++++-- p2p/enr/enr.go | 4 +++- tests/state_test_util.go | 4 +++- trie/node_test.go | 20 ++++++++++++-------- 9 files changed, 39 insertions(+), 17 deletions(-) diff --git a/consensus/XDPoS/engines/engine_v1/utils.go b/consensus/XDPoS/engines/engine_v1/utils.go index 1d4dc1ad9c..96422cac58 100644 --- a/consensus/XDPoS/engines/engine_v1/utils.go +++ b/consensus/XDPoS/engines/engine_v1/utils.go @@ -83,7 +83,9 @@ func sigHash(header *types.Header) (hash common.Hash) { if header.BaseFee != nil { enc = append(enc, header.BaseFee) } - rlp.Encode(hasher, enc) + if err := rlp.Encode(hasher, enc); err != nil { + panic("rlp.Encode fail: " + err.Error()) + } hasher.Sum(hash[:0]) return hash } diff --git a/consensus/XDPoS/engines/engine_v2/utils.go b/consensus/XDPoS/engines/engine_v2/utils.go index 797b4d32b9..b580afacaa 100644 --- a/consensus/XDPoS/engines/engine_v2/utils.go +++ b/consensus/XDPoS/engines/engine_v2/utils.go @@ -42,7 +42,9 @@ func sigHash(header *types.Header) (hash common.Hash) { if header.BaseFee != nil { enc = append(enc, header.BaseFee) } - rlp.Encode(hasher, enc) + if err := rlp.Encode(hasher, enc); err != nil { + panic("rlp.Encode fail: " + err.Error()) + } hasher.Sum(hash[:0]) return hash } diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go index da06f9e55f..0e0c9af569 100644 --- a/consensus/clique/clique.go +++ b/consensus/clique/clique.go @@ -168,7 +168,9 @@ func sigHash(header *types.Header) (hash common.Hash) { if header.BaseFee != nil { enc = append(enc, header.BaseFee) } - rlp.Encode(hasher, enc) + if err := rlp.Encode(hasher, enc); err != nil { + panic("rlp.Encode fail: " + err.Error()) + } hasher.Sum(hash[:0]) return hash } diff --git a/core/rawdb/accessors_chain_test.go b/core/rawdb/accessors_chain_test.go index 344c0f21e3..fbe9928812 100644 --- a/core/rawdb/accessors_chain_test.go +++ b/core/rawdb/accessors_chain_test.go @@ -96,7 +96,9 @@ func TestBodyStorage(t *testing.T) { body := &types.Body{Uncles: []*types.Header{{Extra: []byte("test header")}}} hasher := sha3.NewLegacyKeccak256() - rlp.Encode(hasher, body) + if err := rlp.Encode(hasher, body); err != nil { + t.Fatalf("rlp.Encode fail: %v", err) + } hash := common.BytesToHash(hasher.Sum(nil)) if entry := ReadBody(db, hash, 0); entry != nil { diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index cc52384cec..6d7d0b8127 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -341,7 +341,9 @@ func (s *PublicBlockChainAPI) GetTransactionAndReceiptProof(ctx context.Context, tx_tr := deriveTrie(block.Transactions()) keybuf := new(bytes.Buffer) - rlp.Encode(keybuf, uint(index)) + if err := rlp.Encode(keybuf, uint(index)); err != nil { + return nil, err + } var tx_proof proofPairList if err := tx_tr.Prove(keybuf.Bytes(), 0, &tx_proof); err != nil { return nil, err diff --git a/internal/ethapi/trie_proof_test.go b/internal/ethapi/trie_proof_test.go index ffaede8418..f87b014199 100644 --- a/internal/ethapi/trie_proof_test.go +++ b/internal/ethapi/trie_proof_test.go @@ -53,7 +53,9 @@ func TestTransactionProof(t *testing.T) { for i := 0; i < transactions.Len(); i++ { var proof proofPairList keybuf := new(bytes.Buffer) - rlp.Encode(keybuf, uint(i)) + if err := rlp.Encode(keybuf, uint(i)); err != nil { + t.Fatalf("rlp.Encode fail: %v", err) + } if err := tr.Prove(keybuf.Bytes(), 0, &proof); err != nil { t.Fatal("Prove err:", err) } @@ -86,7 +88,9 @@ func TestReceiptProof(t *testing.T) { for i := 0; i < receipts.Len(); i++ { var proof proofPairList keybuf := new(bytes.Buffer) - rlp.Encode(keybuf, uint(i)) + if err := rlp.Encode(keybuf, uint(i)); err != nil { + t.Fatalf("rlp.Encode fail: %v", err) + } if err := tr.Prove(keybuf.Bytes(), 0, &proof); err != nil { t.Fatal("Prove err:", err) } diff --git a/p2p/enr/enr.go b/p2p/enr/enr.go index 04d6ed4a66..940b1ca3ab 100644 --- a/p2p/enr/enr.go +++ b/p2p/enr/enr.go @@ -244,7 +244,9 @@ func (r *Record) signAndEncode(privkey *ecdsa.PrivateKey) error { // Sign the tail of the list. h := sha3.NewLegacyKeccak256() - rlp.Encode(h, list[1:]) + if err := rlp.Encode(h, list[1:]); err != nil { + return err + } sig, err := crypto.Sign(h.Sum(nil), privkey) if err != nil { return err diff --git a/tests/state_test_util.go b/tests/state_test_util.go index 7c7b2501d7..d96b3bcce1 100644 --- a/tests/state_test_util.go +++ b/tests/state_test_util.go @@ -290,7 +290,9 @@ func (tx *stTransaction) toMessage(ps stPostState, number *big.Int, baseFee *big func rlpHash(x interface{}) (h common.Hash) { hw := sha3.NewLegacyKeccak256() - rlp.Encode(hw, x) + if err := rlp.Encode(hw, x); err != nil { + panic("can't encode: " + err.Error()) + } hw.Sum(h[:0]) return h } diff --git a/trie/node_test.go b/trie/node_test.go index 6fb5df3eeb..f492e62fe6 100644 --- a/trie/node_test.go +++ b/trie/node_test.go @@ -44,8 +44,9 @@ func TestDecodeNestedNode(t *testing.T) { fullNodeData[15] = data buf := bytes.NewBuffer([]byte{}) - rlp.Encode(buf, fullNodeData) - + if err := rlp.Encode(buf, fullNodeData); err != nil { + t.Fatalf("rlp.Encode fail: %v", err) + } if _, err := decodeNode([]byte("testdecode"), buf.Bytes()); err != nil { t.Fatalf("decode nested full Node err: %v", err) } @@ -55,8 +56,9 @@ func TestDecodeFullNodeWrongSizeChild(t *testing.T) { fullNodeData := newTestFullNode([]byte("wrongsizechild")) fullNodeData[0] = []byte("00") buf := bytes.NewBuffer([]byte{}) - rlp.Encode(buf, fullNodeData) - + if err := rlp.Encode(buf, fullNodeData); err != nil { + t.Fatalf("rlp.Encode fail: %v", err) + } _, err := decodeNode([]byte("testdecode"), buf.Bytes()) if _, ok := err.(*decodeError); !ok { t.Fatalf("decodeNode returned wrong err: %v", err) @@ -74,8 +76,9 @@ func TestDecodeFullNodeWrongNestedFullNode(t *testing.T) { fullNodeData[15] = data buf := bytes.NewBuffer([]byte{}) - rlp.Encode(buf, fullNodeData) - + if err := rlp.Encode(buf, fullNodeData); err != nil { + t.Fatalf("rlp.Encode fail: %v", err) + } _, err := decodeNode([]byte("testdecode"), buf.Bytes()) if _, ok := err.(*decodeError); !ok { t.Fatalf("decodeNode returned wrong err: %v", err) @@ -85,8 +88,9 @@ func TestDecodeFullNodeWrongNestedFullNode(t *testing.T) { func TestDecodeFullNode(t *testing.T) { fullNodeData := newTestFullNode([]byte("decodefullnode")) buf := bytes.NewBuffer([]byte{}) - rlp.Encode(buf, fullNodeData) - + if err := rlp.Encode(buf, fullNodeData); err != nil { + t.Fatalf("rlp.Encode fail: %v", err) + } _, err := decodeNode([]byte("testdecode"), buf.Bytes()) if err != nil { t.Fatalf("decode full Node err: %v", err)