pollita Fri Jun 27 12:23:58 2003 EDT Modified files: /php-src/ext/standard streamsfuncs.c /php-src/main/streams streams.c php_stream_context.h Log: MFB Plug leak in context notifiers, implement notifier->dtor Index: php-src/ext/standard/streamsfuncs.c diff -u php-src/ext/standard/streamsfuncs.c:1.22 php-src/ext/standard/streamsfuncs.c:1.23 --- php-src/ext/standard/streamsfuncs.c:1.22 Thu Jun 19 18:30:54 2003 +++ php-src/ext/standard/streamsfuncs.c Fri Jun 27 12:23:57 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: streamsfuncs.c,v 1.22 2003/06/19 22:30:54 pollita Exp $ */ +/* $Id: streamsfuncs.c,v 1.23 2003/06/27 16:23:57 pollita Exp $ */ #include "php.h" #include "php_globals.h" @@ -631,6 +631,14 @@ } } +static void user_space_stream_notifier_dtor(php_stream_notifier *notifier) +{ + if (notifier && notifier->ptr) { + zval_ptr_dtor((zval **)&(notifier->ptr)); + notifier->ptr = NULL; + } +} + static int parse_context_options(php_stream_context *context, zval *options) { HashPosition pos, opos; @@ -679,6 +687,7 @@ context->notifier->func = user_space_stream_notifier; context->notifier->ptr = *tmp; ZVAL_ADDREF(*tmp); + context->notifier->dtor = user_space_stream_notifier_dtor; } if (SUCCESS == zend_hash_find(Z_ARRVAL_P(params), "options", sizeof("options"), (void**)&tmp)) { parse_context_options(context, *tmp); Index: php-src/main/streams/streams.c diff -u php-src/main/streams/streams.c:1.28 php-src/main/streams/streams.c:1.29 --- php-src/main/streams/streams.c:1.28 Fri Jun 27 00:27:18 2003 +++ php-src/main/streams/streams.c Fri Jun 27 12:23:58 2003 @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: streams.c,v 1.28 2003/06/27 04:27:18 pollita Exp $ */ +/* $Id: streams.c,v 1.29 2003/06/27 16:23:58 pollita Exp $ */ #define _GNU_SOURCE #include "php.h" @@ -1649,6 +1649,9 @@ PHPAPI void php_stream_notification_free(php_stream_notifier *notifier) { + if (notifier->dtor) { + notifier->dtor(notifier); + } efree(notifier); } Index: php-src/main/streams/php_stream_context.h diff -u php-src/main/streams/php_stream_context.h:1.5 php-src/main/streams/php_stream_context.h:1.6 --- php-src/main/streams/php_stream_context.h:1.5 Fri Jun 13 17:33:59 2003 +++ php-src/main/streams/php_stream_context.h Fri Jun 27 12:23:58 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_stream_context.h,v 1.5 2003/06/13 21:33:59 pollita Exp $ */ +/* $Id: php_stream_context.h,v 1.6 2003/06/27 16:23:58 pollita Exp $ */ /* Stream context and status notification related definitions */ @@ -40,12 +40,15 @@ #define php_stream_context_to_zval(context, zval) { ZVAL_RESOURCE(zval, (context)->rsrc_id); } -typedef struct _php_stream_notifier { +typedef struct _php_stream_notifier php_stream_notifier; + +struct _php_stream_notifier { php_stream_notification_func func; + void (*dtor)(php_stream_notifier *notifier); void *ptr; int mask; size_t progress, progress_max; /* position for progress notification */ -} php_stream_notifier; +}; struct _php_stream_context { php_stream_notifier *notifier;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php