Comments (3)
If you check the blame layer:
https://github.com/grpc/grpc-go/blame/master/stream.go#L280
None of this code has been touched at all for many years, so I don't think there is any regression here.
It's a programmer error to pass nil
as a CallOption
. It's not a situation that is difficult to avoid, and in fact it's very unusual to encounter it.
from grpc-go.
I'm not seeing where it exactly talks about the nil handling there. I don't think Invoke() should handle nil being passed along opts.
For an example like https://go.dev/play/p/HxapK0toPq8 -
package main
import "fmt"
type CallOption interface {
before(*string) error
after(*string, *string)
}
type EmptyCallOption struct{}
func (EmptyCallOption) before(*string) error { return nil }
func (EmptyCallOption) after(*string, *string) {}
func f(a ...CallOption) {
fmt.Printf("%+v\n", a)
}
func main() {
f()
f(nil)
f(EmptyCallOption{})
}
the output is:
[]
[<nil>]
[{}]
i.e., f()
!= f(nil)
from grpc-go.
I don't remember the gRPC package version we used before updating to Go v1.20
, but before this update calling the Invoke
method with the options set with nil
doesn't panic, but after this update invoking the method results in a panic
.
If the opts ...CallOption
is nil
. The panic occurs after the defer
at https://github.com/grpc/grpc-go/blob/master/stream.go#L274 who is triggered by the calling one [nil]
as a function without validation if the value is nil
or not, at https://github.com/grpc/grpc-go/blob/master/stream.go#L280
from grpc-go.
Related Issues (20)
- use the google.golang.org/protobuf module instead HOT 2
- stats: peer is not populated for all HandleRPC client callbacks HOT 7
- Wait for ready with "readiness timeout" HOT 16
- How to catch the panic of sendResponse? HOT 5
- Response is not compressed when grpc-accept-encoding header contains spaces between values
- On AWS ALB a gRPC stream CloseSend() without a prior Send() is not received by server HOT 1
- Add new function to grpc ClientConn HOT 2
- Reuse compression buffer
- gRPC client reports the wrong status code if server response contains an unsupported encoding HOT 1
- Unable to Perform Server-Side Stream Initialization Checks in gRPC Client-Side Streaming RPC to return error on stream creation HOT 3
- Client waits with DNS query when no channel's available HOT 6
- Profile Guided Optimization results in high memory usage HOT 6
- Make server workers channel buffered? HOT 11
- xdsresolver uses ldsResourceName instead of using data plane authority HOT 2
- Question: PING frame HOT 7
- Does gRPC-go URL encode `/`'s from xDS dial target HOT 1
- Stabilize `UseCompressor` and `SetSendCompressor` HOT 1
- subChannel triggerDelete lead to dead loop HOT 3
- xds: ADS stream failure triggers wildcard subscriptions on new stream HOT 11
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from grpc-go.