[tor-commits] [tor/master] Fix bug in get_transport_in_state_by_name() when using strcmpstart().
nickm at torproject.org
nickm at torproject.org
Fri Oct 7 20:03:18 UTC 2011
commit ebc232bb79c8816d17eea75d3a29c1ecb25da0b0
Author: George Kadianakis <desnacked at gmail.com>
Date: Sun Sep 11 21:22:37 2011 +0200
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.
---
src/or/config.c | 27 ++++++++++++++++++++++++---
1 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/src/or/config.c b/src/or/config.c
index bacdae3..792124c 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -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;
+ }
+
+ 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
More information about the tor-commits
mailing list