]> Cypherpunks repositories - gostls13.git/commitdiff
csv: fix issue 2366 - overly aggressive TrimLeadingSpace
authorPaul Borman <borman@google.com>
Mon, 17 Oct 2011 18:10:39 +0000 (11:10 -0700)
committerRob Pike <r@golang.org>
Mon, 17 Oct 2011 18:10:39 +0000 (11:10 -0700)
Address the issue coalescing two records together when TrimLeadingSpace
is set to true.

The input

        a,b,
        c,d,e

Would result with a singled a,b,c,d,e record.
With TrailingComma set to true it should give two records.
With TrailingComma set to false it should be an error.

Fixes #2366.

R=golang-dev, go.peter.90, r
CC=golang-dev
https://golang.org/cl/5284046

src/pkg/csv/reader.go
src/pkg/csv/reader_test.go

index ea2c266a47d784142c71aa625d3c20dfd92d07fe..29ceeae85b480382706c78a5930f429ed2318ad2 100644 (file)
@@ -267,7 +267,7 @@ func (r *Reader) parseField() (haveField bool, delim int, err os.Error) {
        }
 
        if r.TrimLeadingSpace {
-               for unicode.IsSpace(rune) {
+               for rune != '\n' && unicode.IsSpace(rune) {
                        rune, err = r.readRune()
                        if err != nil {
                                return false, 0, err
@@ -355,7 +355,7 @@ func (r *Reader) parseField() (haveField bool, delim int, err os.Error) {
                c := r.column
                rune, err = r.readRune()
                if r.TrimLeadingSpace {
-                       for unicode.IsSpace(rune) {
+                       for rune != '\n' && unicode.IsSpace(rune) {
                                rune, err = r.readRune()
                                if err != nil {
                                        break
index 0068bad1db69bb3d673291f90d1bb9f0d8cfe978..967f96b8d1bee854f0df4977d76dcf9255acdd7e 100644 (file)
@@ -127,10 +127,9 @@ field"`,
                Output:     [][]string{{`a""b`, `c`}},
        },
        {
-               Name:   "BadDoubleQuotes",
-               Input:  `a""b,c`,
-               Output: [][]string{{`a""b`, `c`}},
-               Error:  `bare " in non-quoted-field`, Line: 1, Column: 1,
+               Name:  "BadDoubleQuotes",
+               Input: `a""b,c`,
+               Error: `bare " in non-quoted-field`, Line: 1, Column: 1,
        },
        {
                Name:             "TrimQuote",
@@ -231,6 +230,23 @@ x,,,
                        {"", "", "", ""},
                },
        },
+       {
+               Name:             "Issue 2366",
+               TrailingComma:    true,
+               TrimLeadingSpace: true,
+               Input:            "a,b,\nc,d,e",
+               Output: [][]string{
+                       {"a", "b", ""},
+                       {"c", "d", "e"},
+               },
+       },
+       {
+               Name:             "Issue 2366a",
+               TrailingComma:    false,
+               TrimLeadingSpace: true,
+               Input:            "a,b,\nc,d,e",
+               Error:            "extra delimiter at end of line",
+       },
 }
 
 func TestRead(t *testing.T) {