]> Cypherpunks repositories - gostls13.git/commitdiff
fmt: Scan(&int) was mishandling a lone zero.
authorRob Pike <r@golang.org>
Mon, 18 Jul 2011 00:05:35 +0000 (10:05 +1000)
committerRob Pike <r@golang.org>
Mon, 18 Jul 2011 00:05:35 +0000 (10:05 +1000)
It took it as an octal base prefix but assumed more digits were coming.
Fixes #2077.

R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/4764044

src/pkg/fmt/scan.go
src/pkg/fmt/scan_test.go

index a8d423d45835e5a14848f00b287785331230eee1..259451d02f77c443560ed82cb6d5c4dd62b397b3 100644 (file)
@@ -550,9 +550,11 @@ func (s *ss) getBase(verb int) (base int, digits string) {
 
 // scanNumber returns the numerical string with specified digits starting here.
 func (s *ss) scanNumber(digits string, haveDigits bool) string {
-       s.notEOF()
-       if !haveDigits && !s.accept(digits) {
-               s.errorString("expected integer")
+       if !haveDigits {
+               s.notEOF()
+               if !s.accept(digits) {
+                       s.errorString("expected integer")
+               }
        }
        for s.accept(digits) {
        }
index 98b3b5493cc10cad3705fe55c3cf1c75040c5f8f..3f06e5725cacbabfbcafe690ec527c2ee3d9a3e8 100644 (file)
@@ -298,6 +298,8 @@ var scanfTests = []ScanfTest{
        // Fixed bugs
        {"%d\n", "27\n", &intVal, 27},  // ok
        {"%d\n", "28 \n", &intVal, 28}, // was: "unexpected newline"
+       {"%v", "0", &intVal, 0},        // was: "EOF"; 0 was taken as base prefix and not counted.
+       {"%v", "0", &uintVal, uint(0)}, // was: "EOF"; 0 was taken as base prefix and not counted.
 }
 
 var overflowTests = []ScanTest{