]> Cypherpunks repositories - gostls13.git/commitdiff
fmt: fix end-of-array error in parsenum.
authorRob Pike <r@golang.org>
Mon, 31 May 2010 21:57:32 +0000 (14:57 -0700)
committerRob Pike <r@golang.org>
Mon, 31 May 2010 21:57:32 +0000 (14:57 -0700)
Fixes #821.

R=rsc
CC=golang-dev
https://golang.org/cl/1434041

src/pkg/fmt/fmt_test.go
src/pkg/fmt/print.go

index dd5f2d54501fcf2dc8b8936a0d261e9d277c2ace..957ac041fef7263161b3d3b5ac14b0df7178f701 100644 (file)
@@ -265,6 +265,7 @@ var fmttests = []fmtTest{
        fmtTest{"no args", "hello", "no args?(extra string=hello)"},
        fmtTest{"%s", nil, "%s(<nil>)"},
        fmtTest{"%T", nil, "<nil>"},
+       fmtTest{"%-1", 100, "%1(int=100)"},
 }
 
 func TestSprintf(t *testing.T) {
index 77af45a94171ae9189a31830239e800759903dc3..9ebd09d03422ce94bda68c79d19e54360d3233e5 100644 (file)
@@ -511,19 +511,15 @@ func getComplex128(a interface{}) (val complex128, ok bool) {
 }
 
 // Convert ASCII to integer.  n is 0 (and got is false) if no number present.
-
-func parsenum(s string, start, end int) (n int, got bool, newi int) {
+func parsenum(s string, start, end int) (num int, isnum bool, newi int) {
        if start >= end {
                return 0, false, end
        }
-       isnum := false
-       num := 0
-       for '0' <= s[start] && s[start] <= '9' {
-               num = num*10 + int(s[start]-'0')
-               start++
+       for newi = start; newi < end && '0' <= s[newi] && s[newi] <= '9'; newi++ {
+               num = num*10 + int(s[newi]-'0')
                isnum = true
        }
-       return num, isnum, start
+       return
 }
 
 type uintptrGetter interface {