diff options
Diffstat (limited to 'ext/zlib')
-rw-r--r-- | ext/zlib/zlib.c | 10 | ||||
-rw-r--r-- | ext/zlib/zlib_filter.c | 19 |
2 files changed, 13 insertions, 16 deletions
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index 375e3b482a..b593ade777 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -102,51 +102,61 @@ static PHP_FUNCTION(ob_gzhandler); static PHP_FUNCTION(zlib_get_coding_type); /* {{{ arginfo */ +static ZEND_BEGIN_ARG_INFO_EX(arginfo_gzfile, 0, 0, 1) ZEND_ARG_INFO(0, filename) ZEND_ARG_INFO(0, use_include_path) ZEND_END_ARG_INFO() +static ZEND_BEGIN_ARG_INFO_EX(arginfo_gzopen, 0, 0, 2) ZEND_ARG_INFO(0, filename) ZEND_ARG_INFO(0, mode) ZEND_ARG_INFO(0, use_include_path) ZEND_END_ARG_INFO() +static ZEND_BEGIN_ARG_INFO_EX(arginfo_readgzfile, 0, 0, 1) ZEND_ARG_INFO(0, filename) ZEND_ARG_INFO(0, use_include_path) ZEND_END_ARG_INFO() +static ZEND_BEGIN_ARG_INFO_EX(arginfo_gzcompress, 0, 0, 1) ZEND_ARG_INFO(0, data) ZEND_ARG_INFO(0, level) ZEND_END_ARG_INFO() +static ZEND_BEGIN_ARG_INFO_EX(arginfo_gzuncompress, 0, 0, 1) ZEND_ARG_INFO(0, data) ZEND_ARG_INFO(0, length) ZEND_END_ARG_INFO() +static ZEND_BEGIN_ARG_INFO_EX(arginfo_gzdeflate, 0, 0, 1) ZEND_ARG_INFO(0, data) ZEND_ARG_INFO(0, level) ZEND_END_ARG_INFO() +static ZEND_BEGIN_ARG_INFO_EX(arginfo_gzinflate, 0, 0, 1) ZEND_ARG_INFO(0, data) ZEND_ARG_INFO(0, length) ZEND_END_ARG_INFO() +static ZEND_BEGIN_ARG_INFO(arginfo_zlib_get_coding_type, 0) ZEND_END_ARG_INFO() +static ZEND_BEGIN_ARG_INFO_EX(arginfo_gzencode, 0, 0, 1) ZEND_ARG_INFO(0, data) ZEND_ARG_INFO(0, level) ZEND_ARG_INFO(0, encoding_mode) ZEND_END_ARG_INFO() +static ZEND_BEGIN_ARG_INFO_EX(arginfo_ob_gzhandler, 0, 0, 2) ZEND_ARG_INFO(0, str) ZEND_ARG_INFO(0, mode) diff --git a/ext/zlib/zlib_filter.c b/ext/zlib/zlib_filter.c index b7065984ef..5ffbaf5ea6 100644 --- a/ext/zlib/zlib_filter.c +++ b/ext/zlib/zlib_filter.c @@ -31,7 +31,6 @@ typedef struct _php_zlib_filter_data { size_t inbuf_len; char *outbuf; size_t outbuf_len; - zend_bool finished; } php_zlib_filter_data; /* }}} */ @@ -82,12 +81,6 @@ static php_stream_filter_status_t php_zlib_inflate_filter( bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC); while (bin < bucket->buflen) { - - if (data->finished) { - consumed += bucket->buflen; - break; - } - desired = bucket->buflen - bin; if (desired > data->inbuf_len) { desired = data->inbuf_len; @@ -96,10 +89,7 @@ static php_stream_filter_status_t php_zlib_inflate_filter( data->strm.avail_in = desired; status = inflate(&(data->strm), flags & PSFS_FLAG_FLUSH_CLOSE ? Z_FINISH : Z_SYNC_FLUSH); - if (status == Z_STREAM_END) { - inflateEnd(&(data->strm)); - data->finished = '\1'; - } else if (status != Z_OK) { + if (status != Z_OK && status != Z_STREAM_END) { /* Something bad happened */ php_stream_bucket_delref(bucket TSRMLS_CC); return PSFS_ERR_FATAL; @@ -127,7 +117,7 @@ static php_stream_filter_status_t php_zlib_inflate_filter( php_stream_bucket_delref(bucket TSRMLS_CC); } - if (!data->finished && flags & PSFS_FLAG_FLUSH_CLOSE) { + if (flags & PSFS_FLAG_FLUSH_CLOSE) { /* Spit it out! */ status = Z_OK; while (status == Z_OK) { @@ -155,9 +145,7 @@ static void php_zlib_inflate_dtor(php_stream_filter *thisfilter TSRMLS_DC) { if (thisfilter && thisfilter->abstract) { php_zlib_filter_data *data = thisfilter->abstract; - if (!data->finished) { - inflateEnd(&(data->strm)); - } + inflateEnd(&(data->strm)); pefree(data->inbuf, data->persistent); pefree(data->outbuf, data->persistent); pefree(data, data->persistent); @@ -341,7 +329,6 @@ static php_stream_filter *php_zlib_filter_create(const char *filtername, zval *f } /* RFC 1951 Inflate */ - data->finished = '\0'; status = inflateInit2(&(data->strm), windowBits); fops = &php_zlib_inflate_ops; } else if (strcasecmp(filtername, "zlib.deflate") == 0) { |