]> Cypherpunks repositories - gostls13.git/commitdiff
http: fix ParseMultipartForm after MultipartReader error
authorBrad Fitzpatrick <bradfitz@golang.org>
Wed, 10 Aug 2011 15:08:53 +0000 (08:08 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 10 Aug 2011 15:08:53 +0000 (08:08 -0700)
Addresses part of issue 2093
Thanks to espians....@

R=golang-dev, nigeltao
CC=golang-dev
https://golang.org/cl/4808087

src/pkg/http/request.go
src/pkg/http/request_test.go

index a1c98a1f8facf5983aeaac936c0f41be1cd5e438..7aae8b4235adb95386c8bbab05f5ac40f8ebdf0a 100644 (file)
@@ -729,6 +729,9 @@ func (r *Request) ParseForm() (err os.Error) {
 // ParseMultipartForm calls ParseForm if necessary.
 // After one call to ParseMultipartForm, subsequent calls have no effect.
 func (r *Request) ParseMultipartForm(maxMemory int64) os.Error {
+       if r.MultipartForm == multipartByReader {
+               return os.NewError("http: multipart handled by MultipartReader")
+       }
        if r.Form == nil {
                err := r.ParseForm()
                if err != nil {
@@ -738,9 +741,6 @@ func (r *Request) ParseMultipartForm(maxMemory int64) os.Error {
        if r.MultipartForm != nil {
                return nil
        }
-       if r.MultipartForm == multipartByReader {
-               return os.NewError("http: multipart handled by MultipartReader")
-       }
 
        mr, err := r.multipartReader()
        if err == ErrNotMultipart {
index e03ed3b053a6a85f95bf57e284c4f578413b47d8..b5482db38b33824ccf43b7deee64cf6cf1186333 100644 (file)
@@ -219,6 +219,18 @@ func TestEmptyMultipartRequest(t *testing.T) {
        testMissingFile(t, req)
 }
 
+func TestRequestMultipartCallOrder(t *testing.T) {
+       req := newTestMultipartRequest(t)
+       _, err := req.MultipartReader()
+       if err != nil {
+               t.Fatalf("MultipartReader: %v", err)
+       }
+       err = req.ParseMultipartForm(1024)
+       if err == nil {
+               t.Errorf("expected an error from ParseMultipartForm after call to MultipartReader")
+       }
+}
+
 func testMissingFile(t *testing.T, req *Request) {
        f, fh, err := req.FormFile("missing")
        if f != nil {