]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add a string representation for LD_SCHED, and a extra sanity check.
authorYawning Angel <yawning@schwanenlied.me>
Thu, 5 Feb 2015 15:46:27 +0000 (15:46 +0000)
committerYawning Angel <yawning@schwanenlied.me>
Thu, 5 Feb 2015 15:46:27 +0000 (15:46 +0000)
This both fixes the problem, and ensures that forgetting to update
domain_list in the future will trigger the bug codepath instead of
a NULL pointer deref.

changes/bug14740 [new file with mode: 0644]
src/common/log.c

diff --git a/changes/bug14740 b/changes/bug14740
new file mode 100644 (file)
index 0000000..5cac620
--- /dev/null
@@ -0,0 +1,5 @@
+  o Minor bugfixes:
+    - Avoid crashing when there are more log domains than entries in
+      domain_list.  Bugfix on 0.2.3.1-alpha.
+    - Add a string representation for LD_SCHED.  Fixes bug 14740;
+      bugfix on 0.2.6.1-alpha.
index 2e7c71141376afe6beb4370d19d26d0d31bbeb53..b5338148449eb89cbfe8ebaee6168da5ca87e4c6 100644 (file)
@@ -1215,7 +1215,8 @@ log_level_to_string(int level)
 static const char *domain_list[] = {
   "GENERAL", "CRYPTO", "NET", "CONFIG", "FS", "PROTOCOL", "MM",
   "HTTP", "APP", "CONTROL", "CIRC", "REND", "BUG", "DIR", "DIRSERV",
-  "OR", "EDGE", "ACCT", "HIST", "HANDSHAKE", "HEARTBEAT", "CHANNEL", NULL
+  "OR", "EDGE", "ACCT", "HIST", "HANDSHAKE", "HEARTBEAT", "CHANNEL",
+  "SCHED", NULL
 };
 
 /** Return a bitmask for the log domain for which <b>domain</b> is the name,
@@ -1245,7 +1246,8 @@ domain_to_string(log_domain_mask_t domain, char *buf, size_t buflen)
     const char *d;
     int bit = tor_log2(domain);
     size_t n;
-    if (bit >= N_LOGGING_DOMAINS) {
+    if ((unsigned)bit >= sizeof(domain_list)/sizeof(*domain_list) - 1 ||
+        bit >= N_LOGGING_DOMAINS) {
       tor_snprintf(buf, buflen, "<BUG:Unknown domain %lx>", (long)domain);
       return buf+strlen(buf);
     }