*/
int
-print_unknown_data(netdissect_options *ndo, const u_char *cp,const char *ident,int len)
+print_unknown_data(netdissect_options *ndo, const u_char *cp,
+ const char *ident, u_int len)
{
- if (len < 0) {
- ND_PRINT("%sDissector error: print_unknown_data called with negative length",
- ident);
- return(0);
- }
- if (ndo->ndo_snapend - cp < len)
- len = ndo->ndo_snapend - cp;
- if (len < 0) {
- ND_PRINT("%sDissector error: print_unknown_data called with pointer past end of packet",
+ u_int len_to_print;
+
+ len_to_print = len;
+ if (!ND_TTEST_LEN(cp, 0)) {
+ ND_PRINT("%sDissector error: print_unknown_data called with pointer past end of packet",
ident);
return(0);
}
- hex_print(ndo, ident,cp,len);
+ if (ND_BYTES_AVAILABLE_AFTER(cp) < len_to_print)
+ len_to_print = ND_BYTES_AVAILABLE_AFTER(cp);
+ hex_print(ndo, ident, cp, len_to_print);
return(1); /* everything is ok */
}
startidx = idx;
while (idx < len) {
- ND_TCHECK_1(pptr + idx);
c = GET_U_1(pptr + idx);
if (c == '\n') {
/*
/* not in this packet */
return (0);
}
- ND_TCHECK_1(pptr + idx + 1);
if (GET_U_1(pptr + idx + 1) == '\n') {
/*
* CR-LF; end of line.
* All printable ASCII, but no line ending after that point
* in the buffer; treat this as if it were truncated.
*/
-trunc:
linelen = idx - startidx;
ND_PRINT("%s%.*s", prefix, (int)linelen, pptr + startidx);
nd_print_trunc(ndo);