]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
nodelist: Clear buffers and detect more caller errors in describe.c
authorteor <teor@torproject.org>
Mon, 19 Aug 2019 06:36:20 +0000 (16:36 +1000)
committerteor <teor@torproject.org>
Thu, 22 Aug 2019 13:51:32 +0000 (23:51 +1000)
Part of 21003.

src/feature/nodelist/describe.c

index b64d4335a6a99a649a8a0a7793cf6f72a9e30e1e..7ec18438c1145aebdaf2d6a43ba4a27035bb029e 100644 (file)
@@ -44,6 +44,13 @@ format_node_description(char *buf,
   if (!buf)
     return "<NULL BUFFER>";
 
+  memset(buf, 0, NODE_DESC_BUF_LEN);
+
+  if (!id_digest) {
+    memcpy(buf, "<NULL ID DIGEST>", 17);
+    return buf;
+  }
+
   buf[0] = '$';
   base16_encode(buf+1, HEX_DIGEST_LEN+1, id_digest, DIGEST_LEN);
   cp = buf+1+HEX_DIGEST_LEN;
@@ -122,6 +129,8 @@ node_describe(const node_t *node)
     nickname = node->ri->nickname;
     addr32h = node->ri->addr;
     ipv6_addr = &node->ri->ipv6_addr;
+  } else {
+    return "<null rs and ri>";
   }
 
   return format_node_description(buf,
@@ -179,6 +188,16 @@ extend_info_describe(const extend_info_t *ei)
 void
 router_get_verbose_nickname(char *buf, const routerinfo_t *router)
 {
+  if (!buf)
+    return;
+
+  memset(buf, 0, MAX_VERBOSE_NICKNAME_LEN+1);
+
+  if (!router) {
+    memcpy(buf, "<null>", 7);
+    return;
+  }
+
   buf[0] = '$';
   base16_encode(buf+1, HEX_DIGEST_LEN+1, router->cache_info.identity_digest,
                 DIGEST_LEN);