summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Myhra <kennethmyhra@gmail.com>2023-02-14 21:17:55 +0100
committerLinus Groh <mail@linusgroh.de>2023-02-18 00:52:47 +0100
commit50c5f0d7da52d8d02e537a9828a8313594ef0a73 (patch)
tree9f2edceb44d07898f975498243a558a94fee6625
parentb9c5828fe69b8d1e180727407935807b75ca5ce1 (diff)
downloadserenity-50c5f0d7da52d8d02e537a9828a8313594ef0a73.zip
LibWeb: Make factory method of DOM::Attr fallible
-rw-r--r--Userland/Libraries/LibWeb/DOM/Attr.cpp4
-rw-r--r--Userland/Libraries/LibWeb/DOM/Attr.h2
-rw-r--r--Userland/Libraries/LibWeb/DOM/Element.cpp4
-rw-r--r--Userland/Libraries/LibWeb/HTML/Parser/HTMLEncodingDetection.cpp10
4 files changed, 10 insertions, 10 deletions
diff --git a/Userland/Libraries/LibWeb/DOM/Attr.cpp b/Userland/Libraries/LibWeb/DOM/Attr.cpp
index 92ea77512e..8e8e1bcc2a 100644
--- a/Userland/Libraries/LibWeb/DOM/Attr.cpp
+++ b/Userland/Libraries/LibWeb/DOM/Attr.cpp
@@ -13,9 +13,9 @@
namespace Web::DOM {
-JS::NonnullGCPtr<Attr> Attr::create(Document& document, DeprecatedFlyString local_name, DeprecatedString value, Element const* owner_element)
+WebIDL::ExceptionOr<JS::NonnullGCPtr<Attr>> Attr::create(Document& document, DeprecatedFlyString local_name, DeprecatedString value, Element const* owner_element)
{
- return document.heap().allocate<Attr>(document.realm(), document, QualifiedName(move(local_name), {}, {}), move(value), owner_element).release_allocated_value_but_fixme_should_propagate_errors();
+ return MUST_OR_THROW_OOM(document.heap().allocate<Attr>(document.realm(), document, QualifiedName(move(local_name), {}, {}), move(value), owner_element));
}
JS::NonnullGCPtr<Attr> Attr::clone(Document& document)
diff --git a/Userland/Libraries/LibWeb/DOM/Attr.h b/Userland/Libraries/LibWeb/DOM/Attr.h
index fcf07bf5fa..5fb1ecbfa9 100644
--- a/Userland/Libraries/LibWeb/DOM/Attr.h
+++ b/Userland/Libraries/LibWeb/DOM/Attr.h
@@ -18,7 +18,7 @@ class Attr final : public Node {
WEB_PLATFORM_OBJECT(Attr, Node);
public:
- static JS::NonnullGCPtr<Attr> create(Document&, DeprecatedFlyString local_name, DeprecatedString value, Element const* = nullptr);
+ static WebIDL::ExceptionOr<JS::NonnullGCPtr<Attr>> create(Document&, DeprecatedFlyString local_name, DeprecatedString value, Element const* = nullptr);
JS::NonnullGCPtr<Attr> clone(Document&);
virtual ~Attr() override = default;
diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp
index e346f804e5..614b4af169 100644
--- a/Userland/Libraries/LibWeb/DOM/Element.cpp
+++ b/Userland/Libraries/LibWeb/DOM/Element.cpp
@@ -120,7 +120,7 @@ WebIDL::ExceptionOr<void> Element::set_attribute(DeprecatedFlyString const& name
// 4. If attribute is null, create an attribute whose local name is qualifiedName, value is value, and node document is this’s node document, then append this attribute to this, and then return.
if (!attribute) {
- auto new_attribute = Attr::create(document(), insert_as_lowercase ? name.to_lowercase() : name, value);
+ auto new_attribute = TRY(Attr::create(document(), insert_as_lowercase ? name.to_lowercase() : name, value));
m_attributes->append_attribute(new_attribute);
attribute = new_attribute.ptr();
@@ -228,7 +228,7 @@ WebIDL::ExceptionOr<bool> Element::toggle_attribute(DeprecatedFlyString const& n
if (!attribute) {
// 1. If force is not given or is true, create an attribute whose local name is qualifiedName, value is the empty string, and node document is this’s node document, then append this attribute to this, and then return true.
if (!force.has_value() || force.value()) {
- auto new_attribute = Attr::create(document(), insert_as_lowercase ? name.to_lowercase() : name, "");
+ auto new_attribute = TRY(Attr::create(document(), insert_as_lowercase ? name.to_lowercase() : name, ""));
m_attributes->append_attribute(new_attribute);
parse_attribute(new_attribute->local_name(), "");
diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLEncodingDetection.cpp b/Userland/Libraries/LibWeb/HTML/Parser/HTMLEncodingDetection.cpp
index 74a688b68c..1fedcc8dd7 100644
--- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLEncodingDetection.cpp
+++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLEncodingDetection.cpp
@@ -109,7 +109,7 @@ JS::GCPtr<DOM::Attr> prescan_get_attribute(DOM::Document& document, ByteBuffer c
} else if (input[position] == '\t' || input[position] == '\n' || input[position] == '\f' || input[position] == '\r' || input[position] == ' ')
goto spaces;
else if (input[position] == '/' || input[position] == '>')
- return *DOM::Attr::create(document, attribute_name.to_deprecated_string(), "");
+ return *DOM::Attr::create(document, attribute_name.to_deprecated_string(), "").release_value_but_fixme_should_propagate_errors();
else
attribute_name.append_as_lowercase(input[position]);
++position;
@@ -121,7 +121,7 @@ spaces:
if (!prescan_skip_whitespace_and_slashes(input, position))
return {};
if (input[position] != '=')
- return DOM::Attr::create(document, attribute_name.to_deprecated_string(), "");
+ return DOM::Attr::create(document, attribute_name.to_deprecated_string(), "").release_value_but_fixme_should_propagate_errors();
++position;
value:
@@ -134,13 +134,13 @@ value:
++position;
for (; !prescan_should_abort(input, position); ++position) {
if (input[position] == quote_character)
- return DOM::Attr::create(document, attribute_name.to_deprecated_string(), attribute_value.to_deprecated_string());
+ return DOM::Attr::create(document, attribute_name.to_deprecated_string(), attribute_value.to_deprecated_string()).release_value_but_fixme_should_propagate_errors();
else
attribute_value.append_as_lowercase(input[position]);
}
return {};
} else if (input[position] == '>')
- return DOM::Attr::create(document, attribute_name.to_deprecated_string(), "");
+ return DOM::Attr::create(document, attribute_name.to_deprecated_string(), "").release_value_but_fixme_should_propagate_errors();
else
attribute_value.append_as_lowercase(input[position]);
@@ -150,7 +150,7 @@ value:
for (; !prescan_should_abort(input, position); ++position) {
if (input[position] == '\t' || input[position] == '\n' || input[position] == '\f' || input[position] == '\r' || input[position] == ' ' || input[position] == '>')
- return DOM::Attr::create(document, attribute_name.to_deprecated_string(), attribute_value.to_deprecated_string());
+ return DOM::Attr::create(document, attribute_name.to_deprecated_string(), attribute_value.to_deprecated_string()).release_value_but_fixme_should_propagate_errors();
else
attribute_value.append_as_lowercase(input[position]);
}