diff options
author | Robert Griesemer <gri@golang.org> | 2011-06-02 11:07:41 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2011-06-02 11:07:41 -0700 |
commit | 191a6bfc5e99911f905cb582b676b5502c7b5aad (patch) | |
tree | 0511534df9cbcc5bfe5d8e44c6a0c75674e20c2e | |
parent | 4d15577783aaf5d6c3b53850d44b38b1bef305bc (diff) | |
download | go-191a6bfc5e99911f905cb582b676b5502c7b5aad.tar.gz go-191a6bfc5e99911f905cb582b676b5502c7b5aad.zip |
big: do not modify divisor
Fixes #1907.
R=rsc
CC=golang-dev
https://golang.org/cl/4527096
-rwxr-xr-x | src/pkg/big/nat.go | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/pkg/big/nat.go b/src/pkg/big/nat.go index 4f17e3690c..db02a43c2e 100755 --- a/src/pkg/big/nat.go +++ b/src/pkg/big/nat.go @@ -551,7 +551,12 @@ func (z nat) divLarge(u, uIn, v nat) (q, r nat) { // D1. shift := Word(leadingZeros(v[n-1])) - shlVW(v, v, shift) + if shift > 0 { + // do not modify v, it may be used by another goroutine simultaneously + v1 := make(nat, n) + shlVW(v1, v, shift) + v = v1 + } u[len(uIn)] = shlVW(u[0:len(uIn)], uIn, shift) // D2. @@ -592,7 +597,6 @@ func (z nat) divLarge(u, uIn, v nat) (q, r nat) { q = q.norm() shrVW(u, u, shift) - shrVW(v, v, shift) r = u.norm() return q, r |