1
0
mirror of https://github.com/golang/go synced 2024-09-29 16:24:28 -06:00

math/big: don't force second arg to Jacobi and Int.ModSqrt to escape

This CL updates big.Jacobi to avoid forcing its y argument to escape
to the heap. The argument was escaping because it was being passed
through an empty interface to fmt.Sprintf during an assertion failure.
As a result, callers of Jacobi and Int.ModSqrt (which calls Jacobi)
could not keep this value on the stack.

Noticed when working on https://github.com/cockroachdb/apd/pull/103.
This commit is contained in:
Nathan VanBenschoten 2022-01-09 15:24:21 -05:00
parent 2639f2f79b
commit 3ee07b5dc3

View File

@ -837,7 +837,7 @@ func (z *Int) ModInverse(g, n *Int) *Int {
// The y argument must be an odd integer.
func Jacobi(x, y *Int) int {
if len(y.abs) == 0 || y.abs[0]&1 == 0 {
panic(fmt.Sprintf("big: invalid 2nd argument to Int.Jacobi: need odd integer but got %s", y))
panic(fmt.Sprintf("big: invalid 2nd argument to Int.Jacobi: need odd integer but got %s", y.String()))
}
// We use the formulation described in chapter 2, section 2.4,