We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
package test foo.bar[baz] { baz := "baz" } main := foo[input.bar][input.baz]
Running PE with shallow inlining on will produce a result:
$ opa eval -fpretty --partial --shallow-inlining -d test.rego data.test.main +-----------+-----------------------------------------------------------------+ | Query 1 | data.partial.test.main = _term_0_0 | | | _term_0_0 | +-----------+-----------------------------------------------------------------+ | Support 1 | package partial.test.foo | | | | | | = true | +-----------+-----------------------------------------------------------------+ | Support 2 | package partial.test | | | | | | main = __local1__1 { | | | __local2__1 = input.bar | | | __local3__1 = input.baz | | | "bar" = __local2__1 | | | data.partial.test.foo[__local2__1][__local3__1] = __local1__1 | | | } | +-----------+-----------------------------------------------------------------+
However, with inlininig done, we'll get a panic:
$ opa eval -fpretty --partial -d test.rego data.test.main panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x10055c618] goroutine 1 [running]: github.com/open-policy-agent/opa/topdown.(*bindings).apply(0xc00033bd30?, 0x10055da91?) /Users/stephan/Sources/open-policy-agent/opa/topdown/bindings.go:144 +0x18 github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc0001eee00, 0xc00033bc28?, 0x1005aa3ea?, 0xa?, 0xc000185b90?, 0xc00033bc28?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:847 +0x4b github.com/open-policy-agent/opa/topdown.evalVirtualPartial.evalOneRulePostUnify.func1(0xc0001ef000) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2521 +0x155 github.com/open-policy-agent/opa/topdown.(*eval).evalExpr(0xc0001ef000, 0xc000190cf0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:318 +0x117 github.com/open-policy-agent/opa/topdown.(*eval).next(...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:168 github.com/open-policy-agent/opa/topdown.(*eval).evalExpr.func1(0xc0001ef000) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:343 +0x29 github.com/open-policy-agent/opa/topdown.(*eval).evalStep.func1() /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:363 +0x39 github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc0001ef000, 0xc0001857a0, 0xc0001857d0, 0xc000192b70, 0xc000192b70, 0xc000192ba0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:1000 +0x46d github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc0001ef000, 0xc00033bea8?, 0x10000ff27?, 0x28?, 0x1017e7a00?, 0x1?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:854 +0x17e github.com/open-policy-agent/opa/topdown.(*eval).unify(0xc000185b00?, 0x10187b120?, 0x10000fb4a?, 0xc00033bf88?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:843 +0x26 github.com/open-policy-agent/opa/topdown.(*eval).evalStep(0xc0001ef000, 0xc000713800) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:361 +0x5f9 github.com/open-policy-agent/opa/topdown.(*eval).evalExpr(0xc0001ef000, 0xc000190cf0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:342 +0xec github.com/open-policy-agent/opa/topdown.(*eval).eval(...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:305 github.com/open-policy-agent/opa/topdown.evalVirtualPartial.evalOneRulePostUnify({0xc0001eee00, {0xc000182180, 0x5, 0x6}, {0xc0001926f0, 0x5, 0x5}, 0x3, 0xc000405f40, 0xc000192420, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2514 +0x32f github.com/open-policy-agent/opa/topdown.evalVirtualPartial.evalEachRule({0xc0001eee00, {0xc000182180, 0x5, 0x6}, {0xc0001926f0, 0x5, 0x5}, 0x3, 0xc000405f40, 0xc000192420, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2358 +0x405 github.com/open-policy-agent/opa/topdown.evalVirtualPartial.eval({0xc0001eee00, {0xc000182180, 0x5, 0x6}, {0xc0001926f0, 0x5, 0x5}, 0x3, 0xc000405f40, 0xc000192420, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2351 +0x268 github.com/open-policy-agent/opa/topdown.evalVirtual.eval({0xc0001eee00, {0xc000182180, 0x5, 0x6}, {0xc0001926f0, 0x5, 0x5}, 0x3, 0xc000192420, 0xc0001858f0, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2312 +0x2c5 github.com/open-policy-agent/opa/topdown.evalTree.next({0xc0001eee00, {0xc000182180, 0x5, 0x6}, {0xc0001926f0, 0x5, 0x5}, 0x3, 0xc000192420, 0xc0001858f0, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2102 +0x2be github.com/open-policy-agent/opa/topdown.evalTree.enumerate.func4() /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2162 +0x3b github.com/open-policy-agent/opa/topdown.(*eval).saveUnify(0xc0001eee00, 0xc000192840, 0xc000185b00, 0xc000192420, 0xc000192420, 0xc00005d380) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:1360 +0x353 github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc0001eee00, 0xc000192840, 0xc000185b00, 0xc000192420, 0xc000192420, 0xc00005d380) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:975 +0x22d github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc0001eee00, 0xc0001926f0?, 0x3?, 0x5?, 0xc000185b01?, 0x103400108?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:873 +0x2fd github.com/open-policy-agent/opa/topdown.evalTree.enumerate({0xc0001eee00, {0xc000182180, 0x5, 0x6}, {0xc0001926f0, 0x5, 0x5}, 0x3, 0xc000192420, 0xc0001858f0, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2161 +0x51f github.com/open-policy-agent/opa/topdown.evalTree.eval({0xc0001eee00, {0xc000182180, 0x5, 0x6}, {0xc0001926f0, 0x5, 0x5}, 0x3, 0xc000192420, 0xc0001858f0, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2058 +0xfd github.com/open-policy-agent/opa/topdown.evalTree.next({0xc0001eee00, {0xc000182180, 0x5, 0x6}, {0xc0001926f0, 0x5, 0x5}, 0x2, 0xc000192420, 0xc0001858f0, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2108 +0x305 github.com/open-policy-agent/opa/topdown.evalTree.eval({0xc0001eee00, {0xc000182180, 0x5, 0x6}, {0xc0001926f0, 0x5, 0x5}, 0x2, 0xc000192420, 0xc0001858f0, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2055 +0xc5 github.com/open-policy-agent/opa/topdown.evalTree.next({0xc0001eee00, {0xc000182180, 0x5, 0x6}, {0xc0001926f0, 0x5, 0x5}, 0x1, 0xc000192420, 0xc0001858f0, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2108 +0x305 github.com/open-policy-agent/opa/topdown.evalTree.eval({0xc0001eee00, {0xc000182180, 0x5, 0x6}, {0xc0001926f0, 0x5, 0x5}, 0x1, 0xc000192420, 0xc0001858f0, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2055 +0xc5 github.com/open-policy-agent/opa/topdown.(*eval).biunifyRef(0xc0001eee00, 0x101ca3820?, 0xc0001858f0, 0xc000192420, 0xc000192420, 0x100017f90?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:1042 +0x405 github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc0001eee00, 0xc0001858f0, 0xc000185ad0, 0xc000192420, 0xc000192420, 0xc0001926c0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:969 +0x1e6 github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc0001eee00, 0xc00033d088?, 0x10000ff27?, 0x28?, 0x1017e7a00?, 0x101790701?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:854 +0x17e github.com/open-policy-agent/opa/topdown.(*eval).unify(0x1018413c0?, 0x10187b120?, 0x100017f90?, 0xc00033d168?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:843 +0x26 github.com/open-policy-agent/opa/topdown.(*eval).evalStep(0xc0001eee00, 0xc0007136f0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:361 +0x5f9 github.com/open-policy-agent/opa/topdown.(*eval).evalExpr(0xc0001eee00, 0xc00005d300) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:342 +0xec github.com/open-policy-agent/opa/topdown.(*eval).next(...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:168 github.com/open-policy-agent/opa/topdown.(*eval).evalExpr.func1(0xc0001eee00) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:343 +0x29 github.com/open-policy-agent/opa/topdown.(*eval).evalStep.func1() /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:363 +0x39 github.com/open-policy-agent/opa/topdown.(*eval).saveUnify(0xc0001eee00, 0xc000185b90, 0xc000185aa0, 0xc000192420, 0xc000192420, 0xc0001925a0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:1360 +0x353 github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc0001eee00, 0xc000185b90, 0xc000185aa0, 0xc000192420, 0xc000192420, 0xc0001925a0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:975 +0x22d github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc0001eee00, 0xc00033d508?, 0x10000ff27?, 0x28?, 0x1017e7a00?, 0x1004a8f01?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:854 +0x17e github.com/open-policy-agent/opa/topdown.(*eval).unify(0x1018413c0?, 0x10187b120?, 0x100017f90?, 0xc00033d5e8?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:843 +0x26 github.com/open-policy-agent/opa/topdown.(*eval).evalStep(0xc0001eee00, 0xc0007136a0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:361 +0x5f9 github.com/open-policy-agent/opa/topdown.(*eval).evalExpr(0xc0001eee00, 0xc00005d300) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:342 +0xec github.com/open-policy-agent/opa/topdown.(*eval).next(...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:168 github.com/open-policy-agent/opa/topdown.(*eval).evalExpr.func1(0xc0001eee00) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:343 +0x29 github.com/open-policy-agent/opa/topdown.(*eval).evalStep.func1() /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:363 +0x39 github.com/open-policy-agent/opa/topdown.(*eval).saveUnify(0xc0001eee00, 0xc000185b00, 0xc000185a10, 0xc000192420, 0xc000192420, 0xc0001924b0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:1360 +0x353 github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc0001eee00, 0xc000185b00, 0xc000185a10, 0xc000192420, 0xc000192420, 0xc0001924b0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:975 +0x22d github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc0001eee00, 0xc00033d988?, 0x10000ff27?, 0x28?, 0x1017e7a00?, 0x101855201?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:854 +0x17e github.com/open-policy-agent/opa/topdown.(*eval).unify(0x10?, 0x10187b120?, 0xd07693660033d901?, 0xc00033da68?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:843 +0x26 github.com/open-policy-agent/opa/topdown.(*eval).evalStep(0xc0001eee00, 0xc000713650) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:361 +0x5f9 github.com/open-policy-agent/opa/topdown.(*eval).evalExpr(0xc0001eee00, 0xc00005d300) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:342 +0xec github.com/open-policy-agent/opa/topdown.(*eval).next(...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:168 github.com/open-policy-agent/opa/topdown.(*eval).evalExpr.func1(0xc0001eee00) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:343 +0x29 github.com/open-policy-agent/opa/topdown.(*eval).evalStep.func3() /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:385 +0x1e5 github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc0001eee00, 0xc000185860, 0xc000192450, 0xc000192420, 0xc000192420, 0xc000192480) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:1005 +0x502 github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc0001eee00, 0xc00033ddb8?, 0x10000ff27?, 0x30?, 0x1017fcfc0?, 0xc00040ea01?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:863 +0x23d github.com/open-policy-agent/opa/topdown.(*eval).unify(0xc000454d80?, 0xa?, 0xc00033dea0?, 0x2?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:843 +0x26 github.com/open-policy-agent/opa/topdown.(*eval).evalStep(0xc0001eee00, 0xc000713610) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:377 +0x4c9 github.com/open-policy-agent/opa/topdown.(*eval).evalExpr(0xc0001eee00, 0xc00005d300) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:342 +0xec github.com/open-policy-agent/opa/topdown.(*eval).eval(...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:305 github.com/open-policy-agent/opa/topdown.evalVirtualComplete.partialEval({0xc0001eec00, {0xc00071ac00, 0x3, 0x4}, {0xc000131e90, 0x3, 0x3}, 0x2, 0xc000405d80, 0xc00018ff20, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2852 +0x32b github.com/open-policy-agent/opa/topdown.evalVirtualComplete.eval({0xc0001eec00, {0xc00071ac00, 0x3, 0x4}, {0xc000131e90, 0x3, 0x3}, 0x2, 0xc000405d80, 0xc00018ff20, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2759 +0x1fd github.com/open-policy-agent/opa/topdown.evalVirtual.eval({0xc0001eec00, {0xc00071ac00, 0x3, 0x4}, {0xc000131e90, 0x3, 0x3}, 0x2, 0xc00018ff20, 0xc000192180, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2299 +0x3e5 github.com/open-policy-agent/opa/topdown.evalTree.next({0xc0001eec00, {0xc00071ac00, 0x3, 0x4}, {0xc000131e90, 0x3, 0x3}, 0x2, 0xc00018ff20, 0xc000192180, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2102 +0x2be github.com/open-policy-agent/opa/topdown.evalTree.eval({0xc0001eec00, {0xc00071ac00, 0x3, 0x4}, {0xc000131e90, 0x3, 0x3}, 0x2, 0xc00018ff20, 0xc000192180, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2055 +0xc5 github.com/open-policy-agent/opa/topdown.evalTree.next({0xc0001eec00, {0xc00071ac00, 0x3, 0x4}, {0xc000131e90, 0x3, 0x3}, 0x1, 0xc00018ff20, 0xc000192180, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2108 +0x305 github.com/open-policy-agent/opa/topdown.evalTree.eval({0xc0001eec00, {0xc00071ac00, 0x3, 0x4}, {0xc000131e90, 0x3, 0x3}, 0x1, 0xc00018ff20, 0xc000192180, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:2055 +0xc5 github.com/open-policy-agent/opa/topdown.(*eval).biunifyRef(0xc0001eec00, 0x101ca3820?, 0xc000192180, 0xc00018ff20, 0xc00018ff20, 0x100017f90?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:1042 +0x405 github.com/open-policy-agent/opa/topdown.(*eval).biunifyValues(0xc0001eec00, 0xc00018f770, 0xc000192180, 0xc00018ff20, 0xc00018ff20, 0xc0001921b0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:958 +0x112 github.com/open-policy-agent/opa/topdown.(*eval).biunify(0xc0001eec00, 0xc00033e950?, 0x10000ff27?, 0x30?, 0x1017fcfc0?, 0xc00040ea01?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:854 +0x17e github.com/open-policy-agent/opa/topdown.(*eval).unify(0xc000454d20?, 0xa?, 0xc00033ea38?, 0x2?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:843 +0x26 github.com/open-policy-agent/opa/topdown.(*eval).evalStep(0xc0001eec00, 0xc000713570) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:377 +0x4c9 github.com/open-policy-agent/opa/topdown.(*eval).evalExpr(0xc0001eec00, 0xc000713560) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:342 +0xec github.com/open-policy-agent/opa/topdown.(*eval).eval(0xc000126e20?, 0x10187c686?) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:305 +0x19 github.com/open-policy-agent/opa/topdown.(*eval).Run(0xc0001eec00, 0xc00071aee0) /Users/stephan/Sources/open-policy-agent/opa/topdown/eval.go:106 +0xaa github.com/open-policy-agent/opa/topdown.(*Query).PartialRun(0xc000643a00, {0x101ca19b0?, 0xc00011e018}) /Users/stephan/Sources/open-policy-agent/opa/topdown/query.go:389 +0x128d github.com/open-policy-agent/opa/rego.(*Rego).partial(0xc000043880, {0x101ca19b0?, 0xc00011e018}, 0xc0001f4000) /Users/stephan/Sources/open-policy-agent/opa/rego/rego.go:2356 +0x985 github.com/open-policy-agent/opa/rego.PreparedPartialQuery.Partial({{0xc000043880?, 0xc000523910?}}, {0x101ca19b0, 0xc00011e018}, {0xc0005236b0?, 0x2e?, 0xa?}) /Users/stephan/Sources/open-policy-agent/opa/rego/rego.go:485 +0x15b github.com/open-policy-agent/opa/cmd.evalOnce({0x101ca19b0, 0xc00011e018}, 0xc0001eea00) /Users/stephan/Sources/open-policy-agent/opa/cmd/eval.go:444 +0xf27 github.com/open-policy-agent/opa/cmd.eval({_, _, _}, {0xc0001dedf8, 0x0, 0x1, {0xc000522bb0, 0x1, 0x1}, {0x1026c5b90, ...}, ...}, ...) /Users/stephan/Sources/open-policy-agent/opa/cmd/eval.go:353 +0x3eb github.com/open-policy-agent/opa/cmd.init.5.func2(0xc000005200?, {0xc0000c2190?, 0x5?, 0x5?}) /Users/stephan/Sources/open-policy-agent/opa/cmd/eval.go:273 +0x78 github.com/spf13/cobra.(*Command).execute(0xc000005200, {0xc0000c2140, 0x5, 0x5}) /Users/stephan/Sources/open-policy-agent/opa/vendor/github.com/spf13/cobra/command.go:944 +0x847 github.com/spf13/cobra.(*Command).ExecuteC(0x10266f9c0) /Users/stephan/Sources/open-policy-agent/opa/vendor/github.com/spf13/cobra/command.go:1068 +0x3bd github.com/spf13/cobra.(*Command).Execute(0xc0000061a0?) /Users/stephan/Sources/open-policy-agent/opa/vendor/github.com/spf13/cobra/command.go:992 +0x19 main.main() /Users/stephan/Sources/open-policy-agent/opa/main.go:14 +0x25
Note that shallow inlining / no shallow inlining corresponds to -O1 and -O2 when building optimized bundles.
-O1
-O2
The text was updated successfully, but these errors were encountered:
topdown: fix panic in partial eval with ref head rule
8e7a9fa
Fixes open-policy-agent#6027. Signed-off-by: Stephan Renatus <stephan@styra.com>
ca1a7cf
Fixes #6027. Signed-off-by: Stephan Renatus <stephan@styra.com>
Successfully merging a pull request may close this issue.
Running PE with shallow inlining on will produce a result:
However, with inlininig done, we'll get a panic:
Note that shallow inlining / no shallow inlining corresponds to
-O1
and-O2
when building optimized bundles.The text was updated successfully, but these errors were encountered: