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

Restricting encoding is silly.
This commit is contained in:
Felix Lange 2017-02-26 19:40:33 +01:00
parent d304da3803
commit 280f08be84
3 changed files with 5 additions and 16 deletions

View File

@ -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 {

View File

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

View File

@ -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.