diff --git a/ares/adig.c b/ares/adig.c
index 0513d2fd77ccb6a2fe5a4e6aa513fb01bf21c906..2208d9a23c8276d2bba33d72f0d16313c2103e3b 100644
--- a/ares/adig.c
+++ b/ares/adig.c
@@ -370,7 +370,8 @@ static const unsigned char *display_question(const unsigned char *aptr,
 					     int alen)
 {
   char *name;
-  int type, dnsclass, status, len;
+  int type, dnsclass, status;
+  long len;
 
   /* Parse the question name. */
   status = ares_expand_name(aptr, abuf, alen, &name, &len);
@@ -408,7 +409,8 @@ static const unsigned char *display_rr(const unsigned char *aptr,
 {
   const unsigned char *p;
   char *name;
-  int type, dnsclass, ttl, dlen, status, len;
+  int type, dnsclass, ttl, dlen, status;
+  long len;
   struct in_addr addr;
 
   /* Parse the RR name. */
diff --git a/ares/ares.h b/ares/ares.h
index 7ff256c8fe0fcb0770f9f9e876a5933de79a2436..c8f708edcd94485864a4beed3d212f6715b2ae98 100644
--- a/ares/ares.h
+++ b/ares/ares.h
@@ -117,7 +117,7 @@ void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
 int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
 		 int rd, unsigned char **buf, int *buflen);
 int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
-		     int alen, char **s, int *enclen);
+		     int alen, char **s, long *enclen);
 int ares_parse_a_reply(const unsigned char *abuf, int alen,
 		       struct hostent **host);
 int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
diff --git a/ares/ares_expand_name.c b/ares/ares_expand_name.c
index b242abf0f8d769c2dc340b542f06c56584d05070..457f4da05a9150ac250ac39e604b022d7f23b94b 100644
--- a/ares/ares_expand_name.c
+++ b/ares/ares_expand_name.c
@@ -54,7 +54,7 @@ static int name_length(const unsigned char *encoded, const unsigned char *abuf,
  */
 
 int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
-		     int alen, char **s, int *enclen)
+		     int alen, char **s, long *enclen)
 {
   int len, indir = 0;
   char *q;
diff --git a/ares/ares_parse_a_reply.c b/ares/ares_parse_a_reply.c
index 1c18b56a91e095336602107e4bf520cfe934126d..6c7e193328ad231ca05a87e636c7fa5f5b438c5e 100644
--- a/ares/ares_parse_a_reply.c
+++ b/ares/ares_parse_a_reply.c
@@ -35,8 +35,9 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
 		       struct hostent **host)
 {
   unsigned int qdcount, ancount;
-  int status, i, len, rr_type, rr_class, rr_len, naddrs;
+  int status, i, rr_type, rr_class, rr_len, naddrs;
   int naliases;
+  long len;
   const unsigned char *aptr;
   char *hostname, *rr_name, *rr_data, **aliases;
   struct in_addr *addrs;
diff --git a/ares/ares_parse_ptr_reply.c b/ares/ares_parse_ptr_reply.c
index 13b3ab03b68d8121099be10399ededd397c007b0..0651a1e2057799e5beef6a5f614cadf037f94d4e 100644
--- a/ares/ares_parse_ptr_reply.c
+++ b/ares/ares_parse_ptr_reply.c
@@ -34,7 +34,8 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
 			 int addrlen, int family, struct hostent **host)
 {
   unsigned int qdcount, ancount;
-  int status, i, len, rr_type, rr_class, rr_len;
+  int status, i, rr_type, rr_class, rr_len;
+  long len;
   const unsigned char *aptr;
   char *ptrname, *hostname, *rr_name, *rr_data;
   struct hostent *hostent;
diff --git a/ares/ares_process.c b/ares/ares_process.c
index b381757b7ce87c824a15460f3bc22bf31fe4ff1a..b2661f73009c230cdaeb8d6004a45cd983c1110e 100644
--- a/ares/ares_process.c
+++ b/ares/ares_process.c
@@ -525,7 +525,7 @@ static int same_questions(const unsigned char *qbuf, int qlen,
     const unsigned char *p;
     int qdcount;
     char *name;
-    int namelen;
+    long namelen;
     int type;
     int dnsclass;
   } q, a;