1
0
mirror of https://github.com/golang/go synced 2024-11-18 09:04:49 -07:00

Don't prefix Url.Path with a slash in Request.write,

because Url.Path already starts with one.
Avoid crashing in Request.ParseForm if there is no body.

R=rsc
APPROVED=rsc
DELTA=5  (4 added, 0 deleted, 1 changed)
OCL=30552
CL=30607
This commit is contained in:
David Symonds 2009-06-22 14:50:12 -07:00
parent 71f19d66d4
commit 343bfcfca7

View File

@ -36,6 +36,7 @@ var (
HeaderTooLong = &ProtocolError{"http header too long"}; HeaderTooLong = &ProtocolError{"http header too long"};
BadContentLength = &ProtocolError{"invalid content length"}; BadContentLength = &ProtocolError{"invalid content length"};
ShortEntityBody = &ProtocolError{"entity body too short"}; ShortEntityBody = &ProtocolError{"entity body too short"};
NoEntityBody = &ProtocolError{"no entity body"};
BadHeader = &ProtocolError{"malformed http header"}; BadHeader = &ProtocolError{"malformed http header"};
BadRequest = &ProtocolError{"invalid http request"}; BadRequest = &ProtocolError{"invalid http request"};
BadHTTPVersion = &ProtocolError{"unsupported http version"}; BadHTTPVersion = &ProtocolError{"unsupported http version"};
@ -124,7 +125,7 @@ const defaultUserAgent = "http.Client";
// Write an HTTP request -- header and body -- in wire format. // Write an HTTP request -- header and body -- in wire format.
// See Send for a list of which Request fields we use. // See Send for a list of which Request fields we use.
func (req *Request) write(w io.Writer) os.Error { func (req *Request) write(w io.Writer) os.Error {
uri := "/" + URLEscape(req.Url.Path); uri := URLEscape(req.Url.Path);
if req.Url.RawQuery != "" { if req.Url.RawQuery != "" {
uri += "?" + req.Url.RawQuery; uri += "?" + req.Url.RawQuery;
} }
@ -493,6 +494,9 @@ func parseForm(body string) (data map[string] *vector.StringVector, err os.Error
// ParseForm parses the request body as a form. // ParseForm parses the request body as a form.
func (r *Request) ParseForm() (err os.Error) { func (r *Request) ParseForm() (err os.Error) {
if r.Body == nil {
return NoEntityBody
}
ct, ok := r.Header["Content-Type"]; ct, ok := r.Header["Content-Type"];
if !ok { if !ok {
ct = "application/x-www-form-urlencoded"; // default ct = "application/x-www-form-urlencoded"; // default