From f11d0520c2530f407fc9f2316184f33694deffb4 Mon Sep 17 00:00:00 2001 From: dauTT Date: Tue, 4 Aug 2020 21:15:58 +0200 Subject: [PATCH] Merge PR #6907: Return error when the address is an empty string --- types/address.go | 30 +++++++++++++++++++++++++++--- types/address_test.go | 6 +++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/types/address.go b/types/address.go index d59db6b150..36b327cf5b 100644 --- a/types/address.go +++ b/types/address.go @@ -119,7 +119,7 @@ func VerifyAddressFormat(bz []byte) error { // AccAddressFromBech32 creates an AccAddress from a Bech32 string. func AccAddressFromBech32(address string) (addr AccAddress, err error) { if len(strings.TrimSpace(address)) == 0 { - return AccAddress{}, nil + return AccAddress{}, errors.New("empty address string is not allowed") } bech32PrefixAccAddr := GetConfig().GetBech32AccountAddrPrefix() @@ -186,6 +186,10 @@ func (aa *AccAddress) UnmarshalJSON(data []byte) error { if err != nil { return err } + if s == "" { + *aa = AccAddress{} + return nil + } aa2, err := AccAddressFromBech32(s) if err != nil { @@ -203,6 +207,10 @@ func (aa *AccAddress) UnmarshalYAML(data []byte) error { if err != nil { return err } + if s == "" { + *aa = AccAddress{} + return nil + } aa2, err := AccAddressFromBech32(s) if err != nil { @@ -264,7 +272,7 @@ func ValAddressFromHex(address string) (addr ValAddress, err error) { // ValAddressFromBech32 creates a ValAddress from a Bech32 string. func ValAddressFromBech32(address string) (addr ValAddress, err error) { if len(strings.TrimSpace(address)) == 0 { - return ValAddress{}, nil + return ValAddress{}, errors.New("empty address string is not allowed") } bech32PrefixValAddr := GetConfig().GetBech32ValidatorAddrPrefix() @@ -332,6 +340,10 @@ func (va *ValAddress) UnmarshalJSON(data []byte) error { if err != nil { return err } + if s == "" { + *va = ValAddress{} + return nil + } va2, err := ValAddressFromBech32(s) if err != nil { @@ -350,6 +362,10 @@ func (va *ValAddress) UnmarshalYAML(data []byte) error { if err != nil { return err } + if s == "" { + *va = ValAddress{} + return nil + } va2, err := ValAddressFromBech32(s) if err != nil { @@ -411,7 +427,7 @@ func ConsAddressFromHex(address string) (addr ConsAddress, err error) { // ConsAddressFromBech32 creates a ConsAddress from a Bech32 string. func ConsAddressFromBech32(address string) (addr ConsAddress, err error) { if len(strings.TrimSpace(address)) == 0 { - return ConsAddress{}, nil + return ConsAddress{}, errors.New("empty address string is not allowed") } bech32PrefixConsAddr := GetConfig().GetBech32ConsensusAddrPrefix() @@ -484,6 +500,10 @@ func (ca *ConsAddress) UnmarshalJSON(data []byte) error { if err != nil { return err } + if s == "" { + *ca = ConsAddress{} + return nil + } ca2, err := ConsAddressFromBech32(s) if err != nil { @@ -502,6 +522,10 @@ func (ca *ConsAddress) UnmarshalYAML(data []byte) error { if err != nil { return err } + if s == "" { + *ca = ConsAddress{} + return nil + } ca2, err := ConsAddressFromBech32(s) if err != nil { diff --git a/types/address_test.go b/types/address_test.go index 8a928a43c9..5d814c2cb9 100644 --- a/types/address_test.go +++ b/types/address_test.go @@ -46,15 +46,15 @@ func TestEmptyAddresses(t *testing.T) { accAddr, err := types.AccAddressFromBech32("") require.True(t, accAddr.Empty()) - require.Nil(t, err) + require.Error(t, err) valAddr, err := types.ValAddressFromBech32("") require.True(t, valAddr.Empty()) - require.Nil(t, err) + require.Error(t, err) consAddr, err := types.ConsAddressFromBech32("") require.True(t, consAddr.Empty()) - require.Nil(t, err) + require.Error(t, err) } func TestRandBech32PubkeyConsistency(t *testing.T) {