#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-bgp.c,v 1.56 2002-12-11 07:13:58 guy Exp $";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-bgp.c,v 1.57 2002-12-15 08:33:23 hannes Exp $";
#endif
#include <tcpdump-stdinc.h>
case SAFNUM_MULTICAST:
case SAFNUM_UNIMULTICAST:
advance = decode_prefix4(tptr, buf, sizeof(buf));
- printf("\n\t %s", buf);
+ if (advance >= 0)
+ printf("\n\t %s", buf);
+ else
+ printf("\n\t (illegal prefix length)");
break;
case SAFNUM_LABUNICAST:
advance = decode_labeled_prefix4(tptr, buf, sizeof(buf));
case SAFNUM_MULTICAST:
case SAFNUM_UNIMULTICAST:
advance = decode_prefix4(tptr, buf, sizeof(buf));
- printf("\n\t %s", buf);
+ if (advance >= 0)
+ printf("\n\t %s", buf);
+ else
+ printf("\n\t (illegal prefix length)");
break;
case SAFNUM_LABUNICAST:
advance = decode_labeled_prefix4(tptr, buf, sizeof(buf));
printf("\n\t Withdrawn routes: %d bytes", len);
#else
char buf[MAXHOSTNAMELEN + 100];
+ int wpfx;
TCHECK2(p[2], len);
i = 2;
printf("\n\t Withdrawn routes:");
while(i < 2 + len) {
- i += decode_prefix4(&p[i], buf, sizeof(buf));
- printf("\n\t %s", buf);
+ wpfx = decode_prefix4(&p[i], buf, sizeof(buf));
+ if (wpfx >= 0) {
+ i += wpfx;
+ printf("\n\t %s", buf);
+ } else {
+ printf("\n\t (illegal prefix length)");
+ break;
+ }
}
#endif
}
while (dat + length > p) {
char buf[MAXHOSTNAMELEN + 100];
i = decode_prefix4(p, buf, sizeof(buf));
- printf("\n\t %s", buf);
- if (i < 0)
+ if (i >= 0) {
+ printf("\n\t %s", buf);
+ p += i;
+ } else {
+ printf("\n\t (illegal prefix length)");
break;
- p += i;
+ }
}
}
return;