Commit 0fd0f5f7 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

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 8b9a2cb6, which is
going into Tor 0.2.5.4-alpha.
parent d1be2f5c
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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",