Try to use smartlist_add_asprintf consistently

(To ensure correctness, in every case, make sure that the temporary
variable is deleted, renamed, or lowered in scope, so we can't have
any bugs related to accidentally relying on the no-longer-filled
variable.)
This commit is contained in:
Nick Mathewson 2012-01-11 13:44:10 -05:00
parent 9c6d913b9e
commit edcc9981d8
11 changed files with 92 additions and 160 deletions

3
changes/clean_asprintf Normal file
View File

@ -0,0 +1,3 @@
o Code simplifications and refactoring
- Use the smartlist_add_asprintf alias more consistently
throughout the codebase.

View File

@ -1545,15 +1545,13 @@ circuit_list_path_impl(origin_circuit_t *circ, int verbose, int verbose_names)
if (verbose) { if (verbose) {
const char *nickname = build_state_get_exit_nickname(circ->build_state); const char *nickname = build_state_get_exit_nickname(circ->build_state);
char *cp; smartlist_add_asprintf(elements, "%s%s circ (length %d%s%s):",
tor_asprintf(&cp, "%s%s circ (length %d%s%s):",
circ->build_state->is_internal ? "internal" : "exit", circ->build_state->is_internal ? "internal" : "exit",
circ->build_state->need_uptime ? " (high-uptime)" : "", circ->build_state->need_uptime ? " (high-uptime)" : "",
circ->build_state->desired_path_len, circ->build_state->desired_path_len,
circ->_base.state == CIRCUIT_STATE_OPEN ? "" : ", last hop ", circ->_base.state == CIRCUIT_STATE_OPEN ? "" : ", last hop ",
circ->_base.state == CIRCUIT_STATE_OPEN ? "" : circ->_base.state == CIRCUIT_STATE_OPEN ? "" :
(nickname?nickname:"*unnamed*")); (nickname?nickname:"*unnamed*"));
smartlist_add(elements, cp);
} }
hop = circ->cpath; hop = circ->cpath;
@ -3599,19 +3597,17 @@ log_entry_guards(int severity)
SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e)
{ {
const char *msg = NULL; const char *msg = NULL;
char *cp;
if (entry_is_live(e, 0, 1, 0, &msg)) if (entry_is_live(e, 0, 1, 0, &msg))
tor_asprintf(&cp, "%s [%s] (up %s)", smartlist_add_asprintf(elements, "%s [%s] (up %s)",
e->nickname, e->nickname,
hex_str(e->identity, DIGEST_LEN), hex_str(e->identity, DIGEST_LEN),
e->made_contact ? "made-contact" : "never-contacted"); e->made_contact ? "made-contact" : "never-contacted");
else else
tor_asprintf(&cp, "%s [%s] (%s, %s)", smartlist_add_asprintf(elements, "%s [%s] (%s, %s)",
e->nickname, e->nickname,
hex_str(e->identity, DIGEST_LEN), hex_str(e->identity, DIGEST_LEN),
msg, msg,
e->made_contact ? "made-contact" : "never-contacted"); e->made_contact ? "made-contact" : "never-contacted");
smartlist_add(elements, cp);
} }
SMARTLIST_FOREACH_END(e); SMARTLIST_FOREACH_END(e);

View File

