cvs: php4 /ext/sockets sockets.c
| From: | Jason Greene | Date: | Wed, 01 May 2002 04:47:00 +0000 |
| Subject: | cvs: php4 /ext/sockets sockets.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-11578@lists.php.net to get a copy of this message | ||
jason Wed May 1 00:47:00 2002 EDT
Modified files:
/php4/ext/sockets sockets.c
Log:
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.
Index: php4/ext/sockets/sockets.c
diff -u php4/ext/sockets/sockets.c:1.102 php4/ext/sockets/sockets.c:1.103
--- php4/ext/sockets/sockets.c:1.102 Tue Apr 30 18:03:51 2002
+++ php4/ext/sockets/sockets.c Wed May 1 00:46:59 2002
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sockets.c,v 1.102 2002/04/30 22:03:51 mfischer Exp $ */
+/* $Id: sockets.c,v 1.103 2002/05/01 04:46:59 jason Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -94,6 +94,9 @@
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 @@
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 @@
/* 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;