tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit bbeba2412e58501da4097409258d329ca97edb2e
parent 2ca827104db2425bdb7f854c7b20d102706d559a
Author: Nick Mathewson <nickm@torproject.org>
Date:   Tue, 16 May 2017 10:47:41 -0400

Fix resource leak in parse_consensus_request()

We were allocating diff_hash_in_url on some URLs, but not freeing it.

Fixes CID 1409669.  Bug not in any released Tor.

Diffstat:
Msrc/or/consdiffmgr.c | 1+
Msrc/or/directory.c | 6++++--
2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c @@ -566,6 +566,7 @@ consdiffmgr_find_consensus(struct consensus_cache_entry_t **entry_out, consensus_flavor_t flavor, compress_method_t method) { + tor_assert(entry_out); tor_assert((int)flavor < N_CONSENSUS_FLAVORS); int pos = consensus_compression_method_pos(method); diff --git a/src/or/directory.c b/src/or/directory.c @@ -3929,8 +3929,10 @@ parse_consensus_request(parsed_consensus_request_t *out, uint8_t diff_from[DIGEST256_LEN]; out->diff_from_digests = smartlist_new(); out->diff_only = 1; - if (!parse_one_diff_hash(diff_from, diff_hash_in_url, "URL", - "rejecting")) { + int ok = !parse_one_diff_hash(diff_from, diff_hash_in_url, "URL", + "rejecting"); + tor_free(diff_hash_in_url); + if (ok) { smartlist_add(out->diff_from_digests, tor_memdup(diff_from, DIGEST256_LEN)); } else {