]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix a logic error in 98aee84. Found by boboper
authorNick Mathewson <nickm@torproject.org>
Wed, 20 Oct 2010 18:40:09 +0000 (14:40 -0400)
committerNick Mathewson <nickm@torproject.org>
Wed, 20 Oct 2010 18:40:09 +0000 (14:40 -0400)
src/or/networkstatus.c

index 27049d9ef2ddbcbd318cec3142422d89ac15b44a..d645ee2b40318eca34c547d518b23f420b6c024b 100644 (file)
@@ -1569,6 +1569,7 @@ networkstatus_set_current_consensus(const char *consensus,
   const digests_t *current_digests = NULL;
   consensus_waiting_for_certs_t *waiting = NULL;
   time_t current_valid_after = 0;
+  int free_consensus = 1; /* Free 'c' at the end of the function */
 
   if (flav < 0) {
     /* XXXX we don't handle unrecognized flavors yet. */
@@ -1661,7 +1662,7 @@ networkstatus_set_current_consensus(const char *consensus,
         networkstatus_vote_free(waiting->consensus);
         tor_free(waiting->body);
         waiting->consensus = c;
-        c = NULL; /* Prevent free. */
+        free_consensus = 0;
         waiting->body = tor_strdup(consensus);
         waiting->set_at = now;
         waiting->dl_failed = 0;
@@ -1737,7 +1738,7 @@ networkstatus_set_current_consensus(const char *consensus,
 
   if (flav == USABLE_CONSENSUS_FLAVOR) {
     current_consensus = c;
-    c = NULL; /* Prevent free. */
+    free_consensus = 0; /* Prevent free. */
 
     /* XXXXNM Microdescs: needs a non-ns variant. */
     update_consensus_networkstatus_fetch_time(now);
@@ -1780,7 +1781,8 @@ networkstatus_set_current_consensus(const char *consensus,
 
   result = 0;
  done:
-  networkstatus_vote_free(c);
+  if (free_consensus)
+    networkstatus_vote_free(c);
   tor_free(consensus_fname);
   tor_free(unverified_fname);
   return result;