LibWeb: Don't crash when evaluating XPath against a rootless document
Problem: Crash when evaluating an XPath expression against a document that has no root element. Cause: mirror_node()’s DOCUMENT_NODE branch unconditionally mirrored document.document_element(). But a document may lack a root element — in which case, document_element() returns null. Fix: Return null from mirror_node() when the document has no root element. (The caller already maps a null mirror result to a failed evaluation, and raises an error in that case.) Fixes https://github.com/LadybirdBrowser/ladybird/issues/10004
This commit is contained in:
parent
a7ce007ff4
commit
4af1b9357b
2 changed files with 10 additions and 1 deletions
|
|
@ -92,7 +92,10 @@ static xmlNodePtr mirror_node(xmlDocPtr doc, DOM::Node const& node)
|
|||
}
|
||||
case DOM::NodeType::DOCUMENT_NODE: {
|
||||
auto const& document = static_cast<DOM::Document const&>(node);
|
||||
return mirror_node(doc, *document.document_element());
|
||||
auto const* document_element = document.document_element();
|
||||
if (!document_element)
|
||||
return nullptr;
|
||||
return mirror_node(doc, *document_element);
|
||||
}
|
||||
case DOM::NodeType::DOCUMENT_TYPE_NODE: {
|
||||
return nullptr; // Unused in libxml2
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<script>
|
||||
// createDocument with an empty qualified name yields a document with no root element.
|
||||
const doc = document.implementation.createDocument(null, "", null);
|
||||
document.evaluate("/", doc, null, XPathResult.ANY_TYPE, null);
|
||||
</script>
|
||||
Loading…
Reference in a new issue