From 52a3f9c66fc0e856f184515eb08c7c3129702883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Kunze=20K=C3=BCllmer?= <31522760+fedekunze@users.noreply.github.com> Date: Tue, 28 Sep 2021 12:07:18 +0200 Subject: [PATCH] rpc: fix truncation (#598) * rpc: fix truncation * c++ --- CHANGELOG.md | 1 + ethereum/rpc/types/block.go | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5ee5796..cfb1d672 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes +* (rpc) [tharsis#598](https://github.com/tharsis/ethermint/pull/598) Check truncation when creating a `BlockNumber` from `big.Int` * (evm) [tharsis#597](https://github.com/tharsis/ethermint/pull/597) Check for `uint64` -> `int64` block height overflow on `GetHashFn` * (evm) [tharsis#579](https://github.com/tharsis/ethermint/pull/579) Update `DeriveChainID` function to handle `v` signature values `< 35`. * (encoding) [tharsis#478](https://github.com/tharsis/ethermint/pull/478) Register `Evidence` to amino codec. diff --git a/ethereum/rpc/types/block.go b/ethereum/rpc/types/block.go index 96364f7f..f368951d 100644 --- a/ethereum/rpc/types/block.go +++ b/ethereum/rpc/types/block.go @@ -9,13 +9,15 @@ import ( "math/big" "strings" - "github.com/ethereum/go-ethereum/common" - - grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" "github.com/spf13/cast" "google.golang.org/grpc/metadata" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + + ethermint "github.com/tharsis/ethermint/types" ) // BlockNumber represents decoding hex string to block values @@ -35,6 +37,11 @@ const ( // NewBlockNumber creates a new BlockNumber instance. func NewBlockNumber(n *big.Int) BlockNumber { + if !n.IsInt64() { + // default to latest block if it overflows + return EthLatestBlockNumber + } + return BlockNumber(n.Int64()) } @@ -176,10 +183,13 @@ func (bnh *BlockNumberOrHash) decodeFromString(input string) error { if err != nil { return err } - if blockNumber > math.MaxInt64 { - return fmt.Errorf("blocknumber %d is too high", blockNumber) + + bnInt, err := ethermint.SafeInt64(blockNumber) + if err != nil { + return err } - bn := BlockNumber(blockNumber) + + bn := BlockNumber(bnInt) bnh.BlockNumber = &bn } return nil