diff options
author | Andrew Gerrand <adg@golang.org> | 2016-06-06 10:23:49 +1000 |
---|---|---|
committer | Andrew Gerrand <adg@golang.org> | 2016-06-06 21:15:40 +0000 |
commit | 3ba31558d1bca8ae6d2f03209b4cae55381175b3 (patch) | |
tree | 6cb96008cd30402ccb3952b98985c16ac9e1c1e2 | |
parent | a71af25401d68645ca23b2303ac6ae426739aa8b (diff) | |
download | go-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.go | 20 | ||||
-rw-r--r-- | src/net/http/server.go | 3 |
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 { |