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 {
|
if nbits == 0 {
|
||||||
return "0x0"
|
return "0x0"
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("0x%x", bigint)
|
return fmt.Sprintf("%#x", bigint)
|
||||||
}
|
}
|
||||||
|
|
||||||
func has0xPrefix(input string) bool {
|
func has0xPrefix(input string) bool {
|
||||||
|
@ -47,6 +47,7 @@ var (
|
|||||||
{referenceBig("ff"), "0xff"},
|
{referenceBig("ff"), "0xff"},
|
||||||
{referenceBig("112233445566778899aabbccddeeff"), "0x112233445566778899aabbccddeeff"},
|
{referenceBig("112233445566778899aabbccddeeff"), "0x112233445566778899aabbccddeeff"},
|
||||||
{referenceBig("80a7f2c1bcc396c00"), "0x80a7f2c1bcc396c00"},
|
{referenceBig("80a7f2c1bcc396c00"), "0x80a7f2c1bcc396c00"},
|
||||||
|
{referenceBig("-80a7f2c1bcc396c00"), "-0x80a7f2c1bcc396c00"},
|
||||||
}
|
}
|
||||||
|
|
||||||
encodeUint64Tests = []marshalTest{
|
encodeUint64Tests = []marshalTest{
|
||||||
|
@ -25,9 +25,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
textZero = []byte(`0x0`)
|
textZero = []byte(`0x0`)
|
||||||
errNonString = errors.New("cannot unmarshal non-string as hex data")
|
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.
|
// Bytes marshals/unmarshals as a JSON string with 0x prefix.
|
||||||
@ -101,18 +100,7 @@ type Big big.Int
|
|||||||
|
|
||||||
// MarshalText implements encoding.TextMarshaler
|
// MarshalText implements encoding.TextMarshaler
|
||||||
func (b Big) MarshalText() ([]byte, error) {
|
func (b Big) MarshalText() ([]byte, error) {
|
||||||
bigint := (big.Int)(b)
|
return []byte(EncodeBig((*big.Int)(&b))), nil
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnmarshalJSON implements json.Unmarshaler.
|
// UnmarshalJSON implements json.Unmarshaler.
|
||||||
|
Loading…
Reference in New Issue
Block a user