Skip to content

GraphQL relationships can cause a stack overflow exception #746

Open
@aaronpowell

Description

@aaronpowell

Due to the type walking within our schema builder, it's possible to create a GraphQL schema that will result in a stack overflow exception.

Here's an example of a schema that causes the problem:

interface Node {
  id: ID!
}

enum GameState {
  WaitingForPlayers
  Started
  Completed
}

type Question implements Node @model {
  id: ID!
  question: String!
  correctAnswer: String!
  answers: [String!]!
}

type Player implements Node @model {
  id: ID!
  name: String!
  game(gameId: ID!): Game!
  games: [Game!]!
}

type Game implements Node @model {
  id: ID!
  state: GameState
  players: [Player!]!
  questions: [Question!]!
}

The head of the stack is here:

   at Azure.DataApiBuilder.Service.GraphQLBuilder.GraphQLUtils.IsBuiltInType(HotChocolate.Language.ITypeNode)
   at Azure.DataApiBuilder.Service.GraphQLBuilder.Mutations.CreateMutationBuilder.FieldAllowedOnCreateInput(HotChocolate.Language.FieldDefinitionNode, Azure.DataApiBuilder.Config.DatabaseType, System.Collections.Generic.IEnumerable`1<HotChocolate.Language.IHasName>)

But the full exception message is over 10k lines long.

I'm not sure what the state of relationships are in Cosmos, but this is realistic GraphQL schema (and the one I use for the demos I generally do).

My guess is that it doesn't like that Player references Game which references Player which references Game which...

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingcosmosengineissues that require change in engine codegraphql

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions