diff -Nuar tcpdump-3.9.5.orig/print-bgp.c tcpdump-3.9.5/print-bgp.c --- tcpdump-3.9.5.orig/print-bgp.c 2007-07-10 17:16:02.000000000 +0400 +++ tcpdump-3.9.5/print-bgp.c 2007-07-10 17:16:45.000000000 +0400 @@ -669,7 +669,7 @@ tlen-=15; /* ok now the variable part - lets read out TLVs*/ - while (tlen>0) { + while (tlen>0 && strlen <= buflen) { if (tlen < 3) return -1; TCHECK2(pptr[0], 3); @@ -684,7 +684,7 @@ tlv_type, tlv_len); ttlv_len=ttlv_len/8+1; /* how many bytes do we need to read ? */ - while (ttlv_len>0) { + while (ttlv_len>0 && strlen <= buflen) { TCHECK(pptr[0]); strlen+=snprintf(buf+strlen,buflen-strlen, "%02x",*pptr++); ttlv_len--;