Skip to content

Commit 397e04f

Browse files
committed
fix: validate compact value size before split
1 parent 8074dc7 commit 397e04f

4 files changed

Lines changed: 23 additions & 3 deletions

File tree

‎src/joserfc/_rfc7515/registry.py‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ def check_header(self, header: Header) -> None:
100100
if self.strict_check_header:
101101
check_supported_header(self.header_registry, header)
102102

103+
def validate_compact_value_size(self, value: bytes) -> None:
104+
max_length = self.max_header_length + self.max_payload_length + self.max_signature_length
105+
if value and len(value) > max_length:
106+
raise ExceededSizeError(f"Value size exceeds {max_length} bytes.")
107+
103108
def validate_header_size(self, header: bytes) -> None:
104109
if header and len(header) > self.max_header_length:
105110
raise ExceededSizeError(f"Header size exceeds {self.max_header_length} bytes.")

‎src/joserfc/_rfc7516/compact.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ def represent_compact(obj: CompactEncryption) -> bytes:
3434

3535

3636
def extract_compact(value: bytes, registry: JWERegistry) -> CompactEncryption:
37+
registry.validate_compact_value_size(value)
38+
3739
parts = value.split(b".")
3840
if len(parts) != 5:
3941
raise ValueError("Invalid JSON Web Encryption")

‎src/joserfc/_rfc7516/registry.py‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,17 @@ def check_header(self, header: Header, check_more: bool = False) -> None:
106106
elif self.strict_check_header:
107107
check_supported_header(self.header_registry, header)
108108

109+
def validate_compact_value_size(self, value: bytes) -> None:
110+
max_length = (
111+
self.max_protected_header_length
112+
+ self.max_encrypted_key_length
113+
+ self.max_initialization_vector_length
114+
+ self.max_ciphertext_length
115+
+ self.max_auth_tag_length
116+
)
117+
if value and len(value) > max_length:
118+
raise ExceededSizeError(f"Value size exceeds {max_length} bytes.")
119+
109120
def validate_protected_header_size(self, header: bytes) -> None:
110121
if header and len(header) > self.max_protected_header_length:
111122
raise ExceededSizeError(f"Header size exceeds {self.max_protected_header_length} bytes.")

‎src/joserfc/_rfc7797/compact.py‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,15 @@ def extract_rfc7515_compact(
3737
:param registry: optional JWSRegistry instance
3838
:raise DecodeError: when decoding fails
3939
"""
40+
if registry is None:
41+
registry = default_registry
42+
43+
registry.validate_compact_value_size(value)
44+
4045
parts = value.split(b".")
4146
if len(parts) != 3:
4247
raise DecodeError("Invalid JSON Web Signature")
4348

44-
if registry is None:
45-
registry = default_registry
46-
4749
header_segment, payload_segment, signature_segment = parts
4850

4951
registry.validate_header_size(header_segment)

0 commit comments

Comments
 (0)