test: test about:blank against invalid WHATWG URL
> If `failure` is true, parsing `about:blank` against `base` > must give failure. This tests that the logic for converting > base URLs into strings properly fails the whole parsing > algorithm if the base URL cannot be parsed. Fixes: https://github.com/nodejs/node/issues/20720 PR-URL: https://github.com/nodejs/node/pull/20796 Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: Daijiro Wachi <daijiro.wachi@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
Родитель
b6d678b018
Коммит
5886b7826c
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
/* The following tests are copied from WPT. Modifications to them should be
|
/* The following tests are copied from WPT. Modifications to them should be
|
||||||
upstreamed first. Refs:
|
upstreamed first. Refs:
|
||||||
https://github.com/w3c/web-platform-tests/blob/ed4bb727ed/url/urltestdata.json
|
https://github.com/w3c/web-platform-tests/blob/88b75886e/url/urltestdata.json
|
||||||
License: http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html
|
License: http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html
|
||||||
*/
|
*/
|
||||||
module.exports =
|
module.exports =
|
||||||
|
@ -6529,27 +6529,34 @@ module.exports =
|
||||||
"search": "?a",
|
"search": "?a",
|
||||||
"hash": "#%GH"
|
"hash": "#%GH"
|
||||||
},
|
},
|
||||||
"Bad bases",
|
"URLs that require a non-about:blank base. (Also serve as invalid base tests.)",
|
||||||
{
|
{
|
||||||
"input": "test-a.html",
|
"input": "a",
|
||||||
"base": "a",
|
"base": "about:blank",
|
||||||
"failure": true
|
"failure": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"input": "test-a-slash.html",
|
"input": "a/",
|
||||||
"base": "a/",
|
"base": "about:blank",
|
||||||
"failure": true
|
"failure": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"input": "test-a-slash-slash.html",
|
"input": "a//",
|
||||||
"base": "a//",
|
"base": "about:blank",
|
||||||
"failure": true
|
"failure": true
|
||||||
},
|
},
|
||||||
|
"Bases that don't fail to parse but fail to be bases",
|
||||||
{
|
{
|
||||||
"input": "test-a-colon.html",
|
"input": "test-a-colon.html",
|
||||||
"base": "a:",
|
"base": "a:",
|
||||||
"failure": true
|
"failure": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"input": "test-a-colon-b.html",
|
||||||
|
"base": "a:b",
|
||||||
|
"failure": true
|
||||||
|
},
|
||||||
|
"Other base URL tests, that must succeed",
|
||||||
{
|
{
|
||||||
"input": "test-a-colon-slash.html",
|
"input": "test-a-colon-slash.html",
|
||||||
"base": "a:/",
|
"base": "a:/",
|
||||||
|
@ -6578,11 +6585,6 @@ module.exports =
|
||||||
"search": "",
|
"search": "",
|
||||||
"hash": ""
|
"hash": ""
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"input": "test-a-colon-b.html",
|
|
||||||
"base": "a:b",
|
|
||||||
"failure": true
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"input": "test-a-colon-slash-b.html",
|
"input": "test-a-colon-slash-b.html",
|
||||||
"base": "a:/b",
|
"base": "a:/b",
|
||||||
|
|
|
@ -12,7 +12,10 @@ const fixtures = require('../common/fixtures');
|
||||||
|
|
||||||
// Tests below are not from WPT.
|
// Tests below are not from WPT.
|
||||||
const tests = require(fixtures.path('url-tests'));
|
const tests = require(fixtures.path('url-tests'));
|
||||||
const failureTests = tests.filter((test) => test.failure).concat([
|
|
||||||
|
const originalFailures = tests.filter((test) => test.failure);
|
||||||
|
|
||||||
|
const typeFailures = [
|
||||||
{ input: '' },
|
{ input: '' },
|
||||||
{ input: 'test' },
|
{ input: 'test' },
|
||||||
{ input: undefined },
|
{ input: undefined },
|
||||||
|
@ -25,7 +28,23 @@ const failureTests = tests.filter((test) => test.failure).concat([
|
||||||
{ input: 'test', base: null },
|
{ input: 'test', base: null },
|
||||||
{ input: 'http://nodejs.org', base: null },
|
{ input: 'http://nodejs.org', base: null },
|
||||||
{ input: () => {} }
|
{ input: () => {} }
|
||||||
]);
|
];
|
||||||
|
|
||||||
|
// See https://github.com/w3c/web-platform-tests/pull/10955
|
||||||
|
// > If `failure` is true, parsing `about:blank` against `base`
|
||||||
|
// > must give failure. This tests that the logic for converting
|
||||||
|
// > base URLs into strings properly fails the whole parsing
|
||||||
|
// > algorithm if the base URL cannot be parsed.
|
||||||
|
const aboutBlankFailures = originalFailures
|
||||||
|
.map((test) => ({
|
||||||
|
input: 'about:blank',
|
||||||
|
base: test.input,
|
||||||
|
failure: true
|
||||||
|
}));
|
||||||
|
|
||||||
|
const failureTests = originalFailures
|
||||||
|
.concat(typeFailures)
|
||||||
|
.concat(aboutBlankFailures);
|
||||||
|
|
||||||
const expectedError = common.expectsError(
|
const expectedError = common.expectsError(
|
||||||
{ code: 'ERR_INVALID_URL', type: TypeError }, failureTests.length);
|
{ code: 'ERR_INVALID_URL', type: TypeError }, failureTests.length);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче