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