--- a/conserver/consent.c
+++ b/conserver/consent.c
@@ -1308,7 +1308,7 @@ AddrsMatch(char *addr1, char *addr2)
 {
 #if USE_IPV6
     int error, ret = 0;
-    struct addrinfo *ai1, *ai2, hints;
+    struct addrinfo *ai1, *ai2, *rp1, *rp2, hints;
 #else
     /* so, since we might use inet_addr, we're going to use
      * (in_addr_t)(-1) as a sign of an invalid ip address.
@@ -1346,17 +1346,19 @@ AddrsMatch(char *addr1, char *addr2)
 	goto done;
     }
 
-    for (; ai1 != NULL; ai1 = ai1->ai_next) {
-	for (; ai2 != NULL; ai2 = ai2->ai_next) {
-	    if (ai1->ai_addr->sa_family != ai2->ai_addr->sa_family)
+    rp1 = ai1;
+    rp2 = ai2;
+    for (; rp1 != NULL; rp1 = rp1->ai_next) {
+	for (; rp2 != NULL; rp2 = rp2->ai_next) {
+	    if (rp1->ai_addr->sa_family != rp2->ai_addr->sa_family)
 		continue;
 
 	    if (
 # if HAVE_MEMCMP
-		   memcmp(&ai1->ai_addr, &ai2->ai_addr,
+		   memcmp(&rp1->ai_addr, &rp2->ai_addr,
 			  sizeof(struct sockaddr_storage))
 # else
-		   bcmp(&ai1->ai_addr, &ai2->ai_addr,
+		   bcmp(&rp1->ai_addr, &rp2->ai_addr,
 			sizeof(struct sockaddr_storage))
 # endif
 		   == 0) {
