Skip to content

Commit

Permalink
DOP-1079: Fix crashes caused by incorrect split() usage (#159)
Browse files Browse the repository at this point in the history
  • Loading branch information
i80and authored May 13, 2020
1 parent 12829be commit 69c219a
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 2 deletions.
2 changes: 1 addition & 1 deletion snooty/intersphinx.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ def parse(cls, base_url: str, text: bytes) -> "Inventory":
logger.debug(f"Invalid priority in intersphinx inventory: {line}")
continue

domain, role = domain_and_role.split(":", 2)
domain, role = domain_and_role.split(":", 1)

# "If {dispname} is identical to {name}, it is stored as -"
if dispname == "-":
Expand Down
19 changes: 19 additions & 0 deletions snooty/test_intersphinx.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from pytest import raises
from .intersphinx import fetch_inventory, Inventory
from .parser import Project
from .types import TargetDatabase, FileId
from .test_project import Backend

TESTING_CACHE_DIR = Path(".intersphinx_cache")
Expand Down Expand Up @@ -89,3 +90,21 @@ def test_dump_target_database() -> None:
continue

assert reference_definition == generated_definition


def test_target_strange_fields() -> None:
db = TargetDatabase()

# Ensure that a weird target with a colon does not crash inventory generation
db.define_local_target("std", "label", ["foo:bar"], FileId("foo"), [])
inventory = db.generate_inventory("")

# Now corrupt the domain:role name pair to ensure we don't crash
good_role_name = "std:label:foo:bar"
weird_role_name = "std:lab:el:foo:bar"
inventory.targets[weird_role_name] = inventory.targets[good_role_name]._replace(
role=("std", "lab:el")
)
del inventory.targets[good_role_name]
inventory_bytes = inventory.dumps("", "")
Inventory.parse("", inventory_bytes)
2 changes: 1 addition & 1 deletion snooty/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ def generate_inventory(self, base_url: str) -> intersphinx.Inventory:
definition = definitions[0]
uri = definition.fileid.without_known_suffix + "/"
dispname = "".join(node.get_text() for node in definition.title)
domain, role_name, name = key.split(":", 3)
domain, role_name, name = key.split(":", 2)

if not dispname:
dispname = name
Expand Down

0 comments on commit 69c219a

Please sign in to comment.