summaryrefslogtreecommitdiffstats
path: root/contrib/tcpdump/print-bgp.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tcpdump/print-bgp.c')
-rw-r--r--contrib/tcpdump/print-bgp.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/contrib/tcpdump/print-bgp.c b/contrib/tcpdump/print-bgp.c
index 342292b..b14067d 100644
--- a/contrib/tcpdump/print-bgp.c
+++ b/contrib/tcpdump/print-bgp.c
@@ -33,7 +33,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-bgp.c,v 1.27 2001/10/18 09:52:17 itojun Exp $";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-bgp.c,v 1.27.2.1 2003/02/26 05:51:56 fenner Exp $";
#endif
#include <sys/param.h>
@@ -469,11 +469,19 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *dat, int len)
switch (af) {
case AFNUM_INET:
advance = decode_prefix4(p, buf, sizeof(buf));
+ if (advance < 0) {
+ p = dat + len;
+ break;
+ }
printf(" %s", buf);
break;
#ifdef INET6
case AFNUM_INET6:
advance = decode_prefix6(p, buf, sizeof(buf));
+ if (advance < 0) {
+ p = dat + len;
+ break;
+ }
printf(" %s", buf);
break;
#endif
@@ -505,11 +513,19 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *dat, int len)
switch (af) {
case AFNUM_INET:
advance = decode_prefix4(p, buf, sizeof(buf));
+ if (advance < 0) {
+ p = dat + len;
+ break;
+ }
printf(" %s", buf);
break;
#ifdef INET6
case AFNUM_INET6:
advance = decode_prefix6(p, buf, sizeof(buf));
+ if (advance < 0) {
+ p = dat + len;
+ break;
+ }
printf(" %s", buf);
break;
#endif
@@ -598,6 +614,7 @@ bgp_update_print(const u_char *dat, int length)
printf(" (Withdrawn routes: %d bytes)", len);
#else
char buf[MAXHOSTNAMELEN + 100];
+ int wpfx;
TCHECK2(p[2], len);
i = 2;
@@ -605,7 +622,10 @@ bgp_update_print(const u_char *dat, int length)
printf(" (Withdrawn routes:");
while(i < 2 + len) {
- i += decode_prefix4(&p[i], buf, sizeof(buf));
+ wpfx = decode_prefix4(&p[i], buf, sizeof(buf));
+ if (wpfx < 0)
+ break;
+ i += wpfx;
printf(" %s", buf);
}
printf(")\n");
@@ -666,9 +686,9 @@ bgp_update_print(const u_char *dat, int length)
while (dat + length > p) {
char buf[MAXHOSTNAMELEN + 100];
i = decode_prefix4(p, buf, sizeof(buf));
- printf(" %s", buf);
if (i < 0)
break;
+ printf(" %s", buf);
p += i;
}
OpenPOWER on IntegriCloud