mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
Simplify hostname validation code
This commit is contained in:
parent
dbb7c8e6fd
commit
ee1fca727c
@ -1113,6 +1113,9 @@ string_is_valid_hostname(const char *string)
|
|||||||
if (!string || strlen(string) == 0)
|
if (!string || strlen(string) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (string_is_valid_ipv4_address(string))
|
||||||
|
return 0;
|
||||||
|
|
||||||
components = smartlist_new();
|
components = smartlist_new();
|
||||||
|
|
||||||
smartlist_split_string(components,string,".",0,0);
|
smartlist_split_string(components,string,".",0,0);
|
||||||
@ -1134,25 +1137,10 @@ string_is_valid_hostname(const char *string)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c_sl_idx == c_sl_len - 1) { // TLD validation.
|
do {
|
||||||
int is_punycode = (strlen(c) > 4 &&
|
result = (TOR_ISALNUM(*c) || (*c == '-') || (*c == '_'));
|
||||||
(c[0] == 'X' || c[0] == 'x') &&
|
c++;
|
||||||
(c[1] == 'N' || c[1] == 'n') &&
|
} while (result > 0 && *c);
|
||||||
c[2] == '-' && c[3] == '-');
|
|
||||||
|
|
||||||
if (is_punycode)
|
|
||||||
c += 4;
|
|
||||||
|
|
||||||
do {
|
|
||||||
result = is_punycode ? TOR_ISALNUM(*c) : TOR_ISALPHA(*c);
|
|
||||||
c++;
|
|
||||||
} while (result && *c);
|
|
||||||
} else { // Regular hostname label validation.
|
|
||||||
do {
|
|
||||||
result = (TOR_ISALNUM(*c) || (*c == '-') || (*c == '_'));
|
|
||||||
c++;
|
|
||||||
} while (result > 0 && *c);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user