Bug fix(Issue#1141): Check if peer is nil before trying to derefer it. (#1143)
This commit is contained in:
@ -189,7 +189,9 @@ func Trailer(md *metadata.MD) CallOption {
|
|||||||
// unary RPC.
|
// unary RPC.
|
||||||
func Peer(peer *peer.Peer) CallOption {
|
func Peer(peer *peer.Peer) CallOption {
|
||||||
return afterCall(func(c *callInfo) {
|
return afterCall(func(c *callInfo) {
|
||||||
*peer = *c.peer
|
if c.peer != nil {
|
||||||
|
*peer = *c.peer
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1541,6 +1541,29 @@ func testPeerClientSide(t *testing.T, e env) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestPeerNegative tests that if call fails setting peer
|
||||||
|
// doesn't cause a segmentation fault.
|
||||||
|
// issue#1141 https://github.com/grpc/grpc-go/issues/1141
|
||||||
|
func TestPeerNegative(t *testing.T) {
|
||||||
|
defer leakCheck(t)()
|
||||||
|
for _, e := range listTestEnv() {
|
||||||
|
testPeerNegative(t, e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func testPeerNegative(t *testing.T, e env) {
|
||||||
|
te := newTest(t, e)
|
||||||
|
te.startServer(&testServer{security: e.security})
|
||||||
|
defer te.tearDown()
|
||||||
|
|
||||||
|
cc := te.clientConn()
|
||||||
|
tc := testpb.NewTestServiceClient(cc)
|
||||||
|
peer := new(peer.Peer)
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
cancel()
|
||||||
|
tc.EmptyCall(ctx, &testpb.Empty{}, grpc.Peer(peer))
|
||||||
|
}
|
||||||
|
|
||||||
func TestMetadataUnaryRPC(t *testing.T) {
|
func TestMetadataUnaryRPC(t *testing.T) {
|
||||||
defer leakCheck(t)()
|
defer leakCheck(t)()
|
||||||
for _, e := range listTestEnv() {
|
for _, e := range listTestEnv() {
|
||||||
|
Reference in New Issue
Block a user