diff options
-rw-r--r-- | changes/addr_is_internal_debug | 4 | ||||
-rw-r--r-- | src/common/address.c | 7 | ||||
-rw-r--r-- | src/common/address.h | 5 |
3 files changed, 12 insertions, 4 deletions
diff --git a/changes/addr_is_internal_debug b/changes/addr_is_internal_debug new file mode 100644 index 000000000..6de221bb2 --- /dev/null +++ b/changes/addr_is_internal_debug @@ -0,0 +1,4 @@ + o Minor features: + - Log the call-site of a failed tor_addr_is_internal(), so that we + can learn who is calling it with AF_UNSPECIFIED and fix the + second (unrelated) part of bug 7086. diff --git a/src/common/address.c b/src/common/address.c index 9a61872af..2c0c97db9 100644 --- a/src/common/address.c +++ b/src/common/address.c @@ -305,7 +305,8 @@ tor_addr_lookup(const char *name, uint16_t family, tor_addr_t *addr) * also treated as internal for now.) */ int -tor_addr_is_internal(const tor_addr_t *addr, int for_listening) +tor_addr_is_internal_(const tor_addr_t *addr, int for_listening, + const char *filename, int lineno) { uint32_t iph4 = 0; uint32_t iph6[4]; @@ -355,8 +356,8 @@ tor_addr_is_internal(const tor_addr_t *addr, int for_listening) /* unknown address family... assume it's not safe for external use */ /* rather than tor_assert(0) */ - log_warn(LD_BUG, "tor_addr_is_internal() called with a non-IP address of " - "type %d", (int)v_family); + log_warn(LD_BUG, "tor_addr_is_internal() called from %s:%d with a " + "non-IP address of type %d", filename, lineno, (int)v_family); tor_fragile_assert(); return 1; } diff --git a/src/common/address.h b/src/common/address.h index 68775fb29..9e7d75012 100644 --- a/src/common/address.h +++ b/src/common/address.h @@ -168,7 +168,10 @@ int tor_addr_compare_masked(const tor_addr_t *addr1, const tor_addr_t *addr2, unsigned int tor_addr_hash(const tor_addr_t *addr); int tor_addr_is_v4(const tor_addr_t *addr); -int tor_addr_is_internal(const tor_addr_t *ip, int for_listening); +int tor_addr_is_internal_(const tor_addr_t *ip, int for_listening, + const char *filename, int lineno); +#define tor_addr_is_internal(addr, for_listening) \ + tor_addr_is_internal_((addr), (for_listening), _SHORT_FILE_, __LINE__) /** Longest length that can be required for a reverse lookup name. */ /* 32 nybbles, 32 dots, 8 characters of "ip6.arpa", 1 NUL: 73 characters. */ |