Fix getaddrinfo() loop
Commitb116d10f
did the following change: Use switch, int and sa_family_t with AF_INET in uri.c. This breaks when getaddrinfo() only returns a single record, as in that case the "break" only exits the switch statement and the loop-step "res=res->ai_next" is still executed. After that "res == NULL" is wrongly interpreted as not having found an AF_INET or AF_INET6 address. Signed-off-by: Marcelo Roberto Jimenez <mroberto@users.sourceforge.net> (cherry picked from commitfaaef39a3c
)
This commit is contained in:
parent
153d71f10b
commit
11f05dc09d
@ -388,7 +388,7 @@ static int parse_hostport(
|
||||
|
||||
ret = getaddrinfo(srvname, NULL, &hints, &res0);
|
||||
if (ret == 0) {
|
||||
for (res = res0; res && !ret; res = res->ai_next) {
|
||||
for (res = res0; res; res = res->ai_next) {
|
||||
switch (res->ai_family) {
|
||||
case AF_INET:
|
||||
case AF_INET6:
|
||||
@ -396,12 +396,10 @@ static int parse_hostport(
|
||||
memcpy(&out->IPaddress,
|
||||
res->ai_addr,
|
||||
res->ai_addrlen);
|
||||
ret=1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
found:
|
||||
freeaddrinfo(res0);
|
||||
if (res == NULL)
|
||||
/* Didn't find an AF_INET or AF_INET6 address. */
|
||||
|
Loading…
Reference in New Issue
Block a user