src: encode 0x27 (') for special URLs
Refs: 6ef17ebe12
PR-URL: https://github.com/nodejs/node/pull/22022
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
2d72a9543c
commit
c7788fba28
@ -529,7 +529,7 @@ const uint8_t USERINFO_ENCODE_SET[32] = {
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80
|
||||
};
|
||||
|
||||
const uint8_t QUERY_ENCODE_SET[32] = {
|
||||
const uint8_t QUERY_ENCODE_SET_NONSPECIAL[32] = {
|
||||
// 00 01 02 03 04 05 06 07
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// 08 09 0A 0B 0C 0D 0E 0F
|
||||
@ -596,6 +596,74 @@ const uint8_t QUERY_ENCODE_SET[32] = {
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80
|
||||
};
|
||||
|
||||
// Same as QUERY_ENCODE_SET_NONSPECIAL, but with 0x27 (') encoded.
|
||||
const uint8_t QUERY_ENCODE_SET_SPECIAL[32] = {
|
||||
// 00 01 02 03 04 05 06 07
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// 08 09 0A 0B 0C 0D 0E 0F
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// 10 11 12 13 14 15 16 17
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// 18 19 1A 1B 1C 1D 1E 1F
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// 20 21 22 23 24 25 26 27
|
||||
0x01 | 0x00 | 0x04 | 0x08 | 0x00 | 0x00 | 0x00 | 0x80,
|
||||
// 28 29 2A 2B 2C 2D 2E 2F
|
||||
0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00,
|
||||
// 30 31 32 33 34 35 36 37
|
||||
0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00,
|
||||
// 38 39 3A 3B 3C 3D 3E 3F
|
||||
0x00 | 0x00 | 0x00 | 0x00 | 0x10 | 0x00 | 0x40 | 0x00,
|
||||
// 40 41 42 43 44 45 46 47
|
||||
0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00,
|
||||
// 48 49 4A 4B 4C 4D 4E 4F
|
||||
0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00,
|
||||
// 50 51 52 53 54 55 56 57
|
||||
0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00,
|
||||
// 58 59 5A 5B 5C 5D 5E 5F
|
||||
0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00,
|
||||
// 60 61 62 63 64 65 66 67
|
||||
0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00,
|
||||
// 68 69 6A 6B 6C 6D 6E 6F
|
||||
0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00,
|
||||
// 70 71 72 73 74 75 76 77
|
||||
0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00,
|
||||
// 78 79 7A 7B 7C 7D 7E 7F
|
||||
0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x80,
|
||||
// 80 81 82 83 84 85 86 87
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// 88 89 8A 8B 8C 8D 8E 8F
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// 90 91 92 93 94 95 96 97
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// 98 99 9A 9B 9C 9D 9E 9F
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// A0 A1 A2 A3 A4 A5 A6 A7
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// A8 A9 AA AB AC AD AE AF
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// B0 B1 B2 B3 B4 B5 B6 B7
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// B8 B9 BA BB BC BD BE BF
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// C0 C1 C2 C3 C4 C5 C6 C7
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// C8 C9 CA CB CC CD CE CF
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// D0 D1 D2 D3 D4 D5 D6 D7
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// D8 D9 DA DB DC DD DE DF
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// E0 E1 E2 E3 E4 E5 E6 E7
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// E8 E9 EA EB EC ED EE EF
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// F0 F1 F2 F3 F4 F5 F6 F7
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80,
|
||||
// F8 F9 FA FB FC FD FE FF
|
||||
0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80
|
||||
};
|
||||
|
||||
inline bool BitAt(const uint8_t a[], const uint8_t i) {
|
||||
return !!(a[i >> 3] & (1 << (i & 7)));
|
||||
}
|
||||
@ -1990,7 +2058,8 @@ void URL::Parse(const char* input,
|
||||
if (ch == '#')
|
||||
state = kFragment;
|
||||
} else {
|
||||
AppendOrEscape(&buffer, ch, QUERY_ENCODE_SET);
|
||||
AppendOrEscape(&buffer, ch, special ? QUERY_ENCODE_SET_SPECIAL :
|
||||
QUERY_ENCODE_SET_NONSPECIAL);
|
||||
}
|
||||
break;
|
||||
case kFragment:
|
||||
|
33
test/fixtures/url-tests.js
vendored
33
test/fixtures/url-tests.js
vendored
@ -2,7 +2,7 @@
|
||||
|
||||
/* The following tests are copied from WPT. Modifications to them should be
|
||||
upstreamed first. Refs:
|
||||
https://github.com/w3c/web-platform-tests/blob/88b75886e/url/urltestdata.json
|
||||
https://github.com/web-platform-tests/wpt/blob/ba4921d054/url/resources/urltestdata.json
|
||||
License: http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html
|
||||
*/
|
||||
module.exports =
|
||||
@ -4023,6 +4023,37 @@ module.exports =
|
||||
"search": "?`{}",
|
||||
"hash": ""
|
||||
},
|
||||
"byte is ' and url is special",
|
||||
{
|
||||
"input": "http://host/?'",
|
||||
"base": "about:blank",
|
||||
"href": "http://host/?%27",
|
||||
"origin": "http://host",
|
||||
"protocol": "http:",
|
||||
"username": "",
|
||||
"password": "",
|
||||
"host": "host",
|
||||
"hostname": "host",
|
||||
"port": "",
|
||||
"pathname": "/",
|
||||
"search": "?%27",
|
||||
"hash": ""
|
||||
},
|
||||
{
|
||||
"input": "notspecial://host/?'",
|
||||
"base": "about:blank",
|
||||
"href": "notspecial://host/?'",
|
||||
"origin": "null",
|
||||
"protocol": "notspecial:",
|
||||
"username": "",
|
||||
"password": "",
|
||||
"host": "host",
|
||||
"hostname": "host",
|
||||
"port": "",
|
||||
"pathname": "/",
|
||||
"search": "?'",
|
||||
"hash": ""
|
||||
},
|
||||
"# Credentials in base",
|
||||
{
|
||||
"input": "/some/path",
|
||||
|
Loading…
x
Reference in New Issue
Block a user