From 723889570e6004e1bbc141245716ee6cf83599d4 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 21 Mar 2018 02:40:58 +0100 Subject: [PATCH] ErrTxParse->ErrTxDecode; check for empty bytes in account and tx --- examples/basecoin/app/app.go | 6 +++++- examples/basecoin/types/account.go | 3 +++ examples/kvstore/tx.go | 2 +- mock/tx.go | 2 +- store/iavlstore.go | 2 +- types/errors.go | 8 ++++---- types/errors_test.go | 4 ++-- x/auth/commands/account.go | 3 +++ 8 files changed, 20 insertions(+), 10 deletions(-) diff --git a/examples/basecoin/app/app.go b/examples/basecoin/app/app.go index bfa34045f8..1d31b0edc4 100644 --- a/examples/basecoin/app/app.go +++ b/examples/basecoin/app/app.go @@ -122,11 +122,15 @@ func MakeCodec() *wire.Codec { func (app *BasecoinApp) txDecoder(txBytes []byte) (sdk.Tx, sdk.Error) { var tx = sdk.StdTx{} + if len(txBytes) == 0 { + return nil, sdk.ErrTxDecode("txBytes are empty") + } + // StdTx.Msg is an interface. The concrete types // are registered by MakeTxCodec in bank.RegisterWire. err := app.cdc.UnmarshalBinary(txBytes, &tx) if err != nil { - return nil, sdk.ErrTxParse("").TraceCause(err, "") + return nil, sdk.ErrTxDecode("").TraceCause(err, "") } return tx, nil } diff --git a/examples/basecoin/types/account.go b/examples/basecoin/types/account.go index 552ce657bf..f34113fc65 100644 --- a/examples/basecoin/types/account.go +++ b/examples/basecoin/types/account.go @@ -25,6 +25,9 @@ func (acc *AppAccount) SetName(name string) { acc.Name = name } // Get the AccountDecoder function for the custom AppAccount func GetAccountDecoder(cdc *wire.Codec) sdk.AccountDecoder { return func(accBytes []byte) (res sdk.Account, err error) { + if len(accBytes) == 0 { + return nil, sdk.ErrTxDecode("accBytes are empty") + } acct := new(AppAccount) err = cdc.UnmarshalBinary(accBytes, &acct) if err != nil { diff --git a/examples/kvstore/tx.go b/examples/kvstore/tx.go index c9c30c885d..c084925b76 100644 --- a/examples/kvstore/tx.go +++ b/examples/kvstore/tx.go @@ -64,7 +64,7 @@ func decodeTx(txBytes []byte) (sdk.Tx, sdk.Error) { k, v := split[0], split[1] tx = kvstoreTx{k, v, txBytes} } else { - return nil, sdk.ErrTxParse("too many =") + return nil, sdk.ErrTxDecode("too many =") } return tx, nil diff --git a/mock/tx.go b/mock/tx.go index 326946eaa5..cc79b1172a 100644 --- a/mock/tx.go +++ b/mock/tx.go @@ -77,7 +77,7 @@ func decodeTx(txBytes []byte) (sdk.Tx, sdk.Error) { k, v := split[0], split[1] tx = kvstoreTx{k, v, txBytes} } else { - return nil, sdk.ErrTxParse("too many =") + return nil, sdk.ErrTxDecode("too many =") } return tx, nil diff --git a/store/iavlstore.go b/store/iavlstore.go index 87b0863884..748bb6776d 100644 --- a/store/iavlstore.go +++ b/store/iavlstore.go @@ -141,7 +141,7 @@ func (st *iavlStore) ReverseIterator(start, end []byte) Iterator { func (st *iavlStore) Query(req abci.RequestQuery) (res abci.ResponseQuery) { if len(req.Data) == 0 { msg := "Query cannot be zero length" - return sdk.ErrTxParse(msg).Result().ToQuery() + return sdk.ErrTxDecode(msg).Result().ToQuery() } tree := st.tree diff --git a/types/errors.go b/types/errors.go index 9c15f98887..fab28c4449 100644 --- a/types/errors.go +++ b/types/errors.go @@ -21,7 +21,7 @@ func (code CodeType) IsOK() bool { const ( CodeOK CodeType = 0 CodeInternal CodeType = 1 - CodeTxParse CodeType = 2 + CodeTxDecode CodeType = 2 CodeInvalidSequence CodeType = 3 CodeUnauthorized CodeType = 4 CodeInsufficientFunds CodeType = 5 @@ -40,7 +40,7 @@ func CodeToDefaultMsg(code CodeType) string { switch code { case CodeInternal: return "Internal error" - case CodeTxParse: + case CodeTxDecode: return "Tx parse error" case CodeGenesisParse: return "Genesis parse error" @@ -75,8 +75,8 @@ func CodeToDefaultMsg(code CodeType) string { func ErrInternal(msg string) Error { return newError(CodeInternal, msg) } -func ErrTxParse(msg string) Error { - return newError(CodeTxParse, msg) +func ErrTxDecode(msg string) Error { + return newError(CodeTxDecode, msg) } func ErrGenesisParse(msg string) Error { return newError(CodeGenesisParse, msg) diff --git a/types/errors_test.go b/types/errors_test.go index 1d7cc3f99f..939cced7cc 100644 --- a/types/errors_test.go +++ b/types/errors_test.go @@ -9,7 +9,7 @@ import ( var codeTypes = []CodeType{ CodeInternal, - CodeTxParse, + CodeTxDecode, CodeInvalidSequence, CodeUnauthorized, CodeInsufficientFunds, @@ -23,7 +23,7 @@ type errFn func(msg string) Error var errFns = []errFn{ ErrInternal, - ErrTxParse, + ErrTxDecode, ErrInvalidSequence, ErrUnauthorized, ErrInsufficientFunds, diff --git a/x/auth/commands/account.go b/x/auth/commands/account.go index c8a68a178c..02af73f167 100644 --- a/x/auth/commands/account.go +++ b/x/auth/commands/account.go @@ -65,6 +65,9 @@ func (c commander) getAccountCmd(cmd *cobra.Command, args []string) error { key := sdk.Address(bz) res, err := builder.Query(key, c.storeName) + if err != nil { + return err + } // decode the value account, err := c.decoder(res)