diff options
author | Jason Greene <jason@php.net> | 2002-05-01 04:46:59 +0000 |
---|---|---|
committer | Jason Greene <jason@php.net> | 2002-05-01 04:46:59 +0000 |
commit | 9a841d116b85f1727b2c8cb112d4e607153bd023 (patch) | |
tree | 567bd020111aa0ac64ed5720aab7634f76f23bd7 | |
parent | d6f87556b517ca180e798cd1df65b640bed06260 (diff) | |
download | php-git-9a841d116b85f1727b2c8cb112d4e607153bd023.tar.gz |
Changed socket_select to force reference copy, the older code would modify all references
@Fixed a bug in socket_select() that could cause unexpected behavior when using a statement
@ like $w=$e=array($sock);
@This change unfortunately prevents the use of constant values(NULL) for the socket array paramaters.
@Instead use a temporary variable or an expression with the leftmost member being a temporary variable.
@ ex. socket_select($w, $r, $e=NULL, 10);
Also fix small memory leak.
-rw-r--r-- | ext/sockets/sockets.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index 52ddd50d87..1d413fa019 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -94,6 +94,9 @@ static int le_iov; static int le_socket; #define le_socket_name "Socket" +static unsigned char first_through_third_args_force_ref[] = +{3, BYREF_FORCE, BYREF_FORCE, BYREF_FORCE}; + static unsigned char second_and_third_args_force_ref[] = {3, BYREF_NONE, BYREF_FORCE, BYREF_FORCE}; @@ -115,7 +118,7 @@ function_entry sockets_functions[] = { PHP_FE(socket_iovec_fetch, NULL) PHP_FE(socket_iovec_add, NULL) PHP_FE(socket_iovec_delete, NULL) - PHP_FE(socket_select, NULL) + PHP_FE(socket_select, first_through_third_args_force_ref) PHP_FE(socket_create, NULL) PHP_FE(socket_create_listen, NULL) PHP_FE(socket_create_pair, NULL) @@ -487,6 +490,7 @@ int php_sock_array_from_fd_set(zval *sock_array, fd_set *fds TSRMLS_DC) { /* Destroy old array, add new one */ zend_hash_destroy(Z_ARRVAL_P(sock_array)); + efree(Z_ARRVAL_P(sock_array)); zend_hash_internal_pointer_reset(new_hash); Z_ARRVAL_P(sock_array) = new_hash; |