Merge branch 'collectd-4.4'
[collectd.git] / src / utils_dns.c
index a412809..b72cd5c 100644 (file)
@@ -34,6 +34,7 @@
  */
 
 #include "collectd.h"
+#include "common.h"
 
 #if HAVE_NETINET_IN_SYSTM_H
 # include <netinet/in_systm.h>
@@ -429,13 +430,16 @@ static int
 handle_ipv6 (struct ip6_hdr *ipv6, int len)
 {
     char buf[PCAP_SNAPLEN];
-    int offset;
+    unsigned int offset;
     int nexthdr;
 
     struct in6_addr s_addr;
     struct in6_addr d_addr;
     uint16_t payload_len;
 
+    if (0 > len)
+       return (0);
+
     offset = sizeof (struct ip6_hdr);
     nexthdr = ipv6->ip6_nxt;
     s_addr = ipv6->ip6_src;
@@ -459,7 +463,7 @@ handle_ipv6 (struct ip6_hdr *ipv6, int len)
        uint16_t ext_hdr_len;
 
        /* Catch broken packets */
-       if ((offset + sizeof (struct ip6_ext)) > len)
+       if ((offset + sizeof (struct ip6_ext)) > (unsigned int)len)
            return (0);
 
        /* Cannot handle fragments. */
@@ -479,7 +483,7 @@ handle_ipv6 (struct ip6_hdr *ipv6, int len)
     } /* while */
 
     /* Catch broken and empty packets */
-    if (((offset + payload_len) > len)
+    if (((offset + payload_len) > (unsigned int)len)
            || (payload_len == 0)
            || (payload_len > PCAP_SNAPLEN))
        return (0);
@@ -620,7 +624,7 @@ handle_linux_sll (const u_char *pkt, int len)
     } *hdr;
     uint16_t etype;
 
-    if (len < sizeof (struct sll_header))
+    if ((0 > len) || ((unsigned int)len < sizeof (struct sll_header)))
        return (0);
 
     hdr  = (struct sll_header *) pkt;
@@ -810,8 +814,7 @@ const char *qtype_str(int t)
            case T_ANY:         return ("ANY"); /* ... 255 */
 #endif /* __BIND >= 19950621 */
            default:
-                   snprintf (buf, 32, "#%i", t);
-                   buf[31] = '\0';
+                   ssnprintf (buf, sizeof (buf), "#%i", t);
                    return (buf);
     }; /* switch (t) */
     /* NOTREACHED */
@@ -838,7 +841,7 @@ const char *opcode_str (int o)
        return "Update";
        break;
     default:
-       snprintf(buf, 30, "Opcode%d", o);
+       ssnprintf(buf, sizeof (buf), "Opcode%d", o);
        return buf;
     }
     /* NOTREACHED */
@@ -882,8 +885,7 @@ const char *rcode_str (int rcode)
 #endif  /* RFC2136 rcodes */
 #endif /* __BIND >= 19950621 */
                default:
-                       snprintf (buf, 32, "RCode%i", rcode);
-                       buf[31] = '\0';
+                       ssnprintf (buf, sizeof (buf), "RCode%i", rcode);
                        return (buf);
        }
        /* Never reached */