- u_int16_t *ptr = (u_int16_t *)dat;
- u_int16_t val_h, val_l;
-
- ptr++; /* skip "Reserved" */
-
- val_h = ntohs(*ptr++);
- val_l = ntohs(*ptr++);
- printf("CRCErr=%u ", (val_h<<16) + val_l);
-
- val_h = ntohs(*ptr++);
- val_l = ntohs(*ptr++);
- printf("FrameErr=%u ", (val_h<<16) + val_l);
-
- val_h = ntohs(*ptr++);
- val_l = ntohs(*ptr++);
- printf("HardOver=%u ", (val_h<<16) + val_l);
-
- val_h = ntohs(*ptr++);
- val_l = ntohs(*ptr++);
- printf("BufOver=%u ", (val_h<<16) + val_l);
-
- val_h = ntohs(*ptr++);
- val_l = ntohs(*ptr++);
- printf("Timeout=%u ", (val_h<<16) + val_l);
-
- val_h = ntohs(*ptr++);
- val_l = ntohs(*ptr++);
- printf("AlignErr=%u ", (val_h<<16) + val_l);
+ uint32_t val;
+
+ if (length < 2) {
+ ND_PRINT((ndo, "AVP too short"));
+ return;
+ }
+ dat += 2; /* skip "Reserved" */
+ length -= 2;
+
+ if (length < 4) {
+ ND_PRINT((ndo, "AVP too short"));
+ return;
+ }
+ val = EXTRACT_32BITS(dat); dat += 4; length -= 4;
+ ND_PRINT((ndo, "CRCErr=%u ", val));
+
+ if (length < 4) {
+ ND_PRINT((ndo, "AVP too short"));
+ return;
+ }
+ val = EXTRACT_32BITS(dat); dat += 4; length -= 4;
+ ND_PRINT((ndo, "FrameErr=%u ", val));
+
+ if (length < 4) {
+ ND_PRINT((ndo, "AVP too short"));
+ return;
+ }
+ val = EXTRACT_32BITS(dat); dat += 4; length -= 4;
+ ND_PRINT((ndo, "HardOver=%u ", val));
+
+ if (length < 4) {
+ ND_PRINT((ndo, "AVP too short"));
+ return;
+ }
+ val = EXTRACT_32BITS(dat); dat += 4; length -= 4;
+ ND_PRINT((ndo, "BufOver=%u ", val));
+
+ if (length < 4) {
+ ND_PRINT((ndo, "AVP too short"));
+ return;
+ }
+ val = EXTRACT_32BITS(dat); dat += 4; length -= 4;
+ ND_PRINT((ndo, "Timeout=%u ", val));
+
+ if (length < 4) {
+ ND_PRINT((ndo, "AVP too short"));
+ return;
+ }
+ val = EXTRACT_32BITS(dat); dat += 4; length -= 4;
+ ND_PRINT((ndo, "AlignErr=%u ", val));