Commit 5b04392c authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Merge branch 'maint-0.2.9' into maint-0.3.2

parents 0971b3ce e24195c7
Loading
Loading
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.
+15 −0
Original line number Diff line number Diff line
@@ -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 <b>s</b> up to an optional
 * <b>end_of_entry</b> 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);
+4 −0
Original line number Diff line number Diff line
@@ -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 },