forked from cerc-io/plugeth
common/hexutil: ensure negative big.Int is encoded sensibly
Restricting encoding is silly.
This commit is contained in:
parent
d304da3803
commit
280f08be84
@ -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{
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user