diff --git a/changes/bug7022 b/changes/bug7022 new file mode 100644 index 0000000000..10ac354724 --- /dev/null +++ b/changes/bug7022 @@ -0,0 +1,3 @@ + o Minor bugfixes: + - Fix memory leaks whenever we logged any message about the "path + bias" detection. Fixes bug 7022; bugfix on 0.2.3.21-rc. diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index be97b7c1cf..230dd8105e 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -2666,12 +2666,13 @@ pathbias_count_first_hop(origin_circuit_t *circ) approx_time()))) { log_notice(LD_BUG, "One-hop circuit has length %d. Path state is %s. " - "Circuit is a %s currently %s. %s", + "Circuit is a %s currently %s.%s", circ->build_state->desired_path_len, pathbias_state_to_string(circ->path_state), circuit_purpose_to_string(circ->_base.purpose), circuit_state_to_string(circ->_base.state), rate_msg); + tor_free(rate_msg); } tor_fragile_assert(); } @@ -2685,11 +2686,12 @@ pathbias_count_first_hop(origin_circuit_t *circ) approx_time()))) { log_info(LD_BUG, "Opened circuit is in strange path state %s. " - "Circuit is a %s currently %s. %s", + "Circuit is a %s currently %s.%s", pathbias_state_to_string(circ->path_state), circuit_purpose_to_string(circ->_base.purpose), circuit_state_to_string(circ->_base.state), rate_msg); + tor_free(rate_msg); } } @@ -2712,11 +2714,12 @@ pathbias_count_first_hop(origin_circuit_t *circ) approx_time()))) { log_info(LD_BUG, "Unopened circuit has strange path state %s. " - "Circuit is a %s currently %s. %s", + "Circuit is a %s currently %s.%s", pathbias_state_to_string(circ->path_state), circuit_purpose_to_string(circ->_base.purpose), circuit_state_to_string(circ->_base.state), rate_msg); + tor_free(rate_msg); } } } else { @@ -2724,10 +2727,11 @@ pathbias_count_first_hop(origin_circuit_t *circ) approx_time()))) { log_info(LD_BUG, "Unopened circuit has no known guard. " - "Circuit is a %s currently %s. %s", + "Circuit is a %s currently %s.%s", circuit_purpose_to_string(circ->_base.purpose), circuit_state_to_string(circ->_base.state), rate_msg); + tor_free(rate_msg); } } } @@ -2738,12 +2742,13 @@ pathbias_count_first_hop(origin_circuit_t *circ) approx_time()))) { log_info(LD_BUG, "A %s circuit is in cpath state %d (opened: %d). " - "Circuit is a %s currently %s. %s", + "Circuit is a %s currently %s.%s", pathbias_state_to_string(circ->path_state), circ->cpath->state, circ->has_opened, circuit_purpose_to_string(circ->_base.purpose), circuit_state_to_string(circ->_base.state), rate_msg); + tor_free(rate_msg); } } } @@ -2784,12 +2789,13 @@ pathbias_count_success(origin_circuit_t *circ) approx_time()))) { log_notice(LD_BUG, "One-hop circuit has length %d. Path state is %s. " - "Circuit is a %s currently %s. %s", + "Circuit is a %s currently %s.%s", circ->build_state->desired_path_len, pathbias_state_to_string(circ->path_state), circuit_purpose_to_string(circ->_base.purpose), circuit_state_to_string(circ->_base.state), rate_msg); + tor_free(rate_msg); } tor_fragile_assert(); } @@ -2814,11 +2820,12 @@ pathbias_count_success(origin_circuit_t *circ) approx_time()))) { log_info(LD_BUG, "Succeeded circuit is in strange path state %s. " - "Circuit is a %s currently %s. %s", + "Circuit is a %s currently %s.%s", pathbias_state_to_string(circ->path_state), circuit_purpose_to_string(circ->_base.purpose), circuit_state_to_string(circ->_base.state), rate_msg); + tor_free(rate_msg); } } @@ -2836,10 +2843,11 @@ pathbias_count_success(origin_circuit_t *circ) approx_time()))) { log_info(LD_BUG, "Completed circuit has no known guard. " - "Circuit is a %s currently %s. %s", + "Circuit is a %s currently %s.%s", circuit_purpose_to_string(circ->_base.purpose), circuit_state_to_string(circ->_base.state), rate_msg); + tor_free(rate_msg); } } } else { @@ -2848,11 +2856,12 @@ pathbias_count_success(origin_circuit_t *circ) approx_time()))) { log_info(LD_BUG, "Opened circuit is in strange path state %s. " - "Circuit is a %s currently %s. %s", + "Circuit is a %s currently %s.%s", pathbias_state_to_string(circ->path_state), circuit_purpose_to_string(circ->_base.purpose), circuit_state_to_string(circ->_base.state), rate_msg); + tor_free(rate_msg); } } }