]> Cypherpunks repositories - gostls13.git/commitdiff
fmt: fix crash for Printf("%.", 3)
authorRob Pike <r@golang.org>
Mon, 29 Apr 2013 20:52:07 +0000 (13:52 -0700)
committerRob Pike <r@golang.org>
Mon, 29 Apr 2013 20:52:07 +0000 (13:52 -0700)
Fixes #5311

R=golang-dev, bradfitz, iant
CC=golang-dev
https://golang.org/cl/8961050

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

index 552f76931b8e07114daa45ea9f6c3280078b199f..20b723a99bb48913631ee5464a1000fd31dfd0d3 100644 (file)
@@ -497,6 +497,9 @@ var fmttests = []struct {
        // causing +2+0i and +3+0i instead of 2+0i and 3+0i.
        {"%v", []complex64{1, 2, 3}, "[(1+0i) (2+0i) (3+0i)]"},
        {"%v", []complex128{1, 2, 3}, "[(1+0i) (2+0i) (3+0i)]"},
+
+       // Incomplete format specification caused crash.
+       {"%.", 3, "%!.(int=3)"},
 }
 
 func TestSprintf(t *testing.T) {
index 7229313196755649b36fd18df16606f7904d562c..5f37fd1208522355a4a802041cac1a0c3c4460ef 100644 (file)
@@ -1072,7 +1072,7 @@ func (p *pp) doPrintf(format string, a []interface{}) {
                        p.fmt.wid, p.fmt.widPresent, i = parsenum(format, i, end)
                }
                // do we have precision?
-               if i < end && format[i] == '.' {
+               if i+1 < end && format[i] == '.' {
                        if format[i+1] == '*' {
                                p.fmt.prec, p.fmt.precPresent, i, fieldnum = intFromArg(a, end, i+1, fieldnum)
                                if !p.fmt.precPresent {