diff --git a/src/or/router.c b/src/or/router.c index a11d3a5923..0bd4c55026 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -2223,8 +2223,7 @@ is_legal_hexdigest(const char *s) * and address addr or addr32h. * * The nickname and addr fields are optional and may be set to - * NULL. The addr32h field is optional and may be set to - * addr32h. + * NULL. The addr32h field is optional and may be set to 0. * * Return a pointer to the front of buf. */ @@ -2237,6 +2236,10 @@ format_node_description(char *buf, uint32_t addr32h) { char *cp; + + if (!buf) + return ""; + 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 ""; 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 ""; 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 ""; return format_node_description(buf, ei->identity_digest, 0, diff --git a/src/or/router.h b/src/or/router.h index 6cabfd56e8..a285a3e773 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,