Commit e3b94edc authored by Petar Maymounkov's avatar Petar Maymounkov Committed by Russ Cox

http: do not edit Response.ContentLength in Response.Write

R=rsc
CC=golang-dev
https://golang.org/cl/207061
parent 80a14df1
......@@ -398,11 +398,12 @@ func (resp *Response) Write(w io.Writer) os.Error {
io.WriteString(w, strconv.Itoa(resp.StatusCode)+" "+text+"\r\n")
// Sanitize the field triple (Body, ContentLength, TransferEncoding)
contentLength := resp.ContentLength
if noBodyExpected(resp.RequestMethod) {
resp.Body = nil
resp.TransferEncoding = nil
// resp.ContentLength is expected to hold Content-Length
if resp.ContentLength < 0 {
if contentLength < 0 {
return ErrMissingContentLength
}
} else {
......@@ -410,9 +411,9 @@ func (resp *Response) Write(w io.Writer) os.Error {
resp.TransferEncoding = nil
}
if chunked(resp.TransferEncoding) {
resp.ContentLength = -1
contentLength = -1
} else if resp.Body == nil { // no chunking, no body
resp.ContentLength = 0
contentLength = 0
}
}
......@@ -422,9 +423,9 @@ func (resp *Response) Write(w io.Writer) os.Error {
if chunked(resp.TransferEncoding) {
io.WriteString(w, "Transfer-Encoding: chunked\r\n")
} else {
if resp.ContentLength > 0 || resp.RequestMethod == "HEAD" {
if contentLength > 0 || resp.RequestMethod == "HEAD" {
io.WriteString(w, "Content-Length: ")
io.WriteString(w, strconv.Itoa64(resp.ContentLength)+"\r\n")
io.WriteString(w, strconv.Itoa64(contentLength)+"\r\n")
}
}
if resp.Header != nil {
......@@ -477,7 +478,7 @@ func (resp *Response) Write(w io.Writer) os.Error {
err = cw.Close()
}
} else {
_, err = io.Copy(w, io.LimitReader(resp.Body, resp.ContentLength))
_, err = io.Copy(w, io.LimitReader(resp.Body, contentLength))
}
if err != nil {
return err
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment