@@ -165,6 +165,9 @@ enum url_cb_args {
165
165
// https://infra.spec.whatwg.org/#ascii-tab-or-newline
166
166
CHAR_TEST (8 , IsASCIITabOrNewline, (ch == ' \t ' || ch == ' \n ' || ch == ' \r ' ))
167
167
168
+ // https://infra.spec.whatwg.org/#c0-control
169
+ CHAR_TEST (8 , IsC0Control, (ch >= ' \0 ' && ch <= ' \x1f ' ))
170
+
168
171
// https://infra.spec.whatwg.org/#c0-control-or-space
169
172
CHAR_TEST (8 , IsC0ControlOrSpace, (ch >= ' \0 ' && ch <= ' ' ))
170
173
@@ -190,12 +193,18 @@ T ASCIILowercase(T ch) {
190
193
}
191
194
192
195
// https://url.spec.whatwg.org/#forbidden-host-code-point
193
- CHAR_TEST (8 , IsForbiddenHostCodePoint,
194
- ch == ' \0 ' || ch == ' \t ' || ch == ' \n ' || ch == ' \r ' ||
195
- ch == ' ' || ch == ' #' || ch == ' %' || ch == ' /' ||
196
- ch == ' :' || ch == ' ?' || ch == ' @' || ch == ' [' ||
197
- ch == ' <' || ch == ' >' || ch == ' \\ ' || ch == ' ]' ||
198
- ch == ' ^' || ch == ' |' )
196
+ CHAR_TEST (8 ,
197
+ IsForbiddenHostCodePoint,
198
+ ch == ' \0 ' || ch == ' \t ' || ch == ' \n ' || ch == ' \r ' || ch == ' ' ||
199
+ ch == ' #' || ch == ' /' || ch == ' :' || ch == ' ?' || ch == ' @' ||
200
+ ch == ' [' || ch == ' <' || ch == ' >' || ch == ' \\ ' || ch == ' ]' ||
201
+ ch == ' ^' || ch == ' |' )
202
+
203
+ // https://url.spec.whatwg.org/#forbidden-domain-code-point
204
+ CHAR_TEST (8 ,
205
+ IsForbiddenDomainCodePoint,
206
+ IsForbiddenHostCodePoint (ch) || IsC0Control(ch) || ch == '%' ||
207
+ ch == '\x7f')
199
208
200
209
// https://url.spec.whatwg.org/#windows-drive-letter
201
210
TWO_CHAR_STRING_TEST(8 , IsWindowsDriveLetter,
@@ -483,7 +492,7 @@ void URLHost::ParseOpaqueHost(const char* input, size_t length) {
483
492
output.reserve (length);
484
493
for (size_t i = 0 ; i < length; i++) {
485
494
const char ch = input[i];
486
- if (ch != ' % ' && IsForbiddenHostCodePoint (ch)) {
495
+ if (IsForbiddenHostCodePoint (ch)) {
487
496
return ;
488
497
} else {
489
498
AppendOrEscape (&output, ch, C0_CONTROL_ENCODE_SET);
@@ -522,7 +531,7 @@ void URLHost::ParseHost(const char* input,
522
531
// If any of the following characters are still present, we have to fail
523
532
for (size_t n = 0 ; n < decoded.size (); n++) {
524
533
const char ch = decoded[n];
525
- if (IsForbiddenHostCodePoint (ch)) {
534
+ if (IsForbiddenDomainCodePoint (ch)) {
526
535
return ;
527
536
}
528
537
}
0 commit comments