Skip to content

Commit 0a10907

Browse files
authored
Raise a CompilationError for unknown rules (#445)
1 parent e08816f commit 0a10907

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

protovalidate/internal/rules.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,15 @@
1919

2020
import celpy
2121
from celpy import celtypes
22-
from google.protobuf import any_pb2, descriptor, duration_pb2, message, message_factory, timestamp_pb2
22+
from google.protobuf import ( # type: ignore[attr-defined]
23+
any_pb2,
24+
descriptor,
25+
duration_pb2,
26+
message,
27+
message_factory,
28+
timestamp_pb2,
29+
unknown_fields,
30+
)
2331

2432
from buf.validate import validate_pb2
2533
from protovalidate.internal.cel_field_presence import InterpretedRunner, in_has
@@ -565,6 +573,9 @@ def __init__(
565573
self._required = field_level.required
566574
if type_case is not None:
567575
rules: message.Message = getattr(field_level, type_case)
576+
if len(unknown_fields.UnknownFieldSet(rules)) > 0:
577+
msg = f"unknown rules in {rules.DESCRIPTOR.full_name}"
578+
raise CompilationError(msg)
568579
# For each set field in the message, look for the private rule
569580
# extension.
570581
for list_field, _ in rules.ListFields():
@@ -1031,6 +1042,9 @@ def _new_scalar_field_rule(
10311042
check_field_type(field, 0, "google.protobuf.Any")
10321043
result = AnyRules(self._env, self._funcs, field, field_level)
10331044
return result
1045+
else:
1046+
msg = f"unknown rule type {type_case!r}"
1047+
raise CompilationError(msg)
10341048

10351049
def _new_field_rule(
10361050
self,

0 commit comments

Comments
 (0)