Skip to content

Commit

Permalink
Fix #120 - Limit hierarchical objects to 5 levels.
Browse files Browse the repository at this point in the history
  • Loading branch information
mxsasha committed Dec 4, 2018
1 parent 4238676 commit b95042f
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
5 changes: 5 additions & 0 deletions irrd/rpsl/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -465,10 +465,15 @@ def parse_set_name(prefixes: List[str], value: str, messages: RPSLParserMessages
output_components: List[str] = []
prefix_display = '/'.join(prefixes)

if strict_validation and len(input_components) > 5:
messages.error(f'Set names can have a maximum of five components.')
return None

if strict_validation and not any([c.upper().startswith(tuple(prefixes)) for c in input_components]):
messages.error(f"Invalid set name {value}: at least one component must be "
f"an actual set name (i.e. start with {prefix_display})")
return None

for component in input_components:
if strict_validation and component.upper() in reserved_words:
messages.error(f"Invalid set name {value}: component {component} is a reserved word")
Expand Down
3 changes: 3 additions & 0 deletions irrd/rpsl/tests/test_fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,14 +249,17 @@ def test_validate_set_name_field():
"Set name AS01:AS-3 was reformatted as AS1:AS-3"
]

long_set = "AS1:AS-B:AS-C:AS-D:AS-E:AS-F"
assert_validation_err("at least one component must be an actual set name", field.parse, "AS1",)
assert_validation_err("at least one component must be an actual set name", field.parse, "AS1:AS3")
assert_validation_err("not a valid AS number, nor does it start with AS-", field.parse, "AS1:AS-FOO:RS-FORBIDDEN")
assert_validation_err("not a valid AS number nor a valid set name", field.parse, ":AS-FOO")
assert_validation_err("not a valid AS number nor a valid set name", field.parse, "AS-FOO:")
assert_validation_err("can have a maximum of five components", field.parse, long_set)
assert_validation_err("reserved word", field.parse, "AS1:AS-ANY")

assert field.parse("AS-ANY", messages, strict_validation=False).value == "AS-ANY"
assert field.parse(long_set, messages, strict_validation=False).value == long_set

field = RPSLSetNameField(prefix="RS")
messages = RPSLParserMessages()
Expand Down

0 comments on commit b95042f

Please sign in to comment.