X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/32cde073ff1b9ce6235268d53b3fbc934acc0de8..3842b84cee5b5a75a109f41e93640e67bcf05d5c:/print-rsvp.c diff --git a/print-rsvp.c b/print-rsvp.c index 63606fcc..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.32 2004-09-16 09:02:43 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]", @@ -932,8 +938,8 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) { return-1; printf("%s Restart Time: %ums, Recovery Time: %ums", ident, - EXTRACT_16BITS(obj_tptr), - EXTRACT_16BITS(obj_tptr+4)); + EXTRACT_32BITS(obj_tptr), + EXTRACT_32BITS(obj_tptr+4)); obj_tlen-=8; obj_tptr+=8; break;