From d217c9c883af1853d03456f7031d918aaeb59116 Mon Sep 17 00:00:00 2001 From: Sean Huh Date: Fri, 2 Oct 2026 14:39:23 -0700 Subject: [PATCH] Fix planner to honor enableComprehensions flag PiperOrigin-RevId: 992545751 --- bundle/src/test/java/dev/cel/bundle/CelImplTest.java | 9 ++++++--- .../java/dev/cel/runtime/planner/ExecutionFrame.java | 8 ++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/bundle/src/test/java/dev/cel/bundle/CelImplTest.java b/bundle/src/test/java/dev/cel/bundle/CelImplTest.java index 8665e4e9a..e417d05ea 100644 --- a/bundle/src/test/java/dev/cel/bundle/CelImplTest.java +++ b/bundle/src/test/java/dev/cel/bundle/CelImplTest.java @@ -1982,10 +1982,13 @@ public void program_nativeTypeUnknownsEnabled_asCallArguments() throws Exception @Test public void program_comprehensionDisabled_throws() throws Exception { - // TODO: Planner ExecutionFrame ignores CelOptions.enableComprehension(false). Cel cel = - legacyCelBuilderWithMacros() - .setOptions(CelOptions.current().enableComprehension(false).build()) + plannerCelBuilderWithMacros() + .setOptions( + CelOptions.current() + .enableHeterogeneousNumericComparisons(true) + .enableComprehension(false) + .build()) .build(); CelAbstractSyntaxTree ast = cel.compile("['foo', 'bar'].map(x, x)").getAst(); diff --git a/runtime/src/main/java/dev/cel/runtime/planner/ExecutionFrame.java b/runtime/src/main/java/dev/cel/runtime/planner/ExecutionFrame.java index a3c422916..d6034e46f 100644 --- a/runtime/src/main/java/dev/cel/runtime/planner/ExecutionFrame.java +++ b/runtime/src/main/java/dev/cel/runtime/planner/ExecutionFrame.java @@ -46,7 +46,7 @@ static ExecutionFrame create( @Nullable CelEvaluationListener listener) { return new ExecutionFrame( functionResolver, - celOptions.comprehensionMaxIterations(), + getComprehensionMaxIterations(celOptions), partialVars, listener, /* asyncTracker= */ null); @@ -61,12 +61,16 @@ static ExecutionFrame createForAsync( checkNotNull(asyncTracker, "asyncTracker"); return new ExecutionFrame( functionResolver, - celOptions.comprehensionMaxIterations(), + getComprehensionMaxIterations(celOptions), partialVars, listener, asyncTracker); } + private static int getComprehensionMaxIterations(CelOptions celOptions) { + return celOptions.enableComprehension() ? celOptions.comprehensionMaxIterations() : 0; + } + Optional findOverload( String functionName, Collection overloadIds, Object[] args) throws CelEvaluationException {