[tor-commits] [tor/master] dirparse: reject votes with invalid recommended/required protocols

nickm at torproject.org nickm at torproject.org
Mon Aug 3 12:57:43 UTC 2020


commit 8d89aa5eeaef2c009c7fc8250eacc0ed32ebde64
Author: cypherpunks <cypherpunks at torproject.org>
Date:   Sat Feb 8 21:11:44 2020 +0000

    dirparse: reject votes with invalid recommended/required protocols
---
 src/feature/dirparse/ns_parse.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/feature/dirparse/ns_parse.c b/src/feature/dirparse/ns_parse.c
index ce548b221e..6172a57bbb 100644
--- a/src/feature/dirparse/ns_parse.c
+++ b/src/feature/dirparse/ns_parse.c
@@ -1168,16 +1168,25 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
     }
   }
 
+  // Reject the vote if any of the protocols lines are malformed.
   if ((tok = find_opt_by_keyword(tokens, K_RECOMMENDED_CLIENT_PROTOCOLS))) {
+    if (protover_contains_long_protocol_names(tok->args[0]))
+      goto err;
     ns->recommended_client_protocols = tor_strdup(tok->args[0]);
   }
   if ((tok = find_opt_by_keyword(tokens, K_RECOMMENDED_RELAY_PROTOCOLS))) {
+    if (protover_contains_long_protocol_names(tok->args[0]))
+      goto err;
     ns->recommended_relay_protocols = tor_strdup(tok->args[0]);
   }
   if ((tok = find_opt_by_keyword(tokens, K_REQUIRED_CLIENT_PROTOCOLS))) {
+    if (protover_contains_long_protocol_names(tok->args[0]))
+      goto err;
     ns->required_client_protocols = tor_strdup(tok->args[0]);
   }
   if ((tok = find_opt_by_keyword(tokens, K_REQUIRED_RELAY_PROTOCOLS))) {
+    if (protover_contains_long_protocol_names(tok->args[0]))
+      goto err;
     ns->required_relay_protocols = tor_strdup(tok->args[0]);
   }
 





More information about the tor-commits mailing list