--- src/rfc1035.c.orig +++ src/rfc1035.c @@ -1624,6 +1624,9 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen, int rd_bit = (header->hb3 & HB3_RD); int count = 255; /* catch loops */ + // Make sure we do not underflow here too. + if ((ssize_t)qlen > (limit - ((char *)header))) return 0; + /* Suppress cached answers if no_cache set. */ if (no_cache) rd_bit = 0;