diff --git a/graphene/validation/depth_limit.py b/graphene/validation/depth_limit.py index e0f286634..ac44818a7 100644 --- a/graphene/validation/depth_limit.py +++ b/graphene/validation/depth_limit.py @@ -144,8 +144,11 @@ def determine_depth( ) ) elif isinstance(node, FragmentSpreadNode): + fragment = fragments.get(node.name.value) + if fragment is None: + return 0 return determine_depth( - node=fragments[node.name.value], + node=fragment, fragments=fragments, depth_so_far=depth_so_far, max_depth=max_depth, diff --git a/graphene/validation/tests/test_depth_limit_validator.py b/graphene/validation/tests/test_depth_limit_validator.py index 29c1508c4..20e0e3d4b 100644 --- a/graphene/validation/tests/test_depth_limit_validator.py +++ b/graphene/validation/tests/test_depth_limit_validator.py @@ -244,6 +244,19 @@ def test_should_ignore_field(): assert result == expected +def test_undefined_fragment_does_not_crash(): + query = """ + query read1 { + user { + name + ...undefinedFragment + } + } + """ + errors, result = run_query(query, 10) + assert result == {"read1": 1} + + def test_should_raise_invalid_ignore(): query = """ query read1 {