[tor-commits] [tor/release-0.4.3] Lowercase the BridgeDistribution value from torrc in descriptors.

nickm at torproject.org nickm at torproject.org
Wed Feb 12 18:49:03 UTC 2020


commit b9c7c61ea5233854ff83257a8bc530b7e0a50351
Author: Alexander Færøy <ahf at torproject.org>
Date:   Wed Jan 15 17:18:30 2020 +0000

    Lowercase the BridgeDistribution value from torrc in descriptors.
    
    This patch ensures that we always lowercase the BridgeDistribution from
    torrc in descriptors before submitting it.
    
    See: https://bugs.torproject.org/32753
---
 changes/bug32753           |  3 +++
 src/app/config/config.c    |  2 +-
 src/feature/relay/router.c | 15 ++++++++++-----
 src/test/test_config.c     | 22 +++++++++++++++++++---
 4 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/changes/bug32753 b/changes/bug32753
new file mode 100644
index 000000000..6f59c7729
--- /dev/null
+++ b/changes/bug32753
@@ -0,0 +1,3 @@
+  o Minor bugfixes (bridges):
+    - Lowercase the value of BridgeDistribution from torrc before adding it to
+      the descriptor. Fixes bug 32753; bugfix on 0.3.2.3-alpha.
diff --git a/src/app/config/config.c b/src/app/config/config.c
index 0b1b758d9..cbca7d389 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -6839,7 +6839,7 @@ check_bridge_distribution_setting(const char *bd)
   };
   unsigned i;
   for (i = 0; i < ARRAY_LENGTH(RECOGNIZED); ++i) {
-    if (!strcmp(bd, RECOGNIZED[i]))
+    if (!strcasecmp(bd, RECOGNIZED[i]))
       return 0;
   }
 
diff --git a/src/feature/relay/router.c b/src/feature/relay/router.c
index 1dbaf2ed6..e91550a78 100644
--- a/src/feature/relay/router.c
+++ b/src/feature/relay/router.c
@@ -2635,15 +2635,20 @@ router_dump_router_to_string(routerinfo_t *router,
   }
 
   if (options->BridgeRelay) {
-    const char *bd;
+    char *bd = NULL;
+
     if (options->BridgeDistribution && strlen(options->BridgeDistribution)) {
-      bd = options->BridgeDistribution;
+      bd = tor_strdup(options->BridgeDistribution);
     } else {
-      bd = "any";
+      bd = tor_strdup("any");
     }
-    if (strchr(bd, '\n') || strchr(bd, '\r'))
-      bd = escaped(bd);
+
+    // Make sure our value is lowercased in the descriptor instead of just
+    // forwarding what the user wrote in their torrc directly.
+    tor_strlower(bd);
+
     smartlist_add_asprintf(chunks, "bridge-distribution-request %s\n", bd);
+    tor_free(bd);
   }
 
   if (router->onion_curve25519_pkey) {
diff --git a/src/test/test_config.c b/src/test/test_config.c
index 8f011ce1f..855725411 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -5620,11 +5620,27 @@ test_config_check_bridge_distribution_setting_not_a_bridge(void *arg)
 static void
 test_config_check_bridge_distribution_setting_valid(void *arg)
 {
-  int ret = check_bridge_distribution_setting("https");
-
   (void)arg;
 
-  tt_int_op(ret, OP_EQ, 0);
+  // Check all the possible values we support right now.
+  tt_int_op(check_bridge_distribution_setting("none"), OP_EQ, 0);
+  tt_int_op(check_bridge_distribution_setting("any"), OP_EQ, 0);
+  tt_int_op(check_bridge_distribution_setting("https"), OP_EQ, 0);
+  tt_int_op(check_bridge_distribution_setting("email"), OP_EQ, 0);
+  tt_int_op(check_bridge_distribution_setting("moat"), OP_EQ, 0);
+
+  // Check all the possible values we support right now with weird casing.
+  tt_int_op(check_bridge_distribution_setting("NoNe"), OP_EQ, 0);
+  tt_int_op(check_bridge_distribution_setting("anY"), OP_EQ, 0);
+  tt_int_op(check_bridge_distribution_setting("hTTps"), OP_EQ, 0);
+  tt_int_op(check_bridge_distribution_setting("emAIl"), OP_EQ, 0);
+  tt_int_op(check_bridge_distribution_setting("moAt"), OP_EQ, 0);
+
+  // Invalid values.
+  tt_int_op(check_bridge_distribution_setting("x\rx"), OP_EQ, -1);
+  tt_int_op(check_bridge_distribution_setting("x\nx"), OP_EQ, -1);
+  tt_int_op(check_bridge_distribution_setting("\t\t\t"), OP_EQ, -1);
+
  done:
   return;
 }





More information about the tor-commits mailing list