Skip to content

OverlappingFieldsCanBeMerged RangeError: Maximum call stack size exceeded #406

@fionawhim

Description

@fionawhim

We saw this in production. Not sure what caused Relay to go all "fundefined" but here's the query:

query Sidebar_route {
  currentAccount {
    id
    ...Fundefined
  }
}

fragment F0 on Project {
  name
  identifier
  platform
  iconUrl
  organization {
    alias
    name
    id
  }
  id
}

fragment Fundefined on Account {
  _projectsundefinedcqQId: projects(first: 100) {
    pageInfo {
      hasNextPage
      hasPreviousPage
    }
    edges {
      node {
        externalId
        name
        identifier
        platform
        organization {
          name
          alias
          id
        }
        id
        ...F0
      }
      cursor
    }
  }
  id
}

fragment Fundefined on Account {
  id
  ...Fundefined
}

And a bit of the stack trace:

RangeError: Maximum call stack size exceeded
RangeError: Maximum call stack size exceeded
at sameArguments (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:444:23) 
at findConflict (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:424:10) 
at /srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:375:26 
at Array.forEach (native) at collectConflictsBetween (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:369:34) 
at collectConflictsBetweenFieldsAndFragment (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:225:3) 
at collectConflictsBetweenFieldsAndFragment (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:230:5) 
at collectConflictsBetweenFieldsAndFragment (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:230:5) 
at collectConflictsBetweenFieldsAndFragment (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:230:5) 
at collectConflictsBetweenFieldsAndFragment (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:230:5) 
at collectConflictsBetweenFieldsAndFragment (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:230:5) 
at collectConflictsBetweenFieldsAndFragment (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:230:5) 
at collectConflictsBetweenFieldsAndFragment (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:230:5) 
at collectConflictsBetweenFieldsAndFragment (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:230:5) 
at collectConflictsBetweenFieldsAndFragment (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:230:5) 
at collectConflictsBetweenFieldsAndFragment (/srv/graphql-server/releases/ac9417eae173c36d5b9d0c6c9315f829ff0c2a63/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js:230:5)

I would expect that this query would be rejected on validation rather than causing a recursive stack blowup.

graphql-js v0.6.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions