diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2013-12-10 13:03:09 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2013-12-10 13:03:09 +0400 |
| commit | 5ad11174196760ad9aa4c94c08e0e58c72eb9cb9 (patch) | |
| tree | 93ed45d44c2ae196ba0b54be94bd47c59f70469d /ext/soap | |
| parent | f33265d57281910652bb58f5f9d8bd9d9dd44fe8 (diff) | |
| parent | a6516653b7ecd0fd73e4129042b1bd305b586171 (diff) | |
| download | php-git-5ad11174196760ad9aa4c94c08e0e58c72eb9cb9.tar.gz | |
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5:
Arguments passed to user function have to be properly allocated on heap
Diffstat (limited to 'ext/soap')
| -rw-r--r-- | ext/soap/soap.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/ext/soap/soap.c b/ext/soap/soap.c index c5900dc645..db7a2b4e54 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -2543,7 +2543,7 @@ static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *act int ret = TRUE; char *buf; int buf_size; - zval func, param0, param1, param2, param3, param4; + zval func; zval *params[5]; zval **trace; zval **fault; @@ -2563,29 +2563,24 @@ static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *act INIT_ZVAL(func); ZVAL_STRINGL(&func,"__doRequest",sizeof("__doRequest")-1,0); - INIT_ZVAL(param0); - params[0] = ¶m0; - ZVAL_STRINGL(params[0], buf, buf_size, 0); - INIT_ZVAL(param1); - params[1] = ¶m1; + ALLOC_INIT_ZVAL(params[0]); + ZVAL_STRINGL(params[0], buf, buf_size, 1); + ALLOC_INIT_ZVAL(params[1]); if (location == NULL) { ZVAL_NULL(params[1]); } else { - ZVAL_STRING(params[1], location, 0); + ZVAL_STRING(params[1], location, 1); } - INIT_ZVAL(param2); - params[2] = ¶m2; + ALLOC_INIT_ZVAL(params[2]); if (action == NULL) { ZVAL_NULL(params[2]); } else { - ZVAL_STRING(params[2], action, 0); + ZVAL_STRING(params[2], action, 1); } - INIT_ZVAL(param3); - params[3] = ¶m3; + ALLOC_INIT_ZVAL(params[3]); ZVAL_LONG(params[3], version); - INIT_ZVAL(param4); - params[4] = ¶m4; + ALLOC_INIT_ZVAL(params[4]); ZVAL_LONG(params[4], one_way); if (call_user_function(NULL, &this_ptr, &func, response, 5, params TSRMLS_CC) != SUCCESS) { @@ -2600,6 +2595,11 @@ static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *act Z_LVAL_PP(trace) > 0) { add_property_stringl(this_ptr, "__last_response", Z_STRVAL_P(response), Z_STRLEN_P(response), 1); } + zval_ptr_dtor(¶ms[4]); + zval_ptr_dtor(¶ms[3]); + zval_ptr_dtor(¶ms[2]); + zval_ptr_dtor(¶ms[1]); + zval_ptr_dtor(¶ms[0]); xmlFree(buf); if (ret && zend_hash_find(Z_OBJPROP_P(this_ptr), "__soap_fault", sizeof("__soap_fault"), (void **) &fault) == SUCCESS) { return FALSE; |
