From 9a74b23297167ca7956fd21428c8b987e7d99aa5 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 23 May 2019 11:11:54 +0200 Subject: [PATCH] Fixed bug #78038 socket_select with references --- NEWS | 4 ++++ ext/sockets/sockets.c | 2 ++ ext/sockets/tests/socket_select.phpt | 1 + 3 files changed, 7 insertions(+) diff --git a/NEWS b/NEWS index 827ed8e9a7..1277de38a9 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,10 @@ PHP NEWS . Fixed bug #77956 (When mysqli.allow_local_infile = Off, use a meaningful error message). (Sjon Hortensius) +- Sockets: + . Fixed bug #78038 (Socket_select fails when resource array contains + references). (Nikita) + 30 May 2019, PHP 7.2.19 - FPM: diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index 5c36ff6764..6b72474167 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -853,6 +853,7 @@ static int php_sock_array_to_fd_set(zval *sock_array, fd_set *fds, PHP_SOCKET *m if (Z_TYPE_P(sock_array) != IS_ARRAY) return 0; ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(sock_array), element) { + ZVAL_DEREF(element); php_sock = (php_socket*) zend_fetch_resource_ex(element, le_socket_name, le_socket); if (!php_sock) continue; /* If element is not a resource, skip it */ @@ -881,6 +882,7 @@ static int php_sock_array_from_fd_set(zval *sock_array, fd_set *fds) /* {{{ */ array_init(&new_hash); ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(sock_array), num_key, key, element) { + ZVAL_DEREF(element); php_sock = (php_socket*) zend_fetch_resource_ex(element, le_socket_name, le_socket); if (!php_sock) continue; /* If element is not a resource, skip it */ diff --git a/ext/sockets/tests/socket_select.phpt b/ext/sockets/tests/socket_select.phpt index 3896a09169..5d55111995 100644 --- a/ext/sockets/tests/socket_select.phpt +++ b/ext/sockets/tests/socket_select.phpt @@ -17,6 +17,7 @@ socket_create_pair($domain, SOCK_STREAM, 0, $sockets); $write = null; $except = null; +$ref =& $sockets[0]; // bug #78038 var_dump(socket_select($sockets, $write, $except, 0)); --EXPECT-- int(0) -- 2.40.0