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/pkg/http/response.go | |
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/pkg/http/response.go')
-rw-r--r-- | src/pkg/http/response.go | 12 |
1 files changed, 9 insertions, 3 deletions
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 } |