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:
parent
974fa75557
commit
32d7a7364f
@ -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
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user