From: Brad Fitzpatrick Date: Sat, 8 Mar 2014 00:59:11 +0000 (-0800) Subject: net/rpc/jsonrpc: set exactly one of result or error to non-null in response X-Git-Tag: go1.3beta1~413 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7718c626926beb0e5fed152d8d1a86be22570a34;p=gostls13.git net/rpc/jsonrpc: set exactly one of result or error to non-null in response Fixes #7442 LGTM=gri R=golang-codereviews, gri CC=golang-codereviews https://golang.org/cl/72570044 --- diff --git a/src/pkg/net/rpc/jsonrpc/all_test.go b/src/pkg/net/rpc/jsonrpc/all_test.go index 07913572aa..a433a365e8 100644 --- a/src/pkg/net/rpc/jsonrpc/all_test.go +++ b/src/pkg/net/rpc/jsonrpc/all_test.go @@ -205,7 +205,6 @@ func TestMalformedOutput(t *testing.T) { } func TestServerErrorHasNullResult(t *testing.T) { - t.Skip("Known failing test; Issue 7442") var out bytes.Buffer sc := NewServerCodec(struct { io.Reader diff --git a/src/pkg/net/rpc/jsonrpc/server.go b/src/pkg/net/rpc/jsonrpc/server.go index 16ec0fe9ad..e6d37cfa64 100644 --- a/src/pkg/net/rpc/jsonrpc/server.go +++ b/src/pkg/net/rpc/jsonrpc/server.go @@ -100,7 +100,6 @@ func (c *serverCodec) ReadRequestBody(x interface{}) error { var null = json.RawMessage([]byte("null")) func (c *serverCodec) WriteResponse(r *rpc.Response, x interface{}) error { - var resp serverResponse c.mutex.Lock() b, ok := c.pending[r.Seq] if !ok { @@ -114,10 +113,9 @@ func (c *serverCodec) WriteResponse(r *rpc.Response, x interface{}) error { // Invalid request so no id. Use JSON null. b = &null } - resp.Id = b - resp.Result = x + resp := serverResponse{Id: b} if r.Error == "" { - resp.Error = nil + resp.Result = x } else { resp.Error = r.Error }