}
const DNSAnswerHeader *head = (DNSAnswerHeader *)data;
+ uint16_t datalen = ntohs(head->len);
data += sizeof(DNSAnswerHeader);
switch (ntohs(head->type)) {
case DNS_RECORD_TYPE_A:
{
- if (ntohs(head->len) == 4) {
+ if (datalen == 0 || datalen == 4) {
//PrintRawDataFp(stdout, data, ntohs(head->len));
//char a[16];
//PrintInet(AF_INET, (const void *)data, a, sizeof(a));
goto bad_data;
}
- data += ntohs(head->len);
+ data += datalen;
break;
}
case DNS_RECORD_TYPE_AAAA:
{
- if (ntohs(head->len) == 16) {
+ if (datalen == 0 || datalen == 16) {
//char a[46];
//PrintInet(AF_INET6, (const void *)data, a, sizeof(a));
//SCLogInfo("AAAA %s TTL %u", a, ntohl(head->ttl));
goto bad_data;
}
- data += ntohs(head->len);
+ data += datalen;
break;
}
case DNS_RECORD_TYPE_MX: