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)
- GitHub Action: branch protection checks are skipped, and also not blocking merges HOT 3
- grpc.NewClient with namedpipe on Windows throws resolverError HOT 2
- User agent becomes grpc-go/1.64. on server side of grpc gateway HOT 3
- xds: move functionality from `xds/internal` to `internal/xds`
- stubserver: add support to optionally pass in a `grpc.Server` or `xds.GRPCServer` HOT 2
- Github Action: Codecov action is broken and is failing silently HOT 1
- Upgrade to using math/rand/v2 to get perf enhancements HOT 2
- xds: tests shouldn't rely on the presence of an entry in the `authorities` field of the bootstrap configuration with an empty key HOT 1
- Experimental API related to metadata HOT 6
- Linter rule for using context.Background() without a timeout in tests HOT 4
- gRPC is incompatible with tls.Listener HOT 2
- Closing connection takes up to 15 minutes. HOT 5
- Feature Request: expose handleRawConn or add ServeConn HOT 26
- Flaky test: TimerAndWatchStateOnErrorCallback HOT 6
- xds: bootstrap config is not emitted to logs in a human readable way
- Strongly-type request inside a Stream Server Interceptor HOT 2
- Proxy connection buffer necessary? HOT 1
- Why does grpc.NewClient silently ignore DialOptions? HOT 2
- Make transport.SetConnection public? HOT 4
- what's the default max data size
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.