diff --git a/common/src/main/java/dev/cel/common/CelOptions.java b/common/src/main/java/dev/cel/common/CelOptions.java
index 3525e45d7..417d4dc9d 100644
--- a/common/src/main/java/dev/cel/common/CelOptions.java
+++ b/common/src/main/java/dev/cel/common/CelOptions.java
@@ -120,6 +120,8 @@ public enum ProtoUnsetFieldOptions {
public abstract boolean enableComprehension();
+ public abstract boolean enableTimestampOverflowCheck();
+
public abstract int maxRegexProgramSize();
public abstract Builder toBuilder();
@@ -166,6 +168,7 @@ public static Builder newBuilder() {
.unwrapWellKnownTypesOnFunctionDispatch(true)
.fromProtoUnsetFieldOption(ProtoUnsetFieldOptions.BIND_DEFAULT)
.enableComprehension(true)
+ .enableTimestampOverflowCheck(true)
.maxRegexProgramSize(-1);
}
@@ -529,6 +532,15 @@ public abstract static class Builder {
*/
public abstract Builder enableJsonFieldNames(boolean value);
+ /**
+ * Enable or disable validating that duration values resulting from timestamp arithmetic do not
+ * overflow 64-bit nanoseconds. Defaults to enabled.
+ *
+ *
Disabling this option is an out-of-conformance behavior that suppresses nanosecond
+ * overflow validation when subtracting timestamps.
+ */
+ public abstract Builder enableTimestampOverflowCheck(boolean value);
+
public abstract CelOptions build();
}
}
diff --git a/common/src/main/java/dev/cel/common/internal/ProtoAdapter.java b/common/src/main/java/dev/cel/common/internal/ProtoAdapter.java
index 7e3910433..b1b56afe1 100644
--- a/common/src/main/java/dev/cel/common/internal/ProtoAdapter.java
+++ b/common/src/main/java/dev/cel/common/internal/ProtoAdapter.java
@@ -325,13 +325,6 @@ private BidiConverter fieldToValueConverter(FieldDescriptor fieldDescriptor) {
value -> BidiConverter.IDENTITY.backwardConverter().convert(maybeUnwrap(value)));
case FLOAT:
return unwrapAndConvert(DOUBLE_CONVERTER);
- case DOUBLE:
- case SFIXED64:
- case SINT64:
- case INT64:
- return BidiConverter.of(
- BidiConverter.IDENTITY.forwardConverter(),
- value -> BidiConverter.IDENTITY.backwardConverter().convert(maybeUnwrap(value)));
case BYTES:
if (celOptions.evaluateCanonicalTypesToNativeValues()) {
return BidiConverter.