Fix use after free in getaddrinfo(3) error case.

This commit is contained in:
Jonas 'Sortie' Termansen 2016-07-26 13:16:21 +02:00
parent 46fbe3ec0d
commit e962f5e4cc
1 changed files with 7 additions and 3 deletions

View File

@ -41,9 +41,13 @@ static bool linkaddrinfo(struct addrinfo** restrict* res_ptr,
if ( !link->ai_addr )
return free(link), false;
memcpy(link->ai_addr, templ->ai_addr, templ->ai_addrlen);
link->ai_canonname = templ->ai_canonname ? strdup(templ->ai_canonname) : NULL;
if ( templ->ai_canonname && !link->ai_canonname )
return free(link), free(link->ai_addr), false;
link->ai_canonname = NULL;
if ( templ->ai_canonname )
{
link->ai_canonname = strdup(templ->ai_canonname);
if ( !link->ai_canonname )
return free(link->ai_addr), free(link), false;
}
**res_ptr = link;
*res_ptr = &link->ai_next;
return true;