aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/torgzip.c4
-rw-r--r--src/or/circuitbuild.c3
-rw-r--r--src/or/main.c1
3 files changed, 7 insertions, 1 deletions
diff --git a/src/common/torgzip.c b/src/common/torgzip.c
index 5a1e1e8a0..f1771c183 100644
--- a/src/common/torgzip.c
+++ b/src/common/torgzip.c
@@ -136,6 +136,10 @@ tor_gzip_compress(char **out, size_t *out_len,
}
done:
*out_len = stream->total_out;
+ if (stream->total_out > out_size + 4097) {
+ /* If we're wasting more than 4k, don't. */
+ tor_realloc(*out, stream->total_out + 1);
+ }
if (deflateEnd(stream)!=Z_OK) {
log_warn(LD_BUG, "Error freeing gzip structures");
goto err;
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index 5cf90bd58..8f2e4ed74 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -1072,7 +1072,8 @@ circuit_get_unhandled_ports(time_t now)
int i;
for (i = 0; i < smartlist_len(source); ++i) {
- tmp = tor_malloc(sizeof(uint16_t));
+ /*XXXX020 some of these are leaked somewhere.. fix that. */
+ tmp = tor_malloc(sizeof(uint16_t));
memcpy(tmp, smartlist_get(source, i), sizeof(uint16_t));
smartlist_add(dest, tmp);
}
diff --git a/src/or/main.c b/src/or/main.c
index a41b8cb17..085d3044e 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -1763,6 +1763,7 @@ tor_free_all(int postfork)
routerlist_free_all();
addressmap_free_all();
set_exit_redirects(NULL); /* free the registered exit redirects */
+ esc_router_info(NULL); /* free a static field */
dirserv_free_all();
rend_service_free_all();
rend_cache_free_all();