From: Andrew Gerrand Date: Mon, 6 Jun 2016 00:23:49 +0000 (+1000) Subject: net/http: send StatusOK on empty body with TimeoutHandler X-Git-Tag: go1.7beta2~46 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3ba31558d1bca8ae6d2f03209b4cae55381175b3;p=gostls13.git 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 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- 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 {