mirror of
https://github.com/golang/go
synced 2024-11-13 18:00:30 -07:00
http: fix sniffing bug causing short writes
R=rsc CC=golang-dev https://golang.org/cl/5442045
This commit is contained in:
parent
7606079d9f
commit
1e85f41fd5
@ -467,7 +467,7 @@ func (w *response) Write(data []byte) (n int, err error) {
|
||||
// determine the content type. Accumulate the
|
||||
// initial writes in w.conn.body.
|
||||
// Cap m so that append won't allocate.
|
||||
m := cap(w.conn.body) - len(w.conn.body)
|
||||
m = cap(w.conn.body) - len(w.conn.body)
|
||||
if m > len(data) {
|
||||
m = len(data)
|
||||
}
|
||||
|
@ -6,12 +6,14 @@ package http_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
. "net/http"
|
||||
"net/http/httptest"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@ -112,3 +114,24 @@ func TestContentTypeWithCopy(t *testing.T) {
|
||||
}
|
||||
resp.Body.Close()
|
||||
}
|
||||
|
||||
func TestSniffWriteSize(t *testing.T) {
|
||||
ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {
|
||||
size, _ := strconv.Atoi(r.FormValue("size"))
|
||||
written, err := io.WriteString(w, strings.Repeat("a", size))
|
||||
if err != nil {
|
||||
t.Errorf("write of %d bytes: %v", size, err)
|
||||
return
|
||||
}
|
||||
if written != size {
|
||||
t.Errorf("write of %d bytes wrote %d bytes", size, written)
|
||||
}
|
||||
}))
|
||||
defer ts.Close()
|
||||
for _, size := range []int{0, 1, 200, 600, 999, 1000, 1023, 1024, 512 << 10, 1 << 20} {
|
||||
_, err := Get(fmt.Sprintf("%s/?size=%d", ts.URL, size))
|
||||
if err != nil {
|
||||
t.Fatalf("size %d: %v", size, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user