aboutsummaryrefslogtreecommitdiff
path: root/src/or/rendservice.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-03-18 14:35:24 +0000
committerNick Mathewson <nickm@torproject.org>2009-03-18 14:35:24 +0000
commit30ec1d1d50860241c1c4fa1dccd3ff3cde32691a (patch)
tree64253c20eaf352825172d83cb88cba5f0bdec3b5 /src/or/rendservice.c
parentad7ebec24c59a062e575b43a7b3d3d9c614b4933 (diff)
downloadtor-30ec1d1d50860241c1c4fa1dccd3ff3cde32691a.tar
tor-30ec1d1d50860241c1c4fa1dccd3ff3cde32691a.tar.gz
Don't double-free successful_uploads.
When we used smartlist_free to free the list of succesful uploads because we had succeeded in uploading everywhere, we did not actually set the successful_uploads field to NULL, so later it would get freed again in rend_service_descriptor_free. Fix for bug 948; bug introduced in 0.2.1.6-alpha. svn:r19073
Diffstat (limited to 'src/or/rendservice.c')
-rw-r--r--src/or/rendservice.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index a30dbc69a..9d677067c 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -1676,6 +1676,7 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
if (renddesc->successful_uploads) {
SMARTLIST_FOREACH(renddesc->successful_uploads, char *, c, tor_free(c););
smartlist_free(renddesc->successful_uploads);
+ renddesc->successful_uploads = NULL;
}
renddesc->all_uploads_performed = 1;
} else {
@@ -1683,10 +1684,9 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
* descriptor to them again. */
if (!renddesc->successful_uploads)
renddesc->successful_uploads = smartlist_create();
- SMARTLIST_FOREACH(successful_uploads, char *, c, {
+ SMARTLIST_FOREACH(successful_uploads, const char *, c, {
if (!smartlist_digest_isin(renddesc->successful_uploads, c)) {
- char *hsdir_id = tor_malloc_zero(DIGEST_LEN);
- memcpy(hsdir_id, c, DIGEST_LEN);
+ char *hsdir_id = tor_memdup(c, DIGEST_LEN);
smartlist_add(renddesc->successful_uploads, hsdir_id);
}
});