memset(buffer, 0, sizeof(buffer));
if (parse_q922_header(ndo, p, &dlci, &addr_len, &flags, length) == 1){
- nd_snprintf(buffer, sizeof(buffer), "DLCI %u", dlci);
+ snprintf(buffer, sizeof(buffer), "DLCI %u", dlci);
}
return buffer;
if (ethertype_print(ndo, extracted_ethertype,
p+addr_len+ETHERTYPE_LEN,
length-addr_len-ETHERTYPE_LEN,
- ndo->ndo_snapend-p-addr_len-ETHERTYPE_LEN,
+ ND_BYTES_AVAILABLE_AFTER(p)-addr_len-ETHERTYPE_LEN,
NULL, NULL) == 0)
/* ether_type not known, probably it wasn't one */
ND_PRINT("UI %02x! ", GET_U_1(p + addr_len));
break;
case NLPID_SNAP:
- if (snap_print(ndo, p, length, ndo->ndo_snapend - p, NULL, NULL, 0) == 0) {
+ if (snap_print(ndo, p, length, ND_BYTES_AVAILABLE_AFTER(p), NULL, NULL, 0) == 0) {
/* ether_type not known, print raw packet */
if (!ndo->ndo_eflag)
fr_hdr_print(ndo, length + hdr_len, hdr_len,
*/
ndo->ndo_protocol = "mfr";
- ND_TCHECK_4(p); /* minimum frame header length */
+
+ if (length < 4) { /* minimum frame header length */
+ ND_PRINT("[length %u < 4]", length);
+ nd_print_invalid(ndo);
+ return length;
+ }
+ ND_TCHECK_4(p);
if ((GET_U_1(p) & MFR_BEC_MASK) == MFR_CTRL_FRAME && GET_U_1(p + 1) == 0) {
ND_PRINT("FRF.16 Control, Flags [%s], %s, length %u",
switch (ie_type) {
case MFR_CTRL_IE_MAGIC_NUM:
+ /* FRF.16.1 Section 3.4.3 Magic Number Information Element */
+ if (ie_len != 4) {
+ ND_PRINT("[IE data length %d != 4]", ie_len);
+ nd_print_invalid(ndo);
+ break;
+ }
ND_PRINT("0x%08x", GET_BE_U_4(tptr));
break;