summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorSara Golemon <pollita@php.net>2007-08-04 07:53:00 +0000
committerSara Golemon <pollita@php.net>2007-08-04 07:53:00 +0000
commit6f25b84a3abb84b9f598ececce61768cd76d7c60 (patch)
treee57cbaec70071a7946e9c6728aa8eab4948ab7b6 /ext
parent515aaeda108b11efbf8fb3c0c9d8d94ed0022d2c (diff)
downloadphp-git-6f25b84a3abb84b9f598ececce61768cd76d7c60.tar.gz
MFH(r-1.49)Bugfix#36492 Userfilters can leak buckets
Diffstat (limited to 'ext')
-rw-r--r--ext/standard/user_filters.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c
index 321ef58532..2423f6b5e1 100644
--- a/ext/standard/user_filters.c
+++ b/ext/standard/user_filters.c
@@ -232,8 +232,21 @@ php_stream_filter_status_t userfilter_filter(
*bytes_consumed = Z_LVAL_P(zconsumed);
}
- if (retval)
+ if (retval) {
zval_ptr_dtor(&retval);
+ }
+
+ if (buckets_in->head) {
+ php_stream_bucket *bucket = buckets_in->head;
+
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unprocessed filter buckets remaining on input brigade");
+ while ((bucket = buckets_in->head)) {
+ /* Remove unconsumed buckets from the brigade */
+ php_stream_bucket_unlink(bucket TSRMLS_CC);
+ php_stream_bucket_delref(bucket TSRMLS_CC);
+ }
+ }
+
zval_ptr_dtor(&zclosing);
zval_ptr_dtor(&zconsumed);
zval_ptr_dtor(&zout);