summaryrefslogtreecommitdiff
path: root/addrtoname.h
diff options
context:
space:
mode:
authorFrancois-Xavier Le Bail <devel.fx.lebail@orange.fr>2019-08-12 16:25:40 +0200
committerFrancois-Xavier Le Bail <devel.fx.lebail@orange.fr>2019-08-12 16:25:40 +0200
commit0cc245d4e6ce10624c73d168e2aa5bd267d31776 (patch)
tree39db9b595b2d992dad03d362820d10ccda47da72 /addrtoname.h
parentc2d6a5db5b15f08b9e858e3fcf1e6847aaebe26b (diff)
downloadtcpdump-0cc245d4e6ce10624c73d168e2aa5bd267d31776.tar.gz
Add GET_IP{6}ADDR_STRING() macros and get_ip{6}addr_string() functions
With setjmp/longjmp logic to call the ip{6}addr_string() functions after bounds checking. The macros must be used on a packet buffer pointer.
Diffstat (limited to 'addrtoname.h')
-rw-r--r--addrtoname.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/addrtoname.h b/addrtoname.h
index 9b78ac06..201ab431 100644
--- a/addrtoname.h
+++ b/addrtoname.h
@@ -65,6 +65,22 @@ extern const char * ieee8021q_tci_string(const uint16_t);
*/
static inline const char *
+get_ipaddr_string(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_4(p))
+ longjmp(ndo->ndo_truncated, 1);
+ return ipaddr_string(ndo, p);
+}
+
+static inline const char *
+get_ip6addr_string(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_16(p))
+ longjmp(ndo->ndo_truncated, 1);
+ return ip6addr_string(ndo, p);
+}
+
+static inline const char *
get_le64addr_string(netdissect_options *ndo, const u_char *p)
{
if (!ND_TTEST_8(p))
@@ -72,4 +88,6 @@ get_le64addr_string(netdissect_options *ndo, const u_char *p)
return le64addr_string(ndo, p);
}
+#define GET_IPADDR_STRING(p) get_ipaddr_string(ndo, (const u_char *)(p))
+#define GET_IP6ADDR_STRING(p) get_ip6addr_string(ndo, (const u_char *)(p))
#define GET_LE64ADDR_STRING(p) get_le64addr_string(ndo, (const u_char *)(p))