diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d53438b58a6..7bbb8b193ab4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ balances or a single balance by denom when the `denom` query parameter is presen * (x/bank) [\#5531](https://github.com/cosmos/cosmos-sdk/issues/5531) Added missing amount event to MsgMultiSend, emitted for each output. * (client) [\#5618](https://github.com/cosmos/cosmos-sdk/pull/5618) Fix crash on the client when the verifier is not set. +* (x/distribution) [\#5620](https://github.com/cosmos/cosmos-sdk/pull/5620) Fix nil pointer deref in distribution tax/rewward validation helpers. ### State Machine Breaking diff --git a/x/distribution/types/params.go b/x/distribution/types/params.go index ac3387e9c48b..f4530dd81c3b 100644 --- a/x/distribution/types/params.go +++ b/x/distribution/types/params.go @@ -92,6 +92,9 @@ func validateCommunityTax(i interface{}) error { return fmt.Errorf("invalid parameter type: %T", i) } + if v.IsNil() { + return fmt.Errorf("community tax must be not nil") + } if v.IsNegative() { return fmt.Errorf("community tax must be positive: %s", v) } @@ -108,6 +111,9 @@ func validateBaseProposerReward(i interface{}) error { return fmt.Errorf("invalid parameter type: %T", i) } + if v.IsNil() { + return fmt.Errorf("base proposer reward must be not nil") + } if v.IsNegative() { return fmt.Errorf("base proposer reward must be positive: %s", v) } @@ -124,6 +130,9 @@ func validateBonusProposerReward(i interface{}) error { return fmt.Errorf("invalid parameter type: %T", i) } + if v.IsNil() { + return fmt.Errorf("bonus proposer reward must be not nil") + } if v.IsNegative() { return fmt.Errorf("bonus proposer reward must be positive: %s", v) } diff --git a/x/distribution/types/params_test.go b/x/distribution/types/params_test.go new file mode 100644 index 000000000000..b545e9dbf609 --- /dev/null +++ b/x/distribution/types/params_test.go @@ -0,0 +1,33 @@ +package types + +import ( + "testing" + + "github.com/stretchr/testify/require" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func Test_validateAuxFuncs(t *testing.T) { + type args struct { + i interface{} + } + tests := []struct { + name string + args args + wantErr bool + }{ + {"wrong type", args{10.5}, true}, + {"nil Int pointer", args{sdk.Dec{}}, true}, + {"negative", args{sdk.NewDec(-1)}, true}, + {"one dec", args{sdk.NewDec(1)}, false}, + {"two dec", args{sdk.NewDec(2)}, true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + require.Equal(t, tt.wantErr, validateCommunityTax(tt.args.i) != nil) + require.Equal(t, tt.wantErr, validateBaseProposerReward(tt.args.i) != nil) + require.Equal(t, tt.wantErr, validateBonusProposerReward(tt.args.i) != nil) + }) + } +}