From: hannes Date: Mon, 25 Apr 2005 13:19:34 +0000 (+0000) Subject: bugfix: prevent infinite loop in ERO processing, print ERO subtype length X-Git-Tag: tcpdump-3.9.1~103 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/a5645569d5249fe29ca266b4999583bb96568100?hp=84bb6d7572062a74dc682c8c00dbd1bd9f972ca3 bugfix: prevent infinite loop in ERO processing, print ERO subtype length --- diff --git a/print-rsvp.c b/print-rsvp.c index e9dd2814..987f2012 100644 --- a/print-rsvp.c +++ b/print-rsvp.c @@ -15,7 +15,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-rsvp.c,v 1.33 2005-01-13 07:08:54 hannes Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-rsvp.c,v 1.33.2.1 2005-04-25 13:19:34 hannes Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -558,7 +558,7 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) { rsvp_obj_ctype=rsvp_obj_header->ctype; if(rsvp_obj_len % 4 || rsvp_obj_len < sizeof(struct rsvp_object_header)) { - printf("ERROR: object header too short %u < %lu", rsvp_obj_len, + printf("%sERROR: object header too short %u < %lu", ident, rsvp_obj_len, (unsigned long)sizeof(const struct rsvp_object_header)); return -1; } @@ -883,11 +883,17 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) { switch(rsvp_obj_ctype) { case RSVP_CTYPE_IPV4: while(obj_tlen >= 4 ) { - printf("%s Subobject Type: %s", + printf("%s Subobject Type: %s, length %u", ident, tok2str(rsvp_obj_xro_values, "Unknown %u", - RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr))); + RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr)), + *(obj_tptr+1)); + + if (*(obj_tptr+1) == 0) /* prevent infinite loops */ + printf("%s ERROR: zero length ERO subtype",ident); + break; + switch(RSVP_OBJ_XRO_MASK_SUBOBJ(*obj_tptr)) { case RSVP_OBJ_XRO_IPV4: printf(", %s, %s/%u, Flags: [%s]",