Merge PR #4100: Return correct error on invalid messages
This commit is contained in:
parent
9435114366
commit
585b68ec70
@ -0,0 +1,2 @@
|
||||
#3978 Return ErrUnknownRequest in message handlers for unknown
|
||||
or invalid routed messages.
|
||||
@ -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
18
x/bank/handler_test.go
Normal 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"))
|
||||
}
|
||||
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"))
|
||||
}
|
||||
|
||||
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
19
x/gov/handler_test.go
Normal 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"))
|
||||
}
|
||||
@ -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
19
x/ibc/handler_test.go
Normal 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"))
|
||||
}
|
||||
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"))
|
||||
}
|
||||
|
||||
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"))
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user