@ -3147,11 +3147,9 @@ config_dump(const config_format_t *fmt, const void *default_options,
line = assigned = get_assigned_option(fmt, options, fmt->vars[i].name, 1); line = assigned = get_assigned_option(fmt, options, fmt->vars[i].name, 1);
for (; line; line = line->next) { for (; line; line = line->next) {
char *tmp; smartlist_add_asprintf(elements, "%s%s %s\n",
tor_asprintf(&tmp, "%s%s %s\n",
comment_option ? "# " : "", comment_option ? "# " : "",
line->key, line->value); line->key, line->value);
smartlist_add(elements, tmp);
} }
config_free_lines(assigned); config_free_lines(assigned);
} }
@ -3159,9 +3157,7 @@ config_dump(const config_format_t *fmt, const void *default_options,
if (fmt->extra) { if (fmt->extra) {
line = *(config_line_t**)STRUCT_VAR_P(options, fmt->extra->var_offset); line = *(config_line_t**)STRUCT_VAR_P(options, fmt->extra->var_offset);
for (; line; line = line->next) { for (; line; line = line->next) {
char *tmp; smartlist_add_asprintf(elements, "%s %s\n", line->key, line->value);
tor_asprintf(&tmp, "%s %s\n", line->key, line->value);
smartlist_add(elements, tmp);
} }
} }
@ -6994,7 +6990,6 @@ getinfo_helper_config(control_connection_t *conn,
for (i = 0; _option_vars[i].name; ++i) { for (i = 0; _option_vars[i].name; ++i) {
const config_var_t *var = &_option_vars[i]; const config_var_t *var = &_option_vars[i];
const char *type; const char *type;
char *line;
switch (var->type) { switch (var->type) {
case CONFIG_TYPE_STRING: type = "String"; break; case CONFIG_TYPE_STRING: type = "String"; break;
case CONFIG_TYPE_FILENAME: type = "Filename"; break; case CONFIG_TYPE_FILENAME: type = "Filename"; break;
@ -7018,8 +7013,7 @@ getinfo_helper_config(control_connection_t *conn,
} }
if (!type) if (!type)
continue; continue;
tor_asprintf(&line, "%s %s\n",var->name,type); smartlist_add_asprintf(sl, "%s %s\n",var->name,type);
smartlist_add(sl, line);
} }
*answer = smartlist_join_strings(sl, "", 0, NULL); *answer = smartlist_join_strings(sl, "", 0, NULL);
SMARTLIST_FOREACH(sl, char *, c, tor_free(c)); SMARTLIST_FOREACH(sl, char *, c, tor_free(c));

View File

@ -525,18 +525,15 @@ control_ports_write_to_file(void)
lines = smartlist_create(); lines = smartlist_create();
SMARTLIST_FOREACH_BEGIN(get_connection_array(), const connection_t *, conn) { SMARTLIST_FOREACH_BEGIN(get_connection_array(), const connection_t *, conn) {
char *port_str = NULL;
if (conn->type != CONN_TYPE_CONTROL_LISTENER || conn->marked_for_close) if (conn->type != CONN_TYPE_CONTROL_LISTENER || conn->marked_for_close)
continue; continue;
#ifdef AF_UNIX #ifdef AF_UNIX
if (conn->socket_family == AF_UNIX) { if (conn->socket_family == AF_UNIX) {
tor_asprintf(&port_str, "UNIX_PORT=%s\n", conn->address); smartlist_add_asprintf(lines, "UNIX_PORT=%s\n", conn->address);
smartlist_add(lines, port_str);
continue; continue;
} }
#endif #endif
tor_asprintf(&port_str, "PORT=%s:%d\n", conn->address, conn->port); smartlist_add_asprintf(lines, "PORT=%s:%d\n", conn->address, conn->port);
smartlist_add(lines, port_str);
} SMARTLIST_FOREACH_END(conn); } SMARTLIST_FOREACH_END(conn);
joined = smartlist_join_strings(lines, "", 0, NULL); joined = smartlist_join_strings(lines, "", 0, NULL);
@ -1558,7 +1555,6 @@ getinfo_helper_listeners(control_connection_t *control_conn,
res = smartlist_create(); res = smartlist_create();
SMARTLIST_FOREACH_BEGIN(get_connection_array(), connection_t *, conn) { SMARTLIST_FOREACH_BEGIN(get_connection_array(), connection_t *, conn) {
char *addr;
struct sockaddr_storage ss; struct sockaddr_storage ss;
socklen_t ss_len = sizeof(ss); socklen_t ss_len = sizeof(ss);
@ -1566,14 +1562,13 @@ getinfo_helper_listeners(control_connection_t *control_conn,
continue; continue;
if (getsockname(conn->s, (struct sockaddr *)&ss, &ss_len) < 0) { if (getsockname(conn->s, (struct sockaddr *)&ss, &ss_len) < 0) {
tor_asprintf(&addr, "%s:%d", conn->address, (int)conn->port); smartlist_add_asprintf(res, "%s:%d", conn->address, (int)conn->port);
} else { } else {
char *tmp = tor_sockaddr_to_str((struct sockaddr *)&ss); char *tmp = tor_sockaddr_to_str((struct sockaddr *)&ss);
addr = esc_for_log(tmp); smartlist_add(res, esc_for_log(tmp));
tor_free(tmp); tor_free(tmp);
} }
if (addr)
smartlist_add(res, addr);
} SMARTLIST_FOREACH_END(conn); } SMARTLIST_FOREACH_END(conn);
*answer = smartlist_join_strings(res, " ", 0, NULL); *answer = smartlist_join_strings(res, " ", 0, NULL);
@ -1798,7 +1793,6 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
} }
{ {
char *buildflags = NULL;
cpath_build_state_t *build_state = circ->build_state; cpath_build_state_t *build_state = circ->build_state;
smartlist_t *flaglist = smartlist_create(); smartlist_t *flaglist = smartlist_create();
char *flaglist_joined; char *flaglist_joined;
@ -1816,8 +1810,7 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
if (smartlist_len(flaglist)) { if (smartlist_len(flaglist)) {
flaglist_joined = smartlist_join_strings(flaglist, ",", 0, NULL); flaglist_joined = smartlist_join_strings(flaglist, ",", 0, NULL);
tor_asprintf(&buildflags, "BUILD_FLAGS=%s", flaglist_joined); smartlist_add_asprintf(descparts, "BUILD_FLAGS=%s", flaglist_joined);
smartlist_add(descparts, buildflags);
tor_free(flaglist_joined); tor_free(flaglist_joined);
} }
@ -1825,43 +1818,29 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
smartlist_free(flaglist); smartlist_free(flaglist);
} }
{ smartlist_add_asprintf(descparts, "PURPOSE=%s",
char *purpose = NULL; circuit_purpose_to_controller_string(circ->_base.purpose));
tor_asprintf(&purpose, "PURPOSE=%s",
circuit_purpose_to_controller_string(circ->_base.purpose));
smartlist_add(descparts, purpose);
}
{ {
char *hs_state_arg = NULL;
const char *hs_state = const char *hs_state =
circuit_purpose_to_controller_hs_state_string(circ->_base.purpose); circuit_purpose_to_controller_hs_state_string(circ->_base.purpose);
if (hs_state != NULL) { if (hs_state != NULL) {
tor_asprintf(&hs_state_arg, "HS_STATE=%s", smartlist_add_asprintf(descparts, "HS_STATE=%s", hs_state);
hs_state);
smartlist_add(descparts, hs_state_arg);
} }
} }
if (circ->rend_data != NULL) { if (circ->rend_data != NULL) {
char *rend_query_arg = NULL; smartlist_add_asprintf(descparts, "REND_QUERY=%s",
tor_asprintf(&rend_query_arg, "REND_QUERY=%s",
circ->rend_data->onion_address); circ->rend_data->onion_address);
smartlist_add(descparts, rend_query_arg);
} }
{ {
char *time_created_arg = NULL;
char tbuf[ISO_TIME_USEC_LEN+1]; char tbuf[ISO_TIME_USEC_LEN+1];
format_iso_time_nospace_usec(tbuf, &circ->_base.timestamp_created); format_iso_time_nospace_usec(tbuf, &circ->_base.timestamp_created);
tor_asprintf(&time_created_arg, "TIME_CREATED=%s", tbuf); smartlist_add_asprintf(descparts, "TIME_CREATED=%s", tbuf);
smartlist_add(descparts, time_created_arg);
} }
rv = smartlist_join_strings(descparts, " ", 0, NULL); rv = smartlist_join_strings(descparts, " ", 0, NULL);
@ -2218,18 +2197,16 @@ static char *
list_getinfo_options(void) list_getinfo_options(void)
{ {
int i; int i;
char *buf=NULL;
smartlist_t *lines = smartlist_create(); smartlist_t *lines = smartlist_create();
char *ans; char *ans;
for (i = 0; getinfo_items[i].varname; ++i) { for (i = 0; getinfo_items[i].varname; ++i) {
if (!getinfo_items[i].desc) if (!getinfo_items[i].desc)
continue; continue;
tor_asprintf(&buf, "%s%s -- %s\n", smartlist_add_asprintf(lines, "%s%s -- %s\n",
getinfo_items[i].varname, getinfo_items[i].varname,
getinfo_items[i].is_prefix ? "*" : "", getinfo_items[i].is_prefix ? "*" : "",
getinfo_items[i].desc); getinfo_items[i].desc);
smartlist_add(lines, buf);
} }
smartlist_sort_strings(lines); smartlist_sort_strings(lines);

View File

@ -1124,7 +1124,6 @@ directory_send_command(dir_connection_t *conn,
smartlist_t *headers = smartlist_create(); smartlist_t *headers = smartlist_create();
char *url; char *url;
char request[8192]; char request[8192];
char *header;
const char *httpcommand = NULL; const char *httpcommand = NULL;
size_t len; size_t len;
@ -1147,8 +1146,7 @@ directory_send_command(dir_connection_t *conn,
if (if_modified_since) { if (if_modified_since) {
char b[RFC1123_TIME_LEN+1]; char b[RFC1123_TIME_LEN+1];
format_rfc1123_time(b, if_modified_since); format_rfc1123_time(b, if_modified_since);
tor_asprintf(&header, "If-Modified-Since: %s\r\n", b); smartlist_add_asprintf(headers, "If-Modified-Since: %s\r\n", b);
smartlist_add(headers, header);
} }
/* come up with some proxy lines, if we're using one. */ /* come up with some proxy lines, if we're using one. */
@ -1163,11 +1161,10 @@ directory_send_command(dir_connection_t *conn,
log_warn(LD_BUG, "Encoding http authenticator failed"); log_warn(LD_BUG, "Encoding http authenticator failed");
} }
if (base64_authenticator) { if (base64_authenticator) {
tor_asprintf(&header, smartlist_add_asprintf(headers,
"Proxy-Authorization: Basic %s\r\n", "Proxy-Authorization: Basic %s\r\n",
base64_authenticator); base64_authenticator);
tor_free(base64_authenticator); tor_free(base64_authenticator);
smartlist_add(headers, header);
} }
} else { } else {
proxystring[0] = 0; proxystring[0] = 0;
@ -1238,8 +1235,7 @@ directory_send_command(dir_connection_t *conn,
httpcommand = "POST"; httpcommand = "POST";
url = tor_strdup("/tor/"); url = tor_strdup("/tor/");
if (why) { if (why) {
tor_asprintf(&header, "X-Desc-Gen-Reason: %s\r\n", why); smartlist_add_asprintf(headers, "X-Desc-Gen-Reason: %s\r\n", why);
smartlist_add(headers, header);
} }
break; break;
} }
@ -1294,15 +1290,16 @@ directory_send_command(dir_connection_t *conn,
tor_free(url); tor_free(url);
if (!strcmp(httpcommand, "POST") || payload) { if (!strcmp(httpcommand, "POST") || payload) {
tor_asprintf(&header, "Content-Length: %lu\r\n", smartlist_add_asprintf(headers, "Content-Length: %lu\r\n",
payload ? (unsigned long)payload_len : 0); payload ? (unsigned long)payload_len : 0);
smartlist_add(headers, header);
} }
header = smartlist_join_strings(headers, "", 0, NULL); {
tor_snprintf(request, sizeof(request), " HTTP/1.0\r\nHost: %s\r\n%s\r\n", char *header = smartlist_join_strings(headers, "", 0, NULL);
hoststring, header); tor_snprintf(request, sizeof(request), " HTTP/1.0\r\nHost: %s\r\n%s\r\n",
tor_free(header); hoststring, header);
tor_free(header);
}
connection_write_to_buf(request, strlen(request), TO_CONN(conn)); connection_write_to_buf(request, strlen(request), TO_CONN(conn));

View File

@ -1475,7 +1475,6 @@ networkstatus_compute_consensus(smartlist_t *votes,
chunks = smartlist_create(); chunks = smartlist_create();
{ {
char *buf=NULL;
char va_buf[ISO_TIME_LEN+1], fu_buf[ISO_TIME_LEN+1], char va_buf[ISO_TIME_LEN+1], fu_buf[ISO_TIME_LEN+1],
vu_buf[ISO_TIME_LEN+1]; vu_buf[ISO_TIME_LEN+1];
char *flaglist; char *flaglist;
@ -1484,20 +1483,17 @@ networkstatus_compute_consensus(smartlist_t *votes,
format_iso_time(vu_buf, valid_until); format_iso_time(vu_buf, valid_until);
flaglist = smartlist_join_strings(flags, " ", 0, NULL); flaglist = smartlist_join_strings(flags, " ", 0, NULL);
tor_asprintf(&buf, "network-status-version 3%s%s\n" smartlist_add_asprintf(chunks, "network-status-version 3%s%s\n"
"vote-status consensus\n", "vote-status consensus\n",
flavor == FLAV_NS ? "" : " ", flavor == FLAV_NS ? "" : " ",
flavor == FLAV_NS ? "" : flavor_name); flavor == FLAV_NS ? "" : flavor_name);
smartlist_add(chunks, buf);
if (consensus_method >= 2) { if (consensus_method >= 2) {
tor_asprintf(&buf, "consensus-method %d\n", smartlist_add_asprintf(chunks, "consensus-method %d\n",
consensus_method); consensus_method);
smartlist_add(chunks, buf);
} }
tor_asprintf(&buf, smartlist_add_asprintf(chunks,
"valid-after %s\n" "valid-after %s\n"
"fresh-until %s\n" "fresh-until %s\n"
"valid-until %s\n" "valid-until %s\n"
@ -1508,7 +1504,6 @@ networkstatus_compute_consensus(smartlist_t *votes,
va_buf, fu_buf, vu_buf, va_buf, fu_buf, vu_buf,
vote_seconds, dist_seconds, vote_seconds, dist_seconds,
client_versions, server_versions, flaglist); client_versions, server_versions, flaglist);
smartlist_add(chunks, buf);
tor_free(flaglist); tor_free(flaglist);
} }
@ -1550,7 +1545,6 @@ networkstatus_compute_consensus(smartlist_t *votes,
char votedigest[HEX_DIGEST_LEN+1]; char votedigest[HEX_DIGEST_LEN+1];
networkstatus_t *v = e->v; networkstatus_t *v = e->v;
networkstatus_voter_info_t *voter = get_voter(v); networkstatus_voter_info_t *voter = get_voter(v);
char *buf = NULL;
if (e->is_legacy) if (e->is_legacy)
tor_assert(consensus_method >= 2); tor_assert(consensus_method >= 2);
@ -1559,20 +1553,18 @@ networkstatus_compute_consensus(smartlist_t *votes,
base16_encode(votedigest, sizeof(votedigest), voter->vote_digest, base16_encode(votedigest, sizeof(votedigest), voter->vote_digest,
DIGEST_LEN); DIGEST_LEN);
tor_asprintf(&buf, smartlist_add_asprintf(chunks,
"dir-source %s%s %s %s %s %d %d\n", "dir-source %s%s %s %s %s %d %d\n",
voter->nickname, e->is_legacy ? "-legacy" : "", voter->nickname, e->is_legacy ? "-legacy" : "",
fingerprint, voter->address, fmt_addr32(voter->addr), fingerprint, voter->address, fmt_addr32(voter->addr),
voter->dir_port, voter->dir_port,
voter->or_port); voter->or_port);
smartlist_add(chunks, buf);
if (! e->is_legacy) { if (! e->is_legacy) {
tor_asprintf(&buf, smartlist_add_asprintf(chunks,
"contact %s\n" "contact %s\n"
"vote-digest %s\n", "vote-digest %s\n",
voter->contact, voter->contact,
votedigest); votedigest);
smartlist_add(chunks, buf);
} }
} SMARTLIST_FOREACH_END(e); } SMARTLIST_FOREACH_END(e);
SMARTLIST_FOREACH(dir_sources, dir_src_ent_t *, e, tor_free(e)); SMARTLIST_FOREACH(dir_sources, dir_src_ent_t *, e, tor_free(e));
@ -1709,7 +1701,6 @@ networkstatus_compute_consensus(smartlist_t *votes,
int naming_conflict = 0; int naming_conflict = 0;
int n_listing = 0; int n_listing = 0;
int i; int i;
char *buf=NULL;
char microdesc_digest[DIGEST256_LEN]; char microdesc_digest[DIGEST256_LEN];
/* Of the next-to-be-considered digest in each voter, which is first? */ /* Of the next-to-be-considered digest in each voter, which is first? */
@ -1977,10 +1968,9 @@ networkstatus_compute_consensus(smartlist_t *votes,
/* Now an m line, if applicable. */ /* Now an m line, if applicable. */
if (flavor == FLAV_MICRODESC && if (flavor == FLAV_MICRODESC &&
!tor_digest256_is_zero(microdesc_digest)) { !tor_digest256_is_zero(microdesc_digest)) {
char m[BASE64_DIGEST256_LEN+1], *cp; char m[BASE64_DIGEST256_LEN+1];
digest256_to_base64(m, microdesc_digest); digest256_to_base64(m, microdesc_digest);
tor_asprintf(&cp, "m %s\n", m); smartlist_add_asprintf(chunks, "m %s\n", m);
smartlist_add(chunks, cp);
} }
/* Next line is all flags. The "\n" is missing. */ /* Next line is all flags. The "\n" is missing. */
smartlist_add(chunks, smartlist_add(chunks,
@ -1993,15 +1983,12 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_add(chunks, tor_strdup("\n")); smartlist_add(chunks, tor_strdup("\n"));
/* Now the weight line. */ /* Now the weight line. */
if (rs_out.has_bandwidth) { if (rs_out.has_bandwidth) {
char *cp=NULL; smartlist_add_asprintf(chunks, "w Bandwidth=%d\n", rs_out.bandwidth);
tor_asprintf(&cp, "w Bandwidth=%d\n", rs_out.bandwidth);
smartlist_add(chunks, cp);
} }
/* Now the exitpolicy summary line. */ /* Now the exitpolicy summary line. */
if (rs_out.has_exitsummary && flavor == FLAV_NS) { if (rs_out.has_exitsummary && flavor == FLAV_NS) {
tor_asprintf(&buf, "p %s\n", rs_out.exitsummary); smartlist_add_asprintf(chunks, "p %s\n", rs_out.exitsummary);
smartlist_add(chunks, buf);
} }
/* And the loop is over and we move on to the next router */ /* And the loop is over and we move on to the next router */
@ -2083,7 +2070,6 @@ networkstatus_compute_consensus(smartlist_t *votes,
size_t digest_len = size_t digest_len =
flavor == FLAV_NS ? DIGEST_LEN : DIGEST256_LEN; flavor == FLAV_NS ? DIGEST_LEN : DIGEST256_LEN;
const char *algname = crypto_digest_algorithm_get_name(digest_alg); const char *algname = crypto_digest_algorithm_get_name(digest_alg);
char *buf = NULL;
char sigbuf[4096]; char sigbuf[4096];
smartlist_add(chunks, tor_strdup("directory-signature ")); smartlist_add(chunks, tor_strdup("directory-signature "));
@ -2097,14 +2083,13 @@ networkstatus_compute_consensus(smartlist_t *votes,
/* add the junk that will go at the end of the line. */ /* add the junk that will go at the end of the line. */
if (flavor == FLAV_NS) { if (flavor == FLAV_NS) {
tor_asprintf(&buf, "%s %s\n", fingerprint, smartlist_add_asprintf(chunks, "%s %s\n", fingerprint,
signing_key_fingerprint); signing_key_fingerprint);
} else { } else {
tor_asprintf(&buf, "%s %s %s\n", smartlist_add_asprintf(chunks, "%s %s %s\n",
algname, fingerprint, algname, fingerprint,
signing_key_fingerprint); signing_key_fingerprint);
} }
smartlist_add(chunks, buf);
/* And the signature. */ /* And the signature. */
sigbuf[0] = '\0'; sigbuf[0] = '\0';
if (router_append_dirobj_signature(sigbuf, sizeof(sigbuf), if (router_append_dirobj_signature(sigbuf, sizeof(sigbuf),
@ -2122,14 +2107,13 @@ networkstatus_compute_consensus(smartlist_t *votes,
crypto_pk_get_fingerprint(legacy_signing_key, crypto_pk_get_fingerprint(legacy_signing_key,
signing_key_fingerprint, 0); signing_key_fingerprint, 0);
if (flavor == FLAV_NS) { if (flavor == FLAV_NS) {
tor_asprintf(&buf, "%s %s\n", fingerprint, smartlist_add_asprintf(chunks, "%s %s\n", fingerprint,
signing_key_fingerprint); signing_key_fingerprint);
} else { } else {
tor_asprintf(&buf, "%s %s %s\n", smartlist_add_asprintf(chunks, "%s %s %s\n",
algname, fingerprint, algname, fingerprint,
signing_key_fingerprint); signing_key_fingerprint);
} }
smartlist_add(chunks, buf);
sigbuf[0] = '\0'; sigbuf[0] = '\0';
if (router_append_dirobj_signature(sigbuf, sizeof(sigbuf), if (router_append_dirobj_signature(sigbuf, sizeof(sigbuf),
digest, digest_len, digest, digest_len,

View File

@ -856,9 +856,7 @@ geoip_get_client_history(geoip_client_action_t action)
/* Build the result. */ /* Build the result. */
chunks = smartlist_create(); chunks = smartlist_create();
SMARTLIST_FOREACH(entries, c_hist_t *, ch, { SMARTLIST_FOREACH(entries, c_hist_t *, ch, {
char *buf=NULL; smartlist_add_asprintf(chunks, "%s=%u", ch->country, ch->total);
tor_asprintf(&buf, "%s=%u", ch->country, ch->total);
smartlist_add(chunks, buf);
}); });
result = smartlist_join_strings(chunks, ",", 0, NULL); result = smartlist_join_strings(chunks, ",", 0, NULL);
done: done:
@ -907,10 +905,8 @@ geoip_get_request_history(geoip_client_action_t action)
strings = smartlist_create(); strings = smartlist_create();
SMARTLIST_FOREACH(entries, c_hist_t *, ent, { SMARTLIST_FOREACH(entries, c_hist_t *, ent, {
char *buf = NULL; smartlist_add_asprintf(strings, "%s=%u", ent->country, ent->total);
tor_asprintf(&buf, "%s=%u", ent->country, ent->total); });
smartlist_add(strings, buf);
});
result = smartlist_join_strings(strings, ",", 0, NULL); result = smartlist_join_strings(strings, ",", 0, NULL);
SMARTLIST_FOREACH(strings, char *, cp, tor_free(cp)); SMARTLIST_FOREACH(strings, char *, cp, tor_free(cp));
SMARTLIST_FOREACH(entries, c_hist_t *, ent, tor_free(ent)); SMARTLIST_FOREACH(entries, c_hist_t *, ent, tor_free(ent));

View File

@ -598,39 +598,38 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
hex_str(ds->v3_identity_digest, DIGEST_LEN)); hex_str(ds->v3_identity_digest, DIGEST_LEN));
}); });
{ {
char *joined;
smartlist_t *sl = smartlist_create(); smartlist_t *sl = smartlist_create();
char *cp;
char *tmp = smartlist_join_strings(list_good, " ", 0, NULL); char *tmp = smartlist_join_strings(list_good, " ", 0, NULL);
tor_asprintf(&cp, "A consensus needs %d good signatures from recognized " smartlist_add_asprintf(sl,
"A consensus needs %d good signatures from recognized "
"authorities for us to accept it. This one has %d (%s).", "authorities for us to accept it. This one has %d (%s).",
n_required, n_good, tmp); n_required, n_good, tmp);
tor_free(tmp); tor_free(tmp);
smartlist_add(sl,cp);
if (n_no_signature) { if (n_no_signature) {
tmp = smartlist_join_strings(list_no_signature, " ", 0, NULL); tmp = smartlist_join_strings(list_no_signature, " ", 0, NULL);
tor_asprintf(&cp, "%d (%s) of the authorities we know didn't sign it.", smartlist_add_asprintf(sl,
"%d (%s) of the authorities we know didn't sign it.",
n_no_signature, tmp); n_no_signature, tmp);
tor_free(tmp); tor_free(tmp);
smartlist_add(sl,cp);
} }
if (n_unknown) { if (n_unknown) {
tor_asprintf(&cp, "It has %d signatures from authorities we don't " smartlist_add_asprintf(sl,
"It has %d signatures from authorities we don't "
"recognize.", n_unknown); "recognize.", n_unknown);
smartlist_add(sl,cp);
} }
if (n_bad) { if (n_bad) {
tor_asprintf(&cp, "%d of the signatures on it didn't verify " smartlist_add_asprintf(sl, "%d of the signatures on it didn't verify "
"correctly.", n_bad); "correctly.", n_bad);
smartlist_add(sl,cp);
} }
if (n_missing_key) { if (n_missing_key) {
tor_asprintf(&cp, "We were unable to check %d of the signatures, " smartlist_add_asprintf(sl,
"We were unable to check %d of the signatures, "
"because we were missing the keys.", n_missing_key); "because we were missing the keys.", n_missing_key);
smartlist_add(sl,cp);
} }
cp = smartlist_join_strings(sl, " ", 0, NULL); joined = smartlist_join_strings(sl, " ", 0, NULL);
log(severity, LD_DIR, "%s", cp); log(severity, LD_DIR, "%s", joined);
tor_free(cp); tor_free(joined);
SMARTLIST_FOREACH(sl, char *, c, tor_free(c)); SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
smartlist_free(sl); smartlist_free(sl);
} }

View File

@ -1588,7 +1588,6 @@ rep_hist_update_bwhist_state_section(or_state_t *state,
time_t *s_begins, time_t *s_begins,
int *s_interval) int *s_interval)
{ {
char *cp;
int i,j; int i,j;
uint64_t maxval; uint64_t maxval;
@ -1626,17 +1625,17 @@ rep_hist_update_bwhist_state_section(or_state_t *state,
for (j=0; j < b->num_maxes_set; ++j,++i) { for (j=0; j < b->num_maxes_set; ++j,++i) {
if (i >= NUM_TOTALS) if (i >= NUM_TOTALS)
i = 0; i = 0;
tor_asprintf(&cp, U64_FORMAT, U64_PRINTF_ARG(b->totals[i] & ~0x3ff)); smartlist_add_asprintf(*s_values, U64_FORMAT,
smartlist_add(*s_values, cp); U64_PRINTF_ARG(b->totals[i] & ~0x3ff));
maxval = b->maxima[i] / NUM_SECS_ROLLING_MEASURE; maxval = b->maxima[i] / NUM_SECS_ROLLING_MEASURE;
tor_asprintf(&cp, U64_FORMAT, U64_PRINTF_ARG(maxval & ~0x3ff)); smartlist_add_asprintf(*s_maxima, U64_FORMAT,
smartlist_add(*s_maxima, cp); U64_PRINTF_ARG(maxval & ~0x3ff));
} }
tor_asprintf(&cp, U64_FORMAT, U64_PRINTF_ARG(b->total_in_period & ~0x3ff)); smartlist_add_asprintf(*s_values, U64_FORMAT,
smartlist_add(*s_values, cp); U64_PRINTF_ARG(b->total_in_period & ~0x3ff));
maxval = b->max_total / NUM_SECS_ROLLING_MEASURE; maxval = b->max_total / NUM_SECS_ROLLING_MEASURE;
tor_asprintf(&cp, U64_FORMAT, U64_PRINTF_ARG(maxval & ~0x3ff)); smartlist_add_asprintf(*s_maxima, U64_FORMAT,
smartlist_add(*s_maxima, cp); U64_PRINTF_ARG(maxval & ~0x3ff));
} }
/** Update <b>state</b> with the newest bandwidth history. Done before /** Update <b>state</b> with the newest bandwidth history. Done before
@ -2125,7 +2124,6 @@ rep_hist_format_exit_stats(time_t now)
uint64_t cur_bytes = 0, other_read = 0, other_written = 0, uint64_t cur_bytes = 0, other_read = 0, other_written = 0,
total_read = 0, total_written = 0; total_read = 0, total_written = 0;
uint32_t total_streams = 0, other_streams = 0; uint32_t total_streams = 0, other_streams = 0;
char *buf;
smartlist_t *written_strings, *read_strings, *streams_strings; smartlist_t *written_strings, *read_strings, *streams_strings;
char *written_string, *read_string, *streams_string; char *written_string, *read_string, *streams_string;
char t[ISO_TIME_LEN+1]; char t[ISO_TIME_LEN+1];
@ -2204,9 +2202,8 @@ rep_hist_format_exit_stats(time_t now)
exit_bytes_written[cur_port], exit_bytes_written[cur_port],
EXIT_STATS_ROUND_UP_BYTES); EXIT_STATS_ROUND_UP_BYTES);
num /= 1024; num /= 1024;
buf = NULL; smartlist_add_asprintf(written_strings, "%d="U64_FORMAT,
tor_asprintf(&buf, "%d="U64_FORMAT, cur_port, U64_PRINTF_ARG(num)); cur_port, U64_PRINTF_ARG(num));
smartlist_add(written_strings, buf);
other_written -= exit_bytes_written[cur_port]; other_written -= exit_bytes_written[cur_port];
} }
if (exit_bytes_read[cur_port] > 0) { if (exit_bytes_read[cur_port] > 0) {
@ -2214,18 +2211,15 @@ rep_hist_format_exit_stats(time_t now)
exit_bytes_read[cur_port], exit_bytes_read[cur_port],
EXIT_STATS_ROUND_UP_BYTES); EXIT_STATS_ROUND_UP_BYTES);
num /= 1024; num /= 1024;
buf = NULL; smartlist_add_asprintf(read_strings, "%d="U64_FORMAT,
tor_asprintf(&buf, "%d="U64_FORMAT, cur_port, U64_PRINTF_ARG(num)); cur_port, U64_PRINTF_ARG(num));
smartlist_add(read_strings, buf);
other_read -= exit_bytes_read[cur_port]; other_read -= exit_bytes_read[cur_port];
} }
if (exit_streams[cur_port] > 0) { if (exit_streams[cur_port] > 0) {
uint32_t num = round_uint32_to_next_multiple_of( uint32_t num = round_uint32_to_next_multiple_of(
exit_streams[cur_port], exit_streams[cur_port],
EXIT_STATS_ROUND_UP_STREAMS); EXIT_STATS_ROUND_UP_STREAMS);
buf = NULL; smartlist_add_asprintf(streams_strings, "%d=%u", cur_port, num);
tor_asprintf(&buf, "%d=%u", cur_port, num);
smartlist_add(streams_strings, buf);
other_streams -= exit_streams[cur_port]; other_streams -= exit_streams[cur_port];
} }
} }
@ -2234,20 +2228,16 @@ rep_hist_format_exit_stats(time_t now)
other_written = round_uint64_to_next_multiple_of(other_written, other_written = round_uint64_to_next_multiple_of(other_written,
EXIT_STATS_ROUND_UP_BYTES); EXIT_STATS_ROUND_UP_BYTES);
other_written /= 1024; other_written /= 1024;
buf = NULL; smartlist_add_asprintf(written_strings, "other="U64_FORMAT,
tor_asprintf(&buf, "other="U64_FORMAT, U64_PRINTF_ARG(other_written)); U64_PRINTF_ARG(other_written));
smartlist_add(written_strings, buf);
other_read = round_uint64_to_next_multiple_of(other_read, other_read = round_uint64_to_next_multiple_of(other_read,
EXIT_STATS_ROUND_UP_BYTES); EXIT_STATS_ROUND_UP_BYTES);
other_read /= 1024; other_read /= 1024;
buf = NULL; smartlist_add_asprintf(read_strings, "other="U64_FORMAT,
tor_asprintf(&buf, "other="U64_FORMAT, U64_PRINTF_ARG(other_read)); U64_PRINTF_ARG(other_read));
smartlist_add(read_strings, buf);
other_streams = round_uint32_to_next_multiple_of(other_streams, other_streams = round_uint32_to_next_multiple_of(other_streams,
EXIT_STATS_ROUND_UP_STREAMS); EXIT_STATS_ROUND_UP_STREAMS);
buf = NULL; smartlist_add_asprintf(streams_strings, "other=%u", other_streams);
tor_asprintf(&buf, "other=%u", other_streams);
smartlist_add(streams_strings, buf);
/* Join all observations in single strings. */ /* Join all observations in single strings. */
written_string = smartlist_join_strings(written_strings, ",", 0, NULL); written_string = smartlist_join_strings(written_strings, ",", 0, NULL);
@ -2468,7 +2458,6 @@ rep_hist_format_buffer_stats(time_t now)
int processed_cells[SHARES], circs_in_share[SHARES], int processed_cells[SHARES], circs_in_share[SHARES],
number_of_circuits, i; number_of_circuits, i;
double queued_cells[SHARES], time_in_queue[SHARES]; double queued_cells[SHARES], time_in_queue[SHARES];
char *buf = NULL;
smartlist_t *processed_cells_strings, *queued_cells_strings, smartlist_t *processed_cells_strings, *queued_cells_strings,
*time_in_queue_strings; *time_in_queue_strings;
char *processed_cells_string, *queued_cells_string, char *processed_cells_string, *queued_cells_string,
@ -2510,19 +2499,19 @@ rep_hist_format_buffer_stats(time_t now)
queued_cells_strings = smartlist_create(); queued_cells_strings = smartlist_create();
time_in_queue_strings = smartlist_create(); time_in_queue_strings = smartlist_create();
for (i = 0; i < SHARES; i++) { for (i = 0; i < SHARES; i++) {
tor_asprintf(&buf,"%d", !circs_in_share[i] ? 0 : smartlist_add_asprintf(processed_cells_strings,
processed_cells[i] / circs_in_share[i]); "%d", !circs_in_share[i] ? 0 :
smartlist_add(processed_cells_strings, buf); processed_cells[i] / circs_in_share[i]);
} }
for (i = 0; i < SHARES; i++) { for (i = 0; i < SHARES; i++) {
tor_asprintf(&buf, "%.2f", circs_in_share[i] == 0 ? 0.0 : smartlist_add_asprintf(queued_cells_strings, "%.2f",
queued_cells[i] / (double) circs_in_share[i]); circs_in_share[i] == 0 ? 0.0 :
smartlist_add(queued_cells_strings, buf); queued_cells[i] / (double) circs_in_share[i]);
} }
for (i = 0; i < SHARES; i++) { for (i = 0; i < SHARES; i++) {
tor_asprintf(&buf, "%.0f", circs_in_share[i] == 0 ? 0.0 : smartlist_add_asprintf(time_in_queue_strings, "%.0f",
time_in_queue[i] / (double) circs_in_share[i]); circs_in_share[i] == 0 ? 0.0 :
smartlist_add(time_in_queue_strings, buf); time_in_queue[i] / (double) circs_in_share[i]);
} }
/* Join all observations in single strings. */ /* Join all observations in single strings. */

View File

@ -2267,9 +2267,7 @@ extrainfo_dump_to_string(char **s_out, extrainfo_t *extrainfo,
smartlist_add(chunks, pre); smartlist_add(chunks, pre);
if (geoip_is_loaded()) { if (geoip_is_loaded()) {
char *chunk=NULL; smartlist_add_asprintf(chunks, "geoip-db-digest %s\n", geoip_db_digest());
tor_asprintf(&chunk, "geoip-db-digest %s\n", geoip_db_digest());
smartlist_add(chunks, chunk);
} }
if (options->ExtraInfoStatistics && write_stats_to_extrainfo) { if (options->ExtraInfoStatistics && write_stats_to_extrainfo) {

View File

@ -918,7 +918,7 @@ parse_cmethod_line(const char *line, managed_proxy_t *mp)
static char * static char *
get_bindaddr_for_proxy(const managed_proxy_t *mp) get_bindaddr_for_proxy(const managed_proxy_t *mp)
{ {
char *bindaddr = NULL; char *bindaddr_result = NULL;
char *bindaddr_tmp = NULL; char *bindaddr_tmp = NULL;
smartlist_t *string_tmp = smartlist_create(); smartlist_t *string_tmp = smartlist_create();
@ -927,18 +927,17 @@ get_bindaddr_for_proxy(const managed_proxy_t *mp)
SMARTLIST_FOREACH_BEGIN(mp->transports_to_launch, char *, t) { SMARTLIST_FOREACH_BEGIN(mp->transports_to_launch, char *, t) {
bindaddr_tmp = get_bindaddr_for_transport(t); bindaddr_tmp = get_bindaddr_for_transport(t);
tor_asprintf(&bindaddr, "%s-%s", t, bindaddr_tmp); smartlist_add_asprintf(string_tmp, "%s-%s", t, bindaddr_tmp);
smartlist_add(string_tmp, bindaddr);
tor_free(bindaddr_tmp); tor_free(bindaddr_tmp);
} SMARTLIST_FOREACH_END(t); } SMARTLIST_FOREACH_END(t);
bindaddr = smartlist_join_strings(string_tmp, ",", 0, NULL); bindaddr_result = smartlist_join_strings(string_tmp, ",", 0, NULL);
SMARTLIST_FOREACH(string_tmp, char *, t, tor_free(t)); SMARTLIST_FOREACH(string_tmp, char *, t, tor_free(t));
smartlist_free(string_tmp); smartlist_free(string_tmp);
return bindaddr; return bindaddr_result;
} }
#ifdef MS_WINDOWS #ifdef MS_WINDOWS