Simplify hostname validation code

This commit is contained in:
rl1987 2018-02-19 21:08:51 +01:00 committed by Nick Mathewson
parent dbb7c8e6fd
commit ee1fca727c

View File

@ -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;