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.
|
||||
func Peer(peer *peer.Peer) CallOption {
|
||||
return afterCall(func(c *callInfo) {
|
||||
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) {
|
||||
defer leakCheck(t)()
|
||||
for _, e := range listTestEnv() {
|
||||
|
Reference in New Issue
Block a user