arguments in EXTENDCIRCUIT were reversed

and an error message was misleading
and we were leaking memory on some errors
more bugs remain


svn:r4585
This commit is contained in:
Roger Dingledine 2005-07-17 21:06:00 +00:00
parent 2cff73e7a4
commit fe7535c5e2

View File

@ -1383,25 +1383,26 @@ handle_control_extendcircuit(connection_t *conn, uint32_t len,
goto done;
}
}
} else {
} else { /* v1 */
smartlist_t *args;
args = smartlist_create();
smartlist_split_string(args, body, " ",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
if (smartlist_len(args)<2)
connection_printf_to_buf(conn,"512 Missing argument to ATTACHSTREAM\r\n");
connection_printf_to_buf(conn,"512 Missing argument to EXTENDCIRCUIT\r\n");
smartlist_split_string(router_nicknames, smartlist_get(args,0), ",", 0, 0);
zero_circ = !strcmp("0", (char*)smartlist_get(args,1));
if (!zero_circ && !(circ = get_circ(smartlist_get(args,1)))) {
zero_circ = !strcmp("0", (char*)smartlist_get(args,0));
if (!zero_circ && !(circ = get_circ(smartlist_get(args,0)))) {
connection_printf_to_buf(conn, "552 Unknown circuit \"%s\"\r\n",
(char*)smartlist_get(args, 1));
(char*)smartlist_get(args, 0));
}
smartlist_split_string(router_nicknames, smartlist_get(args,1), ",", 0, 0);
SMARTLIST_FOREACH(args, char *, cp, tor_free(cp));
smartlist_free(args);
if (!zero_circ && !circ)
return 0;
if (!zero_circ && !circ) {
goto done;
}
}
routers = smartlist_create();
@ -1468,7 +1469,8 @@ handle_control_extendcircuit(connection_t *conn, uint32_t len,
done:
SMARTLIST_FOREACH(router_nicknames, char *, n, tor_free(n));
smartlist_free(router_nicknames);
smartlist_free(routers);
if (routers)
smartlist_free(routers);
return 0;
}