- ND_TCHECK_1(sp);
- ND_PRINT(" %u entries", EXTRACT_U_1(sp));
- if ((u_int)((EXTRACT_U_1(sp) * 12) + 8) < len) {
+
+ /* Entry Count */
+ ND_ICHECK_U(len, <, 4);
+ entry_count = GET_U_1(sp + 3);
+ ND_PRINT(" %u entries", entry_count);
+
+ /* RP Address */
+ ND_ICHECK_U(len, <, 8);
+ /* XXX -print this based on ndo_vflag? */
+ ND_TCHECK_4(sp + 4);
+
+ /* Entries */
+ ND_TCHECK_LEN(sp + 8, entry_count*12);
+
+ if (len > (8 + entry_count*12)) {
+ /* Encapsulated IP packet */