Loading changes/bug27316 0 → 100644 +3 −0 Original line number Diff line number Diff line o Minor bugfixes (protover): - Reject protocol names containing bytes other than alphanumeric characters and hyphens ([A-Za-z0-9-]). Fixes bug 27316; bugfix on 0.2.9.4-alpha. src/or/protover.c +15 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #define PROTOVER_PRIVATE #include "compat.h" #include "or.h" #include "protover.h" #include "routerparse.h" Loading Loading @@ -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 <b>s</b> up to an optional * <b>end_of_entry</b> pointer, and return that protocol entry. Return NULL * on error. Loading @@ -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); Loading src/test/test_protover.c +4 −0 Original line number Diff line number Diff line Loading @@ -283,6 +283,10 @@ test_protover_vote_roundtrip(void *args) const char *input; const char *expected_output; } examples[] = { { "Risqu\u00e9=1", NULL }, { ",,,=1", NULL }, { "\xc1=1", NULL }, { "Foo_Bar=1", NULL }, { "Fkrkljdsf", NULL }, { "Zn=4294967295", NULL }, { "Zn=4294967295-1", NULL }, Loading Loading
changes/bug27316 0 → 100644 +3 −0 Original line number Diff line number Diff line o Minor bugfixes (protover): - Reject protocol names containing bytes other than alphanumeric characters and hyphens ([A-Za-z0-9-]). Fixes bug 27316; bugfix on 0.2.9.4-alpha.
src/or/protover.c +15 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #define PROTOVER_PRIVATE #include "compat.h" #include "or.h" #include "protover.h" #include "routerparse.h" Loading Loading @@ -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 <b>s</b> up to an optional * <b>end_of_entry</b> pointer, and return that protocol entry. Return NULL * on error. Loading @@ -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); Loading
src/test/test_protover.c +4 −0 Original line number Diff line number Diff line Loading @@ -283,6 +283,10 @@ test_protover_vote_roundtrip(void *args) const char *input; const char *expected_output; } examples[] = { { "Risqu\u00e9=1", NULL }, { ",,,=1", NULL }, { "\xc1=1", NULL }, { "Foo_Bar=1", NULL }, { "Fkrkljdsf", NULL }, { "Zn=4294967295", NULL }, { "Zn=4294967295-1", NULL }, Loading