[PHP-CVS] cvs: php-src /ext/soap php_soap.h soap.c /ext/soap/tests/bugs bug42214.phpt
dmitry Wed Sep 5 11:21:01 2007 UTC Modified files: /php-src/ext/soap php_soap.h soap.c /php-src/ext/soap/tests/bugsbug42214.phpt Log: Fixed bug #42214 (SoapServer sends clients internal PHP errors) http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_soap.h?r1=1.52r2=1.53diff_format=u Index: php-src/ext/soap/php_soap.h diff -u php-src/ext/soap/php_soap.h:1.52 php-src/ext/soap/php_soap.h:1.53 --- php-src/ext/soap/php_soap.h:1.52Mon Apr 2 13:43:29 2007 +++ php-src/ext/soap/php_soap.h Wed Sep 5 11:21:01 2007 @@ -17,7 +17,7 @@ | Dmitry Stogov [EMAIL PROTECTED] | +--+ */ -/* $Id: php_soap.h,v 1.52 2007/04/02 13:43:29 dmitry Exp $ */ +/* $Id: php_soap.h,v 1.53 2007/09/05 11:21:01 dmitry Exp $ */ #ifndef PHP_SOAP_H #define PHP_SOAP_H @@ -105,6 +105,7 @@ inttype; char *actor; struct _soapHeader **soap_headers_ptr; + int send_errors; } soap_server_object; typedef struct _soap_client_object { http://cvs.php.net/viewvc.cgi/php-src/ext/soap/soap.c?r1=1.229r2=1.230diff_format=u Index: php-src/ext/soap/soap.c diff -u php-src/ext/soap/soap.c:1.229 php-src/ext/soap/soap.c:1.230 --- php-src/ext/soap/soap.c:1.229 Wed Sep 5 10:18:37 2007 +++ php-src/ext/soap/soap.c Wed Sep 5 11:21:01 2007 @@ -17,7 +17,7 @@ | Dmitry Stogov [EMAIL PROTECTED] | +--+ */ -/* $Id: soap.c,v 1.229 2007/09/05 10:18:37 dmitry Exp $ */ +/* $Id: soap.c,v 1.230 2007/09/05 11:21:01 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -1382,6 +1382,7 @@ } service = (soap_server_object*)zend_object_store_get_object(this_ptr TSRMLS_CC); + service-send_errors = 1; cache_wsdl = SOAP_GLOBAL(cache); @@ -1457,6 +1458,11 @@ Z_TYPE_PP(tmp) == IS_LONG) { cache_wsdl = Z_LVAL_PP(tmp); } + + if (zend_ascii_hash_find(ht, send_errors, sizeof(send_errors), (void**)tmp) == SUCCESS + (Z_TYPE_PP(tmp) == IS_BOOL || Z_TYPE_PP(tmp) == IS_LONG)) { + service-send_errors = Z_LVAL_PP(tmp); + } } if (wsdl == NULL service-uri == NULL) { @@ -2504,30 +2510,41 @@ error_num == E_PARSE) { char* code = SOAP_GLOBAL(error_code); + soap_server_object *server; char *buffer; - int buffer_len; zval *outbuf = NULL; - zval outbuflen; - INIT_ZVAL(outbuflen); + if (code == NULL) { + code = Server; + } + + if (SOAP_GLOBAL(error_object) + Z_TYPE_P(SOAP_GLOBAL(error_object)) == IS_OBJECT + instanceof_function(Z_OBJCE_P(SOAP_GLOBAL(error_object)), soap_server_class_entry TSRMLS_CC) + (server = (soap_server_object*)zend_object_store_get_object(SOAP_GLOBAL(error_object) TSRMLS_CC)) + !server-send_errors) { + buffer = estrdup(Internal Error); + } else { + int buffer_len; + zval outbuflen; + + INIT_ZVAL(outbuflen); #ifdef va_copy - va_copy(argcopy, args); - buffer_len = vspprintf(buffer, 0, format, argcopy); - va_end(argcopy); + va_copy(argcopy, args); + buffer_len = vspprintf(buffer, 0, format, argcopy); + va_end(argcopy); #else - buffer_len = vspprintf(buffer, 0, format, args); + buffer_len = vspprintf(buffer, 0, format, args); #endif - if (code == NULL) { - code = Server; - } - /* Get output buffer and send as fault detials */ - if (php_output_get_length(outbuflen TSRMLS_CC) != FAILURE Z_LVAL(outbuflen) != 0) { - ALLOC_INIT_ZVAL(outbuf); - php_output_get_contents(outbuf TSRMLS_CC); + /* Get output buffer and send as fault detials */ + if (php_output_get_length(outbuflen TSRMLS_CC) != FAILURE Z_LVAL(outbuflen) != 0) { + ALLOC_INIT_ZVAL(outbuf); + php_output_get_contents(outbuf TSRMLS_CC); +
[PHP-CVS] cvs: php-src /ext/soap php_soap.h soap.c /ext/soap/tests server026.phpt server027.phpt server028.phpt
dmitry Thu Aug 24 06:18:45 2006 UTC Modified files: /php-src/ext/soap php_soap.h soap.c /php-src/ext/soap/tests server026.phpt server027.phpt server028.phpt Log: Added SoapServer::setObject() method (it is a simplified version of SoapServer::setClass() method). http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_soap.h?r1=1.47r2=1.48diff_format=u Index: php-src/ext/soap/php_soap.h diff -u php-src/ext/soap/php_soap.h:1.47 php-src/ext/soap/php_soap.h:1.48 --- php-src/ext/soap/php_soap.h:1.47Tue Aug 1 16:10:25 2006 +++ php-src/ext/soap/php_soap.h Thu Aug 24 06:18:45 2006 @@ -17,7 +17,7 @@ | Dmitry Stogov [EMAIL PROTECTED] | +--+ */ -/* $Id: php_soap.h,v 1.47 2006/08/01 16:10:25 dmitry Exp $ */ +/* $Id: php_soap.h,v 1.48 2006/08/24 06:18:45 dmitry Exp $ */ #ifndef PHP_SOAP_H #define PHP_SOAP_H @@ -119,6 +119,8 @@ int persistance; } soap_class; + zval *soap_object; + inttype; char *actor; struct _soapHeader **soap_headers_ptr; @@ -179,6 +181,7 @@ #define SOAP_CLASS 1 #define SOAP_FUNCTIONS 2 +#define SOAP_OBJECT 3 #define SOAP_FUNCTIONS_ALL 999 #define SOAP_MAP_FUNCTION 1 http://cvs.php.net/viewvc.cgi/php-src/ext/soap/soap.c?r1=1.204r2=1.205diff_format=u Index: php-src/ext/soap/soap.c diff -u php-src/ext/soap/soap.c:1.204 php-src/ext/soap/soap.c:1.205 --- php-src/ext/soap/soap.c:1.204 Tue Aug 8 16:59:11 2006 +++ php-src/ext/soap/soap.c Thu Aug 24 06:18:45 2006 @@ -17,7 +17,7 @@ | Dmitry Stogov [EMAIL PROTECTED] | +--+ */ -/* $Id: soap.c,v 1.204 2006/08/08 16:59:11 tony2001 Exp $ */ +/* $Id: soap.c,v 1.205 2006/08/24 06:18:45 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -165,6 +165,7 @@ /* Server Functions */ PHP_METHOD(SoapServer, SoapServer); PHP_METHOD(SoapServer, setClass); +PHP_METHOD(SoapServer, setObject); PHP_METHOD(SoapServer, addFunction); PHP_METHOD(SoapServer, getFunctions); PHP_METHOD(SoapServer, handle); @@ -225,6 +226,7 @@ SOAP_CTOR(SoapServer, SoapServer, NULL, 0) PHP_ME(SoapServer, setPersistence, NULL, 0) PHP_ME(SoapServer, setClass, NULL, 0) + PHP_ME(SoapServer, setObject, NULL, 0) PHP_ME(SoapServer, addFunction, NULL, 0) PHP_ME(SoapServer, getFunctions, NULL, 0) PHP_ME(SoapServer, handle, NULL, 0) @@ -576,6 +578,9 @@ zend_hash_destroy(service-class_map); FREE_HASHTABLE(service-class_map); } + if (service-soap_object) { + zval_ptr_dtor(service-soap_object); + } zend_object_std_dtor(object TSRMLS_CC); efree(object); } @@ -1525,6 +1530,32 @@ /* }}} */ +/* {{{ proto void SoapServer::setObject(object) + Sets object which will handle SOAP requests */ +PHP_METHOD(SoapServer, setObject) +{ + soap_server_object *service; + zval *obj; + + SOAP_SERVER_BEGIN_CODE(); + service = (soap_server_object*)zend_object_store_get_object(this_ptr TSRMLS_CC); + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, o, obj) == FAILURE) { + php_error_docref(NULL TSRMLS_CC, E_ERROR, Invalid parameters); + } + + service-type = SOAP_OBJECT; + + MAKE_STD_ZVAL(service-soap_object); + *service-soap_object = *obj; + zval_copy_ctor(service-soap_object); + INIT_PZVAL(service-soap_object); + + SOAP_SERVER_END_CODE(); +} +/* }}} */ + + /* {{{ proto array SoapServer::getFunctions(void) U Returns list of defined functions */ PHP_METHOD(SoapServer, getFunctions) @@ -1538,7 +1569,9 @@ service = (soap_server_object*)zend_object_store_get_object(this_ptr TSRMLS_CC); array_init(return_value); - if (service-type == SOAP_CLASS) { + if (service-type == SOAP_OBJECT) { + ft = (Z_OBJCE_P(service-soap_object)-function_table); + } else if (service-type == SOAP_CLASS) { ft = service-soap_class.ce-function_table; } else if (service-soap_functions.functions_all == TRUE) { ft = EG(function_table); @@ -1557,7 +1590,7 @@ HashPosition pos; zend_hash_internal_pointer_reset_ex(ft, pos); while (zend_hash_get_current_data_ex(ft, (void **)f, pos) != FAILURE) { - if ((service-type != SOAP_CLASS) || (f-common.fn_flags ZEND_ACC_PUBLIC)) { + if ((service-type != SOAP_OBJECT service-type != SOAP_CLASS) || (f-common.fn_flags ZEND_ACC_PUBLIC)) { add_next_index_text(return_value, f-common.function_name, 1); } zend_hash_move_forward_ex(ft, pos);
[PHP-CVS] cvs: php-src /ext/soap php_soap.h soap.c /ext/soap/tests server023.phpt server024.phpt server025.phpt server025.wsdl
dmitry Tue Mar 21 12:05:10 2006 UTC Modified files: /php-src/ext/soap php_soap.h soap.c /php-src/ext/soap/tests server023.phpt server024.phpt server025.phpt server025.wsdl Log: Fixed bug #36721 (The SoapServer is not able to send a header that it didn't receive) http://cvs.php.net/viewcvs.cgi/php-src/ext/soap/php_soap.h?r1=1.41r2=1.42diff_format=u Index: php-src/ext/soap/php_soap.h diff -u php-src/ext/soap/php_soap.h:1.41 php-src/ext/soap/php_soap.h:1.42 --- php-src/ext/soap/php_soap.h:1.41Tue Feb 7 12:49:30 2006 +++ php-src/ext/soap/php_soap.h Tue Mar 21 12:05:09 2006 @@ -17,7 +17,7 @@ | Dmitry Stogov [EMAIL PROTECTED] | +--+ */ -/* $Id: php_soap.h,v 1.41 2006/02/07 12:49:30 dmitry Exp $ */ +/* $Id: php_soap.h,v 1.42 2006/03/21 12:05:09 dmitry Exp $ */ #ifndef PHP_SOAP_H #define PHP_SOAP_H @@ -97,6 +97,8 @@ } map_class; }; +struct _soapHeader; + struct _soapService { sdlPtr sdl; @@ -120,6 +122,7 @@ xmlCharEncodingHandlerPtr encoding; HashTable *class_map; intfeatures; + struct _soapHeader **soap_headers_ptr; }; #define SOAP_CLASS 1 http://cvs.php.net/viewcvs.cgi/php-src/ext/soap/soap.c?r1=1.179r2=1.180diff_format=u Index: php-src/ext/soap/soap.c diff -u php-src/ext/soap/soap.c:1.179 php-src/ext/soap/soap.c:1.180 --- php-src/ext/soap/soap.c:1.179 Fri Mar 10 11:47:05 2006 +++ php-src/ext/soap/soap.c Tue Mar 21 12:05:09 2006 @@ -17,7 +17,7 @@ | Dmitry Stogov [EMAIL PROTECTED] | +--+ */ -/* $Id: soap.c,v 1.179 2006/03/10 11:47:05 dmitry Exp $ */ +/* $Id: soap.c,v 1.180 2006/03/21 12:05:09 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -244,6 +244,7 @@ PHP_METHOD(SoapServer, handle); PHP_METHOD(SoapServer, setPersistence); PHP_METHOD(SoapServer, fault); +PHP_METHOD(SoapServer, addSoapHeader); #ifdef HAVE_PHP_DOMXML PHP_METHOD(PHP_SOAP_SERVER_CLASS, map); #endif @@ -309,6 +310,7 @@ PHP_ME(SoapServer, getFunctions, NULL, 0) PHP_ME(SoapServer, handle, NULL, 0) PHP_ME(SoapServer, fault, NULL, 0) + PHP_ME(SoapServer, addSoapHeader, NULL, 0) #ifdef HAVE_PHP_DOMXML PHP_ME(SoapServer, map, NULL, 0) #endif @@ -1520,6 +1522,8 @@ function = deserialize_function_call(service-sdl, doc_request, service-actor, function_name, num_params, params, soap_version, soap_headers TSRMLS_CC); xmlFreeDoc(doc_request); + service-soap_headers_ptr = soap_headers; + soap_obj = NULL; if (service-type == SOAP_CLASS) { #if HAVE_PHP_SESSION !defined(COMPILE_DL_SESSION) @@ -1804,15 +1808,18 @@ int i; soap_headers = soap_headers-next; - i = h-num_params; - while (i 0) { - zval_ptr_dtor(h-parameters[--i]); + if (h-parameters) { + i = h-num_params; + while (i 0) { + zval_ptr_dtor(h-parameters[--i]); + } + efree(h-parameters); } - efree(h-parameters); zval_dtor(h-function_name); zval_dtor(h-retval); efree(h); } + service-soap_headers_ptr = NULL; /* Free Memory */ if (num_params 0) { @@ -1849,6 +1856,37 @@ } /* }}} */ +PHP_METHOD(SoapServer, addSoapHeader) +{ + soapServicePtr service; + zval *fault; + soapHeader **p; + + SOAP_SERVER_BEGIN_CODE(); + + FETCH_THIS_SERVICE(service); + + if (!service || !service-soap_headers_ptr) { + php_error_docref(NULL TSRMLS_CC, E_ERROR, The SoapServer::addSoapHeader function may be called only during SOAP request processing); + } + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, O, fault, soap_header_class_entry) == FAILURE) { + php_error_docref(NULL TSRMLS_CC, E_ERROR, Invalid parameters); + } + + p = service-soap_headers_ptr; + while (*p != NULL) { + p = (*p)-next; + } + *p = emalloc(sizeof(soapHeader)); + memset(*p, 0, sizeof(soapHeader)); + ZVAL_NULL((*p)-function_name); + (*p)-retval = *fault; + zval_copy_ctor((*p)-retval); + + SOAP_SERVER_END_CODE(); +} + static void soap_server_fault_ex(sdlFunctionPtr function, zval* fault, soapHeader *hdr TSRMLS_DC) { int soap_version; @@ -2519,7 +2557,7 @@ zend_hash_internal_pointer_reset(ht); while (zend_hash_get_current_data(ht, (void**)tmp) == SUCCESS) { if (Z_TYPE_PP(tmp) != IS_OBJECT || - Z_OBJCE_PP(tmp) != soap_header_class_entry) { +
[PHP-CVS] cvs: php-src /ext/soap php_soap.h soap.c
bfrance Thu Jun 16 18:35:15 2005 EDT Modified files: /php-src/ext/soap php_soap.h soap.c Log: ifdef'ed the code but not the includes http://cvs.php.net/diff.php/php-src/ext/soap/php_soap.h?r1=1.36r2=1.37ty=u Index: php-src/ext/soap/php_soap.h diff -u php-src/ext/soap/php_soap.h:1.36 php-src/ext/soap/php_soap.h:1.37 --- php-src/ext/soap/php_soap.h:1.36Wed Feb 2 05:34:39 2005 +++ php-src/ext/soap/php_soap.h Thu Jun 16 18:35:11 2005 @@ -17,7 +17,7 @@ | Dmitry Stogov [EMAIL PROTECTED] | +--+ */ -/* $Id: php_soap.h,v 1.36 2005/02/02 10:34:39 dmitry Exp $ */ +/* $Id: php_soap.h,v 1.37 2005/06/16 22:35:11 bfrance Exp $ */ #ifndef PHP_SOAP_H #define PHP_SOAP_H @@ -26,7 +26,9 @@ #include php_globals.h #include ext/standard/info.h #include ext/standard/php_standard.h +#if HAVE_PHP_SESSION !defined(COMPILE_DL_SESSION) #include ext/session/php_session.h +#endif #include ext/standard/php_smart_str.h #include php_ini.h #include SAPI.h http://cvs.php.net/diff.php/php-src/ext/soap/soap.c?r1=1.151r2=1.152ty=u Index: php-src/ext/soap/soap.c diff -u php-src/ext/soap/soap.c:1.151 php-src/ext/soap/soap.c:1.152 --- php-src/ext/soap/soap.c:1.151 Fri Jun 3 03:34:49 2005 +++ php-src/ext/soap/soap.c Thu Jun 16 18:35:11 2005 @@ -17,13 +17,15 @@ | Dmitry Stogov [EMAIL PROTECTED] | +--+ */ -/* $Id: soap.c,v 1.151 2005/06/03 07:34:49 gschlossnagle Exp $ */ +/* $Id: soap.c,v 1.152 2005/06/16 22:35:11 bfrance Exp $ */ #ifdef HAVE_CONFIG_H #include config.h #endif #include php_soap.h +#if HAVE_PHP_SESSION !defined(COMPILE_DL_SESSION) #include ext/session/php_session.h +#endif #ifdef ZEND_ENGINE_2 # include zend_exceptions.h #endif -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php