mirror of https://github.com/scrapy/scrapy.git
* Fix _get_tag_name() crash for non-string elem.tag (#7686) * test: improve non-string tag test accuracy and add direct unit test * test: use minimal payload for non-string tag test * test: address Adrian+syncrain PR feedback - remove first docstring line (Adrian: unnecessary) - replace weak isinstance assert with no-op call - keep Cython function mention (Adrian: wording is great) * test: replace silent call with assert results == [] per Adrian * chore: drop accidental pyproject.toml and uv.lock changes
This commit is contained in:
parent
6ad8a043ca
commit
deb7e2861e
|
|
@ -97,10 +97,11 @@ class Sitemap:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_tag_name(elem: lxml.etree._Element) -> str:
|
def _get_tag_name(elem: lxml.etree._Element) -> str:
|
||||||
if TYPE_CHECKING:
|
tag = elem.tag
|
||||||
assert isinstance(elem.tag, str)
|
if not isinstance(tag, str):
|
||||||
_, _, localname = elem.tag.partition("}")
|
return ""
|
||||||
return localname or elem.tag
|
_, _, localname = tag.partition("}")
|
||||||
|
return localname or tag
|
||||||
|
|
||||||
|
|
||||||
def sitemap_urls_from_robots(
|
def sitemap_urls_from_robots(
|
||||||
|
|
|
||||||
|
|
@ -311,3 +311,14 @@ def test_xml_entity_expansion():
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
assert list(s) == [{"loc": "http://127.0.0.1:8000/"}]
|
assert list(s) == [{"loc": "http://127.0.0.1:8000/"}]
|
||||||
|
|
||||||
|
|
||||||
|
def test_sitemap_non_string_tag():
|
||||||
|
"""With recover=True and resolve_entities=False, libxml2 >= 2.14.6 (used
|
||||||
|
by lxml >= 6.1.1) preserves undeclared entity reference nodes whose
|
||||||
|
.tag is a non-string ``Cython function`` object instead of a ``str``.
|
||||||
|
_get_tag_name must handle this gracefully instead of raising
|
||||||
|
AttributeError.
|
||||||
|
"""
|
||||||
|
results = list(Sitemap(b"<url>&k;"))
|
||||||
|
assert results == []
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue