]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Don't double-free successful_uploads.
authorNick Mathewson <nickm@torproject.org>
Wed, 18 Mar 2009 14:35:24 +0000 (14:35 +0000)
committerNick Mathewson <nickm@torproject.org>
Wed, 18 Mar 2009 14:35:24 +0000 (14:35 +0000)
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

ChangeLog
src/or/rendservice.c

index ad4846629a8da82f29fc5d05dbbdc37a208d0e63..7f6315020f49d174ecbc757fce69c48521507487 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -10,6 +10,8 @@ Changes in version 0.2.1.14-??? - 2009-03-??
     - When starting with a cache over a few days old, do not leak
       memory for the obsolete router descriptors in it.  Bugfix on
       0.2.0.33.
+    - Avoid double-free on list of successfully uploaded hidden
+      service discriptors.  Fix for bug 948.  Bugfix on 0.2.1.6-alpha.
 
 
 Changes in version 0.2.1.13-alpha - 2009-03-09
index a30dbc69a5446761ac4d5061339f46307840d8ad..9d677067cc0f39ac7a8c30a4f69f979b5a3dd108 100644 (file)
@@ -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);
       }
     });