dmitry Tue Oct 30 07:22:12 2007 UTC
Modified files:
/php-src/ext/soap soap.c
Log:
Use heap-allocated return value
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/soap.c?r1=1.232&r2=1.233&diff_format=u
Index: php-src/ext/soap/soap.c
diff -u php-src/ext/soap/soap.c:1.232 php-src/ext/soap/soap.c:1.233
--- php-src/ext/soap/soap.c:1.232 Sun Oct 7 05:15:05 2007
+++ php-src/ext/soap/soap.c Tue Oct 30 07:22:12 2007
@@ -17,7 +17,7 @@
| Dmitry Stogov <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: soap.c,v 1.232 2007/10/07 05:15:05 davidw Exp $ */
+/* $Id: soap.c,v 1.233 2007/10/30 07:22:12 dmitry Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -1749,7 +1749,7 @@
sdlPtr old_sdl = NULL;
soap_server_object *service;
xmlDocPtr doc_request=NULL, doc_return;
- zval function_name, **params, **raw_post, *soap_obj, retval;
+ zval function_name, **params, **raw_post, *soap_obj, *retval;
char *fn_name, cont_len[30];
int num_params = 0, size, i, call_status = 0;
xmlChar *buf;
@@ -1770,7 +1770,6 @@
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|t", &arg,
&arg_len, &arg_type) == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid parameters");
}
- INIT_ZVAL(retval);
if (SG(request_info).request_method &&
strcmp(SG(request_info).request_method, "GET") == 0 &&
@@ -1820,6 +1819,8 @@
}
}
+ ALLOC_INIT_ZVAL(retval);
+
if (php_output_start_default(TSRMLS_C) != SUCCESS) {
php_error_docref(NULL TSRMLS_CC, E_ERROR,"ob_start failed");
}
@@ -2119,7 +2120,7 @@
((service->type == SOAP_CLASS || service->type == SOAP_OBJECT) &&
zend_hash_exists(function_table, ZEND_CALL_FUNC_NAME,
sizeof(ZEND_CALL_FUNC_NAME)))) {
if (service->type == SOAP_CLASS || service->type ==
SOAP_OBJECT) {
- call_status = call_user_function(NULL, &soap_obj,
&function_name, &retval, num_params, params TSRMLS_CC);
+ call_status = call_user_function(NULL, &soap_obj,
&function_name, retval, num_params, params TSRMLS_CC);
if (service->type == SOAP_CLASS) {
#if HAVE_PHP_SESSION && !defined(COMPILE_DL_SESSION)
if (service->soap_class.persistance !=
SOAP_PERSISTENCE_SESSION) {
@@ -2132,7 +2133,7 @@
#endif
}
} else {
- call_status = call_user_function(EG(function_table),
NULL, &function_name, &retval, num_params, params TSRMLS_CC);
+ call_status = call_user_function(EG(function_table),
NULL, &function_name, retval, num_params, params TSRMLS_CC);
}
} else {
php_error(E_ERROR, "Function '%s' doesn't exist",
Z_STRVAL(function_name));
@@ -2159,10 +2160,10 @@
if (call_status == SUCCESS) {
char *response_name;
- if (Z_TYPE(retval) == IS_OBJECT &&
- instanceof_function(Z_OBJCE(retval), soap_fault_class_entry
TSRMLS_CC)) {
+ if (Z_TYPE_P(retval) == IS_OBJECT &&
+ instanceof_function(Z_OBJCE_P(retval),
soap_fault_class_entry TSRMLS_CC)) {
php_output_discard(TSRMLS_C);
- soap_server_fault_ex(function, &retval, NULL TSRMLS_CC);
+ soap_server_fault_ex(function, retval, NULL TSRMLS_CC);
goto fail;
}
@@ -2173,7 +2174,7 @@
memcpy(response_name,Z_STRVAL(function_name),Z_STRLEN(function_name));
memcpy(response_name+Z_STRLEN(function_name),"Response",sizeof("Response"));
}
- doc_return = serialize_response_call(function, response_name,
service->uri, &retval, soap_headers, soap_version TSRMLS_CC);
+ doc_return = serialize_response_call(function, response_name,
service->uri, retval, soap_headers, soap_version TSRMLS_CC);
efree(response_name);
} else {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Function '%s' call
failed", Z_STRVAL(function_name));
@@ -2249,7 +2250,7 @@
SOAP_GLOBAL(features) = old_features;
/* Free soap headers */
- zval_dtor(&retval);
+ zval_ptr_dtor(&retval);
while (soap_headers != NULL) {
soapHeader *h = soap_headers;
int i;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php