From 87659981148a362812912b6d4752d281ac05f0b6 Mon Sep 17 00:00:00 2001 From: yuqing Date: Mon, 8 Aug 2016 15:17:50 +0800 Subject: [PATCH] fix php extention memory leak in PHP 7 --- php_client/fastdfs_client.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/php_client/fastdfs_client.c b/php_client/fastdfs_client.c index d92a4d7..55aab41 100644 --- a/php_client/fastdfs_client.c +++ b/php_client/fastdfs_client.c @@ -2929,6 +2929,11 @@ static int php_fdfs_download_callback(void *arg, const int64_t file_size, \ zval ret; zval null_args; int result; +#if PHP_MAJOR_VERSION >= 7 + zend_string *sz_data; + bool use_heap_data; +#endif + TSRMLS_FETCH(); INIT_ZVAL(ret); @@ -2937,11 +2942,12 @@ static int php_fdfs_download_callback(void *arg, const int64_t file_size, \ INIT_ZVAL(zfilesize); ZVAL_LONG(&zfilesize, file_size); - INIT_ZVAL(zdata); #if PHP_MAJOR_VERSION < 7 + INIT_ZVAL(zdata); ZVAL_STRINGL(&zdata, (char *)data, current_size, 0); #else - ZVAL_STRINGL(&zdata, (char *)data, current_size); + ZSTR_ALLOCA_INIT(sz_data, (char *)data, current_size, use_heap_data); + ZVAL_NEW_STR(&zdata, sz_data); #endif pCallback = (php_fdfs_callback_t *)arg; @@ -2980,6 +2986,10 @@ static int php_fdfs_download_callback(void *arg, const int64_t file_size, \ result = EINVAL; } +#if PHP_MAJOR_VERSION >= 7 + ZSTR_ALLOCA_FREE(sz_data, use_heap_data); +#endif + return result; }