diff options
Diffstat (limited to 'common/types.go')
-rw-r--r-- | common/types.go | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/common/types.go b/common/types.go index b1666d733..fec986164 100644 --- a/common/types.go +++ b/common/types.go @@ -19,10 +19,12 @@ package common import ( "encoding/hex" "encoding/json" + "errors" "fmt" "math/big" "math/rand" "reflect" + "strings" ) const ( @@ -30,6 +32,8 @@ const ( AddressLength = 20 ) +var hashJsonLengthErr = errors.New("common: unmarshalJSON failed: hash must be exactly 32 bytes") + type ( Hash [HashLength]byte Address [AddressLength]byte @@ -58,6 +62,15 @@ func (h *Hash) UnmarshalJSON(input []byte) error { if length >= 2 && input[0] == '"' && input[length-1] == '"' { input = input[1 : length-1] } + // strip "0x" for length check + if len(input) > 1 && strings.ToLower(string(input[:2])) == "0x" { + input = input[2:] + } + + // validate the length of the input hash + if len(input) != HashLength*2 { + return hashJsonLengthErr + } h.SetBytes(FromHex(string(input))) return nil } |