common/hexutil: ensure negative big.Int is encoded sensibly

Restricting encoding is silly.
pull/3722/head
Felix Lange 8 years ago
parent d304da3803
commit 280f08be84
  1. 2
      common/hexutil/hexutil.go
  2. 1
      common/hexutil/hexutil_test.go
  3. 14
      common/hexutil/json.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 {

@ -47,6 +47,7 @@ var (
{referenceBig("ff"), "0xff"},
{referenceBig("112233445566778899aabbccddeeff"), "0x112233445566778899aabbccddeeff"},
{referenceBig("80a7f2c1bcc396c00"), "0x80a7f2c1bcc396c00"},
{referenceBig("-80a7f2c1bcc396c00"), "-0x80a7f2c1bcc396c00"},
}
encodeUint64Tests = []marshalTest{

@ -27,7 +27,6 @@ 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")
)
// 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.

Loading…
Cancel
Save