aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Gerrand <adg@golang.org>2016-06-06 10:23:49 +1000
committerAndrew Gerrand <adg@golang.org>2016-06-06 21:15:40 +0000
commit3ba31558d1bca8ae6d2f03209b4cae55381175b3 (patch)
tree6cb96008cd30402ccb3952b98985c16ac9e1c1e2
parenta71af25401d68645ca23b2303ac6ae426739aa8b (diff)
downloadgo-3ba31558d1bca8ae6d2f03209b4cae55381175b3.tar.gz
go-3ba31558d1bca8ae6d2f03209b4cae55381175b3.zip
net/http: send StatusOK on empty body with TimeoutHandler
Fixes #15948 Change-Id: Idd79859b3e98d61cd4e3ef9caa5d3b2524fd026a Reviewed-on: https://go-review.googlesource.com/23810 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-rw-r--r--src/net/http/serve_test.go20
-rw-r--r--src/net/http/server.go3
2 files changed, 23 insertions, 0 deletions
diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go
index 26aefec7de..8e4bbdc0c4 100644
--- a/src/net/http/serve_test.go
+++ b/src/net/http/serve_test.go
@@ -1996,6 +1996,26 @@ func TestTimeoutHandlerStartTimerWhenServing(t *testing.T) {
}
}
+// https://golang.org/issue/15948
+func TestTimeoutHandlerEmptyResponse(t *testing.T) {
+ defer afterTest(t)
+ var handler HandlerFunc = func(w ResponseWriter, _ *Request) {
+ // No response.
+ }
+ timeout := 300 * time.Millisecond
+ ts := httptest.NewServer(TimeoutHandler(handler, timeout, ""))
+ defer ts.Close()
+
+ res, err := Get(ts.URL)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer res.Body.Close()
+ if res.StatusCode != StatusOK {
+ t.Errorf("got res.StatusCode %d, want %v", res.StatusCode, StatusOK)
+ }
+}
+
// Verifies we don't path.Clean() on the wrong parts in redirects.
func TestRedirectMunging(t *testing.T) {
req, _ := NewRequest("GET", "http://example.com/", nil)
diff --git a/src/net/http/server.go b/src/net/http/server.go
index 4286d719ec..8ecced85db 100644
--- a/src/net/http/server.go
+++ b/src/net/http/server.go
@@ -2464,6 +2464,9 @@ func (h *timeoutHandler) ServeHTTP(w ResponseWriter, r *Request) {
for k, vv := range tw.h {
dst[k] = vv
}
+ if !tw.wroteHeader {
+ tw.code = StatusOK
+ }
w.WriteHeader(tw.code)
w.Write(tw.wbuf.Bytes())
if t != nil {