[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r19073: {tor} Don't double-free successful_uploads. When we used smartlist (in tor/trunk: . src/or)
Author: nickm
Date: 2009-03-18 10:35:24 -0400 (Wed, 18 Mar 2009)
New Revision: 19073
Modified:
tor/trunk/ChangeLog
tor/trunk/src/or/rendservice.c
Log:
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.
Modified: tor/trunk/ChangeLog
===================================================================
--- tor/trunk/ChangeLog 2009-03-18 04:14:30 UTC (rev 19072)
+++ tor/trunk/ChangeLog 2009-03-18 14:35:24 UTC (rev 19073)
@@ -10,6 +10,8 @@
- 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
Modified: tor/trunk/src/or/rendservice.c
===================================================================
--- tor/trunk/src/or/rendservice.c 2009-03-18 04:14:30 UTC (rev 19072)
+++ tor/trunk/src/or/rendservice.c 2009-03-18 14:35:24 UTC (rev 19073)
@@ -1676,6 +1676,7 @@
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 @@
* 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);
}
});