1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 02:27:43 +00:00

LibWeb: Ignore unquoted data urls in CSS

Previously we were only ignoring quoted ones (eg `url("data:...")`), so
now we ignore unquoted ones (eg `url(data:...)`) too.
This commit is contained in:
Sam Atkins 2021-07-28 17:02:37 +01:00 committed by Andreas Kling
parent d113bc7704
commit 4c4482c7f6

View file

@ -1197,9 +1197,18 @@ Vector<Vector<StyleComponentValueRule>> Parser::parse_as_comma_separated_list_of
Optional<URL> Parser::parse_url_function(ParsingContext const& context, StyleComponentValueRule const& component_value) Optional<URL> Parser::parse_url_function(ParsingContext const& context, StyleComponentValueRule const& component_value)
{ {
// FIXME: Handle list of media queries. https://www.w3.org/TR/css-cascade-3/#conditional-import // FIXME: Handle list of media queries. https://www.w3.org/TR/css-cascade-3/#conditional-import
// FIXME: Handle data: urls (RFC2397)
if (component_value.is(Token::Type::Url)) auto is_data_url = [](StringView& url_string) -> bool {
return context.complete_url(component_value.token().url()); return url_string.starts_with("data:", CaseSensitivity::CaseInsensitive);
};
if (component_value.is(Token::Type::Url)) {
auto url_string = component_value.token().url();
if (is_data_url(url_string))
return {};
return context.complete_url(url_string);
}
if (component_value.is_function() && component_value.function().name().equals_ignoring_case("url")) { if (component_value.is_function() && component_value.function().name().equals_ignoring_case("url")) {
auto& function_values = component_value.function().values(); auto& function_values = component_value.function().values();
// FIXME: Handle url-modifiers. https://www.w3.org/TR/css-values-4/#url-modifiers // FIXME: Handle url-modifiers. https://www.w3.org/TR/css-values-4/#url-modifiers
@ -1208,11 +1217,12 @@ Optional<URL> Parser::parse_url_function(ParsingContext const& context, StyleCom
if (value.is(Token::Type::Whitespace)) if (value.is(Token::Type::Whitespace))
continue; continue;
if (value.is(Token::Type::String)) { if (value.is(Token::Type::String)) {
// FIXME: RFC2397 auto url_string = value.token().string();
if (value.token().string().starts_with("data:")) if (is_data_url(url_string))
break; return {};
return context.complete_url(value.token().string()); return context.complete_url(url_string);
} }
break;
} }
} }