mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-20 19:56:44 +00:00
rpc: reject block parameter with neither number nor hash
An EIP-1898 block parameter object specifying neither blockNumber nor
blockHash (e.g. {}) is invalid, but UnmarshalJSON accepted it and it was
only rejected later in the backend with a generic -32000 error. Reject it
during unmarshalling so it surfaces as -32602 (invalid params), mirroring
the existing 'cannot specify both' check.
This commit is contained in:
parent
00a773dad7
commit
a3bb5a0596
2 changed files with 5 additions and 0 deletions
|
|
@ -158,6 +158,9 @@ func (bnh *BlockNumberOrHash) UnmarshalJSON(data []byte) error {
|
|||
if e.BlockNumber != nil && e.BlockHash != nil {
|
||||
return errors.New("cannot specify both BlockHash and BlockNumber, choose one or the other")
|
||||
}
|
||||
if e.BlockNumber == nil && e.BlockHash == nil {
|
||||
return errors.New("must specify either BlockHash or BlockNumber")
|
||||
}
|
||||
bnh.BlockNumber = e.BlockNumber
|
||||
bnh.BlockHash = e.BlockHash
|
||||
bnh.RequireCanonical = e.RequireCanonical
|
||||
|
|
|
|||
|
|
@ -109,6 +109,8 @@ func TestBlockNumberOrHash_UnmarshalJSON(t *testing.T) {
|
|||
27: {`{"blockNumber":"safe"}`, false, BlockNumberOrHashWithNumber(SafeBlockNumber)},
|
||||
28: {`{"blockNumber":"finalized"}`, false, BlockNumberOrHashWithNumber(FinalizedBlockNumber)},
|
||||
29: {`{"blockNumber":"0x1", "blockHash":"0x0000000000000000000000000000000000000000000000000000000000000000"}`, true, BlockNumberOrHash{}},
|
||||
30: {`{}`, true, BlockNumberOrHash{}},
|
||||
31: {`{"requireCanonical":true}`, true, BlockNumberOrHash{}},
|
||||
}
|
||||
|
||||
for i, test := range tests {
|
||||
|
|
|
|||
Loading…
Reference in a new issue