1
0
mirror of https://github.com/golang/go synced 2024-11-24 23:27:57 -07:00

net/http: make ParseForm ignore unknown content types.

Also fix a shadowed error variable bug.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5573072
This commit is contained in:
Roger Peppe 2012-01-26 16:50:56 +00:00
parent 974fa75557
commit 32d7a7364f
2 changed files with 12 additions and 11 deletions

View File

@ -606,7 +606,7 @@ func (r *Request) ParseForm() (err error) {
return errors.New("missing form body") return errors.New("missing form body")
} }
ct := r.Header.Get("Content-Type") ct := r.Header.Get("Content-Type")
ct, _, err := mime.ParseMediaType(ct) ct, _, err = mime.ParseMediaType(ct)
switch { switch {
case ct == "application/x-www-form-urlencoded": case ct == "application/x-www-form-urlencoded":
var reader io.Reader = r.Body var reader io.Reader = r.Body
@ -646,8 +646,6 @@ func (r *Request) ParseForm() (err error) {
// Clean this up and write more tests. // Clean this up and write more tests.
// request_test.go contains the start of this, // request_test.go contains the start of this,
// in TestRequestMultipartCallOrder. // in TestRequestMultipartCallOrder.
default:
return &badStringError{"unknown Content-Type", ct}
} }
} }
return err return err

View File

@ -46,19 +46,19 @@ func TestPostQuery(t *testing.T) {
type stringMap map[string][]string type stringMap map[string][]string
type parseContentTypeTest struct { type parseContentTypeTest struct {
shouldError bool
contentType stringMap contentType stringMap
} }
var parseContentTypeTests = []parseContentTypeTest{ var parseContentTypeTests = []parseContentTypeTest{
{contentType: stringMap{"Content-Type": {"text/plain"}}}, {false, stringMap{"Content-Type": {"text/plain"}}},
{contentType: stringMap{}}, // Non-existent keys are not placed. The value nil is illegal. // Non-existent keys are not placed. The value nil is illegal.
{contentType: stringMap{"Content-Type": {"text/plain; boundary="}}}, {true, stringMap{}},
{ {true, stringMap{"Content-Type": {"text/plain; boundary="}}},
contentType: stringMap{"Content-Type": {"application/unknown"}}, {false, stringMap{"Content-Type": {"application/unknown"}}},
},
} }
func TestParseFormBadContentType(t *testing.T) { func TestParseFormUnknownContentType(t *testing.T) {
for i, test := range parseContentTypeTests { for i, test := range parseContentTypeTests {
req := &Request{ req := &Request{
Method: "POST", Method: "POST",
@ -66,8 +66,11 @@ func TestParseFormBadContentType(t *testing.T) {
Body: ioutil.NopCloser(bytes.NewBufferString("body")), Body: ioutil.NopCloser(bytes.NewBufferString("body")),
} }
err := req.ParseForm() err := req.ParseForm()
if err == nil { switch {
case err == nil && test.shouldError:
t.Errorf("test %d should have returned error", i) 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)
} }
} }
} }