Commit a05ef55b authored by Sebastian Hahn's avatar Sebastian Hahn
Browse files

Allow comments for multi-line torrc options

parent 07049b3d
Loading
Loading
Loading
Loading
+15 −6
Changes for src/common/util.c: 15 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -2309,9 +2309,10 @@ parse_config_line_from_str(const char *line, char **key_out, char **value_out)
    return line;
  }

  /* Skip until the next space. */
  /* Skip until the next space or \ followed by newline. */
  key = line;
  while (*line && !TOR_ISSPACE(*line) && *line != '#')
  while (*line && !TOR_ISSPACE(*line) && *line != '#' &&
         ! (line[0] == '\\' && line[1] == '\n'))
    ++line;
  *key_out = tor_strndup(key, line-key);

@@ -2322,7 +2323,7 @@ parse_config_line_from_str(const char *line, char **key_out, char **value_out)
  val = line;

  /* Find the end of the line. */
  if (*line == '\"') {
  if (*line == '\"') { // XXX No continuation here
    if (!(line = unescape_string(line, value_out, NULL)))
       return NULL;
    while (*line == ' ' || *line == '\t')
@@ -2330,10 +2331,14 @@ parse_config_line_from_str(const char *line, char **key_out, char **value_out)
    if (*line && *line != '#' && *line != '\n')
      return NULL;
  } else {
    while (*line && *line != '\n' && *line != '#') {
    while (*line && *line != '\n' && (*line != '#' || continuation)) {
      if (*line == '\\' && line[1] == '\n') {
        continuation = 1;
        ++line;
      } else if (*line == '#') {
        do {
          ++line;
        } while (*line && *line != '\n');
      }
      ++line;
    }
@@ -2352,7 +2357,12 @@ parse_config_line_from_str(const char *line, char **key_out, char **value_out)
      char *v_out, *v_in;
      v_out = v_in = *value_out;
      while (*v_in) {
        if (v_in[0] == '\\' && v_in[1] == '\n') {
        if (*v_in == '#') {
          do {
            ++v_in;
          } while (*v_in && *v_in != '\n');
          ++v_in;
        } else if (v_in[0] == '\\' && v_in[1] == '\n') {
          v_in += 2;
        } else {
          *v_out++ = *v_in++;
@@ -2360,7 +2370,6 @@ parse_config_line_from_str(const char *line, char **key_out, char **value_out)
      }
      *v_out = '\0';
    }

  }

  if (*line == '#') {
+2 −1
Changes for src/or/circuitbuild.c: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -1752,7 +1752,8 @@ circuit_deliver_create_cell(circuit_t *circ, uint8_t cell_type,
  cell.circ_id = circ->n_circ_id;

  memcpy(cell.payload, payload, ONIONSKIN_CHALLENGE_LEN);
  append_cell_to_circuit_queue(circ, circ->n_conn, &cell, CELL_DIRECTION_OUT, 0);
  append_cell_to_circuit_queue(circ, circ->n_conn, &cell,
                               CELL_DIRECTION_OUT, 0);

  if (CIRCUIT_IS_ORIGIN(circ)) {
    /* mark it so it gets better rate limiting treatment. */
+1 −0
Changes for src/or/relay.c: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -2446,3 +2446,4 @@ circuit_queue_streams_are_blocked(circuit_t *circ)
    return circ->streams_blocked_on_p_conn;
  }
}
+12 −0
Changes for src/test/test_util.c: 12 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -103,6 +103,8 @@ test_util_config_line(void)
          "k9 a line that\\\n spans two lines.\n\n"
          "k10 more than\\\n one contin\\\nuation\n"
          "k11  \\\ncontinuation at the start\n"
          "k12 line with a\\\n#comment\n embedded\n"
          "k13\\\ncontinuation at the very start\n"
          , sizeof(buf));
  str = buf;

@@ -180,6 +182,16 @@ test_util_config_line(void)
  test_streq(v, "continuation at the start");
  tor_free(k); tor_free(v);

  str = parse_config_line_from_str(str, &k, &v);
  test_streq(k, "k12");
  test_streq(v, "line with a embedded");
  tor_free(k); tor_free(v);

  str = parse_config_line_from_str(str, &k, &v);
  test_streq(k, "k13");
  test_streq(v, "continuation at the very start");
  tor_free(k); tor_free(v);

  test_streq(str, "");

 done: