Blob Blame History Raw
diff --git a/pr/src/misc/prnetdb.c b/pr/src/misc/prnetdb.c
--- a/pr/src/misc/prnetdb.c
+++ b/pr/src/misc/prnetdb.c
@@ -2209,28 +2209,38 @@ PR_GetPrefLoopbackAddrInfo(PRNetAddr *re
         PRBool result_still_empty = PR_TRUE;
         PRADDRINFO *ai = res;
         do {
             PRNetAddr aNetAddr;
 
             while (ai && ai->ai_addrlen > sizeof(PRNetAddr))
                 ai = ai->ai_next;
 
-            if (ai) {
-                /* copy sockaddr to PRNetAddr */
-                memcpy(&aNetAddr, ai->ai_addr, ai->ai_addrlen);
-                aNetAddr.raw.family = ai->ai_addr->sa_family;
+            if (!ai) {
+                break;
+            }
+
+            /* copy sockaddr to PRNetAddr */
+            memcpy(&aNetAddr, ai->ai_addr, ai->ai_addrlen);
+            aNetAddr.raw.family = ai->ai_addr->sa_family;
 #ifdef _PR_INET6
-                if (AF_INET6 == aNetAddr.raw.family)
-                    aNetAddr.raw.family = PR_AF_INET6;
+            if (AF_INET6 == aNetAddr.raw.family)
+                aNetAddr.raw.family = PR_AF_INET6;
 #endif
-                if (ai->ai_addrlen < sizeof(PRNetAddr))
-                    memset(((char*)result)+ai->ai_addrlen, 0,
-                           sizeof(PRNetAddr) - ai->ai_addrlen);
+            if (ai->ai_addrlen < sizeof(PRNetAddr))
+                memset(((char*)&aNetAddr)+ai->ai_addrlen, 0,
+                       sizeof(PRNetAddr) - ai->ai_addrlen);
+
+            if (result->raw.family == PR_AF_INET) {
+                aNetAddr.inet.port = htons(port);
             }
+            else {
+                aNetAddr.ipv6.port = htons(port);
+            }
+
 
             /* If we obtain more than one result, prefer IPv6. */
             if (result_still_empty || aNetAddr.raw.family == PR_AF_INET6) {
                 memcpy(result, &aNetAddr, sizeof(PRNetAddr));
             }
             result_still_empty = PR_FALSE;
             ai = ai->ai_next;
         }