]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-domain.c
CHANGES: Add/move change(s) backported to 4.99
[tcpdump] / print-domain.c
index d93aee73b254b65014563a75ad45a38e6243322d..08d8460a4995894902ef4db994dbf61d1ea3d720 100644 (file)
@@ -21,9 +21,7 @@
 
 /* \summary: Domain Name System (DNS) printer */
 
-#ifdef HAVE_CONFIG_H
 #include <config.h>
-#endif
 
 #include "netdissect-stdinc.h"
 
@@ -724,11 +722,10 @@ ns_rprint(netdissect_options *ndo,
        len = GET_BE_U_2(cp);
        cp += 2;
 
-       rp = cp + len;
-
        ND_PRINT(" %s", tok2str(ns_type2str, "Type%u", typ));
-       if (rp > ndo->ndo_snapend)
-               return(NULL);
+
+       ND_TCHECK_LEN(cp, len);
+       rp = cp + len;
 
        switch (typ) {
        case T_A:
@@ -839,7 +836,10 @@ ns_rprint(netdissect_options *ndo,
        case T_URI:
                if (!ND_TTEST_LEN(cp, len))
                        return(NULL);
-               ND_ICHECK_U(len, <, 4);
+               if (len < 4) {
+                       ND_PRINT(" len %u is too short (< 4)", len);
+                       break;
+               }
                ND_PRINT(" %u %u ", GET_BE_U_2(cp), GET_BE_U_2(cp + 2));
                if (nd_printn(ndo, cp + 4, len - 4, ndo->ndo_snapend))
                        return(NULL);
@@ -895,8 +895,9 @@ ns_rprint(netdissect_options *ndo,
            }
        }
        return (rp);            /* XXX This isn't always right */
-invalid:
-       nd_print_invalid(ndo);
+
+trunc:
+       return(NULL);
 }
 
 void