[PHP-CVS] cvs: php-src(PHP_5_3) /ext/standard user_filters.c /ext/standard/tests/filters filter_errors.inc filter_errors_convert_base64_decode.phpt filter_errors_user.phpt
lbarnaudThu Jan 8 18:40:27 2009 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/standard user_filters.c /php-src/ext/standard/tests/filters filter_errors.inc filter_errors_convert_base64_decode.phpt filter_errors_user.phpt Log: MFH: Fix memleak when a user filter appends a bucket and returns != PSFS_PASS_ON Improved tests http://cvs.php.net/viewvc.cgi/php-src/ext/standard/user_filters.c?r1=1.31.2.4.2.9.2.10r2=1.31.2.4.2.9.2.11diff_format=u Index: php-src/ext/standard/user_filters.c diff -u php-src/ext/standard/user_filters.c:1.31.2.4.2.9.2.10 php-src/ext/standard/user_filters.c:1.31.2.4.2.9.2.11 --- php-src/ext/standard/user_filters.c:1.31.2.4.2.9.2.10 Wed Dec 31 11:15:46 2008 +++ php-src/ext/standard/user_filters.c Thu Jan 8 18:40:27 2009 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: user_filters.c,v 1.31.2.4.2.9.2.10 2008/12/31 11:15:46 sebastian Exp $ */ +/* $Id: user_filters.c,v 1.31.2.4.2.9.2.11 2009/01/08 18:40:27 lbarnaud Exp $ */ #include php.h #include php_globals.h @@ -245,6 +245,14 @@ php_stream_bucket_delref(bucket TSRMLS_CC); } } + if (ret != PSFS_PASS_ON) { + php_stream_bucket *bucket = buckets_out-head; + while (bucket != NULL) { + php_stream_bucket_unlink(bucket TSRMLS_CC); + php_stream_bucket_delref(bucket TSRMLS_CC); + bucket = buckets_out-head; + } + } /* filter resources are cleaned up by the stream destructor, * keeping a reference to the stream resource here would prevent it http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/filters/filter_errors.inc?r1=1.1.2.2r2=1.1.2.3diff_format=u Index: php-src/ext/standard/tests/filters/filter_errors.inc diff -u php-src/ext/standard/tests/filters/filter_errors.inc:1.1.2.2 php-src/ext/standard/tests/filters/filter_errors.inc:1.1.2.3 --- php-src/ext/standard/tests/filters/filter_errors.inc:1.1.2.2Thu Jan 8 17:01:58 2009 +++ php-src/ext/standard/tests/filters/filter_errors.incThu Jan 8 18:40:27 2009 @@ -27,7 +27,7 @@ fwrite($stream, b$data); fseek($stream, 0, SEEK_SET); - stream_get_line($stream, 8192, \r\n); + stream_filter_append($stream, $filter); stream_get_contents($stream); } http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt?r1=1.1.2.2r2=1.1.2.3diff_format=u Index: php-src/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt diff -u php-src/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt:1.1.2.2 php-src/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt:1.1.2.3 --- php-src/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt:1.1.2.2 Thu Jan 8 17:01:58 2009 +++ php-src/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt Thu Jan 8 18:40:27 2009 @@ -14,3 +14,5 @@ Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s test filtering of non buffered data + +Warning: stream_get_contents(): stream filter (convert.base64-decode): invalid byte sequence in %s http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/filters/filter_errors_user.phpt?r1=1.1.2.2r2=1.1.2.3diff_format=u Index: php-src/ext/standard/tests/filters/filter_errors_user.phpt diff -u php-src/ext/standard/tests/filters/filter_errors_user.phpt:1.1.2.2 php-src/ext/standard/tests/filters/filter_errors_user.phpt:1.1.2.3 --- php-src/ext/standard/tests/filters/filter_errors_user.phpt:1.1.2.2 Thu Jan 8 17:01:58 2009 +++ php-src/ext/standard/tests/filters/filter_errors_user.phpt Thu Jan 8 18:40:27 2009 @@ -26,14 +26,18 @@ } class test_filter3 extends php_user_filter { function filter($in, $out, $consumed, $closing) { - $bucket = stream_bucket_new($this-stream, 42); - stream_bucket_append($out, $bucket); + if (!$closing) { + $bucket = stream_bucket_new($this-stream, 42); + stream_bucket_append($out, $bucket); + } return PSFS_ERR_FATAL; } } class test_filter4 extends php_user_filter { function filter($in, $out, $consumed, $closing) { - $bucket = stream_bucket_new($this-stream, 42); + if (!$closing) { + $bucket = stream_bucket_new($this-stream, 42); + } return PSFS_ERR_FATAL; } } @@ -44,6 +48,43 @@ filter_errors_test(test_filter$i, 42); } +echo test append / read / remove\n; +for($i = 0; $i 5; ++$i) { + echo test_filter$i\n; + $stream = fopen('php://memory', 'wb+'); +
[PHP-CVS] cvs: php-src(PHP_5_3) /ext/standard user_filters.c /ext/standard/tests/filters bug46164-1.phpt bug46164-2.phpt
lbarnaudSun Oct 5 01:40:19 2008 UTC Added files: (Branch: PHP_5_3) /php-src/ext/standard/tests/filters bug46164-1.phpt bug46164-2.phpt Modified files: /php-src/ext/standard user_filters.c Log: MFH: Fixed #46164 (stream_filter_remove() closes the stream) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/user_filters.c?r1=1.31.2.4.2.9.2.5r2=1.31.2.4.2.9.2.6diff_format=u Index: php-src/ext/standard/user_filters.c diff -u php-src/ext/standard/user_filters.c:1.31.2.4.2.9.2.5 php-src/ext/standard/user_filters.c:1.31.2.4.2.9.2.6 --- php-src/ext/standard/user_filters.c:1.31.2.4.2.9.2.5Thu May 8 18:28:25 2008 +++ php-src/ext/standard/user_filters.c Sun Oct 5 01:40:19 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: user_filters.c,v 1.31.2.4.2.9.2.5 2008/05/08 18:28:25 felipe Exp $ */ +/* $Id: user_filters.c,v 1.31.2.4.2.9.2.6 2008/10/05 01:40:19 lbarnaud Exp $ */ #include php.h #include php_globals.h @@ -180,12 +180,14 @@ zval *retval = NULL; zval **args[4]; zval *zclosing, *zconsumed, *zin, *zout, *zstream; + zval zpropname; int call_result; if (FAILURE == zend_hash_find(Z_OBJPROP_P(obj), stream, sizeof(stream), (void**)zstream)) { /* Give the userfilter class a hook back to the stream */ ALLOC_INIT_ZVAL(zstream); php_stream_to_zval(stream, zstream); + zval_copy_ctor(zstream); add_property_zval(obj, stream, zstream); /* add_property_zval increments the refcount which is unwanted here */ zval_ptr_dtor(zstream); @@ -247,6 +249,13 @@ } } + /* filter resources are cleaned up by the stream destructor, +* keeping a reference to the stream resource here would prevent it +* from being destroyed properly */ + INIT_ZVAL(zpropname); + ZVAL_STRINGL(zpropname, stream, sizeof(stream)-1, 0); + Z_OBJ_HANDLER_P(obj, unset_property)(obj, zpropname TSRMLS_CC); + zval_ptr_dtor(zclosing); zval_ptr_dtor(zconsumed); zval_ptr_dtor(zout); http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/filters/bug46164-1.phpt?view=markuprev=1.1 Index: php-src/ext/standard/tests/filters/bug46164-1.phpt +++ php-src/ext/standard/tests/filters/bug46164-1.phpt --TEST-- Bug #46164 - 1 (stream_filter_remove() closes the stream) --FILE-- ?php class user_filter extends php_user_filter { function filter($in, $out, $consumed, $closing) { while($bucket = stream_bucket_make_writeable($in)) { $consumed += $bucket-datalen; stream_bucket_append($out, $bucket); } return PSFS_PASS_ON; } } stream_filter_register('user_filter','user_filter'); $fd = fopen('php://memory','w'); $filter = stream_filter_append($fd, 'user_filter'); stream_filter_remove($filter); var_dump(fclose($fd)); ? --EXPECT-- bool(true) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/filters/bug46164-2.phpt?view=markuprev=1.1 Index: php-src/ext/standard/tests/filters/bug46164-2.phpt +++ php-src/ext/standard/tests/filters/bug46164-2.phpt --TEST-- Bug #46164 - 2 (stream_filter_remove() closes the stream) --FILE-- ?php class user_filter extends php_user_filter { function filter($in, $out, $consumed, $closing) { while($bucket = stream_bucket_make_writeable($in)) { $consumed += $bucket-datalen; stream_bucket_append($out, $bucket); } unset($this-stream); return PSFS_PASS_ON; } } stream_filter_register('user_filter','user_filter'); $fd = fopen('php://memory','w'); $filter = stream_filter_append($fd, 'user_filter'); fwrite($fd, bfoo); fflush($fd); var_dump(fclose($fd)); ? --EXPECT-- bool(true) -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_3) /ext/standard user_filters.c
felipe Thu May 8 18:28:25 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/standard user_filters.c Log: - MFH: Fixed data size http://cvs.php.net/viewvc.cgi/php-src/ext/standard/user_filters.c?r1=1.31.2.4.2.9.2.4r2=1.31.2.4.2.9.2.5diff_format=u Index: php-src/ext/standard/user_filters.c diff -u php-src/ext/standard/user_filters.c:1.31.2.4.2.9.2.4 php-src/ext/standard/user_filters.c:1.31.2.4.2.9.2.5 --- php-src/ext/standard/user_filters.c:1.31.2.4.2.9.2.4Mon Mar 10 22:12:36 2008 +++ php-src/ext/standard/user_filters.c Thu May 8 18:28:25 2008 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: user_filters.c,v 1.31.2.4.2.9.2.4 2008/03/10 22:12:36 felipe Exp $ */ +/* $Id: user_filters.c,v 1.31.2.4.2.9.2.5 2008/05/08 18:28:25 felipe Exp $ */ #include php.h #include php_globals.h @@ -584,7 +584,7 @@ zend_hash_init(BG(user_filter_map), 5, NULL, (dtor_func_t) filter_item_dtor, 0); } - fdat = ecalloc(1, sizeof(*fdat) + classname_len); + fdat = ecalloc(1, sizeof(struct php_user_filter_data) + classname_len); memcpy(fdat-classname, classname, classname_len); if (zend_hash_add(BG(user_filter_map), filtername, filtername_len + 1, (void*)fdat, -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php