1
0
mirror of https://github.com/golang/go synced 2024-11-20 03:04:40 -07:00

http: only recognize application/x-www-form-urlencoded in ParseForm

R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/5322070
This commit is contained in:
Brad Fitzpatrick 2011-11-03 17:21:58 -07:00
parent 54049767ae
commit a494c20032
2 changed files with 7 additions and 14 deletions

View 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 {

View 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)
}
}