mirror of
https://github.com/SerenityOS/serenity
synced 2026-05-05 06:32:26 +02:00
AK: Decode data URLs to separate class (and parse like every other URL)
Parsing 'data:' URLs took it's own route. It never set standard URL
fields like path, query or fragment (except for scheme) and instead
gave us separate methods called `data_payload()`, `data_mime_type()`,
and `data_payload_is_base64()`.
Because parsing 'data:' didn't use standard fields, running the
following JS code:
new URL('#a', 'data:text/plain,hello').toString()
not only cleared the path as URLParser doesn't check for data from
data_payload() function (making the result be 'data:#a'), but it also
crashes the program because we forbid having an empty MIME type when we
serialize to string.
With this change, 'data:' URLs will be parsed like every other URLs.
To decode the 'data:' URL contents, one needs to call process_data_url()
on a URL, which will return a struct containing MIME type with already
decoded data! :^)
This commit is contained in:
committed by
Andreas Kling
parent
f27b9b9563
commit
eb41f0144b
@@ -195,7 +195,7 @@ DeprecatedString HTMLCanvasElement::to_data_url(DeprecatedString const& type, [[
|
||||
// FIXME: propagate error
|
||||
return {};
|
||||
}
|
||||
return AK::URL::create_with_data(type, base64_encoded_or_error.release_value().to_deprecated_string(), true).to_deprecated_string();
|
||||
return AK::URL::create_with_data(type, base64_encoded_or_error.release_value(), true).to_deprecated_string();
|
||||
}
|
||||
|
||||
void HTMLCanvasElement::present()
|
||||
|
||||
Reference in New Issue
Block a user