mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +01:00
torrc parsing b0rks on carriage-return
(Specifically, carriage return after a quoted value in a config line. Fixes bug 19167; bugfix on 0.2.0.16-alpha when we introduced support for quoted values. Unit tests, changes file, and this parenthetical by nickm.)
This commit is contained in:
parent
3328658728
commit
ab78a4df93
4
changes/bug19167
Normal file
4
changes/bug19167
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
o Minor bugfixes (configuration):
|
||||||
|
- When parsing quoted configuration values from the torrc file,
|
||||||
|
handle windows line endings correctly. Fixes bug 19167; bugfix on
|
||||||
|
0.2.0.16-alpha. Patch from "Pingl".
|
@ -3079,6 +3079,8 @@ parse_config_line_from_str_verbose(const char *line, char **key_out,
|
|||||||
}
|
}
|
||||||
while (*line == ' ' || *line == '\t')
|
while (*line == ' ' || *line == '\t')
|
||||||
++line;
|
++line;
|
||||||
|
if (*line == '\r' && *(++line) == '\n')
|
||||||
|
++line;
|
||||||
if (*line && *line != '#' && *line != '\n') {
|
if (*line && *line != '#' && *line != '\n') {
|
||||||
if (err_out)
|
if (err_out)
|
||||||
*err_out = "Excess data after quoted string";
|
*err_out = "Excess data after quoted string";
|
||||||
|
@ -1642,6 +1642,36 @@ test_util_config_line_escaped_content(void *arg)
|
|||||||
tor_free(v);
|
tor_free(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_util_config_line_crlf(void *arg)
|
||||||
|
{
|
||||||
|
char *k=NULL, *v=NULL;
|
||||||
|
const char *err = NULL;
|
||||||
|
(void)arg;
|
||||||
|
const char *str =
|
||||||
|
"Hello world\r\n"
|
||||||
|
"Hello \"nice big world\"\r\n";
|
||||||
|
|
||||||
|
str = parse_config_line_from_str_verbose(str, &k, &v, &err);
|
||||||
|
tt_assert(str);
|
||||||
|
tt_str_op(k,OP_EQ,"Hello");
|
||||||
|
tt_str_op(v,OP_EQ,"world");
|
||||||
|
tt_assert(!err);
|
||||||
|
tor_free(k); tor_free(v);
|
||||||
|
|
||||||
|
str = parse_config_line_from_str_verbose(str, &k, &v, &err);
|
||||||
|
tt_assert(str);
|
||||||
|
tt_str_op(k,OP_EQ,"Hello");
|
||||||
|
tt_str_op(v,OP_EQ,"nice big world");
|
||||||
|
tt_assert(!err);
|
||||||
|
tor_free(k); tor_free(v);
|
||||||
|
tt_str_op(str,OP_EQ, "");
|
||||||
|
|
||||||
|
done:
|
||||||
|
tor_free(k); tor_free(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
static void
|
static void
|
||||||
test_util_expand_filename(void *arg)
|
test_util_expand_filename(void *arg)
|
||||||
@ -5609,6 +5639,7 @@ struct testcase_t util_tests[] = {
|
|||||||
UTIL_LEGACY(config_line_quotes),
|
UTIL_LEGACY(config_line_quotes),
|
||||||
UTIL_LEGACY(config_line_comment_character),
|
UTIL_LEGACY(config_line_comment_character),
|
||||||
UTIL_LEGACY(config_line_escaped_content),
|
UTIL_LEGACY(config_line_escaped_content),
|
||||||
|
UTIL_LEGACY(config_line_crlf),
|
||||||
UTIL_LEGACY_NO_WIN(expand_filename),
|
UTIL_LEGACY_NO_WIN(expand_filename),
|
||||||
UTIL_LEGACY(escape_string_socks),
|
UTIL_LEGACY(escape_string_socks),
|
||||||
UTIL_LEGACY(string_is_key_value),
|
UTIL_LEGACY(string_is_key_value),
|
||||||
|
Loading…
Reference in New Issue
Block a user