Browse Source

Merge commit 'karsten/fix-1073' into maint-0.2.1

Nick Mathewson 14 years ago
parent
commit
b3991ea7d1
2 changed files with 11 additions and 3 deletions
  1. 3 0
      ChangeLog
  2. 8 3
      src/or/rendclient.c

+ 3 - 0
ChangeLog

@@ -42,6 +42,9 @@ Changes in version 0.2.1.20 - 2009-??-??
       0.2.1.6-alpha.
     - Teach connection_ap_can_use_exit to respect the Exclude*Nodes config
       options. Should fix bug 1090. Bugfix on 0.0.2-pre16.
+    - Avoid segfault in rare cases when finishing an introduction circuit
+      as a client and finding out that we don't have an introduction key
+      for it. Fixes bug 1073. Reported by Aaron Swartz.
 
   o Minor features:
     - Add a "getinfo status/accepted-server-descriptor" controller

+ 8 - 3
src/or/rendclient.c

@@ -94,9 +94,14 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
       }
     });
     if (!intro_key) {
+      /** XXX This case probably means that the intro point vanished while
+       * we were building a circuit to it. In the future, we should find
+       * out how that happened and whether we should kill the circuits to
+       * removed intro points immediately. See task 1073. */
+      int num_intro_points = smartlist_len(entry->parsed->intro_nodes);
       if (rend_cache_lookup_entry(introcirc->rend_data->onion_address,
           0, &entry) > 0) {
-        log_warn(LD_BUG, "We have both a v0 and a v2 rend desc for this "
+        log_info(LD_REND, "We have both a v0 and a v2 rend desc for this "
                  "service. The v2 desc doesn't contain the introduction "
                  "point (and key) to send an INTRODUCE1/2 cell to this "
                  "introduction point. Assuming the introduction point "
@@ -107,9 +112,9 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
         /* See flyspray task 1024. */
         intro_key = entry->parsed->pk;
       } else {
-        log_warn(LD_BUG, "Internal error: could not find intro key; we "
+        log_info(LD_REND, "Internal error: could not find intro key; we "
                  "only have a v2 rend desc with %d intro points.",
-                 smartlist_len(entry->parsed->intro_nodes));
+                 num_intro_points);
         goto err;
       }
     }