-
Notifications
You must be signed in to change notification settings - Fork 11
Open
Description
Summary
When a proto file defines multiple messages that reference each other (e.g., request/response pairs), asking the reflection server to describe one of those messages
eventually crashes with a stack overflow. The reflection builder currently emits one pseudo proto file per message. For two messages in the same source file that depend on each other, the client chases an endless loop of FileByFilename lookups between the synthetic files and never settles.
Steps to Reproduce
- Edit examples/helloworld_v3/priv/protos/helloworld.proto and ensure HelloRequest references another message in that file—for example add google.protobuf.Struct
struct = 2;. (This mirrors the scenario where two messages in one proto depend on each other or on a shared nested type.) - Regenerate the Elixir stubs so the updated proto is reflected in the .pb.ex files.
- Start the reflection server then call it (use grpcurl: grpcurl -plaintext localhost:50051 describe .helloworld.HelloRequest).
- Observe the client output with runtime: stack overflow. The captured stack trace is in result.txt.
Expected Behaviour
Asking for file_containing_symbol (or file_by_filename) should return the real proto (helloworld.proto) once, listing both HelloRequest and HelloReply in message_type with a finite dependency list.
Metadata
Metadata
Assignees
Labels
No labels