From e391a497ecc5f6021bbf11c3749ec6425433c365 Mon Sep 17 00:00:00 2001 From: Sebastian Hahn Date: Mon, 22 Feb 2010 10:41:46 +0100 Subject: [PATCH 1/3] Remove some redundand code in control.c Found by coverity --- src/or/control.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/or/control.c b/src/or/control.c index 9840ea6294..b8e07a0c84 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -2125,9 +2125,6 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len, SMARTLIST_FOREACH(args, char *, cp, tor_free(cp)); smartlist_free(args); - if (!zero_circ && !circ) { - goto done; - } routers = smartlist_create(); SMARTLIST_FOREACH(router_nicknames, const char *, n, From dcf85eb158690354b5446bc8603460acc6f86f47 Mon Sep 17 00:00:00 2001 From: Sebastian Hahn Date: Mon, 22 Feb 2010 10:56:54 +0100 Subject: [PATCH 2/3] Fix a memory leak, found by coverity --- src/or/control.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/or/control.c b/src/or/control.c index b8e07a0c84..40ad4a25e1 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -2100,16 +2100,18 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len, if ((smartlist_len(args) == 1) || (smartlist_len(args) >= 2 && is_keyval_pair(smartlist_get(args, 1)))) { - // "EXTENDCIRCUIT 0" || EXTENDCIRCUIT 0 foo=bar" - circ = circuit_launch_by_router(intended_purpose, NULL, - CIRCLAUNCH_NEED_CAPACITY); - if (!circ) { - connection_write_str_to_buf("551 Couldn't start circuit\r\n", conn); - } else { - connection_printf_to_buf(conn, "250 EXTENDED %lu\r\n", - (unsigned long)circ->global_identifier); - } - goto done; + // "EXTENDCIRCUIT 0" || EXTENDCIRCUIT 0 foo=bar" + circ = circuit_launch_by_router(intended_purpose, NULL, + CIRCLAUNCH_NEED_CAPACITY); + if (!circ) { + connection_write_str_to_buf("551 Couldn't start circuit\r\n", conn); + } else { + connection_printf_to_buf(conn, "250 EXTENDED %lu\r\n", + (unsigned long)circ->global_identifier); + } + SMARTLIST_FOREACH(args, char *, cp, tor_free(cp)); + smartlist_free(args); + goto done; } // "EXTENDCIRCUIT 0 router1,router2" || // "EXTENDCIRCUIT 0 router1,router2 PURPOSE=foo" From b65ad83ebea7a454f7eee377069734175e42b244 Mon Sep 17 00:00:00 2001 From: Sebastian Hahn Date: Mon, 22 Feb 2010 10:57:11 +0100 Subject: [PATCH 3/3] Break early on unknown extendcircuit purpose Don't continue handling EXTENDCIRCUIT messages when we get an unknown purpose. --- src/or/control.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/or/control.c b/src/or/control.c index 40ad4a25e1..0f71855286 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -2095,6 +2095,7 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len, connection_printf_to_buf(conn, "552 Unknown purpose \"%s\"\r\n", purp); SMARTLIST_FOREACH(args, char *, cp, tor_free(cp)); smartlist_free(args); + goto done; } }