]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
config: Make CLEAR with a nonempty value into a nonfatal assertion.
authorNick Mathewson <nickm@torproject.org>
Wed, 4 Sep 2019 15:28:21 +0000 (11:28 -0400)
committerNick Mathewson <nickm@torproject.org>
Wed, 4 Sep 2019 15:28:21 +0000 (11:28 -0400)
When we parse a CLEAR line (e.g., "/OrPort" or /OrPort blah blah"),
we always suppress the value, even if one exists.  That means that
the block of code was meant to handle CLEAR lines didn't actually do
anything, since we previously handled them the same way as with
other empty values.

Closes ticket 31529.

changes/ticket31529 [new file with mode: 0644]
src/app/config/confparse.c

diff --git a/changes/ticket31529 b/changes/ticket31529
new file mode 100644 (file)
index 0000000..84f9822
--- /dev/null
@@ -0,0 +1,5 @@
+  o Minor features (debugging):
+    - Log a nonfatal assertion failure if we encounter a configuration
+      line whose command is "CLEAR" but which has a nonempty value.
+      This should be impossible, according to the rules of our
+      configuration line parsing. Closes ticket 31529.
index f20a361ba39c0d292bcf239f3834d616d8b5333a..ecc4e8656077e149d501d374adcb7b73f2cd1e38 100644 (file)
@@ -652,9 +652,14 @@ config_assign_line(const config_mgr_t *mgr, void *options,
     }
     return 0;
   } else if (c->command == CONFIG_LINE_CLEAR && !clear_first) {
-    // XXXX This is unreachable, since a CLEAR line always has an
-    // XXXX empty value.
-    config_reset(mgr, options, mvar, use_defaults); // LCOV_EXCL_LINE
+    // This block is unreachable, since a CLEAR line always has an
+    // empty value, and so will trigger be handled by the previous
+    // "if (!strlen(c->value))" block.
+
+    // LCOV_EXCL_START
+    tor_assert_nonfatal_unreached();
+    config_reset(mgr, options, mvar, use_defaults);
+    // LCOV_EXCL_STOP
   }
 
   if (options_seen && ! config_var_is_cumulative(cvar)) {