]> Cypherpunks repositories - gostls13.git/commitdiff
multipart: return an error on Reader EOF, not (nil, nil)
authorBrad Fitzpatrick <bradfitz@golang.org>
Mon, 2 May 2011 01:23:39 +0000 (18:23 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Mon, 2 May 2011 01:23:39 +0000 (18:23 -0700)
R=rsc, adg
CC=golang-dev
https://golang.org/cl/4430074

src/pkg/mime/multipart/formdata.go
src/pkg/mime/multipart/multipart.go
src/pkg/mime/multipart/multipart_test.go

index 2879385571239d04899a4bb10592d067bdf8ddec..198ab515b86ce7142d555be4f48e691788c350e6 100644 (file)
@@ -30,12 +30,12 @@ func (r *multiReader) ReadForm(maxMemory int64) (f *Form, err os.Error) {
        maxValueBytes := int64(10 << 20) // 10 MB is a lot of text.
        for {
                p, err := r.NextPart()
+               if err == os.EOF {
+                       break
+               }
                if err != nil {
                        return nil, err
                }
-               if p == nil {
-                       break
-               }
 
                name := p.FormName()
                if name == "" {
index 60329fe17b597c0d46f5ffc5af61bf9de8cbcc2d..839a72f9c392f224f54f207ee208463fe4bf1d8d 100644 (file)
@@ -30,10 +30,8 @@ var headerRegexp *regexp.Regexp = regexp.MustCompile("^([a-zA-Z0-9\\-]+): *([^\r
 // Reader's underlying parser consumes its input as needed.  Seeking
 // isn't supported.
 type Reader interface {
-       // NextPart returns the next part in the multipart, or (nil,
-       // nil) on EOF.  An error is returned if the underlying reader
-       // reports errors, or on truncated or otherwise malformed
-       // input.
+       // NextPart returns the next part in the multipart or an error.
+       // When there are no more parts, the error os.EOF is returned.
        NextPart() (*Part, os.Error)
 
        // ReadForm parses an entire multipart message whose parts have
@@ -207,9 +205,8 @@ func (mr *multiReader) NextPart() (*Part, os.Error) {
                }
 
                if hasPrefixThenNewline(line, mr.dashBoundaryDash) {
-                       // Expected EOF (no error)
-                       // TODO(bradfitz): should return an os.EOF error here, not using nil for errors
-                       return nil, nil
+                       // Expected EOF
+                       return nil, os.EOF
                }
 
                if expectNewPart {
index 16249146c9d0d09fc70b2da15cab4b5fdfa55d2f..05f4871472d2afd8c59c3e7d36cbe2a92bed711e 100644 (file)
@@ -201,8 +201,8 @@ func testMultipart(t *testing.T, r io.Reader) {
        if part != nil {
                t.Error("Didn't expect a fifth part.")
        }
-       if err != nil {
-               t.Errorf("Unexpected error getting fifth part: %v", err)
+       if err != os.EOF {
+               t.Errorf("On  fifth part expected os.EOF; got %v", err)
        }
 }
 
@@ -246,8 +246,8 @@ func TestVariousTextLineEndings(t *testing.T) {
                if part != nil {
                        t.Errorf("Unexpected part in test %d", testNum)
                }
-               if err != nil {
-                       t.Errorf("Unexpected error in test %d: %v", testNum, err)
+               if err != os.EOF {
+                       t.Errorf("On test %d expected os.EOF; got %v", testNum, err)
                }
 
        }