Skip to content

Null Reference Error when preparing aruments #5292

@nealblomfield

Description

@nealblomfield

Describe the bug

InputObject#validate_for generates a NoMethodError: undefined method `[]' for nil because it is being passed a nil context (https://github.com/rmosolgo/graphql-ruby/blob/v2.4.15/lib/graphql/schema/input_object.rb#L109). Walking back up the call stack shows that:

Versions

graphql version: 2.4.15
rails (or other framework): 7.2.2.1

GraphQL schema
Nothing relevant

GraphQL query
Nothing relevant

Steps to reproduce

Steps to reproduce the behavior

Expected behavior
The code does not throw a no method error on nil when preparing arguments

Actual behavior
The code threw a no method error on nil when preparing arguments

Click to view exception backtrace
["graphql-2.4.15/lib/graphql/schema/input_object.rb:109:in `validate_for'",
 "graphql-2.4.15/lib/graphql/schema/argument.rb:410:in `recursively_prepare_input_object'",
 "graphql-2.4.15/lib/graphql/schema/argument.rb:408:in `block in recursively_prepare_input_object'",
 "graphql-2.4.15/lib/graphql/schema/argument.rb:408:in `map'",
 "graphql-2.4.15/lib/graphql/schema/argument.rb:408:in `recursively_prepare_input_object'",
 "graphql-2.4.15/lib/graphql/schema/argument.rb:220:in `prepare_value'",
 "graphql-2.4.15/lib/graphql/schema/input_object.rb:41:in `block in initialize'",
 "graphql-2.4.15/lib/graphql/schema/input_object.rb:35:in `each'",
 "graphql-2.4.15/lib/graphql/schema/input_object.rb:35:in `initialize'",
 "graphql-2.4.15/lib/graphql/schema/input_object.rb:235:in `new'",
 "graphql-2.4.15/lib/graphql/schema/input_object.rb:235:in `block in coerce_input'",
 "graphql-2.4.15/lib/graphql/execution/interpreter/runtime.rb:777:in `minimal_after_lazy'",
 "graphql-2.4.15/lib/graphql/execution/interpreter/runtime.rb:774:in `block in minimal_after_lazy'",
 "graphql-2.4.15/lib/graphql/execution/lazy.rb:30:in `value'",
 "graphql-2.4.15/lib/graphql/schema.rb:1628:in `public_send'",
 "graphql-2.4.15/lib/graphql/schema.rb:1628:in `sync_lazy'",
 "graphql-2.4.15/lib/graphql/execution/interpreter/runtime.rb:772:in `block in minimal_after_lazy'",
 "graphql-2.4.15/lib/graphql/execution/lazy.rb:30:in `value'",
 "graphql-2.4.15/lib/graphql/execution/lazy.rb:59:in `block (2 levels) in all'",
 "graphql-2.4.15/lib/graphql/execution/lazy.rb:59:in `map'",
 "graphql-2.4.15/lib/graphql/execution/lazy.rb:59:in `block in all'",
 "graphql-2.4.15/lib/graphql/execution/lazy.rb:30:in `value'",
 "graphql-2.4.15/lib/graphql/execution/lazy.rb:51:in `block in then'",
 "graphql-2.4.15/lib/graphql/execution/lazy.rb:30:in `value'",
 "graphql-2.4.15/lib/graphql/schema.rb:1628:in `public_send'",
 "graphql-2.4.15/lib/graphql/schema.rb:1628:in `sync_lazy'",
 "graphql-2.4.15/lib/graphql/execution/interpreter/runtime.rb:807:in `block (2 levels) in after_lazy'",
 "graphql-2.4.15/lib/graphql/tracing/trace.rb:111:in `execute_field_lazy'",
 "graphql-2.4.15/lib/graphql/tracing/data_dog_trace.rb:118:in `block in execute_field_lazy'",
 "graphql-2.4.15/lib/graphql/tracing/data_dog_trace.rb:104:in `block in execute_field_span'",
 "datadog-2.12.2/lib/datadog/tracing/trace_operation.rb:226:in `block in measure'",
 "datadog-2.12.2/lib/datadog/tracing/span_operation.rb:152:in `measure'",
 "datadog-2.12.2/lib/datadog/tracing/trace_operation.rb:226:in `measure'",
 "datadog-2.12.2/lib/datadog/tracing/tracer.rb:411:in `start_span'",
 "datadog-2.12.2/lib/datadog/tracing/tracer.rb:166:in `block in trace'",
 "datadog-2.12.2/lib/datadog/tracing/context.rb:45:in `activate!'",
 "datadog-2.12.2/lib/datadog/tracing/tracer.rb:165:in `trace'",
 "datadog-2.12.2/lib/datadog/tracing.rb:30:in `trace'",
 "graphql-2.4.15/lib/graphql/tracing/data_dog_trace.rb:96:in `execute_field_span'",
 "graphql-2.4.15/lib/graphql/tracing/data_dog_trace.rb:117:in `execute_field_lazy'",
 "graphql-2.4.15/lib/graphql/tracing/notifications_trace.rb:38:in `block in execute_field_lazy'",
 "activesupport-7.2.2.1/lib/active_support/notifications.rb:212:in `instrument'",
 "graphql-2.4.15/lib/graphql/tracing/notifications_trace.rb:38:in `execute_field_lazy'",
 "graphql-2.4.15/lib/graphql/execution/interpreter/runtime.rb:806:in `block in after_lazy'",
 "graphql-2.4.15/lib/graphql/execution/lazy.rb:30:in `value'",
 "graphql-2.4.15/lib/graphql/execution/interpreter/resolve.rb:27:in `each'",
 "graphql-2.4.15/lib/graphql/execution/interpreter/resolve.rb:27:in `block in resolve_each_depth'",
 "graphql-2.4.15/lib/graphql/dataloader/null_dataloader.rb:19:in `append_job'",
 "graphql-2.4.15/lib/graphql/execution/interpreter/resolve.rb:26:in `resolve_each_depth'",
 "graphql-2.4.15/lib/graphql/execution/interpreter.rb:104:in `block (3 levels) in run_all'",
 "graphql-2.4.15/lib/graphql/tracing/trace.rb:89:in `execute_query_lazy'",
 "graphql-2.4.15/lib/graphql/tracing/data_dog_trace.rb:51:in `block in execute_query_lazy'",
 "datadog-2.12.2/lib/datadog/tracing/trace_operation.rb:226:in `block in measure'",
 "datadog-2.12.2/lib/datadog/tracing/span_operation.rb:152:in `measure'",
 "datadog-2.12.2/lib/datadog/tracing/trace_operation.rb:226:in `measure'",
 "datadog-2.12.2/lib/datadog/tracing/tracer.rb:411:in `start_span'",
 "datadog-2.12.2/lib/datadog/tracing/tracer.rb:166:in `block in trace'",
 "datadog-2.12.2/lib/datadog/tracing/context.rb:45:in `activate!'",
 "datadog-2.12.2/lib/datadog/tracing/tracer.rb:165:in `trace'",
 "datadog-2.12.2/lib/datadog/tracing.rb:30:in `trace'",
 "graphql-2.4.15/lib/graphql/tracing/data_dog_trace.rb:43:in `execute_query_lazy'",
 "graphql-2.4.15/lib/graphql/tracing/notifications_trace.rb:38:in `block in execute_query_lazy'",
 "activesupport-7.2.2.1/lib/active_support/notifications.rb:212:in `instrument'",
 "graphql-2.4.15/lib/graphql/tracing/notifications_trace.rb:38:in `execute_query_lazy'",
 "graphql-2.4.15/lib/graphql/execution/interpreter.rb:103:in `block (2 levels) in run_all'",
 "graphql-2.4.15/lib/graphql/dataloader/null_dataloader.rb:19:in `append_job'",
 "graphql-2.4.15/lib/graphql/execution/interpreter.rb:94:in `block in run_all'",
 "graphql-2.4.15/lib/graphql/tracing/trace.rb:81:in `execute_multiplex'",
 "graphql-2.4.15/lib/graphql/tracing/data_dog_trace.rb:63:in `block in execute_multiplex'",
 "datadog-2.12.2/lib/datadog/tracing/trace_operation.rb:226:in `block in measure'",
 "datadog-2.12.2/lib/datadog/tracing/span_operation.rb:152:in `measure'",
 "datadog-2.12.2/lib/datadog/tracing/trace_operation.rb:226:in `measure'",
 "datadog-2.12.2/lib/datadog/tracing/tracer.rb:411:in `start_span'",
 "datadog-2.12.2/lib/datadog/tracing/tracer.rb:166:in `block in trace'",
 "datadog-2.12.2/lib/datadog/tracing/context.rb:45:in `activate!'",
 "datadog-2.12.2/lib/datadog/tracing/tracer.rb:165:in `trace'",
 "datadog-2.12.2/lib/datadog/tracing.rb:30:in `trace'",
 "graphql-2.4.15/lib/graphql/tracing/data_dog_trace.rb:43:in `execute_multiplex'",
 "graphql-2.4.15/lib/graphql/tracing/notifications_trace.rb:38:in `block in execute_multiplex'",
 "activesupport-7.2.2.1/lib/active_support/notifications.rb:210:in `block in instrument'",
 "activesupport-7.2.2.1/lib/active_support/notifications/instrumenter.rb:58:in `instrument'",
 "activesupport-7.2.2.1/lib/active_support/notifications.rb:210:in `instrument'",
 "graphql-2.4.15/lib/graphql/tracing/notifications_trace.rb:38:in `execute_multiplex'",
 "app/graphql/tracing/actual_complexity.rb:19:in `execute_multiplex'",
 "graphql-batch-0.6.0/lib/graphql/batch/setup_multiplex.rb:24:in `execute_multiplex'",
 "graphql-2.4.15/lib/graphql/execution/interpreter.rb:42:in `run_all'",
 "graphql-2.4.15/lib/graphql/schema.rb:1573:in `multiplex'",
 "graphql-2.4.15/lib/graphql/schema.rb:1549:in `execute'",
 ]```

</details>

**Additional context**

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions