diff options
author | Greg Beaver <cellog@php.net> | 2008-01-12 21:25:43 +0000 |
---|---|---|
committer | Greg Beaver <cellog@php.net> | 2008-01-12 21:25:43 +0000 |
commit | 368ba87eada8d0ab44c0f42db2f145214b301d2c (patch) | |
tree | 259fea5de185dace5e0166bd70bd69435953b23c /ext/bz2 | |
parent | 64cb8c81118b962b613afb50c946d0c2b9382477 (diff) | |
download | php-git-368ba87eada8d0ab44c0f42db2f145214b301d2c.tar.gz |
fix faulty fix for Bug #40189, and provide real fix for the bug
Diffstat (limited to 'ext/bz2')
-rw-r--r-- | ext/bz2/bz2_filter.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/ext/bz2/bz2_filter.c b/ext/bz2/bz2_filter.c index 079c69c762..8bf9c34df0 100644 --- a/ext/bz2/bz2_filter.c +++ b/ext/bz2/bz2_filter.c @@ -108,12 +108,7 @@ static php_stream_filter_status_t php_bz2_decompress_filter( consumed += desired; bin += desired; - if (!desired) { - flags |= PSFS_FLAG_FLUSH_CLOSE; - break; - } - - if (data->strm.avail_out < data->outbuf_len) { + if (status == BZ_STREAM_END || data->strm.avail_out < data->outbuf_len) { php_stream_bucket *out_bucket; size_t bucketlen = data->outbuf_len - data->strm.avail_out; out_bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC); @@ -121,6 +116,13 @@ static php_stream_filter_status_t php_bz2_decompress_filter( data->strm.avail_out = data->outbuf_len; data->strm.next_out = data->outbuf; exit_status = PSFS_PASS_ON; + if (status == BZ_STREAM_END) { + /* no more data to decompress, and nothing was spat out */ + if (data->strm.avail_out >= data->outbuf_len) { + php_stream_bucket_delref(bucket TSRMLS_CC); + } + return PSFS_PASS_ON; + } } } php_stream_bucket_delref(bucket TSRMLS_CC); |