mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
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:
parent
2703e41d8b
commit
ebc232bb79
@ -5787,13 +5787,34 @@ get_transport_in_state_by_name(const char *transport)
|
|||||||
{
|
{
|
||||||
or_state_t *or_state = get_or_state();
|
or_state_t *or_state = get_or_state();
|
||||||
config_line_t *line;
|
config_line_t *line;
|
||||||
|
config_line_t *ret = NULL;
|
||||||
|
smartlist_t *items = NULL;
|
||||||
|
|
||||||
for (line = or_state->TransportProxies ; line ; line = line->next) {
|
for (line = or_state->TransportProxies ; line ; line = line->next) {
|
||||||
tor_assert(!strcmp(line->key, "TransportProxy"));
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
SMARTLIST_FOREACH(items, char*, s, tor_free(s));
|
||||||
|
smartlist_free(items);
|
||||||
|
items = NULL;
|
||||||
}
|
}
|
||||||
return 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
|
/** Return string containing the address:port part of the
|
||||||
|
Loading…
Reference in New Issue
Block a user