script: Strip javascript URL scheme using Position::AfterScheme rather than Position::BeforePath (#38599)

This makes the initial split match step 2 of
https://html.spec.whatwg.org/multipage/browsing-the-web.html#evaluate-a-javascript%3A-url.

Testing: Covered by WPT tests.
Fixes: #38547

---------

Signed-off-by: lumiscosity <averyrudelphe@gmail.com>
This commit is contained in:
lumiscosity 2025-08-14 14:49:07 +02:00 committed by GitHub
parent be5e7a982b
commit b747589286
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 8 additions and 6 deletions

View file

@ -3592,7 +3592,7 @@ impl ScriptThread {
// Start with the scheme data of the parsed URL;
// append question mark and query component, if any;
// append number sign and fragment component if any.
let encoded = &load_data.url.clone()[Position::BeforePath..];
let encoded = &load_data.url[Position::AfterScheme..][1..];
// Percent-decode (8.) and UTF-8 decode (9.)
let script_source = percent_decode(encoded.as_bytes()).decode_utf8_lossy();

View file

@ -835815,7 +835815,7 @@
]
],
"javascript-urls.window.js": [
"4f617beca17082dc8459acb73bca781900170593",
"3e3a53003dde5fae29ced12ce9f2c26c7520a87c",
[
"url/javascript-urls.window.html",
{}

View file

@ -1,4 +0,0 @@
[javascript-urls.window.html]
expected: ERROR
[javascript: URL without an opaque path]
expected: FAIL

View file

@ -19,6 +19,12 @@
"property": "shouldNotExistB",
"expected": undefined
},
{
"description": "javascript: URL with extra slashes at the start",
"input": "javascript:///globalThis.shouldNotExistC=1",
"property": "shouldNotExistC",
"expected": undefined
},
{
"description": "javascript: URL without an opaque path",
"input": "javascript://host/1%0a//../0/;globalThis.shouldBeOne=1;/%0aglobalThis.shouldBeOne=2;/..///",