diff options
author | Felix Lange <fjl@twurst.com> | 2017-02-27 02:40:33 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2017-03-02 21:05:46 +0800 |
commit | 280f08be84325924ea7628a8187fd84e7cc39145 (patch) | |
tree | c7b5a3c639e5c617004630a0ea98248c3211f5d3 /common/hexutil | |
parent | d304da380382245190f33878363696cd151201a9 (diff) | |
download | dexon-280f08be84325924ea7628a8187fd84e7cc39145.tar.gz dexon-280f08be84325924ea7628a8187fd84e7cc39145.tar.zst dexon-280f08be84325924ea7628a8187fd84e7cc39145.zip |
common/hexutil: ensure negative big.Int is encoded sensibly
Restricting encoding is silly.
Diffstat (limited to 'common/hexutil')
-rw-r--r-- | common/hexutil/hexutil.go | 2 | ||||
-rw-r--r-- | common/hexutil/hexutil_test.go | 1 | ||||
-rw-r--r-- | common/hexutil/json.go | 18 |
3 files changed, 5 insertions, 16 deletions
diff --git a/common/hexutil/hexutil.go b/common/hexutil/hexutil.go index b66c0d3fe..6b128ae36 100644 --- a/common/hexutil/hexutil.go +++ b/common/hexutil/hexutil.go @@ -178,7 +178,7 @@ func EncodeBig(bigint *big.Int) string { if nbits == 0 { return "0x0" } - return fmt.Sprintf("0x%x", bigint) + return fmt.Sprintf("%#x", bigint) } func has0xPrefix(input string) bool { diff --git a/common/hexutil/hexutil_test.go b/common/hexutil/hexutil_test.go index 6a92a385c..ed6fccc3c 100644 --- a/common/hexutil/hexutil_test.go +++ b/common/hexutil/hexutil_test.go @@ -47,6 +47,7 @@ var ( {referenceBig("ff"), "0xff"}, {referenceBig("112233445566778899aabbccddeeff"), "0x112233445566778899aabbccddeeff"}, {referenceBig("80a7f2c1bcc396c00"), "0x80a7f2c1bcc396c00"}, + {referenceBig("-80a7f2c1bcc396c00"), "-0x80a7f2c1bcc396c00"}, } encodeUint64Tests = []marshalTest{ diff --git a/common/hexutil/json.go b/common/hexutil/json.go index ce6a2b048..23393ed2c 100644 --- a/common/hexutil/json.go +++ b/common/hexutil/json.go @@ -25,9 +25,8 @@ import ( ) var ( - textZero = []byte(`0x0`) - errNonString = errors.New("cannot unmarshal non-string as hex data") - errNegativeBigInt = errors.New("hexutil.Big: can't marshal negative integer") + textZero = []byte(`0x0`) + errNonString = errors.New("cannot unmarshal non-string as hex data") ) // Bytes marshals/unmarshals as a JSON string with 0x prefix. @@ -101,18 +100,7 @@ type Big big.Int // MarshalText implements encoding.TextMarshaler func (b Big) MarshalText() ([]byte, error) { - bigint := (big.Int)(b) - if bigint.Sign() == -1 { - return nil, errNegativeBigInt - } - nbits := bigint.BitLen() - if nbits == 0 { - return textZero, nil - } - enc := make([]byte, 2, nbits/4+2) - copy(enc, "0x") - enc = bigint.Append(enc, 16) - return enc, nil + return []byte(EncodeBig((*big.Int)(&b))), nil } // UnmarshalJSON implements json.Unmarshaler. |