From 9b2b799d82e00286145d42b9c59cb4f820e4f8c7 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Sun, 4 Dec 2016 22:26:52 -0600 Subject: [PATCH] Accept non-space whitespace characters in log severity syntax. Adds a test_config_parse_log_severity unit test to verify behavior. Fixes #19965. --- changes/19965 | 3 +++ src/common/log.c | 4 +--- src/test/test_config.c | 29 ++++++++++++++++++++++++++++- 3 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 changes/19965 diff --git a/changes/19965 b/changes/19965 new file mode 100644 index 0000000000..904f5c9db0 --- /dev/null +++ b/changes/19965 @@ -0,0 +1,3 @@ + o Minor bugfix (configuration): + - Accept non-space whitespace characters after the severity level in the + `Log` option. Fixes bug 19965; bugfix on 0.2.1.1-alpha. diff --git a/src/common/log.c b/src/common/log.c index 3b0eb882c3..1c592c6bda 100644 --- a/src/common/log.c +++ b/src/common/log.c @@ -1319,10 +1319,8 @@ parse_log_severity_config(const char **cfg_ptr, if (got_an_unqualified_range > 1) return -1; - space = strchr(cfg, ' '); + space = find_whitespace(cfg); dash = strchr(cfg, '-'); - if (!space) - space = strchr(cfg, '\0'); if (dash && dash < space) { sev_lo = tor_strndup(cfg, dash-cfg); sev_hi = tor_strndup(dash+1, space-(dash+1)); diff --git a/src/test/test_config.c b/src/test/test_config.c index 2fc37b0bb8..bf2beb8206 100644 --- a/src/test/test_config.c +++ b/src/test/test_config.c @@ -4890,6 +4890,33 @@ test_config_parse_port_config__ports__server_options(void *data) config_free_lines(config_port_valid); config_port_valid = NULL; } +static void +test_config_parse_log_severity(void *data) +{ + int ret; + const char *severity_log_lines[] = { + "debug file /tmp/debug.log", + "debug\tfile /tmp/debug.log", + "[handshake]debug [~net,~mm]info notice stdout", + "[handshake]debug\t[~net,~mm]info\tnotice\tstdout", + NULL + }; + int i; + log_severity_list_t *severity; + + (void) data; + + severity = tor_malloc(sizeof(log_severity_list_t)); + for (i = 0; severity_log_lines[i]; i++) { + memset(severity, 0, sizeof(log_severity_list_t)); + ret = parse_log_severity_config(&severity_log_lines[i], severity); + tt_int_op(ret, OP_EQ, 0); + } + + done: + tor_free(severity); +} + #define CONFIG_TEST(name, flags) \ { #name, test_config_ ## name, flags, NULL, NULL } @@ -4916,6 +4943,6 @@ struct testcase_t config_tests[] = { CONFIG_TEST(parse_port_config__ports__no_ports_given, 0), CONFIG_TEST(parse_port_config__ports__server_options, 0), CONFIG_TEST(parse_port_config__ports__ports_given, 0), + CONFIG_TEST(parse_log_severity, 0), END_OF_TESTCASES }; -