From e24195c7c1aaecebaf5ef4f81b54da2f0db917c6 Mon Sep 17 00:00:00 2001 From: cypherpunks Date: Sun, 26 Aug 2018 01:20:44 +0000 Subject: protover: reject invalid protocol names The spec only allows the characters [A-Za-z0-9-]. Fix on b2b2e1c7f24d9b65059e3d089768d6c49ba4f58f. Fixes #27316; bugfix on 0.2.9.4-alpha. --- src/or/protover.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/or') diff --git a/src/or/protover.c b/src/or/protover.c index 31ca13fe61..2c5d5ab1fc 100644 --- a/src/or/protover.c +++ b/src/or/protover.c @@ -23,6 +23,7 @@ #define PROTOVER_PRIVATE +#include "compat.h" #include "or.h" #include "protover.h" #include "routerparse.h" @@ -170,6 +171,16 @@ parse_version_range(const char *s, const char *end_of_range, return -1; } +static int +is_valid_keyword(const char *s, size_t n) +{ + for (size_t i = 0; i < n; i++) { + if (!TOR_ISALNUM(s[i]) && s[i] != '-') + return 0; + } + return 1; +} + /** Parse a single protocol entry from s up to an optional * end_of_entry pointer, and return that protocol entry. Return NULL * on error. @@ -195,6 +206,10 @@ parse_single_entry(const char *s, const char *end_of_entry) if (equals == s) goto error; + /* The name must contain only alphanumeric characters and hyphens. */ + if (!is_valid_keyword(s, equals-s)) + goto error; + out->name = tor_strndup(s, equals-s); tor_assert(equals < end_of_entry); -- cgit v1.2.3-54-g00ecf