mirror of
https://github.com/golang/go
synced 2024-11-24 21:10:04 -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:
parent
974fa75557
commit
32d7a7364f
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user