aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorStephen Ma <stephenm@golang.org>2009-04-27 00:38:04 -0700
committerStephen Ma <stephenm@golang.org>2009-04-27 00:38:04 -0700
commiteb5eea9a8f336355fa2c7d006a56bb740b3486ec (patch)
treeccbfca664a4711c8bd6e31bbc96f1d6d7be3f6af /src/lib
parentf4b92c8624d220592b374fb8d1a654d6e8a356c6 (diff)
downloadgo-eb5eea9a8f336355fa2c7d006a56bb740b3486ec.tar.xz
Fix the chunked encoding - terminate the chunk with CRLF.
R=rsc APPROVED=r DELTA=11 (10 added, 0 deleted, 1 changed) OCL=27723 CL=27879
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/http/server.go12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/lib/http/server.go b/src/lib/http/server.go
index 3595a515dc..9b6aa6c414 100644
--- a/src/lib/http/server.go
+++ b/src/lib/http/server.go
@@ -174,7 +174,17 @@ func (c *Conn) Write(data []byte) (n int, err os.Error) {
if c.chunking {
fmt.Fprintf(c.buf, "%x\r\n", len(data)); // TODO(rsc): use strconv not fmt
}
- return c.buf.Write(data);
+ n, err = c.buf.Write(data);
+ if err == nil && c.chunking {
+ if n != len(data) {
+ err = bufio.ShortWrite;
+ }
+ if err == nil {
+ io.WriteString(c.buf, "\r\n");
+ }
+ }
+
+ return n, err;
}
func (c *Conn) flush() {