[tor-commits] [tor/master] Introduce a new bridge_has_invalid_transport() function.

nickm at torproject.org nickm at torproject.org
Thu Jan 21 18:22:31 UTC 2021


commit 71fd30b75ad028dfce69563792547f06fdf9d3c2
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Jan 21 13:17:16 2021 -0500

    Introduce a new bridge_has_invalid_transport() function.
    
    In addition to simplifying callsites a little, this function gives
    correct behavior for bridges without a configured transport.
---
 src/feature/client/bridges.c    | 13 ++++++++++++-
 src/feature/client/bridges.h    |  1 +
 src/feature/client/entrynodes.c |  2 +-
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/feature/client/bridges.c b/src/feature/client/bridges.c
index 11b2ffd62d..96c3497c6f 100644
--- a/src/feature/client/bridges.c
+++ b/src/feature/client/bridges.c
@@ -175,6 +175,17 @@ bridget_get_transport_name(const bridge_info_t *bridge)
   return bridge->transport_name;
 }
 
+/**
+ * Return true if @a bridge has a transport name for which we don't actually
+ * know a transport.
+ */
+bool
+bridge_has_invalid_transport(const bridge_info_t *bridge)
+{
+  const char *tname = bridget_get_transport_name(bridge);
+  return tname && transport_get_by_name(tname) == NULL;
+}
+
 /** If we have a bridge configured whose digest matches <b>digest</b>, or a
  * bridge with no known digest whose address matches any of the
  * tor_addr_port_t's in <b>orports</b>, return that bridge.  Else return
@@ -656,7 +667,7 @@ launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
       DIR_PURPOSE_FETCH_SERVERDESC))
     return; /* it's already on the way */
 
-  if (transport_get_by_name(bridget_get_transport_name(bridge)) == NULL) {
+  if (bridge_has_invalid_transport(bridge)) {
     download_status_mark_impossible(&bridge->fetch_status);
     log_warn(LD_CONFIG, "Can't use bridge at %s: there is no configured "
              "transport called \"%s\".",
diff --git a/src/feature/client/bridges.h b/src/feature/client/bridges.h
index 1b090e8649..f5ecc1b76d 100644
--- a/src/feature/client/bridges.h
+++ b/src/feature/client/bridges.h
@@ -24,6 +24,7 @@ const smartlist_t *bridge_list_get(void);
 const uint8_t *bridge_get_rsa_id_digest(const bridge_info_t *bridge);
 const tor_addr_port_t * bridge_get_addr_port(const bridge_info_t *bridge);
 const char *bridget_get_transport_name(const bridge_info_t *bridge);
+bool bridge_has_invalid_transport(const bridge_info_t *bridge);
 bridge_info_t *get_configured_bridge_by_addr_port_digest(
                                           const tor_addr_t *addr,
                                           uint16_t port,
diff --git a/src/feature/client/entrynodes.c b/src/feature/client/entrynodes.c
index 2676df6aae..232216c521 100644
--- a/src/feature/client/entrynodes.c
+++ b/src/feature/client/entrynodes.c
@@ -804,7 +804,7 @@ get_sampled_guard_for_bridge(guard_selection_t *gs,
   entry_guard_t *guard;
   if (BUG(!addrport))
     return NULL; // LCOV_EXCL_LINE
-  if (!transport_get_by_name(bridget_get_transport_name(bridge))) {
+  if (bridge_has_invalid_transport(bridge)) {
     return NULL;
   }
   guard = get_sampled_guard_by_bridge_addr(gs, addrport);





More information about the tor-commits mailing list