Fix getaddrinfo() loop
Commit b116d10f
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>
This commit is contained in:
parent
a1193f385e
commit
faaef39a3c
@ -387,7 +387,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:
|
||||
@ -395,12 +395,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