diff options
author | Petar Maymounkov <petarm@gmail.com> | 2010-02-09 17:42:51 -0800 |
---|---|---|
committer | Petar Maymounkov <petarm@gmail.com> | 2010-02-09 17:42:51 -0800 |
commit | 4c6707de3ff6dc376215849135c4af10c52fec61 (patch) | |
tree | 583c017455d1e073f68a56a9085a3f9948d6b280 /src | |
parent | b07eb5f7acdf58ef956cf93dc0b3d73093eea738 (diff) | |
download | golang-4c6707de3ff6dc376215849135c4af10c52fec61.tar.gz |
http: protect io.WriteString in Request/Response.Write with error checking,
since they were causing a silent program exit (too many EPIPE's).
R=rsc
CC=golang-dev
http://codereview.appspot.com/204062
Committer: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/pkg/http/request.go | 5 | ||||
-rw-r--r-- | src/pkg/http/response.go | 12 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/pkg/http/request.go b/src/pkg/http/request.go index 17afc9cc1..bd8f00d55 100644 --- a/src/pkg/http/request.go +++ b/src/pkg/http/request.go @@ -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") diff --git a/src/pkg/http/response.go b/src/pkg/http/response.go index 30f893491..b3743a88c 100644 --- a/src/pkg/http/response.go +++ b/src/pkg/http/response.go @@ -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 } |