Skip to content

Commit f79b8fe

Browse files
Raise URNValidationError for truncated URNs
Signed-off-by: Ali Zulfiqar <codewithfourtix@gmail.com>
1 parent a109ca4 commit f79b8fe

2 files changed

Lines changed: 11 additions & 0 deletions

File tree

src/commoncode/urn.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ def decode(urn):
125125
"""
126126
segments = [unquote_plus(p) for p in urn.split(":")]
127127

128+
if len(segments) < 3:
129+
raise URNValidationError("Invalid URN: missing namespace or object type.")
130+
128131
if not segments[0] == ("urn"):
129132
raise URNValidationError("Invalid URN prefix. Expected 'urn'.")
130133

tests/test_urn.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,11 @@ def test_encode_decode_is_idempotent(self):
140140
encoded = "urn:dje:component:SIP+Servlets+%28MSS%29:v+1.4.0.FINAL"
141141
assert urn.encode(object_type, **fields) == encoded
142142
assert urn.decode(encoded) == (object_type, fields)
143+
144+
145+
class TruncatedURNTestCase(unittest.TestCase):
146+
def test_truncated_urns_raise_validation_error(self):
147+
for value in ("", "urn", "urn:", "urn:dje"):
148+
with self.subTest(value=value):
149+
with self.assertRaises(urn.URNValidationError):
150+
urn.decode(value)

0 commit comments

Comments
 (0)