]> Cypherpunks repositories - gostls13.git/commitdiff
http: only recognize application/x-www-form-urlencoded in ParseForm
authorBrad Fitzpatrick <bradfitz@golang.org>
Fri, 4 Nov 2011 00:21:58 +0000 (17:21 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 4 Nov 2011 00:21:58 +0000 (17:21 -0700)
R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/5322070

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

index d9a04efe3eb94d1cd53618e068b401d510d5fd88..7a62dcede450d9f04bcd512da75a70aa22782a1f 100644 (file)
@@ -734,7 +734,7 @@ func (r *Request) ParseForm() (err error) {
                ct := r.Header.Get("Content-Type")
                ct, _, err := mime.ParseMediaType(ct)
                switch {
-               case ct == "text/plain" || ct == "application/x-www-form-urlencoded" || ct == "":
+               case ct == "application/x-www-form-urlencoded":
                        var reader io.Reader = r.Body
                        maxFormSize := int64(1<<63 - 1)
                        if _, ok := r.Body.(*maxBytesReader); !ok {
index 9be9efcc87d34c1df237732c40c7cfa804ba6585..d6487e1974e1705998153165f6ed8a1ed7d11105 100644 (file)
@@ -29,12 +29,10 @@ func TestQuery(t *testing.T) {
 }
 
 func TestPostQuery(t *testing.T) {
-       req := &Request{Method: "POST"}
-       req.URL, _ = url.Parse("http://www.google.com/search?q=foo&q=bar&both=x")
-       req.Header = Header{
-               "Content-Type": {"application/x-www-form-urlencoded; boo!"},
-       }
-       req.Body = ioutil.NopCloser(strings.NewReader("z=post&both=y"))
+       req, _ := NewRequest("POST", "http://www.google.com/search?q=foo&q=bar&both=x",
+               strings.NewReader("z=post&both=y"))
+       req.Header.Set("Content-Type", "application/x-www-form-urlencoded; param=value")
+
        if q := req.FormValue("q"); q != "foo" {
                t.Errorf(`req.FormValue("q") = %q, want "foo"`, q)
        }
@@ -49,7 +47,6 @@ func TestPostQuery(t *testing.T) {
 type stringMap map[string][]string
 type parseContentTypeTest struct {
        contentType stringMap
-       err         bool
 }
 
 var parseContentTypeTests = []parseContentTypeTest{
@@ -58,11 +55,10 @@ var parseContentTypeTests = []parseContentTypeTest{
        {contentType: stringMap{"Content-Type": {"text/plain; boundary="}}},
        {
                contentType: stringMap{"Content-Type": {"application/unknown"}},
-               err:         true,
        },
 }
 
-func TestPostContentTypeParsing(t *testing.T) {
+func TestParseFormBadContentType(t *testing.T) {
        for i, test := range parseContentTypeTests {
                req := &Request{
                        Method: "POST",
@@ -70,10 +66,7 @@ func TestPostContentTypeParsing(t *testing.T) {
                        Body:   ioutil.NopCloser(bytes.NewBufferString("body")),
                }
                err := req.ParseForm()
-               if !test.err && err != nil {
-                       t.Errorf("test %d: Unexpected error: %v", i, err)
-               }
-               if test.err && err == nil {
+               if err == nil {
                        t.Errorf("test %d should have returned error", i)
                }
        }