dns_add_answer(TYPE_A, (uint8_t *) &sa->sin_addr, 4, ttl);
}
if (ifa->ifa_addr->sa_family == AF_INET6) {
- uint8_t ll_prefix[] = {0xfe, 0x80 };
sa6 = (struct sockaddr_in6 *) ifa->ifa_addr;
- if (!memcmp(&sa6->sin6_addr, &ll_prefix, 2))
- dns_add_answer(TYPE_AAAA, (uint8_t *) &sa6->sin6_addr, 16, ttl);
+ dns_add_answer(TYPE_AAAA, (uint8_t *) &sa6->sin6_addr, 16, ttl);
}
}
dns_send_answer(iface, to, mdns_hostname_local);
if (IS_COMPRESSED(l))
return offset + 2;
+ if (l + 1 > len) return -1;
len -= l + 1;
offset += l + 1;
buffer += l + 1;
struct dns_answer *a;
uint8_t *rdata;
- if (!name) {
+ if (!name || *rlen < 0) {
fprintf(stderr, "dropping: bad question\n");
return -1;
}
char *name = dns_consume_name(buffer, len, &b, &rlen);
struct dns_question *q;
- if (!name) {
+ if (!name || rlen < 0) {
fprintf(stderr, "dropping: bad name\n");
return;
}