[tor-commits] [tor/master] Improve comments and defensive programming for 3045

nickm at torproject.org nickm at torproject.org
Mon May 30 19:41:00 UTC 2011


commit 3c0d944b076aa552216ca598a6cdc50e77ad1a58
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon May 30 15:15:10 2011 -0400

    Improve comments and defensive programming for 3045
    
    The comment fixes are trivial.  The defensive programming trick is to
    tolerate receiving NULL inputs on the describe functions. That should
    never actually happen, but it seems like the likeliest mistake for us
    to make in the future.
---
 src/or/router.c |   13 +++++++++++--
 src/or/router.h |    7 +++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/or/router.c b/src/or/router.c
index a11d3a5..0bd4c55 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -2223,8 +2223,7 @@ is_legal_hexdigest(const char *s)
  * and address <b>addr</b> or <b>addr32h</b>.
  *
  * The <b>nickname</b> and <b>addr</b> fields are optional and may be set to
- * NULL.  The <b>addr32h</b> field is optional and may be set to
- * <b>addr32h</b>.
+ * NULL.  The <b>addr32h</b> field is optional and may be set to 0.
  *
  * Return a pointer to the front of <b>buf</b>.
  */
@@ -2237,6 +2236,10 @@ format_node_description(char *buf,
                         uint32_t addr32h)
 {
   char *cp;
+
+  if (!buf)
+    return "<NULL BUFFER>";
+
   buf[0] = '$';
   base16_encode(buf+1, HEX_DIGEST_LEN+1, id_digest, DIGEST_LEN);
   cp = buf+1+HEX_DIGEST_LEN;
@@ -2268,6 +2271,8 @@ format_node_description(char *buf,
 const char *
 router_get_description(char *buf, const routerinfo_t *ri)
 {
+  if (!ri)
+    return "<null>";
   return format_node_description(buf,
                                  ri->cache_info.identity_digest,
                                  ri->is_named,
@@ -2284,6 +2289,8 @@ router_get_description(char *buf, const routerinfo_t *ri)
 const char *
 routerstatus_get_description(char *buf, const routerstatus_t *rs)
 {
+  if (!rs)
+    return "<null>";
   return format_node_description(buf,
                                  rs->identity_digest,
                                  rs->is_named,
@@ -2300,6 +2307,8 @@ routerstatus_get_description(char *buf, const routerstatus_t *rs)
 const char *
 extend_info_get_description(char *buf, const extend_info_t *ei)
 {
+  if (!ei)
+    return "<null>";
   return format_node_description(buf,
                                  ei->identity_digest,
                                  0,
diff --git a/src/or/router.h b/src/or/router.h
index 6cabfd5..a285a3e 100644
--- a/src/or/router.h
+++ b/src/or/router.h
@@ -86,6 +86,13 @@ int is_legal_nickname(const char *s);
 int is_legal_nickname_or_hexdigest(const char *s);
 int is_legal_hexdigest(const char *s);
 
+/**
+ * Longest allowed output of format_node_description, plus 1 character for
+ * NUL.  This allows space for:
+ * "$FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF~xxxxxxxxxxxxxxxxxxx at"
+ * " [ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255]"
+ * plus a terminating NUL.
+ */
 #define NODE_DESC_BUF_LEN (MAX_VERBOSE_NICKNAME_LEN+4+TOR_ADDR_BUF_LEN)
 const char *format_node_description(char *buf,
                                     const char *id_digest,





More information about the tor-commits mailing list