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 ) if ( !link->ai_addr )
return free(link), false; return free(link), false;
memcpy(link->ai_addr, templ->ai_addr, templ->ai_addrlen); memcpy(link->ai_addr, templ->ai_addr, templ->ai_addrlen);
link->ai_canonname = templ->ai_canonname ? strdup(templ->ai_canonname) : NULL; link->ai_canonname = NULL;
if ( templ->ai_canonname && !link->ai_canonname ) if ( templ->ai_canonname )
return free(link), free(link->ai_addr), false; {
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;
*res_ptr = &link->ai_next; *res_ptr = &link->ai_next;
return true; return true;