summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/tcpdump/print-bgp.c10
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");