diff --git a/src/rfc1035.c b/src/rfc1035.c index a163919..9f4504e 100644 --- a/src/rfc1035.c +++ b/src/rfc1035.c @@ -982,10 +982,12 @@ unsigned int extract_request(struct dns_header *header, size_t qlen, char *name, *name = 0; /* return empty name if no query found. */ - if (ntohs(header->qdcount) != 1 || OPCODE(header) != QUERY || - ntohs(header->ancount) != 0 || ntohs(header->nscount) != 0) + if (ntohs(header->qdcount) != 1 || OPCODE(header) != QUERY) return 0; /* must be exactly one query. */ + if (!(header->hb3 & HB3_QR) && (ntohs(header->ancount) != 0 || ntohs(header->nscount) != 0)) + return 0; /* non-standard query. */ + if (!extract_name(header, qlen, &p, name, 1, 4)) return 0; /* bad packet */