diff options
-rw-r--r-- | usr.sbin/tcpdump/print-bgp.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/usr.sbin/tcpdump/print-bgp.c b/usr.sbin/tcpdump/print-bgp.c index 5c36d79a3fc..0f9a30a5bf0 100644 --- a/usr.sbin/tcpdump/print-bgp.c +++ b/usr.sbin/tcpdump/print-bgp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: print-bgp.c,v 1.5 2005/04/27 23:03:01 cloder Exp $ */ +/* $OpenBSD: print-bgp.c,v 1.6 2005/06/14 17:57:21 moritz Exp $ */ /* * Copyright (C) 1999 WIDE Project. @@ -609,6 +609,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; @@ -616,7 +617,12 @@ 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) { + printf(" (illegal prefix length)"); + break; + } + i += wpfx; printf(" %s", buf); } printf(")\n"); |