1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 19:17:44 +00:00

LibWeb: Store the SVG <use> element's referenced ID as a FlyString

We currently store a StringView into the DeprecatedString provided to
SVGUseElement::attribute_changed. This is a temporary string created by
String::to_deprecated_string, so this StringView is always a dangling
pointer.

Instead, since this string value is an ID and is primarily used as a
FlyString, store it as a FlyString from the get-go.
This commit is contained in:
Timothy Flynn 2023-10-11 10:13:17 -04:00 committed by Andreas Kling
parent a396bb0c0b
commit 33443190d0
2 changed files with 7 additions and 5 deletions

View file

@ -62,14 +62,15 @@ void SVGUseElement::attribute_changed(FlyString const& name, DeprecatedString co
}
}
Optional<StringView> SVGUseElement::parse_id_from_href(DeprecatedString const& href)
Optional<FlyString> SVGUseElement::parse_id_from_href(DeprecatedString const& href)
{
auto id_seperator = href.find('#');
if (!id_seperator.has_value()) {
return {};
}
return href.substring_view(id_seperator.value() + 1);
auto id = href.substring_view(id_seperator.value() + 1);
return MUST(FlyString::from_utf8(id));
}
Gfx::AffineTransform SVGUseElement::element_transform() const
@ -115,7 +116,7 @@ JS::GCPtr<DOM::Element> SVGUseElement::referenced_element()
}
// FIXME: Support loading of external svg documents
return document().get_element_by_id(MUST(FlyString::from_utf8(m_referenced_id.value())));
return document().get_element_by_id(m_referenced_id.value());
}
// https://svgwg.org/svg2-draft/struct.html#UseShadowTree