[tor-commits] [tor/master] scan-build: Avoid crashing on BUG in circuit_get_by_rend_token_and_purpose

nickm at torproject.org nickm at torproject.org
Fri Apr 25 05:30:23 UTC 2014


commit 0fd0f5f7a9309fb90a6a4d8bad7d6399a45c7cc1
Author: Nick Mathewson <nickm at torproject.org>
Date:   Fri Apr 18 20:30:46 2014 -0400

    scan-build: Avoid crashing on BUG in circuit_get_by_rend_token_and_purpose
    
    If we fail in circuit_get_by_rend_token_and_purpose because the
    circuit has no rend_info, don't try to reference fiends from its
    rend_info when logging an error.  Bugfix on 8b9a2cb68, which is
    going into Tor 0.2.5.4-alpha.
---
 src/or/circuitlist.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index b71dc3c..24cb9fc 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -1261,8 +1261,16 @@ circuit_get_by_rend_token_and_purpose(uint8_t purpose, int is_rend_circ,
       circ->base_.marked_for_close)
     return NULL;
 
-  if (!circ->rendinfo ||
-      ! bool_eq(circ->rendinfo->is_rend_circ, is_rend_circ) ||
+  if (!circ->rendinfo) {
+    char *t = tor_strdup(hex_str(token, REND_TOKEN_LEN));
+    log_warn(LD_BUG, "Wanted a circuit with %s:%d, but lookup returned a "
+             "circuit with no rendinfo set.",
+             safe_str(t), is_rend_circ);
+    tor_free(t);
+    return NULL;
+  }
+
+  if (! bool_eq(circ->rendinfo->is_rend_circ, is_rend_circ) ||
       tor_memneq(circ->rendinfo->rend_token, token, REND_TOKEN_LEN)) {
     char *t = tor_strdup(hex_str(token, REND_TOKEN_LEN));
     log_warn(LD_BUG, "Wanted a circuit with %s:%d, but lookup returned %s:%d",





More information about the tor-commits mailing list