Ver código fonte

Accept non-space whitespace characters in log severity syntax.

Adds a test_config_parse_log_severity unit test to verify behavior.

Fixes #19965.
J. Ryan Stinnett 7 anos atrás
pai
commit
9b2b799d82
3 arquivos alterados com 32 adições e 4 exclusões
  1. 3 0
      changes/19965
  2. 1 3
      src/common/log.c
  3. 28 1
      src/test/test_config.c

+ 3 - 0
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.

+ 1 - 3
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));

+ 28 - 1
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
 };
-