From 66b6c7f5e102215d8f920cd4d061da682a35776b Mon Sep 17 00:00:00 2001 From: David Carlier Date: Tue, 27 May 2025 22:55:11 +0100 Subject: [PATCH] ext/sockets: socket_create_pair() simplify workflow. create the pair objects only on success. --- ext/sockets/sockets.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index 2a5a5e975f46e..82634cc8f3e54 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -2379,27 +2379,23 @@ PHP_FUNCTION(socket_create_pair) RETURN_THROWS(); } - object_init_ex(&retval[0], socket_ce); - php_sock[0] = Z_SOCKET_P(&retval[0]); - - object_init_ex(&retval[1], socket_ce); - php_sock[1] = Z_SOCKET_P(&retval[1]); - if (socketpair(domain, type, protocol, fds_array) != 0) { SOCKETS_G(last_error) = errno; php_error_docref(NULL, E_WARNING, "Unable to create socket pair [%d]: %s", errno, sockets_strerror(errno)); - zval_ptr_dtor(&retval[0]); - zval_ptr_dtor(&retval[1]); RETURN_FALSE; } fds_array_zval = zend_try_array_init_size(fds_array_zval, 2); if (!fds_array_zval) { - zval_ptr_dtor(&retval[0]); - zval_ptr_dtor(&retval[1]); RETURN_THROWS(); } + object_init_ex(&retval[0], socket_ce); + php_sock[0] = Z_SOCKET_P(&retval[0]); + + object_init_ex(&retval[1], socket_ce); + php_sock[1] = Z_SOCKET_P(&retval[1]); + php_sock[0]->bsd_socket = fds_array[0]; php_sock[1]->bsd_socket = fds_array[1]; php_sock[0]->type = domain;