Skip to content

Commit 5c5d687

Browse files
committed
Fix addrinfo segfault
1 parent 8fd1305 commit 5c5d687

File tree

3 files changed

+7
-3
lines changed

3 files changed

+7
-3
lines changed

ext/sockets/sockets.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,11 @@ static void address_info_free_obj(zend_object *object)
186186
{
187187
php_addrinfo *address_info = address_info_from_obj(object);
188188

189-
efree(address_info->addrinfo->ai_addr);
190189
if (address_info->addrinfo->ai_canonname != NULL) {
191190
efree(address_info->addrinfo->ai_canonname);
192191
}
192+
efree(address_info->addrinfo->ai_addr);
193+
efree(address_info->addrinfo);
193194

194195
zend_object_std_dtor(&address_info->std);
195196
}
@@ -2302,6 +2303,9 @@ PHP_FUNCTION(socket_addrinfo_lookup)
23022303
object_init_ex(&zaddr, address_info_ce);
23032304
res = Z_ADDRESS_INFO_P(&zaddr);
23042305

2306+
res->addrinfo = emalloc(sizeof(struct addrinfo));
2307+
memcpy(res->addrinfo, rp, sizeof(struct addrinfo));
2308+
23052309
res->addrinfo->ai_addr = emalloc(rp->ai_addrlen);
23062310
memcpy(res->addrinfo->ai_addr, rp->ai_addr, rp->ai_addrlen);
23072311

ext/sockets/tests/socket_addrinfo_bind.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ $addrinfo = socket_addrinfo_lookup('127.0.0.1', 2000, array(
1414
var_dump(socket_addrinfo_bind($addrinfo[0]));
1515
echo "Done";
1616
--EXPECT--
17-
object(Socket)#1 (0) {
17+
object(Socket)#2 (0) {
1818
}
1919
Done

ext/sockets/tests/socket_addrinfo_connect.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ $addrinfo = socket_addrinfo_lookup('127.0.0.1', 2000, array(
1414
var_dump(socket_addrinfo_connect($addrinfo[0]));
1515
echo "Done";
1616
--EXPECT--
17-
object(Socket)#1 (0) {
17+
object(Socket)#2 (0) {
1818
}
1919
Done

0 commit comments

Comments
 (0)