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