aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2011-06-01 16:28:17 -0700
committerRobert Griesemer <gri@golang.org>2011-06-01 16:28:17 -0700
commit158b427ea5692d180fd5b60c9093a29749c5a2f6 (patch)
tree43f281f60445fe60bb9ab1b1e255b965e1f7ecc1
parentf259f6ba0adfa0b98e74b27dbe6013d012a037eb (diff)
downloadgo-158b427ea5692d180fd5b60c9093a29749c5a2f6.tar.gz
go-158b427ea5692d180fd5b60c9093a29749c5a2f6.zip
big: fix broken overflow test
- tested with GOARCH=386 - tested with GOARCH=amd64 R=iant CC=golang-dev https://golang.org/cl/4526100
-rwxr-xr-xsrc/pkg/big/nat.go12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/pkg/big/nat.go b/src/pkg/big/nat.go
index 313e22cbb3..4f17e3690c 100755
--- a/src/pkg/big/nat.go
+++ b/src/pkg/big/nat.go
@@ -681,21 +681,21 @@ func (z nat) scan(r io.RuneScanner, base int) (nat, int, os.Error) {
z = z.make(0)
bb := Word(1)
dd := Word(0)
- for {
+ for max := _M / b; ; {
d := hexValue(ch)
if d >= b {
r.UnreadRune() // ch does not belong to number anymore
break
}
- if tmp := bb * b; tmp < bb {
- // overflow
+ if bb <= max {
+ bb *= b
+ dd = dd*b + d
+ } else {
+ // bb * b would overflow
z = z.mulAddWW(z, bb, dd)
bb = b
dd = d
- } else {
- bb = tmp
- dd = dd*b + d
}
if ch, _, err = r.ReadRune(); err != nil {