]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/csv: skip blank lines when FieldsPerRecord >= 0
authorDamien Neil <dneil@google.com>
Wed, 3 Jun 2015 23:04:01 +0000 (16:04 -0700)
committerDamien Neil <dneil@google.com>
Fri, 12 Jun 2015 18:21:12 +0000 (18:21 +0000)
Fixes #11050.

Change-Id: Ie5d16960a1f829af947d82a63fe414924cd02ff6
Reviewed-on: https://go-review.googlesource.com/10666
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>

src/encoding/csv/reader.go
src/encoding/csv/reader_test.go

index ca81a4124299e36d4e4a45d3ca355c84da1ded74..37bf80ceaedd9b8e7e69fe5a3d852a5d5b6dd787 100644 (file)
@@ -228,16 +228,15 @@ func (r *Reader) parseRecord() (fields []string, err error) {
        }
        r.r.UnreadRune()
 
-       // If FieldsPerRecord is greater then 0 we can assume the final
-       // length of fields to be equal to FieldsPerRecord.
-       if r.FieldsPerRecord > 0 {
-               fields = make([]string, 0, r.FieldsPerRecord)
-       }
-
        // At this point we have at least one field.
        for {
                haveField, delim, err := r.parseField()
                if haveField {
+                       // If FieldsPerRecord is greater then 0 we can assume the final
+                       // length of fields to be equal to FieldsPerRecord.
+                       if r.FieldsPerRecord > 0 && fields == nil {
+                               fields = make([]string, 0, r.FieldsPerRecord)
+                       }
                        fields = append(fields, r.field.String())
                }
                if delim == '\n' || err == io.EOF {
index b3c4f3bf18fe05141f2979a0ec8c095a412e5a3d..be1002d034a1768c8b5e47ee225e01f0222f3142 100644 (file)
@@ -86,6 +86,15 @@ field"`,
                        {"d", "e", "f"},
                },
        },
+       {
+               Name:               "BlankLineFieldCount",
+               Input:              "a,b,c\n\nd,e,f\n\n",
+               UseFieldsPerRecord: true,
+               Output: [][]string{
+                       {"a", "b", "c"},
+                       {"d", "e", "f"},
+               },
+       },
        {
                Name:             "TrimSpace",
                Input:            " a,  b,   c\n",