[PHP-CVS] cvs: php-src /ext/soap php_soap.h soap.c /ext/soap/tests/bugs bug42214.phpt

2007-09-05 Thread Dmitry Stogov
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

2006-08-24 Thread Dmitry Stogov
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

2006-03-21 Thread Dmitry Stogov
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

2005-06-16 Thread Brian France
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