diff options
| author | Brad Fitzpatrick <bradfitz@golang.org> | 2011-08-10 08:08:53 -0700 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2011-08-10 08:08:53 -0700 |
| commit | 31fa584906469b494e9e887ed1cc4612e4349649 (patch) | |
| tree | 4508725b9249f22b17e531a209e8c0d8efd1d337 /src/pkg/http | |
| parent | 849b54a2f9e8a2db6693406a46a0dae78a48341d (diff) | |
| download | go-31fa584906469b494e9e887ed1cc4612e4349649.tar.xz | |
http: fix ParseMultipartForm after MultipartReader error
Addresses part of issue 2093
Thanks to espians....@
R=golang-dev, nigeltao
CC=golang-dev
https://golang.org/cl/4808087
Diffstat (limited to 'src/pkg/http')
| -rw-r--r-- | src/pkg/http/request.go | 6 | ||||
| -rw-r--r-- | src/pkg/http/request_test.go | 12 |
2 files changed, 15 insertions, 3 deletions
diff --git a/src/pkg/http/request.go b/src/pkg/http/request.go index a1c98a1f8f..7aae8b4235 100644 --- a/src/pkg/http/request.go +++ b/src/pkg/http/request.go @@ -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 { diff --git a/src/pkg/http/request_test.go b/src/pkg/http/request_test.go index e03ed3b053..b5482db38b 100644 --- a/src/pkg/http/request_test.go +++ b/src/pkg/http/request_test.go @@ -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 { |
