]> Cypherpunks repositories - gostls13.git/commitdiff
http: protect io.WriteString in Request/Response.Write with error checking,
authorPetar Maymounkov <petarm@gmail.com>
Wed, 10 Feb 2010 01:42:51 +0000 (17:42 -0800)
committerRuss Cox <rsc@golang.org>
Wed, 10 Feb 2010 01:42:51 +0000 (17:42 -0800)
since they were causing a silent program exit (too many EPIPE's).

R=rsc
CC=golang-dev
https://golang.org/cl/204062

src/pkg/http/request.go
src/pkg/http/response.go

index 17afc9cc1b0923c7a7ab29eba2b34f643de11d53..bd8f00d55269bdfb51a5464077c26d7f9ebd11b5 100644 (file)
@@ -171,7 +171,10 @@ func (req *Request) Write(w io.Writer) os.Error {
        // from Request, and introduce Request methods along the lines of
        // Response.{GetHeader,AddHeader} and string constants for "Host",
        // "User-Agent" and "Referer".
-       writeSortedKeyValue(w, req.Header, reqExcludeHeader)
+       err := writeSortedKeyValue(w, req.Header, reqExcludeHeader)
+       if err != nil {
+               return err
+       }
 
        io.WriteString(w, "\r\n")
 
index 30f8934917e0c6a45fbf05ec7b02cfc769237199..b3743a88cb128d0ad5e4d75a315d5ac139596c7d 100644 (file)
@@ -459,7 +459,10 @@ func (resp *Response) Write(w io.Writer) os.Error {
        }
 
        // Rest of header
-       writeSortedKeyValue(w, resp.Header, respExcludeHeader)
+       err := writeSortedKeyValue(w, resp.Header, respExcludeHeader)
+       if err != nil {
+               return err
+       }
 
        // End-of-header
        io.WriteString(w, "\r\n")
@@ -494,7 +497,7 @@ func (resp *Response) Write(w io.Writer) os.Error {
        return nil
 }
 
-func writeSortedKeyValue(w io.Writer, kvm map[string]string, exclude map[string]int) {
+func writeSortedKeyValue(w io.Writer, kvm map[string]string, exclude map[string]int) os.Error {
        kva := make([]string, len(kvm))
        i := 0
        for k, v := range kvm {
@@ -506,6 +509,9 @@ func writeSortedKeyValue(w io.Writer, kvm map[string]string, exclude map[string]
        kva = kva[0:i]
        sort.SortStrings(kva)
        for _, l := range kva {
-               io.WriteString(w, l)
+               if _, err := io.WriteString(w, l); err != nil {
+                       return err
+               }
        }
+       return nil
 }