diff options
author | Jeffrey Wilcke <geffobscura@gmail.com> | 2016-04-01 18:03:06 +0800 |
---|---|---|
committer | Jeffrey Wilcke <geffobscura@gmail.com> | 2016-04-01 18:56:54 +0800 |
commit | d63e29241d27954d44215931e787e86dfaf230a6 (patch) | |
tree | 03aafd58c130965cdcc7bd5ccbdde70239f81556 /common/types.go | |
parent | 10d3466c934bd425a8c941270749a652a588527d (diff) | |
download | go-tangerine-d63e29241d27954d44215931e787e86dfaf230a6.tar go-tangerine-d63e29241d27954d44215931e787e86dfaf230a6.tar.gz go-tangerine-d63e29241d27954d44215931e787e86dfaf230a6.tar.bz2 go-tangerine-d63e29241d27954d44215931e787e86dfaf230a6.tar.lz go-tangerine-d63e29241d27954d44215931e787e86dfaf230a6.tar.xz go-tangerine-d63e29241d27954d44215931e787e86dfaf230a6.tar.zst go-tangerine-d63e29241d27954d44215931e787e86dfaf230a6.zip |
common: added Hash unmarshal json length validation
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 } |