]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Freeing twice does *not* make the heap twice as clean.
authorNick Mathewson <nickm@torproject.org>
Fri, 30 Jan 2004 21:05:47 +0000 (21:05 +0000)
committerNick Mathewson <nickm@torproject.org>
Fri, 30 Jan 2004 21:05:47 +0000 (21:05 +0000)
svn:r1027

src/or/routerlist.c

index f07aac1b1a79887bf02c38c42e60e718732d3c4f..871b34b11f48a339b5b1fc50fb42809a4f17598e 100644 (file)
@@ -783,6 +783,7 @@ routerinfo_t *router_get_entry_from_string(const char**s) {
     log_fn(LOG_WARN, "Missing onion key"); goto err;
   } /* XXX Check key length */
   router->onion_pkey = tok->val.public_key;
+  tok->val.public_key = NULL; /* Prevent free */
 
   NEXT_TOKEN();
   if (tok->tp != K_LINK_KEY) {
@@ -793,6 +794,7 @@ routerinfo_t *router_get_entry_from_string(const char**s) {
     log_fn(LOG_WARN, "Missing link key"); goto err;
   } /* XXX Check key length */
   router->link_pkey = tok->val.public_key;
+  tok->val.public_key = NULL; /* Prevent free */
 
   NEXT_TOKEN();
   if (tok->tp != K_SIGNING_KEY) {
@@ -803,6 +805,7 @@ routerinfo_t *router_get_entry_from_string(const char**s) {
     log_fn(LOG_WARN, "Missing signing key"); goto err;
   }
   router->identity_pkey = tok->val.public_key;
+  tok->val.public_key = NULL; /* Prevent free */
 
   NEXT_TOKEN();
   while (tok->tp == K_ACCEPT || tok->tp == K_REJECT) {
@@ -1037,10 +1040,12 @@ router_release_token(directory_token_t *tok)
   switch (tok->tp)
     {
     case _SIGNATURE:
-      free(tok->val.signature);
+      if (tok->val.signature)
+        free(tok->val.signature);
       break;
     case _PUBLIC_KEY:
-      crypto_free_pk_env(tok->val.public_key);
+      if (tok->val.public_key)
+        crypto_free_pk_env(tok->val.public_key);
       break;
     case _ERR:
     case _EOF: