Fix bug in get_transport_in_state_by_name() when using strcmpstart().

We now split the state lines into smartlists and compare the token
properly. Not that efficient but it's surely correct.
This commit is contained in:
George Kadianakis 2011-09-11 21:22:37 +02:00
parent 2703e41d8b
commit ebc232bb79

View File

@ -5787,13 +5787,34 @@ get_transport_in_state_by_name(const char *transport)
{
or_state_t *or_state = get_or_state();
config_line_t *line;
config_line_t *ret = NULL;
smartlist_t *items = NULL;
for (line = or_state->TransportProxies ; line ; line = line->next) {
tor_assert(!strcmp(line->key, "TransportProxy"));
if (!strcmpstart(line->value, transport))
return line;
items = smartlist_create();
smartlist_split_string(items, line->value, NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
if (smartlist_len(items) != 2) /* broken state */
goto done;
if (!strcmp(smartlist_get(items, 0), transport)) {
ret = line;
goto done;
}
return NULL;
SMARTLIST_FOREACH(items, char*, s, tor_free(s));
smartlist_free(items);
items = NULL;
}
done:
if (items) {
SMARTLIST_FOREACH(items, char*, s, tor_free(s));
smartlist_free(items);
}
return ret;
}
/** Return string containing the address:port part of the