Issue when using a null parameter
YannickB opened this issue ยท 2 comments
Hi,
When calling mutate function with a null variables I have the following error :
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x98 pc=0x8edbc6]
goroutine 21 [running]:
testing.tRunner.func1(0xc4204200f0)
/usr/lib/go-1.10/src/testing/testing.go:742 +0x29d
panic(0x9cf5e0, 0xda4180)
/usr/lib/go-1.10/src/runtime/panic.go:505 +0x229
github.com/shurcooL/graphql.writeArgumentType(0xafc4c0, 0xc42024aee0, 0x0, 0x0, 0xc420446101)
/opt/go/src/github.com/shurcooL/graphql/query.go:58 +0x26
github.com/shurcooL/graphql.queryArguments(0xc4203fec00, 0xc4200e6210, 0xc420178180)
/opt/go/src/github.com/shurcooL/graphql/query.go:46 +0x22b
github.com/shurcooL/graphql.constructMutation(0x9bf0e0, 0xc4200e6210, 0xc4203fec00, 0x4643fc, 0xda4bc0)
/opt/go/src/github.com/shurcooL/graphql/query.go:24 +0x6a
github.com/shurcooL/graphql.(*Client).do(0xc420177f28, 0xb04e20, 0xc4200a4050, 0xc420177b01, 0x9bf0e0, 0xc4200e6210, 0xc4203fec00, 0x0, 0x0)
/opt/go/src/github.com/shurcooL/graphql/graphql.go:53 +0x504
github.com/shurcooL/graphql.(*Client).Mutate(0xc420177f28, 0xb04e20, 0xc4200a4050, 0x9bf0e0, 0xc4200e6210, 0xc4203fec00, 0x0, 0x0)
/opt/go/src/github.com/shurcooL/graphql/graphql.go:43 +0x65
gitlab.com/YBuron/lib-go/models.(*ModelDefinition).CreateRecordGraphql(0xdaba80, 0xc4204200f0, 0xc420177f28, 0xa81ef1, 0x10, 0xa7f83b, 0xb, 0xc420177cd8, 0xc420177c78, 0x412c28)
My receiving struct
type requirementCreateMutation struct {Requirement requirementResult graphql:"createRequirement(title: $title, parentID: $parentID)"}
My variables :
err := client.Mutate(context.Background(), createMutation, map[string]interface{ 'title': 'test', 'parentID': nil, })
My graphql schema :
createRequirement( title: String! parentID: ID)
So it seems the error appears if we try to send a nil value to a non required graphql field. I plan to use different struct if parent is nil as workaround, but imho having a traceback in such case is a bug. Ideally, it should just send a nil value to the graphql server.
Best regards,
Thanks for reporting this. graphql
shouldn't panic, and I will fix that.
But I suspect I see what the issue is. You're not specifying the exact pointer type for the nil variable. You should do this instead:
err := client.Mutate(context.Background(), createMutation, map[string]interface{}{
"title": githubql.String("test"),
"parentID": (*githubql.ID)(nil),
})
Otherwise, it's not possible for graphql
to know the types of "title" and "parentID" variables when constructing the query. See https://github.com/shurcooL/graphql#arguments-and-variables for more info.
It's true, thanks for the tip!