Skip to content

Swagger grpc throws stack overflow exception when having recursive trees as query parameters #58624

@ahmednfwela

Description

@ahmednfwela

Consider the following minimal rpc:

rpc List(ListRequest) returns (ListResponse) {
  option (google.api.http) = {
    get: "/api/notes/list",
  };
}

message ListRequest {
  ListRequestRecursive tree = 1;
}
message ListRequestRecursive {
  ListRequestRecursiveChildren children = 1;
}
message ListRequestRecursiveChildren {
  repeated ListRequestRecursive  children = 1;
}
message ListResponse { }

This causes the server to throw stack overflow exception as it goes into infinite loop starting from here:

RecursiveVisitMessages(queryParameters, existingParameters, methodDescriptor.InputType, new List<FieldDescriptor>());

workaround:
use POST instead of get:

rpc List(ListRequest) returns (ListResponse) {
  option (google.api.http) = {
    post: "/api/notes/list",
    body: "*"
  };
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-grpcIncludes: GRPC wire-up, templates

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions