From e40352b6b59e99a9f3fd922142c2abafd9840e6c Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Mon, 22 Jul 2024 21:21:04 +0100 Subject: [PATCH] LibWeb: Ensure `document.getElementsByName("")` returns no elements Previously, if a document had any element with a name attribute that was set to the empty string, then `document.getElementsByName("")` and `element.getElementsByName("")` would return a collection including those elements. --- .../Text/expected/DOM/getElementsName-empty-string.txt | 1 + .../Text/input/DOM/getElementsName-empty-string.html | 8 ++++++++ Userland/Libraries/LibWeb/DOM/Element.cpp | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 Tests/LibWeb/Text/expected/DOM/getElementsName-empty-string.txt create mode 100644 Tests/LibWeb/Text/input/DOM/getElementsName-empty-string.html diff --git a/Tests/LibWeb/Text/expected/DOM/getElementsName-empty-string.txt b/Tests/LibWeb/Text/expected/DOM/getElementsName-empty-string.txt new file mode 100644 index 0000000000..2f0a6b5f55 --- /dev/null +++ b/Tests/LibWeb/Text/expected/DOM/getElementsName-empty-string.txt @@ -0,0 +1 @@ + document.getElementsByName("").length: 0 \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/DOM/getElementsName-empty-string.html b/Tests/LibWeb/Text/input/DOM/getElementsName-empty-string.html new file mode 100644 index 0000000000..db2a27cb27 --- /dev/null +++ b/Tests/LibWeb/Text/input/DOM/getElementsName-empty-string.html @@ -0,0 +1,8 @@ + + +
+ diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp index 8823003ac8..e9ae8fd2ce 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.cpp +++ b/Userland/Libraries/LibWeb/DOM/Element.cpp @@ -464,7 +464,7 @@ void Element::attribute_changed(FlyString const& name, Optional const&, document().element_id_changed({}, *this); } else if (name == HTML::AttributeNames::name) { - if (!value.has_value()) + if (value_or_empty.is_empty()) m_name = {}; else m_name = value_or_empty;