cayleygraph / cayley

An open-source graph database
https://cayley.io
Apache License 2.0
14.83k stars 1.25k forks source link

Exclude on non existing entity crashes #923

Open iddan opened 4 years ago

iddan commented 4 years ago

Description When applying to exclude on a non-existing node the query crashes.

Steps to reproduce the issue:

  1. Run server
  2. Execute:
     g.V().except(g.V(g.IRI("foo"))).all();
  3. See crash in server log

Expected results:

null

Output of cayley version or commit hash:

Cayley version: v0.8.x-dev
Git commit hash: dev snapshot

Logs

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: Panic at 87: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: Panic at 87: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x44e7349]

goroutine 117 [running]:
github.com/dop251/goja.(*Runtime).RunProgram.func1(0xc00016bef8)
    /Users/iddan/go/pkg/mod/github.com/dop251/goja@v0.0.0-20190105122144-6d5bf35058fa/runtime.go:880 +0x98
panic(0x5050a60, 0xc000486050)
    /usr/local/Cellar/go/1.13.8/libexec/src/runtime/panic.go:679 +0x1b2
github.com/dop251/goja.(*vm).try.func1(0xc0004ac340, 0x0, 0xc00016bdc0, 0x0, 0x0, 0x0, 0xc00016be18)
    /Users/iddan/go/pkg/mod/github.com/dop251/goja@v0.0.0-20190105122144-6d5bf35058fa/vm.go:364 +0x496
panic(0x5070760, 0x613df30)
    /usr/local/Cellar/go/1.13.8/libexec/src/runtime/panic.go:679 +0x1b2
github.com/cayleygraph/cayley/query/shape.Except.Optimize(0x0, 0x0, 0x55dba20, 0x617ce38, 0x55f14a0, 0xc000287340, 0x0, 0x0, 0x508ba40, 0xc000129101, ...)
    /Users/iddan/cayley/query/shape/shape.go:272 +0x29
github.com/cayleygraph/cayley/query/shape.Intersect.Optimize(0xc000129120, 0x2, 0x2, 0x55f14a0, 0xc000287340, 0x0, 0x0, 0x0, 0x0, 0x50c6601)
    /Users/iddan/cayley/query/shape/shape.go:939 +0x17e
github.com/cayleygraph/cayley/query/shape.Optimize(0x55f14a0, 0xc000287340, 0x55dbba0, 0xc000128c20, 0x5609080, 0xc0000dc9a0, 0x0, 0x0, 0xc000389850)
    /Users/iddan/cayley/query/shape/shape.go:77 +0xb6
github.com/cayleygraph/cayley/query/shape.BuildIterator(0x55f14a0, 0xc000287340, 0x5609080, 0xc0000dc9a0, 0x55dbba0, 0xc000128c20, 0x0, 0x8)
    /Users/iddan/cayley/query/shape/shape.go:215 +0x123
github.com/cayleygraph/cayley/query/path.(*Path).BuildIteratorOn(0xc00012a0c0, 0x55f14a0, 0xc000287340, 0x5609080, 0xc0000dc9a0, 0xc000128ae0, 0xc00015d648)
    /Users/iddan/cayley/query/path/path.go:527 +0x87
github.com/cayleygraph/cayley/query/gizmo.(*pathObject).buildIteratorTree(...)
    /Users/iddan/cayley/query/gizmo/traversals.go:86
github.com/cayleygraph/cayley/query/gizmo.(*pathObject).GetLimit(0xc000128920, 0x64, 0x407f746, 0x4ff0040)
    /Users/iddan/cayley/query/gizmo/finals.go:28 +0xf4
github.com/cayleygraph/cayley/query/gizmo.(*pathObject).All(0xc000128920, 0x0, 0x0)
    /Users/iddan/cayley/query/gizmo/finals.go:37 +0x3a
reflect.callMethod(0xc00012a100, 0xc00016b780, 0xc00016b768)
    /usr/local/Cellar/go/1.13.8/libexec/src/reflect/value.go:714 +0x1f0
reflect.methodValueCall(0x0, 0x0, 0xc000128a01, 0xc000389a80, 0xc00016b9c0, 0x4094ae6, 0xc00038aff0, 0xc00012a100, 0xc000389a80, 0x10, ...)
    /usr/local/Cellar/go/1.13.8/libexec/src/reflect/asm_amd64.s:35 +0x42
reflect.Value.call(0x4fe7540, 0xc00012a100, 0x13, 0x5237e70, 0x4, 0x617ce38, 0x0, 0x0, 0xc00015da40, 0x404812c, ...)
    /usr/local/Cellar/go/1.13.8/libexec/src/reflect/value.go:460 +0x5f6
reflect.Value.Call(0x4fe7540, 0xc00012a100, 0x13, 0x617ce38, 0x0, 0x0, 0x4d63630, 0xc000564900, 0xc00038b080)
    /usr/local/Cellar/go/1.13.8/libexec/src/reflect/value.go:321 +0xb4
github.com/dop251/goja.(*Runtime).wrapReflectFunc.func1(0x560ca60, 0xc000128980, 0xc000150800, 0x0, 0xc, 0x560ca60, 0xc000128a60)
    /Users/iddan/go/pkg/mod/github.com/dop251/goja@v0.0.0-20190105122144-6d5bf35058fa/runtime.go:1153 +0x78b
github.com/dop251/goja.(*vm)._nativeCall(0xc0004ac340, 0xc000115d90, 0x0)
    /Users/iddan/go/pkg/mod/github.com/dop251/goja@v0.0.0-20190105122144-6d5bf35058fa/vm.go:1826 +0x291
github.com/dop251/goja.call.exec(0x0, 0xc0004ac340)
    /Users/iddan/go/pkg/mod/github.com/dop251/goja@v0.0.0-20190105122144-6d5bf35058fa/vm.go:1810 +0x4a2
github.com/dop251/goja.(*vm).run(0xc0004ac340)
    /Users/iddan/go/pkg/mod/github.com/dop251/goja@v0.0.0-20190105122144-6d5bf35058fa/vm.go:288 +0x51
github.com/dop251/goja.(*vm).try(0xc0004ac340, 0xc00046be20, 0x0)
    /Users/iddan/go/pkg/mod/github.com/dop251/goja@v0.0.0-20190105122144-6d5bf35058fa/vm.go:370 +0x147
github.com/dop251/goja.(*vm).runTry(0xc0004ac340, 0x0)
    /Users/iddan/go/pkg/mod/github.com/dop251/goja@v0.0.0-20190105122144-6d5bf35058fa/vm.go:375 +0x4e
github.com/dop251/goja.(*Runtime).RunProgram(0xc000564900, 0xc00003ccc0, 0x0, 0x0, 0x0, 0x0)
    /Users/iddan/go/pkg/mod/github.com/dop251/goja@v0.0.0-20190105122144-6d5bf35058fa/runtime.go:891 +0x1ec
github.com/cayleygraph/cayley/query/gizmo.(*Session).run(0xc00020a320, 0x0, 0x0, 0x0, 0x0)
    /Users/iddan/cayley/query/gizmo/gizmo.go:274 +0x3c
github.com/cayleygraph/cayley/query/gizmo.(*results).Next.func1(0xc0000ceeb0)
    /Users/iddan/cayley/query/gizmo/gizmo.go:332 +0x89
created by github.com/cayleygraph/cayley/query/gizmo.(*results).Next
    /Users/iddan/cayley/query/gizmo/gizmo.go:330 +0x2d2

Environment details:

Backend database: memstore and bolt