X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/c8a718a919f0ea88aea525ae4757bca6aac2dc4d..f7b8cfec15da3c75d501a1a85d515d4e747b65be:/print-ospf.c diff --git a/print-ospf.c b/print-ospf.c index a7b4cd59..79ed3970 100644 --- a/print-ospf.c +++ b/print-ospf.c @@ -23,7 +23,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-ospf.c,v 1.45.2.2 2003-11-16 08:51:37 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ospf.c,v 1.45.2.4 2004-03-24 02:44:30 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -413,12 +413,10 @@ ospf_print_lsa(register const struct lsa *lsap) switch (*(&lsap->ls_hdr.un_lsa_id.opaque_field.opaque_type)) { case LS_OPAQUE_TYPE_TE: - if (!TTEST2(*tptr, 4)) - goto trunc; - tptr = (u_int8_t *)(&lsap->lsa_un.un_te_lsa_tlv.type); while (ls_length != 0) { + TCHECK2(*tptr, 4); if (ls_length < 4) { printf("\n\t Remaining LS length %u < 4", ls_length); return(ls_end); @@ -447,8 +445,7 @@ ospf_print_lsa(register const struct lsa *lsap) tlv_length); return(ls_end); } - if (!TTEST2(*tptr, 4)) - goto trunc; + TCHECK2(*tptr, 4); subtlv_type = EXTRACT_16BITS(tptr); subtlv_length = EXTRACT_16BITS(tptr+2); tptr+=4; @@ -459,8 +456,7 @@ ospf_print_lsa(register const struct lsa *lsap) subtlv_type, subtlv_length); - if (!TTEST2(*tptr, subtlv_length)) - goto trunc; + TCHECK2(*tptr, subtlv_length); switch(subtlv_type) { case LS_OPAQUE_TE_LINK_SUBTLV_ADMIN_GROUP: printf(", 0x%08x", EXTRACT_32BITS(tptr)); @@ -550,6 +546,11 @@ ospf_print_lsa(register const struct lsa *lsap) break; case LS_OPAQUE_TE_TLV_ROUTER: + if (tlv_length < 4) { + printf("\n\t TLV length %u < 4", tlv_length); + return(ls_end); + } + TCHECK2(*tptr, 4); printf(", %s", ipaddr_string(tptr)); break;