mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
Merge commit 'sebastian/bug1831'
This commit is contained in:
commit
a856f446c7
8
changes/bug1831
Normal file
8
changes/bug1831
Normal file
@ -0,0 +1,8 @@
|
||||
o Minor bugfixes
|
||||
- Fix a memory leak in the error case of circuit_build_times_parse_state().
|
||||
Bugfix on 0.2.2.14-alpha; fixes bug 1831 partially.
|
||||
- Fix a memory leak in dirvote_add_signatures_to_pending_consensus().
|
||||
Bugfix on 0.2.2.6-alpha; fixes bug 1831 partially.
|
||||
- Fix a memory leak in dirvote_compute_consensuses().
|
||||
Bugfix on 0.2.0.3-alpha; fixes bug 1831 partially.
|
||||
|
@ -20,6 +20,10 @@ for $fn (@ARGV) {
|
||||
if (/\t/) {
|
||||
print " TAB:$fn:$.\n";
|
||||
}
|
||||
## Warn about markers that don't have a space in front of them
|
||||
if (/^[a-zA-Z_][a-zA-Z_0-9]*:/) {
|
||||
print "nosplabel:$fn:$.\n";
|
||||
}
|
||||
## Warn about trailing whitespace.
|
||||
if (/ +$/) {
|
||||
print "Space\@EOL:$fn:$.\n";
|
||||
|
@ -605,11 +605,11 @@ circuit_build_times_filter_timeouts(circuit_build_times_t *cbt)
|
||||
* after we do so. Use this result to estimate parameters and
|
||||
* calculate the timeout.
|
||||
*
|
||||
* Returns -1 and sets msg on error. Msg must be freed by the caller.
|
||||
* Return -1 on error.
|
||||
*/
|
||||
int
|
||||
circuit_build_times_parse_state(circuit_build_times_t *cbt,
|
||||
or_state_t *state, char **msg)
|
||||
or_state_t *state)
|
||||
{
|
||||
int tot_values = 0;
|
||||
uint32_t loaded_cnt = 0, N = 0;
|
||||
@ -617,7 +617,7 @@ circuit_build_times_parse_state(circuit_build_times_t *cbt,
|
||||
unsigned int i;
|
||||
build_time_t *loaded_times;
|
||||
circuit_build_times_init(cbt);
|
||||
*msg = NULL;
|
||||
int err = 0;
|
||||
|
||||
if (circuit_build_times_disabled()) {
|
||||
return 0;
|
||||
@ -631,8 +631,9 @@ circuit_build_times_parse_state(circuit_build_times_t *cbt,
|
||||
smartlist_split_string(args, line->value, " ",
|
||||
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
|
||||
if (smartlist_len(args) < 2) {
|
||||
*msg = tor_strdup("Unable to parse circuit build times: "
|
||||
"Too few arguments to CircuitBuildTime");
|
||||
log_warn(LD_GENERAL, "Unable to parse circuit build times: "
|
||||
"Too few arguments to CircuitBuildTime");
|
||||
err = 1;
|
||||
SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
|
||||
smartlist_free(args);
|
||||
break;
|
||||
@ -645,8 +646,9 @@ circuit_build_times_parse_state(circuit_build_times_t *cbt,
|
||||
ms = (build_time_t)tor_parse_ulong(ms_str, 0, 0,
|
||||
CBT_BUILD_TIME_MAX, &ok, NULL);
|
||||
if (!ok) {
|
||||
*msg = tor_strdup("Unable to parse circuit build times: "
|
||||
"Unparsable bin number");
|
||||
log_warn(LD_GENERAL, "Unable to parse circuit build times: "
|
||||
"Unparsable bin number");
|
||||
err = 1;
|
||||
SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
|
||||
smartlist_free(args);
|
||||
break;
|
||||
@ -654,8 +656,9 @@ circuit_build_times_parse_state(circuit_build_times_t *cbt,
|
||||
count = (uint32_t)tor_parse_ulong(count_str, 0, 0,
|
||||
UINT32_MAX, &ok, NULL);
|
||||
if (!ok) {
|
||||
*msg = tor_strdup("Unable to parse circuit build times: "
|
||||
"Unparsable bin count");
|
||||
log_warn(LD_GENERAL, "Unable to parse circuit build times: "
|
||||
"Unparsable bin count");
|
||||
err = 1;
|
||||
SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
|
||||
smartlist_free(args);
|
||||
break;
|
||||
@ -692,10 +695,9 @@ circuit_build_times_parse_state(circuit_build_times_t *cbt,
|
||||
"Corrupt state file? Build times count mismatch. "
|
||||
"Read %d times, but file says %d", loaded_cnt,
|
||||
state->TotalBuildTimes);
|
||||
*msg = tor_strdup("Build times count mismatch.");
|
||||
err = 1;
|
||||
circuit_build_times_reset(cbt);
|
||||
tor_free(loaded_times);
|
||||
return -1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
circuit_build_times_shuffle_and_store_array(cbt, loaded_times, loaded_cnt);
|
||||
@ -716,10 +718,9 @@ circuit_build_times_parse_state(circuit_build_times_t *cbt,
|
||||
"Corrupt state file? Shuffled build times mismatch. "
|
||||
"Read %d times, but file says %d", tot_values,
|
||||
state->TotalBuildTimes);
|
||||
*msg = tor_strdup("Build times count mismatch.");
|
||||
err = 1;
|
||||
circuit_build_times_reset(cbt);
|
||||
tor_free(loaded_times);
|
||||
return -1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
circuit_build_times_set_timeout(cbt);
|
||||
@ -728,8 +729,9 @@ circuit_build_times_parse_state(circuit_build_times_t *cbt,
|
||||
circuit_build_times_filter_timeouts(cbt);
|
||||
}
|
||||
|
||||
done:
|
||||
tor_free(loaded_times);
|
||||
return *msg ? -1 : 0;
|
||||
return err ? -1 : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1512,7 +1514,7 @@ static int
|
||||
onion_populate_cpath(origin_circuit_t *circ)
|
||||
{
|
||||
int r;
|
||||
again:
|
||||
again:
|
||||
r = onion_extend_cpath(circ);
|
||||
if (r < 0) {
|
||||
log_info(LD_CIRC,"Generating cpath hop failed.");
|
||||
|
@ -81,7 +81,7 @@ extern circuit_build_times_t circ_times;
|
||||
void circuit_build_times_update_state(circuit_build_times_t *cbt,
|
||||
or_state_t *state);
|
||||
int circuit_build_times_parse_state(circuit_build_times_t *cbt,
|
||||
or_state_t *state, char **msg);
|
||||
or_state_t *state);
|
||||
void circuit_build_times_count_timeout(circuit_build_times_t *cbt,
|
||||
int did_onehop);
|
||||
int circuit_build_times_count_close(circuit_build_times_t *cbt,
|
||||
|
@ -4971,9 +4971,7 @@ or_state_set(or_state_t *new_state)
|
||||
tor_free(err);
|
||||
ret = -1;
|
||||
}
|
||||
if (circuit_build_times_parse_state(&circ_times, global_state, &err) < 0) {
|
||||
log_warn(LD_GENERAL,"%s",err);
|
||||
tor_free(err);
|
||||
if (circuit_build_times_parse_state(&circ_times, global_state) < 0) {
|
||||
ret = -1;
|
||||
}
|
||||
return ret;
|
||||
|
@ -2353,7 +2353,7 @@ connection_handle_read_impl(connection_t *conn)
|
||||
return 0;
|
||||
}
|
||||
|
||||
loop_again:
|
||||
loop_again:
|
||||
try_to_read = max_to_read;
|
||||
tor_assert(!conn->marked_for_close);
|
||||
|
||||
|
@ -2050,7 +2050,7 @@ get_unique_stream_id_by_circ(origin_circuit_t *circ)
|
||||
streamid_t test_stream_id;
|
||||
uint32_t attempts=0;
|
||||
|
||||
again:
|
||||
again:
|
||||
test_stream_id = circ->next_stream_id++;
|
||||
if (++attempts > 1<<16) {
|
||||
/* Make sure we don't loop forever if all stream_id's are used. */
|
||||
@ -2988,7 +2988,7 @@ parse_extended_hostname(char *address, int allowdotexit)
|
||||
if (rend_valid_service_id(query)) {
|
||||
return ONION_HOSTNAME; /* success */
|
||||
}
|
||||
failed:
|
||||
failed:
|
||||
/* otherwise, return to previous state and return 0 */
|
||||
*s = '.';
|
||||
return BAD_HOSTNAME;
|
||||
|
@ -2259,7 +2259,7 @@ handle_control_setcircuitpurpose(control_connection_t *conn,
|
||||
circ->_base.purpose = new_purpose;
|
||||
connection_write_str_to_buf("250 OK\r\n", conn);
|
||||
|
||||
done:
|
||||
done:
|
||||
if (args) {
|
||||
SMARTLIST_FOREACH(args, char *, cp, tor_free(cp));
|
||||
smartlist_free(args);
|
||||
|
@ -192,7 +192,7 @@ connection_cpu_process_inbuf(connection_t *conn)
|
||||
tor_assert(0); /* don't ask me to do handshakes yet */
|
||||
}
|
||||
|
||||
done_processing:
|
||||
done_processing:
|
||||
conn->state = CPUWORKER_STATE_IDLE;
|
||||
num_cpuworkers_busy--;
|
||||
if (conn->timestamp_created < last_rotation_time) {
|
||||
|
@ -762,7 +762,7 @@ networkstatus_check_weights(int64_t Wgg, int64_t Wgd, int64_t Wmg,
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
out:
|
||||
if (berr) {
|
||||
log_info(LD_DIR,
|
||||
"Bw weight mismatch %d. G="I64_FORMAT" M="I64_FORMAT
|
||||
@ -2942,6 +2942,7 @@ dirvote_compute_consensuses(void)
|
||||
strlen(pending_consensus_signatures), 0);
|
||||
log_notice(LD_DIR, "Signature(s) posted.");
|
||||
|
||||
smartlist_free(votes);
|
||||
return 0;
|
||||
err:
|
||||
smartlist_free(votes);
|
||||
@ -3008,6 +3009,7 @@ dirvote_add_signatures_to_pending_consensus(
|
||||
networkstatus_vote_free(v);
|
||||
}
|
||||
*msg_out = "Signatures added";
|
||||
tor_free(new_signatures);
|
||||
} else if (r == 0) {
|
||||
*msg_out = "Signatures ignored";
|
||||
} else {
|
||||
@ -3137,7 +3139,7 @@ void
|
||||
dirvote_free_all(void)
|
||||
{
|
||||
dirvote_clear_votes(1);
|
||||
/* now empty as a result of clear_pending_votes. */
|
||||
/* now empty as a result of dirvote_clear_votes(). */
|
||||
smartlist_free(pending_vote_list);
|
||||
pending_vote_list = NULL;
|
||||
smartlist_free(previous_vote_list);
|
||||
@ -3146,7 +3148,7 @@ dirvote_free_all(void)
|
||||
dirvote_clear_pending_consensuses();
|
||||
tor_free(pending_consensus_signatures);
|
||||
if (pending_consensus_signature_list) {
|
||||
/* now empty as a result of clear_pending_votes. */
|
||||
/* now empty as a result of dirvote_clear_votes(). */
|
||||
smartlist_free(pending_consensus_signature_list);
|
||||
pending_consensus_signature_list = NULL;
|
||||
}
|
||||
|
@ -829,7 +829,7 @@ geoip_get_client_history(geoip_client_action_t action)
|
||||
smartlist_add(chunks, buf);
|
||||
});
|
||||
result = smartlist_join_strings(chunks, ",", 0, NULL);
|
||||
done:
|
||||
done:
|
||||
tor_free(counts);
|
||||
if (chunks) {
|
||||
SMARTLIST_FOREACH(chunks, char *, c, tor_free(c));
|
||||
|
@ -381,7 +381,7 @@ validate_addr_policies(or_options_t *options, char **msg)
|
||||
ADDR_POLICY_ACCEPT))
|
||||
REJECT("Error in ReachableDirAddresses entry.");
|
||||
|
||||
err:
|
||||
err:
|
||||
addr_policy_list_free(addr_policy);
|
||||
return *msg ? -1 : 0;
|
||||
#undef REJECT
|
||||
@ -1272,7 +1272,7 @@ policy_summarize(smartlist_t *policy)
|
||||
result = tor_malloc(final_size);
|
||||
tor_snprintf(result, final_size, "%s %s", prefix, shorter_str);
|
||||
|
||||
cleanup:
|
||||
cleanup:
|
||||
/* cleanup */
|
||||
SMARTLIST_FOREACH(summary, policy_summary_item_t *, s, tor_free(s));
|
||||
smartlist_free(summary);
|
||||
|
@ -1327,7 +1327,7 @@ connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial)
|
||||
return 0;
|
||||
}
|
||||
|
||||
repeat_connection_edge_package_raw_inbuf:
|
||||
repeat_connection_edge_package_raw_inbuf:
|
||||
|
||||
circ = circuit_get_by_edge_conn(conn);
|
||||
if (!circ) {
|
||||
|
@ -209,7 +209,7 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
|
||||
introcirc->_base.purpose = CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT;
|
||||
|
||||
return 0;
|
||||
err:
|
||||
err:
|
||||
circuit_mark_for_close(TO_CIRCUIT(introcirc), END_CIRC_REASON_INTERNAL);
|
||||
circuit_mark_for_close(TO_CIRCUIT(rendcirc), END_CIRC_REASON_INTERNAL);
|
||||
return -1;
|
||||
|
@ -485,7 +485,6 @@ test_circuit_timeout(void)
|
||||
circuit_build_times_t final;
|
||||
double timeout1, timeout2;
|
||||
or_state_t state;
|
||||
char *msg;
|
||||
int i, runs;
|
||||
double close_ms;
|
||||
circuit_build_times_init(&initial);
|
||||
@ -525,7 +524,7 @@ test_circuit_timeout(void)
|
||||
test_assert(estimate.total_build_times <= CBT_NCIRCUITS_TO_OBSERVE);
|
||||
|
||||
circuit_build_times_update_state(&estimate, &state);
|
||||
test_assert(circuit_build_times_parse_state(&final, &state, &msg) == 0);
|
||||
test_assert(circuit_build_times_parse_state(&final, &state) == 0);
|
||||
|
||||
circuit_build_times_update_alpha(&final);
|
||||
timeout2 = circuit_build_times_calculate_timeout(&final,
|
||||
@ -627,7 +626,7 @@ test_circuit_timeout(void)
|
||||
circuit_build_times_count_timeout(&final, 1);
|
||||
}
|
||||
|
||||
done:
|
||||
done:
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -580,7 +580,7 @@ test_dir_measured_bw(void)
|
||||
"557365204145532d32353620696e73746561642e") == 0);
|
||||
}
|
||||
|
||||
done:
|
||||
done:
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user