Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

panic during partial evaluation of an expression #1132

Closed
liorlevtov opened this issue Jan 3, 2019 · 1 comment · Fixed by #1134
Closed

panic during partial evaluation of an expression #1132

liorlevtov opened this issue Jan 3, 2019 · 1 comment · Fixed by #1134
Labels

Comments

@liorlevtov
Copy link

liorlevtov commented Jan 3, 2019

Expected Behavior

not panic

Actual Behavior

panic

Steps to Reproduce the Problem

. ./opa_darwin_amd64 eval -f pretty -d bundles/local_bundle.tar.gz --explain=full --metrics -i /Users/liorlevtov/1.json -u input 'data.lum_id_local.evaluator.access[_]' -p

Additional Info

local_bundle.tar.gz
1.json.zip
` ./opa_darwin_amd64 eval -f pretty -d bundles/local_bundle.tar.gz --explain=full --metrics -i /Users/liorlevtov/1.json -u input 'data.lum_id_local.evaluator.access[_]' -p
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x140ab1f]

goroutine 1 [running]:
github.com/open-policy-agent/opa/ast.(*IndexResult).Empty(...)
/go/src/github.com/open-policy-agent/opa/ast/index.go:46
github.com/open-policy-agent/opa/topdown.evalFunc.eval(0xc42030fc20, 0xc420470d00, 0x5, 0x8, 0xc420374ab0, 0x2, 0x2, 0xc4202b9f50, 0x0, 0xc420055800)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1173 +0x7f
github.com/open-policy-agent/opa/topdown.(*eval).evalCall(0xc42030fc20, 0xc420374ab0, 0x2, 0x2, 0xc4202b9f50, 0xc4204fc9e0, 0xc4203f8f00)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:468 +0x767
github.com/open-policy-agent/opa/topdown.(*eval).evalStep(0xc42030fc20, 0xc4201ba320, 0xc4200a5950, 0x1735549)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:209 +0x500
github.com/open-policy-agent/opa/topdown.(*eval).evalExpr(0xc42030fc20, 0xc4201ba320, 0x1ad0da0, 0x1)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:185 +0x18c
github.com/open-policy-agent/opa/topdown.(*eval).next(0xc42030fc20, 0xc4201ba320, 0xc42030dc00, 0x0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:86 +0x39
github.com/open-policy-agent/opa/topdown.(*eval).evalStep.func3(0xc42030d060, 0xc4202bc5a0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:226 +0x26d
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc42030fc20, 0xc42030dce0, 0xc4202bc5a0, 0xc42030d200, 0xc42030d060, 0xc4202b94d0, 0xaee5a00dd6387daa, 0x3c7834c88569acea)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:676 +0x468
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc42030fc20, 0xc42030dce0, 0xc4202bc5a0, 0xc42030d200, 0xc42030d060, 0xc4202b94d0, 0x4, 0x3c7834c88569acea)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:569 +0x219
github.com/open-policy-agent/opa/topdown.evalTerm.eval(0xc42030fc20, 0xc420470cc0, 0x5, 0x8, 0x5, 0xc42030d060, 0xc42030dce0, 0xc42030d200, 0xc4202bc5a0, 0xc42030d060, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1905 +0x234
github.com/open-policy-agent/opa/topdown.evalVirtualPartial.evalTerm(0xc42030fc20, 0xc420470cc0, 0x5, 0x8, 0xc4202b9500, 0x5, 0x5, 0x3, 0xc4202b9560, 0xc42030d060, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1661 +0x116
github.com/open-policy-agent/opa/topdown.evalVirtualPartial.evalOneRule.func1.1(0xc4202ba7e0, 0xc4205b5600, 0x0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1629 +0x10e
github.com/open-policy-agent/opa/topdown.(*eval).evalExpr(0xc4202ba7e0, 0xc4201ba640, 0xc4202b9d10, 0x1426720)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:170 +0x1b8
github.com/open-policy-agent/opa/topdown.(*eval).next(0xc4202ba7e0, 0xc4201ba640, 0x172f052, 0x4)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:86 +0x39
github.com/open-policy-agent/opa/topdown.(*eval).evalStep.func1(0xc4202ba7e0, 0x17b1680)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:204 +0x4c
github.com/open-policy-agent/opa/topdown.(*eval).saveUnify(0xc4202ba7e0, 0xc42030d600, 0xc42051c8e0, 0xc42030d200, 0xc4202bca20, 0xc4202b9c50, 0x0, 0x0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:916 +0x3b9
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030d600, 0xc42051c8e0, 0xc42030d200, 0xc4202bca20, 0xc4202b9c50, 0xc42030d620, 0xc4205b5918)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:648 +0x17f
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d600, 0xc42051c8e0, 0xc42030d200, 0xc4202bca20, 0xc4202b9c50, 0x136900e, 0x16c4940)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:557 +0x629
github.com/open-policy-agent/opa/topdown.evalTerm.eval(0xc4202ba7e0, 0xc420204f80, 0x2, 0x2, 0x2, 0xc4202bca20, 0xc42030d600, 0xc42030d200, 0xc42051c8e0, 0xc4202bca20, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1905 +0x234
github.com/open-policy-agent/opa/topdown.evalTerm.next(0xc4202ba7e0, 0xc420204f80, 0x2, 0x2, 0x1, 0xc4202bca20, 0xc42030dce0, 0xc42030d200, 0xc42051c8e0, 0xc4202bca20, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1932 +0xd7
github.com/open-policy-agent/opa/topdown.evalTerm.eval(0xc4202ba7e0, 0xc420204f80, 0x2, 0x2, 0x1, 0xc4202bca20, 0xc42030dce0, 0xc42030d200, 0xc42051c8e0, 0xc4202bca20, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1915 +0x10d
github.com/open-policy-agent/opa/topdown.(*eval).biunifyRef(0xc4202ba7e0, 0xc42051c840, 0xc42051c8e0, 0xc4202bca20, 0xc4202bca20, 0xc4202b9c50, 0x2, 0x172e785)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:747 +0x220
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42051c840, 0xc42051c8e0, 0xc4202bca20, 0xc4202bca20, 0xc4202b9c50, 0xc4205b5cf8, 0x138dd82)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:639 +0x701
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42051c840, 0xc42051c8e0, 0xc4202bca20, 0xc4202bca20, 0xc4202b9c50, 0x1, 0xc4202b9c50)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:538 +0x11f
github.com/open-policy-agent/opa/topdown.(*eval).unify(0xc4202ba7e0, 0xc42051c840, 0xc42051c8e0, 0xc4202b9c50, 0xc4202bcbc0, 0xc4204fc9b8)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:530 +0x57
github.com/open-policy-agent/opa/topdown.(*eval).evalStep(0xc4202ba7e0, 0xc4201ba640, 0xc4200a5540, 0x16a5420)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:202 +0x402
github.com/open-policy-agent/opa/topdown.(*eval).evalExpr(0xc4202ba7e0, 0xc4201ba640, 0x0, 0x0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:185 +0x18c
github.com/open-policy-agent/opa/topdown.(*eval).next(0xc4202ba7e0, 0xc4201ba640, 0xc4200a5450, 0x0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:86 +0x39
github.com/open-policy-agent/opa/topdown.(*eval).evalStep.func1(0xc4205b6020, 0x1321f69)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:204 +0x4c
github.com/open-policy-agent/opa/topdown.evalTree.finish.func1(0x17b4d40, 0xc4205b5ff0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1307 +0x26
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0xc4203a9f00, 0xa, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:616 +0x2b0
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec.func1(0xc42030d720, 0xc42030d720)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:623 +0x95
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030d720, 0xc42030d720, 0xc42030d200, 0xc4202bca20, 0xc42013c230, 0xc42030d700, 0x16e20e0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:691 +0x352
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d720, 0xc42030d720, 0xc42030d200, 0xc4202bca20, 0xc42013c230, 0x100cacd, 0xc42000e000)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:547 +0x81e
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0xc4203a9f00, 0xa, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:622 +0x1d1
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec.func1(0xc42030d6c0, 0xc42030d6c0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:623 +0x95
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030d6c0, 0xc42030d6c0, 0xc42030d200, 0xc4202bca20, 0xc42013c1c0, 0xc42030d6a0, 0x16e20e0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:691 +0x352
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d6c0, 0xc42030d6c0, 0xc42030d200, 0xc4202bca20, 0xc42013c1c0, 0x100cacd, 0xc42000e000)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:547 +0x81e
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0xc4203a9f00, 0xa, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:622 +0x1d1
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec.func1(0xc42030d660, 0xc42030d660)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:623 +0x95
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030d660, 0xc42030d660, 0xc42030d200, 0xc4202bca20, 0xc42013c150, 0xc42030d640, 0x16e20e0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:691 +0x352
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d660, 0xc42030d660, 0xc42030d200, 0xc4202bca20, 0xc42013c150, 0x100cacd, 0xc42000e000)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:557 +0x629
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0xc4203a9f00, 0xa, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:622 +0x1d1
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec.func1(0xc42030d600, 0xc42030d600)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:623 +0x95
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030d600, 0xc42030d600, 0xc42030d200, 0xc4202bca20, 0xc42013c070, 0xc42030d5e0, 0x16e20e0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:691 +0x352
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d600, 0xc42030d600, 0xc42030d200, 0xc4202bca20, 0xc42013c070, 0x100cacd, 0xc42000e000)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:557 +0x629
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0xc4203a9f00, 0xa, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:622 +0x1d1
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec.func1(0xc42030d5a0, 0xc42030d5a0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:623 +0x95
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030d5a0, 0xc42030d5a0, 0xc42030d200, 0xc4202bca20, 0xc42013c000, 0xc42030d580, 0x16e20e0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:691 +0x352
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d5a0, 0xc42030d5a0, 0xc42030d200, 0xc4202bca20, 0xc42013c000, 0x100cacd, 0xc42000e000)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:547 +0x81e
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0xc4203a9f00, 0xa, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:622 +0x1d1
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec.func1(0xc42030d540, 0xc42030d540)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:623 +0x95
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030d540, 0xc42030d540, 0xc42030d200, 0xc4202bca20, 0xc42011df80, 0xc42030d520, 0x16e20e0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:691 +0x352
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d540, 0xc42030d540, 0xc42030d200, 0xc4202bca20, 0xc42011df80, 0xc42039c8c0, 0xc)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:557 +0x629
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0xc4203a9f00, 0xa, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:622 +0x1d1
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec.func1(0x0, 0x0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:623 +0x95
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8690, 0x17b94c0, 0xc4202b8690, 0xc42030d200, 0xc4202bca20, 0xc42011dea0, 0xc4204fc870, 0x1, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:616 +0x2b0
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec.func1(0xc42030d480, 0xc42030d480)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:623 +0x95
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030d480, 0xc42030d480, 0xc42030d200, 0xc4202bca20, 0xc42011df10, 0xc42030d460, 0x16e20e0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:691 +0x352
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d480, 0xc42030d480, 0xc42030d200, 0xc4202bca20, 0xc42011df10, 0x1410890, 0xc4202b8690)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:557 +0x629
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8690, 0x17b94c0, 0xc4202b8690, 0xc42030d200, 0xc4202bca20, 0xc42011dea0, 0xc4204fc870, 0x1, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:622 +0x1d1
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjects(0xc4202ba7e0, 0x17b94c0, 0xc4202b8690, 0x17b94c0, 0xc4202b8690, 0xc42030d200, 0xc4202bca20, 0xc42011dea0, 0xc42030d4c0, 0x0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:611 +0x1b8
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d4e0, 0xc42030d4e0, 0xc42030d200, 0xc4202bca20, 0xc42011dea0, 0x100cacd, 0xc42000e000)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:571 +0x307
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0xc4203a9f00, 0xa, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:622 +0x1d1
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec.func1(0xc42030d400, 0xc42030d400)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:623 +0x95
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030d400, 0xc42030d400, 0xc42030d200, 0xc4202bca20, 0xc42011dd50, 0xc42030d3e0, 0x16e20e0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:691 +0x352
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d400, 0xc42030d400, 0xc42030d200, 0xc4202bca20, 0xc42011dd50, 0x100cacd, 0xc42000e000)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:557 +0x629
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0xc4203a9f00, 0xa, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:622 +0x1d1
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec.func1(0xc42030d3a0, 0xc42030d3a0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:623 +0x95
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030d3a0, 0xc42030d3a0, 0xc42030d200, 0xc4202bca20, 0xc42011dce0, 0xc42030d380, 0x16e20e0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:691 +0x352
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d3a0, 0xc42030d3a0, 0xc42030d200, 0xc4202bca20, 0xc42011dce0, 0x100cacd, 0xc42000e000)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:557 +0x629
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0xc4203a9f00, 0xa, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:622 +0x1d1
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec.func1(0xc42030d340, 0xc42030d340)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:623 +0x95
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030d340, 0xc42030d340, 0xc42030d200, 0xc4202bca20, 0xc42011dc00, 0xc42030d320, 0x16e20e0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:691 +0x352
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030d340, 0xc42030d340, 0xc42030d200, 0xc4202bca20, 0xc42011dc00, 0x1410890, 0xc4202b8630)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:557 +0x629
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjectsRec(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0xc4203a9f00, 0xa, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:622 +0x1d1
github.com/open-policy-agent/opa/topdown.(*eval).biunifyObjects(0xc4202ba7e0, 0x17b94c0, 0xc4202b8630, 0x17b94c0, 0xc4202b8630, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0x0, 0x0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:611 +0x1b8
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030dce0, 0xc4202bcba0, 0xc42030d200, 0xc4202bca20, 0xc4202b7040, 0x5, 0x5)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:571 +0x307
github.com/open-policy-agent/opa/topdown.evalTree.finish(0xc4202ba7e0, 0xc420470ac0, 0x5, 0x8, 0xc4202b9b60, 0x5, 0x5, 0x5, 0xc4202bca20, 0xc42030dce0, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1306 +0x13f
github.com/open-policy-agent/opa/topdown.evalTree.eval(0xc4202ba7e0, 0xc420470ac0, 0x5, 0x8, 0xc4202b9b60, 0x5, 0x5, 0x5, 0xc4202bca20, 0xc42030dce0, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1280 +0x183
github.com/open-policy-agent/opa/topdown.evalTree.next(0xc4202ba7e0, 0xc420470ac0, 0x5, 0x8, 0xc4202b9b60, 0x5, 0x5, 0x4, 0xc4202bca20, 0xc42030dce0, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1340 +0x11b
github.com/open-policy-agent/opa/topdown.evalTree.enumerate.func1(0xc4202bca20, 0xc42051c720)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1355 +0x5c
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc4202bcb40, 0xc42051c720, 0xc4202bca20, 0xc4202bca20, 0xc4204b0400, 0xc4202b6ff0, 0xc4205b7be8)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:676 +0x468
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc4202bcb40, 0xc42051c720, 0xc4202bca20, 0xc4202bca20, 0xc4204b0400, 0x0, 0x0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:552 +0x6f5
github.com/open-policy-agent/opa/topdown.evalTree.enumerate(0xc4202ba7e0, 0xc420470ac0, 0x5, 0x8, 0xc4202b9b60, 0x5, 0x5, 0x4, 0xc4202bca20, 0xc42030dce0, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1354 +0x1c8
github.com/open-policy-agent/opa/topdown.evalTree.eval(0xc4202ba7e0, 0xc420470ac0, 0x5, 0x8, 0xc4202b9b60, 0x5, 0x5, 0x4, 0xc4202bca20, 0xc42030dce0, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1289 +0x129
github.com/open-policy-agent/opa/topdown.evalTree.next(0xc4202ba7e0, 0xc420470ac0, 0x5, 0x8, 0xc4202b9b60, 0x5, 0x5, 0x3, 0xc4202bca20, 0xc42030dce0, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1340 +0x11b
github.com/open-policy-agent/opa/topdown.evalTree.eval(0xc4202ba7e0, 0xc420470ac0, 0x5, 0x8, 0xc4202b9b60, 0x5, 0x5, 0x3, 0xc4202bca20, 0xc42030dce0, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1286 +0xcf
github.com/open-policy-agent/opa/topdown.evalTree.next(0xc4202ba7e0, 0xc420470ac0, 0x5, 0x8, 0xc4202b9b60, 0x5, 0x5, 0x2, 0xc4202bca20, 0xc42030dce0, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1340 +0x11b
github.com/open-policy-agent/opa/topdown.evalTree.eval(0xc4202ba7e0, 0xc420470ac0, 0x5, 0x8, 0xc4202b9b60, 0x5, 0x5, 0x2, 0xc4202bca20, 0xc42030dce0, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1286 +0xcf
github.com/open-policy-agent/opa/topdown.evalTree.next(0xc4202ba7e0, 0xc420470ac0, 0x5, 0x8, 0xc4202b9b60, 0x5, 0x5, 0x1, 0xc4202bca20, 0xc42030dce0, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1340 +0x11b
github.com/open-policy-agent/opa/topdown.evalTree.eval(0xc4202ba7e0, 0xc420470ac0, 0x5, 0x8, 0xc4202b9b60, 0x5, 0x5, 0x1, 0xc4202bca20, 0xc42030dce0, ...)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:1286 +0xcf
github.com/open-policy-agent/opa/topdown.(*eval).biunifyRef(0xc4202ba7e0, 0xc42051c760, 0xc42030dce0, 0xc4202bca20, 0xc42030d200, 0xc4202b9b30, 0xc4202bca00, 0x16e20e0)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:716 +0x3e9
github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc4202ba7e0, 0xc42030dce0, 0xc42051c760, 0xc42030d200, 0xc4202bca20, 0xc4202b9b30, 0xc4205b85c8, 0x138dd82)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:641 +0x695
github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc4202ba7e0, 0xc42030dce0, 0xc42051c760, 0xc42030d200, 0xc4202bca20, 0xc4202b9b30, 0x1, 0xc4202b9b30)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:569 +0x219
github.com/open-policy-agent/opa/topdown.(*eval).unify(0xc4202ba7e0, 0xc42051c680, 0xc42051c760, 0xc4202b9b30, 0xc4202bca80, 0xc4204fc9a8)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:530 +0x57
github.com/open-policy-agent/opa/topdown.(*eval).evalStep(0xc4202ba7e0, 0xc4201ba640, 0xc4200a54f0, 0x1c93000)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:202 +0x402
github.com/open-policy-agent/opa/topdown.(*eval).evalExpr(0xc4202ba7e0, 0xc4201ba640, 0x1, 0xc4201ba640)
/go/src/github.com/open-policy-agent/opa/topdown/eval.go:185 +0x18c`

