]> Cypherpunks repositories - gostls13.git/commitdiff
http: do not edit Response.ContentLength in Response.Write
authorPetar Maymounkov <petarm@gmail.com>
Fri, 19 Feb 2010 07:38:17 +0000 (23:38 -0800)
committerRuss Cox <rsc@golang.org>
Fri, 19 Feb 2010 07:38:17 +0000 (23:38 -0800)
R=rsc
CC=golang-dev
https://golang.org/cl/207061

src/pkg/http/response.go

index b3743a88cb128d0ad5e4d75a315d5ac139596c7d..ffdcaa2386fc9e000abf90c9454f68b1314f3fec 100644 (file)
@@ -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