Merge PR #4100: Return correct error on invalid messages

This commit is contained in:
Alexander Bezobchuk 2019-04-15 12:25:04 -04:00 committed by GitHub
parent 9435114366
commit 585b68ec70
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 127 additions and 8 deletions

View File

@ -0,0 +1,2 @@
#3978 Return ErrUnknownRequest in message handlers for unknown
or invalid routed messages.

View File

@ -1,6 +1,8 @@
package bank
import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/bank/tags"
)
@ -11,10 +13,12 @@ func NewHandler(k Keeper) sdk.Handler {
switch msg := msg.(type) {
case MsgSend:
return handleMsgSend(ctx, k, msg)
case MsgMultiSend:
return handleMsgMultiSend(ctx, k, msg)
default:
errMsg := "Unrecognized bank Msg type: %s" + msg.Type()
errMsg := fmt.Sprintf("unrecognized bank message type: %T", msg)
return sdk.ErrUnknownRequest(errMsg).Result()
}
}

18
x/bank/handler_test.go Normal file
View File

@ -0,0 +1,18 @@
package bank
import (
"strings"
"testing"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/require"
)
func TestInvalidMsg(t *testing.T) {
h := NewHandler(nil)
res := h(sdk.Context{}, sdk.NewTestMsg())
require.False(t, res.IsOK())
require.True(t, strings.Contains(res.Log, "unrecognized bank message type"))
}

View File

@ -1,6 +1,8 @@
package crisis
import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/crisis/tags"
)
@ -13,12 +15,13 @@ const (
func NewHandler(k Keeper) sdk.Handler {
return func(ctx sdk.Context, msg sdk.Msg) sdk.Result {
switch msg := msg.(type) {
case MsgVerifyInvariant:
return handleMsgVerifyInvariant(ctx, msg, k)
default:
return sdk.ErrTxDecode("invalid message parse in crisis module").Result()
errMsg := fmt.Sprintf("unrecognized crisis message type: %T", msg)
return sdk.ErrUnknownRequest(errMsg).Result()
}
}
}

View File

@ -3,6 +3,7 @@ package crisis
import (
"errors"
"fmt"
"strings"
"testing"
"github.com/stretchr/testify/require"
@ -99,3 +100,12 @@ func TestHandleMsgVerifyInvariantWithInvariantNotBroken(t *testing.T) {
res := handleMsgVerifyInvariant(ctx, msg, crisisKeeper)
require.True(t, res.IsOK())
}
func TestInvalidMsg(t *testing.T) {
k := Keeper{}
h := NewHandler(k)
res := h(sdk.Context{}, sdk.NewTestMsg())
require.False(t, res.IsOK())
require.True(t, strings.Contains(res.Log, "unrecognized crisis message type"))
}

View File

@ -1,6 +1,8 @@
package distribution
import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/distribution/keeper"
"github.com/cosmos/cosmos-sdk/x/distribution/tags"
@ -13,12 +15,16 @@ func NewHandler(k keeper.Keeper) sdk.Handler {
switch msg := msg.(type) {
case types.MsgSetWithdrawAddress:
return handleMsgModifyWithdrawAddress(ctx, msg, k)
case types.MsgWithdrawDelegatorReward:
return handleMsgWithdrawDelegatorReward(ctx, msg, k)
case types.MsgWithdrawValidatorCommission:
return handleMsgWithdrawValidatorCommission(ctx, msg, k)
default:
return sdk.ErrTxDecode("invalid message parse in distribution module").Result()
errMsg := fmt.Sprintf("unrecognized distribution message type: %T", msg)
return sdk.ErrUnknownRequest(errMsg).Result()
}
}
}

View File

@ -13,12 +13,15 @@ func NewHandler(keeper Keeper) sdk.Handler {
switch msg := msg.(type) {
case MsgDeposit:
return handleMsgDeposit(ctx, keeper, msg)
case MsgSubmitProposal:
return handleMsgSubmitProposal(ctx, keeper, msg)
case MsgVote:
return handleMsgVote(ctx, keeper, msg)
default:
errMsg := fmt.Sprintf("Unrecognized gov msg type: %T", msg)
errMsg := fmt.Sprintf("unrecognized gov message type: %T", msg)
return sdk.ErrUnknownRequest(errMsg).Result()
}
}

19
x/gov/handler_test.go Normal file
View File

@ -0,0 +1,19 @@
package gov
import (
"strings"
"testing"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/require"
)
func TestInvalidMsg(t *testing.T) {
k := Keeper{}
h := NewHandler(k)
res := h(sdk.Context{}, sdk.NewTestMsg())
require.False(t, res.IsOK())
require.True(t, strings.Contains(res.Log, "unrecognized gov message type"))
}

View File

@ -1,6 +1,8 @@
package ibc
import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
)
@ -9,10 +11,12 @@ func NewHandler(ibcm Mapper, ck BankKeeper) sdk.Handler {
switch msg := msg.(type) {
case MsgIBCTransfer:
return handleIBCTransferMsg(ctx, ibcm, ck, msg)
case MsgIBCReceive:
return handleIBCReceiveMsg(ctx, ibcm, ck, msg)
default:
errMsg := "Unrecognized IBC Msg type: " + msg.Type()
errMsg := fmt.Sprintf("unrecognized IBC message type: %T", msg)
return sdk.ErrUnknownRequest(errMsg).Result()
}
}

19
x/ibc/handler_test.go Normal file
View File

@ -0,0 +1,19 @@
package ibc
import (
"strings"
"testing"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/require"
)
func TestInvalidMsg(t *testing.T) {
m := Mapper{}
h := NewHandler(m, nil)
res := h(sdk.Context{}, sdk.NewTestMsg())
require.False(t, res.IsOK())
require.True(t, strings.Contains(res.Log, "unrecognized IBC message type"))
}

View File

@ -1,6 +1,8 @@
package slashing
import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/slashing/tags"
)
@ -11,8 +13,10 @@ func NewHandler(k Keeper) sdk.Handler {
switch msg := msg.(type) {
case MsgUnjail:
return handleMsgUnjail(ctx, msg, k)
default:
return sdk.ErrTxDecode("invalid message parse in staking module").Result()
errMsg := fmt.Sprintf("unrecognized slashing message type: %T", msg)
return sdk.ErrUnknownRequest(errMsg).Result()
}
}
}

View File

@ -1,6 +1,7 @@
package slashing
import (
"strings"
"testing"
"time"
@ -121,3 +122,12 @@ func TestJailedValidatorDelegations(t *testing.T) {
got = NewHandler(slashingKeeper)(ctx, NewMsgUnjail(valAddr))
require.True(t, got.IsOK(), "expected jailed validator to be able to unjail, got: %v", got)
}
func TestInvalidMsg(t *testing.T) {
k := Keeper{}
h := NewHandler(k)
res := h(sdk.Context{}, sdk.NewTestMsg())
require.False(t, res.IsOK())
require.True(t, strings.Contains(res.Log, "unrecognized slashing message type"))
}

View File

@ -1,6 +1,7 @@
package staking
import (
"fmt"
"time"
abci "github.com/tendermint/tendermint/abci/types"
@ -19,16 +20,22 @@ func NewHandler(k keeper.Keeper) sdk.Handler {
switch msg := msg.(type) {
case types.MsgCreateValidator:
return handleMsgCreateValidator(ctx, msg, k)
case types.MsgEditValidator:
return handleMsgEditValidator(ctx, msg, k)
case types.MsgDelegate:
return handleMsgDelegate(ctx, msg, k)
case types.MsgBeginRedelegate:
return handleMsgBeginRedelegate(ctx, msg, k)
case types.MsgUndelegate:
return handleMsgUndelegate(ctx, msg, k)
default:
return sdk.ErrTxDecode("invalid message parse in staking module").Result()
errMsg := fmt.Sprintf("unrecognized staking message type: %T", msg)
return sdk.ErrUnknownRequest(errMsg).Result()
}
}
}

View File

@ -1,6 +1,7 @@
package staking
import (
"strings"
"testing"
"time"
@ -1272,3 +1273,12 @@ func TestBondUnbondRedelegateSlashTwice(t *testing.T) {
validator, _ = keeper.GetValidator(ctx, valA)
require.Equal(t, validator.GetStatus(), sdk.Unbonding)
}
func TestInvalidMsg(t *testing.T) {
k := keep.Keeper{}
h := NewHandler(k)
res := h(sdk.Context{}, sdk.NewTestMsg())
require.False(t, res.IsOK())
require.True(t, strings.Contains(res.Log, "unrecognized staking message type"))
}