v0.10.2

@tsandall
Copy link
Member

tsandall commented Jan 4, 2019

I've reviewed the policy and found a bug in the semantic checks in the compiler. One of the semantic checks asserts that all function references are applied (because the evaluation engine doesn't support these). E.g., if you have a function f(x) { x == 1 } then f(1) and f(2) are OK but just f is not.

In the attached policy the condition_map contains references functions in the module (to perform what appears to be dynamic dispatch):

condition_map = {   "9622565997022192867" : cond_9622565997022192867    ,"2483101345549640966" : cond_2483101345549640966   }

The problem is that the compiler is not catching these references to functions that are embedded within composites (objects, arrays, etc.) As a result, the policy compiles but when the evaluation engine encounters the reference condition_map[rule.Hash](rule) it panics because the rule index returns an empty result (which should not be possible.)

I'm going to submit a PR that fixes the semantic check to catch the case above however that's going to break the policy. I think that's the best immediate path forward--however, we can revisit it in the future.

In the short term, if you do need this kind of dispatch mechanism, an alternative would be to encode the condition ID in the function signature:

condition_func("9622565997022192867", rule) {
  # ...
}

condition_func("2483101345549640966", rule) {
  # ...
}

And then invoke it:

condition_func(rule.Hash, rule)

@tsandall tsandall added the bug label Jan 4, 2019
tsandall added a commit to tsandall/opa that referenced this issue Jan 4, 2019
These changes fix an issue in the semantic checks against function
references. The compiler is supposed to catch references to functions
that have not been applied (e.g., f(1) is OK but just f is not.) The
compiler was failing to catch these references when they were embedded
within composites. If these references were encountered during
evaluation, it resulted in undefined behaviour.

The fix for this issue is to simply remove the flag that gated whether
terms were checked. The flag was in place to deal with nested terms like
f(g(x)) but that has not been applicable for a while since these terms
are rewritten (and have been since the unifier was reimplemented over
year ago.)

Fixes open-policy-agent#1132

Signed-off-by: Torin Sandall <torinsandall@gmail.com>
tsandall added a commit that referenced this issue Jan 4, 2019
These changes fix an issue in the semantic checks against function
references. The compiler is supposed to catch references to functions
that have not been applied (e.g., f(1) is OK but just f is not.) The
compiler was failing to catch these references when they were embedded
within composites. If these references were encountered during
evaluation, it resulted in undefined behaviour.

The fix for this issue is to simply remove the flag that gated whether
terms were checked. The flag was in place to deal with nested terms like
f(g(x)) but that has not been applicable for a while since these terms
are rewritten (and have been since the unifier was reimplemented over
year ago.)

Fixes #1132

Signed-off-by: Torin Sandall <torinsandall@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants