]> Cypherpunks repositories - gostls13.git/commitdiff
Revert "fmt: check newline in the end of input"
authorRuss Cox <rsc@golang.org>
Fri, 11 Dec 2015 03:28:15 +0000 (03:28 +0000)
committerRuss Cox <rsc@golang.org>
Fri, 11 Dec 2015 06:35:20 +0000 (06:35 +0000)
This change can break real code. There are other newline-related bugs in this code, and fixing them will also break real code. If we're going to break real code, let's fix all the bugs together and just break things once.

This reverts commit 8331f19d9700457d74bf377755ca270a32d2faa3.

Change-Id: Ie4b3022f3a305c3e1f78cc208e50beed212608e6
Reviewed-on: https://go-review.googlesource.com/17724
Reviewed-by: Rob Pike <r@golang.org>
src/fmt/scan.go
src/fmt/scan_test.go

index 553deb4327c12a0478a2b3cb37ab0528e10f8d0e..4618ed4a827f4ee41e10f7f53fb3796bf161b984 100644 (file)
@@ -1108,10 +1108,6 @@ func (s *ss) advance(format string) (i int) {
                        // in the input.
                        inputc := s.getRune()
                        if inputc == eof {
-                               if wasNewline {
-                                       // Newlines are mandatory.
-                                       return -1
-                               }
                                return
                        }
                        if !isSpace(inputc) {
@@ -1152,18 +1148,17 @@ func (s *ss) doScanf(format string, a []interface{}) (numProcessed int, err erro
        end := len(format) - 1
        // We process one item per non-trivial format
        for i := 0; i <= end; {
-               switch w := s.advance(format[i:]); {
-               case w > 0:
+               w := s.advance(format[i:])
+               if w > 0 {
                        i += w
                        continue
-               case w < 0:
-                       // Can't advance format. Why not?
-                       s.errorString("input does not match format")
                }
-
-               // Either we have a percent character, or we ran out of input.
-
+               // Either we failed to advance, we have a percent character, or we ran out of input.
                if format[i] != '%' {
+                       // Can't advance format.  Why not?
+                       if w < 0 {
+                               s.errorString("input does not match format")
+                       }
                        // Otherwise at EOF; "too many operands" error handled below
                        break
                }
index bcc2844ef08f867cc5f3ff68249478b28b8d9747..7ac74dcb4bd7ce1b22ce050e6ea8609b8b9fbb93 100644 (file)
@@ -1114,22 +1114,14 @@ func TestScanfNewlineMatchFormat(t *testing.T) {
                count  int
                ok     bool
        }{
-               {"newline in both", "1\n2", "%d\n%d", 2, true},
+               {"newline in both", "1\n2", "%d\n%d\n", 2, true},
                {"newline in input", "1\n2", "%d %d", 1, false},
-               {"extra newline in format", "1\n2", "%d\n%d\n", 2, false},
-               {"newline-newline in both", "1\n\n2", "%d\n\n%d", 2, true},
-               {"newline-newline in format", "1\n2", "%d\n\n%d", 1, false},
-               {"newline-newline in input", "1\n\n2", "%d\n%d", 1, false},
                {"space-newline in input", "1 \n2", "%d %d", 1, false},
                {"newline in format", "1 2", "%d\n%d", 1, false},
                {"space-newline in format", "1 2", "%d \n%d", 1, false},
                {"space-newline in both", "1 \n2", "%d \n%d", 2, true},
                {"extra space in format", "1\n2", "%d\n %d", 2, true},
                {"two extra spaces in format", "1\n2", "%d \n %d", 2, true},
-               {"newline start in both", "\n1 2", "\n%d %d", 2, true},
-               {"newline start in format", "1 2", "\n%d %d", 0, false},
-               {"newline start in input", "\n1 2", "%d %d", 0, false},
-               {"space-newline start in input", " \n1 2", "\n%d %d", 2, true},
        }
        for _, test := range tests {
                n, err := Sscanf(test.text, test.format, &a, &b)