diff options
Diffstat (limited to 'ares_parse_ns_reply.c')
-rw-r--r-- | ares_parse_ns_reply.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/ares_parse_ns_reply.c b/ares_parse_ns_reply.c index 5e9af71..d331e67 100644 --- a/ares_parse_ns_reply.c +++ b/ares_parse_ns_reply.c @@ -20,9 +20,6 @@ #include "ares_setup.h" -#ifdef HAVE_SYS_SOCKET_H -# include <sys/socket.h> -#endif #ifdef HAVE_NETINET_IN_H # include <netinet/in.h> #endif @@ -41,8 +38,6 @@ # include <arpa/nameser_compat.h> #endif -#include <stdlib.h> -#include <string.h> #include "ares.h" #include "ares_dns.h" #include "ares_private.h" @@ -110,6 +105,12 @@ int ares_parse_ns_reply( const unsigned char* abuf, int alen, rr_class = DNS_RR_CLASS( aptr ); rr_len = DNS_RR_LEN( aptr ); aptr += RRFIXEDSZ; + if (aptr + rr_len > abuf + alen) + { + free(rr_name); + status = ARES_EBADRESP; + break; + } if ( rr_class == C_IN && rr_type == T_NS ) { |