diff options
author | Nick Mathewson <nickm@torproject.org> | 2016-12-09 08:31:03 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2016-12-09 08:31:03 -0500 |
commit | 8efa933da9fba5b1f821e0f8c7c0ae0f3723c0fe (patch) | |
tree | adb8a848be98f4ef92e8e287897a8f1c83140b29 | |
parent | 4f62b68df42947539d9c89e0b6172d93dfe658ad (diff) | |
parent | 9bb3bcbc414f8845d025e6bf74ffdf6be96a5ebe (diff) | |
download | tor-8efa933da9fba5b1f821e0f8c7c0ae0f3723c0fe.tar.gz tor-8efa933da9fba5b1f821e0f8c7c0ae0f3723c0fe.zip |
Merge branch 'maint-0.2.9' into release-0.2.9
-rw-r--r-- | changes/bug20715 | 4 | ||||
-rw-r--r-- | src/or/routerlist.c | 13 |
2 files changed, 17 insertions, 0 deletions
diff --git a/changes/bug20715 b/changes/bug20715 new file mode 100644 index 0000000000..737a560cec --- /dev/null +++ b/changes/bug20715 @@ -0,0 +1,4 @@ + o Minor bugfixes (memory leak) + - When moving a signed descriptor object from a source to an existing + destination, free the allocated memory inside that destination object. + Bugfix on tor-0.2.8.3-alpha; Closes #20715. diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 56c0522cdc..b876795445 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -3235,6 +3235,17 @@ signed_descriptor_free(signed_descriptor_t *sd) tor_free(sd); } +/** Reset the given signed descriptor <b>sd</b> by freeing the allocated + * memory inside the object and by zeroing its content. */ +static void +signed_descriptor_reset(signed_descriptor_t *sd) +{ + tor_assert(sd); + tor_free(sd->signed_descriptor_body); + tor_cert_free(sd->signing_key_cert); + memset(sd, 0, sizeof(*sd)); +} + /** Copy src into dest, and steal all references inside src so that when * we free src, we don't mess up dest. */ static void @@ -3242,6 +3253,8 @@ signed_descriptor_move(signed_descriptor_t *dest, signed_descriptor_t *src) { tor_assert(dest != src); + /* Cleanup destination object before overwriting it.*/ + signed_descriptor_reset(dest); memcpy(dest, src, sizeof(signed_descriptor_t)); src->signed_descriptor_body = NULL; src->signing_key_cert = NULL; |