diff --git a/src/pkg/csv/reader.go b/src/pkg/csv/reader.go index ea2c266a47d784142c71aa625d3c20dfd92d07fe..29ceeae85b480382706c78a5930f429ed2318ad2 100644 --- a/src/pkg/csv/reader.go +++ b/src/pkg/csv/reader.go @@ -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 diff --git a/src/pkg/csv/reader_test.go b/src/pkg/csv/reader_test.go index 0068bad1db69bb3d673291f90d1bb9f0d8cfe978..967f96b8d1bee854f0df4977d76dcf9255acdd7e 100644 --- a/src/pkg/csv/reader_test.go +++ b/src/pkg/csv/reader_test.go @@ -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) {