Skip to content

Commit 76bbede

Browse files
authored
invoking client-streaming RPC can panic (#262)
1 parent b9d2d8c commit 76bbede

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

invoke.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -227,15 +227,19 @@ func invokeClientStream(ctx context.Context, stub grpcdynamic.Stub, md *desc.Met
227227
return fmt.Errorf("grpc call for %q failed: %v", md.GetFullyQualifiedName(), err)
228228
}
229229

230-
if respHeaders, err := str.Header(); err == nil {
231-
handler.OnReceiveHeaders(respHeaders)
230+
if str != nil {
231+
if respHeaders, err := str.Header(); err == nil {
232+
handler.OnReceiveHeaders(respHeaders)
233+
}
232234
}
233235

234236
if stat.Code() == codes.OK {
235237
handler.OnReceiveResponse(resp)
236238
}
237239

238-
handler.OnReceiveTrailers(stat, str.Trailer())
240+
if str != nil {
241+
handler.OnReceiveTrailers(stat, str.Trailer())
242+
}
239243

240244
return nil
241245
}
@@ -334,8 +338,10 @@ func invokeBidi(ctx context.Context, stub grpcdynamic.Stub, md *desc.MethodDescr
334338
}()
335339
}
336340

337-
if respHeaders, err := str.Header(); err == nil {
338-
handler.OnReceiveHeaders(respHeaders)
341+
if str != nil {
342+
if respHeaders, err := str.Header(); err == nil {
343+
handler.OnReceiveHeaders(respHeaders)
344+
}
339345
}
340346

341347
// Download each response message
@@ -362,7 +368,9 @@ func invokeBidi(ctx context.Context, stub grpcdynamic.Stub, md *desc.MethodDescr
362368
return fmt.Errorf("grpc call for %q failed: %v", md.GetFullyQualifiedName(), err)
363369
}
364370

365-
handler.OnReceiveTrailers(stat, str.Trailer())
371+
if str != nil {
372+
handler.OnReceiveTrailers(stat, str.Trailer())
373+
}
366374

367375
return nil
368376
}

0 commit comments

Comments
 (0)