conserver: free correct addrinfo to prevent crash.
[feed/packages.git] / net / conserver / patches / 002-addrsmatch-freeaddrinfo.patch
1 --- a/conserver/consent.c
2 +++ b/conserver/consent.c
3 @@ -1269,7 +1269,7 @@ AddrsMatch(char *addr1, char *addr2)
4 {
5 #if USE_IPV6
6 int error, ret = 0;
7 - struct addrinfo *ai1, *ai2, hints;
8 + struct addrinfo *ai1, *ai2, *rp1, *rp2, hints;
9 #else
10 /* so, since we might use inet_addr, we're going to use
11 * (in_addr_t)(-1) as a sign of an invalid ip address.
12 @@ -1307,17 +1307,19 @@ AddrsMatch(char *addr1, char *addr2)
13 goto done;
14 }
15
16 - for (; ai1 != NULL; ai1 = ai1->ai_next) {
17 - for (; ai2 != NULL; ai2 = ai2->ai_next) {
18 - if (ai1->ai_addr->sa_family != ai2->ai_addr->sa_family)
19 + rp1 = ai1;
20 + rp2 = ai2;
21 + for (; rp1 != NULL; rp1 = rp1->ai_next) {
22 + for (; rp2 != NULL; rp2 = rp2->ai_next) {
23 + if (rp1->ai_addr->sa_family != rp2->ai_addr->sa_family)
24 continue;
25
26 if (
27 # if HAVE_MEMCMP
28 - memcmp(&ai1->ai_addr, &ai2->ai_addr,
29 + memcmp(&rp1->ai_addr, &rp2->ai_addr,
30 sizeof(struct sockaddr_storage))
31 # else
32 - bcmp(&ai1->ai_addr, &ai2->ai_addr,
33 + bcmp(&rp1->ai_addr, &rp2->ai_addr,
34 sizeof(struct sockaddr_storage))
35 # endif
36 == 0) {