diff --git a/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp b/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp index c476678e5f0..b6299957ddc 100644 --- a/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp +++ b/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp @@ -116,7 +116,7 @@ void XMLDocumentBuilder::element_start(const XML::Name& name, HashMaprealm(), namespace_, FlyString(MUST(String::from_byte_string(name)))); @@ -358,10 +358,17 @@ void XMLDocumentBuilder::document_end() m_document->set_ready_for_post_load_tasks(true); } -Optional XMLDocumentBuilder::namespace_for_element(XML::Name const& element_name) +Optional XMLDocumentBuilder::namespace_for_name(XML::Name const& name) { - Optional prefix; - if (auto parts = element_name.split_limit(':', 2); parts.size() == 2) { + Optional prefix; + + auto parts = name.split_limit(':', 3); + if (parts.size() > 2) + return {}; + + if (parts.size() == 2) { + if (parts[0].is_empty() || parts[1].is_empty()) + return {}; prefix = parts[0]; } diff --git a/Libraries/LibWeb/XML/XMLDocumentBuilder.h b/Libraries/LibWeb/XML/XMLDocumentBuilder.h index b8d2fc8510d..c9d1eca8ef4 100644 --- a/Libraries/LibWeb/XML/XMLDocumentBuilder.h +++ b/Libraries/LibWeb/XML/XMLDocumentBuilder.h @@ -38,7 +38,7 @@ private: virtual void comment(StringView data) override; virtual void document_end() override; - Optional namespace_for_element(XML::Name const& element_name); + Optional namespace_for_name(XML::Name const&); GC::Ref m_document; GC::Ptr m_current_node;