summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/filters.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/ext/standard/filters.c b/ext/standard/filters.c
index 536ce0d9e4..cea59c20b6 100644
--- a/ext/standard/filters.c
+++ b/ext/standard/filters.c
@@ -1342,11 +1342,11 @@ static php_stream_filter_status_t strfilter_convert_filter(
int flags
TSRMLS_DC)
{
- php_stream_bucket *bucket, *new_bucket;
+ php_stream_bucket *bucket = NULL, *new_bucket;
size_t consumed = 0;
php_conv_err_t err;
php_convert_filter *inst = (php_convert_filter *)thisfilter->abstract;
- char *out_buf;
+ char *out_buf = NULL;
size_t out_buf_size;
char *pd;
size_t ocnt;
@@ -1368,15 +1368,15 @@ static php_stream_filter_status_t strfilter_convert_filter(
switch (err) {
case PHP_CONV_ERR_UNKNOWN:
php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): unknown error", inst->filtername, err);
- return PSFS_ERR_FATAL;
+ goto out_failure;
case PHP_CONV_ERR_INVALID_SEQ:
php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): invalid base64 sequence", inst->filtername, err);
- return PSFS_ERR_FATAL;
+ goto out_failure;
case PHP_CONV_ERR_UNEXPECTED_EOS:
php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): unexpected end of stream", inst->filtername, err);
- return PSFS_ERR_FATAL;
+ goto out_failure;
default:
break;
@@ -1439,15 +1439,15 @@ static php_stream_filter_status_t strfilter_convert_filter(
switch (err) {
case PHP_CONV_ERR_UNKNOWN:
php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): unknown error", inst->filtername, err);
- return PSFS_ERR_FATAL;
+ goto out_failure;
case PHP_CONV_ERR_INVALID_SEQ:
php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): invalid base64 sequence", inst->filtername, err);
- return PSFS_ERR_FATAL;
+ goto out_failure;
case PHP_CONV_ERR_UNEXPECTED_EOS:
php_error_docref(NULL TSRMLS_CC, E_WARNING, "stream filter (%s): unexpected end of stream", inst->filtername, err);
- return PSFS_ERR_FATAL;
+ goto out_failure;
default:
break;
@@ -1497,6 +1497,15 @@ static php_stream_filter_status_t strfilter_convert_filter(
}
return PSFS_PASS_ON;
+
+out_failure:
+ if (out_buf != NULL) {
+ pefree(out_buf, inst->persistent);
+ }
+ if (bucket != NULL) {
+ php_stream_bucket_delref(bucket TSRMLS_CC);
+ }
+ return PSFS_ERR_FATAL;
}
static void strfilter_convert_dtor(php_stream_filter *thisfilter TSRMLS_DC)