summaryrefslogtreecommitdiff
path: root/ext/zlib
diff options
context:
space:
mode:
Diffstat (limited to 'ext/zlib')
-rw-r--r--ext/zlib/zlib.c10
-rw-r--r--ext/zlib/zlib_filter.c19
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) {