X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/fcc82f451d3e51fdf636abbf927edb287bada0e0..36332137db86e917bceef892dd5ebdbf1687b51a:/print-lwres.c diff --git a/print-lwres.c b/print-lwres.c index 507111e6..aad4eee3 100644 --- a/print-lwres.c +++ b/print-lwres.c @@ -28,8 +28,8 @@ */ #ifndef lint -static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-lwres.c,v 1.9 2002-12-11 07:14:04 guy Exp $ (LBL)"; +static const char rcsid[] _U_ = + "@(#) $Header: /tcpdump/master/tcpdump/print-lwres.c,v 1.13 2004-03-24 01:54:29 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -265,16 +265,19 @@ lwres_printaddr(lwres_addr_t *ap) l = EXTRACT_16BITS(&ap->length); /* XXX ap points to packed struct */ p = (const char *)&ap->length + sizeof(ap->length); - if (p + l > (const char *)snapend) - goto trunc; + TCHECK2(*p, l); switch (EXTRACT_32BITS(&ap->family)) { case 1: /* IPv4 */ + if (l < 4) + return -1; printf(" %s", ipaddr_string(p)); p += sizeof(struct in_addr); break; #ifdef INET6 case 2: /* IPv6 */ + if (l < 16) + return -1; printf(" %s", ip6addr_string(p)); p += sizeof(struct in6_addr); break; @@ -428,7 +431,7 @@ lwres_print(register const u_char *bp, u_int length) /* XXX grbn points to packed struct */ s = (const char *)&grbn->namelen + sizeof(grbn->namelen); - l = EXTRACT_16BITS(&gabn->namelen); + l = EXTRACT_16BITS(&grbn->namelen); advance = lwres_printname(l, s); if (advance < 0)