]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: make ParseForm ignore unknown content types.
authorRoger Peppe <rogpeppe@gmail.com>
Thu, 26 Jan 2012 16:50:56 +0000 (16:50 +0000)
committerRoger Peppe <rogpeppe@gmail.com>
Thu, 26 Jan 2012 16:50:56 +0000 (16:50 +0000)
Also fix a shadowed error variable bug.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5573072

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

index 554ad26b2c58aea8845a691ee12fbc8bc9aa6255..59fe0bf9eda0158f1a714da06f82774e7958ca56 100644 (file)
@@ -606,7 +606,7 @@ func (r *Request) ParseForm() (err error) {
                        return errors.New("missing form body")
                }
                ct := r.Header.Get("Content-Type")
-               ct, _, err := mime.ParseMediaType(ct)
+               ct, _, err = mime.ParseMediaType(ct)
                switch {
                case ct == "application/x-www-form-urlencoded":
                        var reader io.Reader = r.Body
@@ -646,8 +646,6 @@ func (r *Request) ParseForm() (err error) {
                        // Clean this up and write more tests.
                        // request_test.go contains the start of this,
                        // in TestRequestMultipartCallOrder.
-               default:
-                       return &badStringError{"unknown Content-Type", ct}
                }
        }
        return err
index 7b78645169eb56d65fcc110d2a5c562d709a4067..7a3556d03674c0ed057eed03ee2dfb29e19dd8b3 100644 (file)
@@ -46,19 +46,19 @@ func TestPostQuery(t *testing.T) {
 
 type stringMap map[string][]string
 type parseContentTypeTest struct {
+       shouldError bool
        contentType stringMap
 }
 
 var parseContentTypeTests = []parseContentTypeTest{
-       {contentType: stringMap{"Content-Type": {"text/plain"}}},
-       {contentType: stringMap{}}, // Non-existent keys are not placed. The value nil is illegal.
-       {contentType: stringMap{"Content-Type": {"text/plain; boundary="}}},
-       {
-               contentType: stringMap{"Content-Type": {"application/unknown"}},
-       },
+       {false, stringMap{"Content-Type": {"text/plain"}}},
+       // Non-existent keys are not placed. The value nil is illegal.
+       {true, stringMap{}},
+       {true, stringMap{"Content-Type": {"text/plain; boundary="}}},
+       {false, stringMap{"Content-Type": {"application/unknown"}}},
 }
 
-func TestParseFormBadContentType(t *testing.T) {
+func TestParseFormUnknownContentType(t *testing.T) {
        for i, test := range parseContentTypeTests {
                req := &Request{
                        Method: "POST",
@@ -66,8 +66,11 @@ func TestParseFormBadContentType(t *testing.T) {
                        Body:   ioutil.NopCloser(bytes.NewBufferString("body")),
                }
                err := req.ParseForm()
-               if err == nil {
+               switch {
+               case err == nil && test.shouldError:
                        t.Errorf("test %d should have returned error", i)
+               case err != nil && !test.shouldError:
+                       t.Errorf("test %d should not have returned error, got %v", i, err)
                }
        }
 }