Loading src/common/util.c +15 −6 Changes for src/common/util.c: 15 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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') Loading @@ -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; } Loading @@ -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++; Loading @@ -2360,7 +2370,6 @@ parse_config_line_from_str(const char *line, char **key_out, char **value_out) } *v_out = '\0'; } } if (*line == '#') { Loading src/or/circuitbuild.c +2 −1 Changes for src/or/circuitbuild.c: 2 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -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. */ Loading src/or/relay.c +1 −0 Changes for src/or/relay.c: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -2446,3 +2446,4 @@ circuit_queue_streams_are_blocked(circuit_t *circ) return circ->streams_blocked_on_p_conn; } } src/test/test_util.c +12 −0 Changes for src/test/test_util.c: 12 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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: Loading Loading
src/common/util.c +15 −6 Changes for src/common/util.c: 15 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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') Loading @@ -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; } Loading @@ -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++; Loading @@ -2360,7 +2370,6 @@ parse_config_line_from_str(const char *line, char **key_out, char **value_out) } *v_out = '\0'; } } if (*line == '#') { Loading
src/or/circuitbuild.c +2 −1 Changes for src/or/circuitbuild.c: 2 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -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. */ Loading
src/or/relay.c +1 −0 Changes for src/or/relay.c: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -2446,3 +2446,4 @@ circuit_queue_streams_are_blocked(circuit_t *circ) return circ->streams_blocked_on_p_conn; } }
src/test/test_util.c +12 −0 Changes for src/test/test_util.c: 12 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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: Loading