From d3f17e28364a56924a0e0e674fa38a757601c494 Mon Sep 17 00:00:00 2001 From: "Philip K. Warren" Date: Mon, 14 Jul 2025 09:36:09 -0500 Subject: [PATCH 1/4] Update to CEL 0.10.1 --- build.gradle.kts | 5 ++++- gradle/libs.versions.toml | 2 +- src/main/java/build/buf/protovalidate/CustomOverload.java | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2618aa79..228402ca 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -339,7 +339,10 @@ dependencies { annotationProcessor(libs.nullaway) api(libs.jspecify) api(libs.protobuf.java) - implementation(libs.cel) + implementation(libs.cel) { + // https://github.com/google/cel-java/issues/748 + exclude(group = "com.google.protobuf", module = "protobuf-javalite") + } buf("build.buf:buf:${libs.versions.buf.get()}:${osdetector.classifier}@exe") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e9d03335..87fc7179 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] assertj = "3.27.3" buf = "1.55.1" -cel = "0.9.1" +cel = "0.10.1" error-prone = "2.40.0" junit = "5.13.3" maven-publish = "0.33.0" diff --git a/src/main/java/build/buf/protovalidate/CustomOverload.java b/src/main/java/build/buf/protovalidate/CustomOverload.java index bc377a52..ddc2f80b 100644 --- a/src/main/java/build/buf/protovalidate/CustomOverload.java +++ b/src/main/java/build/buf/protovalidate/CustomOverload.java @@ -22,7 +22,7 @@ import dev.cel.common.types.CelType; import dev.cel.common.types.SimpleType; import dev.cel.runtime.CelEvaluationException; -import dev.cel.runtime.CelRuntime.CelFunctionBinding; +import dev.cel.runtime.CelFunctionBinding; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; From 6c7e45ffd2bba2eafb8f92a3c96bc82d7dfa8136 Mon Sep 17 00:00:00 2001 From: "Philip K. Warren" Date: Mon, 14 Jul 2025 10:15:39 -0500 Subject: [PATCH 2/4] Remove bytes_to_string overload --- .../buf/protovalidate/CustomOverload.java | 24 ------------------- .../buf/protovalidate/ValidateLibrary.java | 12 +--------- 2 files changed, 1 insertion(+), 35 deletions(-) diff --git a/src/main/java/build/buf/protovalidate/CustomOverload.java b/src/main/java/build/buf/protovalidate/CustomOverload.java index ddc2f80b..3494d00d 100644 --- a/src/main/java/build/buf/protovalidate/CustomOverload.java +++ b/src/main/java/build/buf/protovalidate/CustomOverload.java @@ -17,8 +17,6 @@ import com.google.protobuf.ByteString; import com.google.protobuf.Descriptors; import com.google.protobuf.Message; -import dev.cel.common.CelErrorCode; -import dev.cel.common.CelRuntimeException; import dev.cel.common.types.CelType; import dev.cel.common.types.SimpleType; import dev.cel.runtime.CelEvaluationException; @@ -49,7 +47,6 @@ static List create() { ArrayList bindings = new ArrayList<>(); bindings.addAll( Arrays.asList( - celBytesToString(), celGetField(), celFormat(), celStartsWithBytes(), @@ -73,27 +70,6 @@ static List create() { return Collections.unmodifiableList(bindings); } - /** - * This implements that standard {@code bytes_to_string} function. We override it because the CEL - * library doesn't validate that the bytes are valid utf-8. - * - *

Workaround until cel-java issue - * 717 lands. - */ - private static CelFunctionBinding celBytesToString() { - return CelFunctionBinding.from( - "bytes_to_string", - ByteString.class, - v -> { - if (!v.isValidUtf8()) { - throw new CelRuntimeException( - new IllegalArgumentException("invalid UTF-8 in bytes, cannot convert to string"), - CelErrorCode.BAD_FORMAT); - } - return v.toStringUtf8(); - }); - } - /** * Creates a custom function overload for the "getField" operation. * diff --git a/src/main/java/build/buf/protovalidate/ValidateLibrary.java b/src/main/java/build/buf/protovalidate/ValidateLibrary.java index f82c744b..0d3d3d44 100644 --- a/src/main/java/build/buf/protovalidate/ValidateLibrary.java +++ b/src/main/java/build/buf/protovalidate/ValidateLibrary.java @@ -23,8 +23,6 @@ import dev.cel.runtime.CelRuntimeBuilder; import dev.cel.runtime.CelRuntimeLibrary; import dev.cel.runtime.CelStandardFunctions; -import dev.cel.runtime.CelStandardFunctions.StandardFunction; -import dev.cel.runtime.CelStandardFunctions.StandardFunction.Overload.Conversions; /** * Custom {@link CelCompilerLibrary} and {@link CelRuntimeLibrary}. Provides all the custom @@ -60,14 +58,6 @@ public void setRuntimeOptions(CelRuntimeBuilder runtimeBuilder) { runtimeBuilder .addFunctionBindings(CustomOverload.create()) .setStandardEnvironmentEnabled(false) - .setStandardFunctions( - CelStandardFunctions.newBuilder() - .filterFunctions( - // CEL doesn't validate, that the bytes are valid utf-8, so we provide our own - // implementation. - (function, overload) -> - function != StandardFunction.STRING - || !overload.equals(Conversions.BYTES_TO_STRING)) - .build()); + .setStandardFunctions(CelStandardFunctions.newBuilder().build()); } } From 8ab8f8af1009c98e9e5cbd28aba0ee4822ac50f9 Mon Sep 17 00:00:00 2001 From: "Philip K. Warren" Date: Mon, 14 Jul 2025 10:18:31 -0500 Subject: [PATCH 3/4] Further simplify --- src/main/java/build/buf/protovalidate/ValidateLibrary.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/build/buf/protovalidate/ValidateLibrary.java b/src/main/java/build/buf/protovalidate/ValidateLibrary.java index 0d3d3d44..0e518b91 100644 --- a/src/main/java/build/buf/protovalidate/ValidateLibrary.java +++ b/src/main/java/build/buf/protovalidate/ValidateLibrary.java @@ -22,7 +22,6 @@ import dev.cel.parser.CelStandardMacro; import dev.cel.runtime.CelRuntimeBuilder; import dev.cel.runtime.CelRuntimeLibrary; -import dev.cel.runtime.CelStandardFunctions; /** * Custom {@link CelCompilerLibrary} and {@link CelRuntimeLibrary}. Provides all the custom @@ -57,7 +56,6 @@ public void setCheckerOptions(CelCheckerBuilder checkerBuilder) { public void setRuntimeOptions(CelRuntimeBuilder runtimeBuilder) { runtimeBuilder .addFunctionBindings(CustomOverload.create()) - .setStandardEnvironmentEnabled(false) - .setStandardFunctions(CelStandardFunctions.newBuilder().build()); + .setStandardEnvironmentEnabled(false); } } From aef353bfb45dd497e56eff2b37baccb749ea73cb Mon Sep 17 00:00:00 2001 From: "Philip K. Warren" Date: Mon, 14 Jul 2025 10:19:14 -0500 Subject: [PATCH 4/4] Further simplify --- src/main/java/build/buf/protovalidate/ValidateLibrary.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/build/buf/protovalidate/ValidateLibrary.java b/src/main/java/build/buf/protovalidate/ValidateLibrary.java index 0e518b91..73404023 100644 --- a/src/main/java/build/buf/protovalidate/ValidateLibrary.java +++ b/src/main/java/build/buf/protovalidate/ValidateLibrary.java @@ -54,8 +54,6 @@ public void setCheckerOptions(CelCheckerBuilder checkerBuilder) { @Override public void setRuntimeOptions(CelRuntimeBuilder runtimeBuilder) { - runtimeBuilder - .addFunctionBindings(CustomOverload.create()) - .setStandardEnvironmentEnabled(false); + runtimeBuilder.addFunctionBindings(CustomOverload.create()); } }