tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

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

dirparse: reject votes with invalid recommended/required protocols

Diffstat:
Msrc/feature/dirparse/ns_parse.c | 9+++++++++
1 file changed, 9 insertions(+), 0 deletions(-)

diff --git 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]); }