diff options
author | Robert Griesemer <gri@golang.org> | 2011-06-01 16:28:17 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2011-06-01 16:28:17 -0700 |
commit | 158b427ea5692d180fd5b60c9093a29749c5a2f6 (patch) | |
tree | 43f281f60445fe60bb9ab1b1e255b965e1f7ecc1 | |
parent | f259f6ba0adfa0b98e74b27dbe6013d012a037eb (diff) | |
download | go-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-x | src/pkg/big/nat.go | 12 |
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 { |