bigint: don't allocate in ToPreallocatedBytes() for negative numbers

In-place modifications are somewhat dangerous, but yet another allocation is
quite costly.
This commit is contained in:
Roman Khimov 2022-05-31 12:45:34 +03:00
parent 3509523baf
commit 3945e81857

View file

@ -112,18 +112,16 @@ func ToPreallocatedBytes(n *big.Int, data []byte) []byte {
return data
}
var ws []big.Word
if sign == 1 {
ws = n.Bits()
} else {
n1 := new(big.Int).Add(n, bigOne)
if n1.Sign() == 0 { // n == -1
if sign < 0 {
n.Add(n, bigOne)
defer func() { n.Sub(n, bigOne) }()
if n.Sign() == 0 { // n == -1
return append(data, 0xFF)
}
ws = n1.Bits()
}
var ws = n.Bits()
lb := len(ws) * wordSizeBytes
if c := cap(data); c < lb {
data = make([]byte, lb, lb+1)