dmitry Wed Sep 5 11:20:46 2007 UTC
Added files: (Branch: PHP_5_2)
/php-src/ext/soap/tests/bugs bug42214.phpt
Modified files:
/php-src NEWS
/php-src/ext/soap php_soap.h soap.c
Log:
Fixed bug #42214 (SoapServer sends clients internal PHP errors)
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.929&r2=1.2027.2.547.2.930&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.929 php-src/NEWS:1.2027.2.547.2.930
--- php-src/NEWS:1.2027.2.547.2.929 Wed Sep 5 10:18:22 2007
+++ php-src/NEWS Wed Sep 5 11:20:45 2007
@@ -26,6 +26,7 @@
breaks). (Dmitry)
- Fixed bug #42359 (xsd:list type not parsed). (Dmitry)
- Fixed bug #42326 (SoapServer crash). (Dmitry)
+- Fixed bug #42214 (SoapServer sends clients internal PHP errors). (Dmitry)
- Fixed bug #42086 (SoapServer return Procedure '' not present for WSIBasic
compliant wsdl). (Dmitry)
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_soap.h?r1=1.38.2.6.2.5&r2=1.38.2.6.2.6&diff_format=u
Index: php-src/ext/soap/php_soap.h
diff -u php-src/ext/soap/php_soap.h:1.38.2.6.2.5
php-src/ext/soap/php_soap.h:1.38.2.6.2.6
--- php-src/ext/soap/php_soap.h:1.38.2.6.2.5 Mon Apr 2 13:43:08 2007
+++ php-src/ext/soap/php_soap.h Wed Sep 5 11:20:45 2007
@@ -17,7 +17,7 @@
| Dmitry Stogov <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_soap.h,v 1.38.2.6.2.5 2007/04/02 13:43:08 dmitry Exp $ */
+/* $Id: php_soap.h,v 1.38.2.6.2.6 2007/09/05 11:20:45 dmitry Exp $ */
#ifndef PHP_SOAP_H
#define PHP_SOAP_H
@@ -106,6 +106,7 @@
HashTable *class_map;
int features;
struct _soapHeader **soap_headers_ptr;
+ int send_errors;
};
#define SOAP_CLASS 1
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/soap.c?r1=1.156.2.28.2.29&r2=1.156.2.28.2.30&diff_format=u
Index: php-src/ext/soap/soap.c
diff -u php-src/ext/soap/soap.c:1.156.2.28.2.29
php-src/ext/soap/soap.c:1.156.2.28.2.30
--- php-src/ext/soap/soap.c:1.156.2.28.2.29 Fri Aug 31 10:48:45 2007
+++ php-src/ext/soap/soap.c Wed Sep 5 11:20:45 2007
@@ -17,7 +17,7 @@
| Dmitry Stogov <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: soap.c,v 1.156.2.28.2.29 2007/08/31 10:48:45 dmitry Exp $ */
+/* $Id: soap.c,v 1.156.2.28.2.30 2007/09/05 11:20:45 dmitry Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -1035,6 +1035,7 @@
service = emalloc(sizeof(soapService));
memset(service, 0, sizeof(soapService));
+ service->send_errors = 1;
cache_wsdl = SOAP_GLOBAL(cache);
@@ -1099,6 +1100,11 @@
cache_wsdl = Z_LVAL_PP(tmp);
}
+ if (zend_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);
+ }
+
} else if (wsdl == NULL) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid arguments.
'uri' option is required in nonWSDL mode.");
}
@@ -2129,34 +2135,46 @@
char* code = SOAP_GLOBAL(error_code);
char buffer[1024];
- int buffer_len;
zval *outbuf = NULL;
- zval outbuflen;
+ zval **tmp;
+ soapServicePtr service;
- 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) &&
+ zend_hash_find(Z_OBJPROP_P(SOAP_GLOBAL(error_object)),
"service", sizeof("service"), (void **)&tmp) != FAILURE &&
+ (service =
(soapServicePtr)zend_fetch_resource(tmp TSRMLS_CC, -1, "service", NULL, 1,
le_service)) &&
+ !service->send_errors) {
+ strcpy(buffer, "Internal Error");
+ } else {
+ int buffer_len;
+ zval outbuflen;
+
+ INIT_ZVAL(outbuflen);
#ifdef va_copy
- va_copy(argcopy, args);
- buffer_len = vslprintf(buffer, sizeof(buffer)-1,
format, argcopy);
- va_end(argcopy);
+ va_copy(argcopy, args);
+ buffer_len = vslprintf(buffer,
sizeof(buffer)-1, format, argcopy);
+ va_end(argcopy);
#else
- buffer_len = vslprintf(buffer, sizeof(buffer)-1,
format, args);
+ buffer_len = vslprintf(buffer,
sizeof(buffer)-1, format, args);
#endif
- buffer[sizeof(buffer)-1]=0;
- if (buffer_len > sizeof(buffer) - 1 || buffer_len < 0) {
- buffer_len = sizeof(buffer) - 1;
- }
+ buffer[sizeof(buffer)-1]=0;
+ if (buffer_len > sizeof(buffer) - 1 ||
buffer_len < 0) {
+ buffer_len = sizeof(buffer) - 1;
+ }
- if (code == NULL) {
- code = "Server";
- }
- /* Get output buffer and send as fault detials */
- if (php_ob_get_length(&outbuflen TSRMLS_CC) != FAILURE
&& Z_LVAL(outbuflen) != 0) {
- ALLOC_INIT_ZVAL(outbuf);
- php_ob_get_buffer(outbuf TSRMLS_CC);
- }
- php_end_ob_buffer(0, 0 TSRMLS_CC);
+ /* Get output buffer and send as fault detials
*/
+ if (php_ob_get_length(&outbuflen TSRMLS_CC) !=
FAILURE && Z_LVAL(outbuflen) != 0) {
+ ALLOC_INIT_ZVAL(outbuf);
+ php_ob_get_buffer(outbuf TSRMLS_CC);
+ }
+ php_end_ob_buffer(0, 0 TSRMLS_CC);
+ }
INIT_ZVAL(fault_obj);
set_soap_fault(&fault_obj, NULL, code, buffer, NULL,
outbuf, NULL TSRMLS_CC);
fault = 1;
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/bugs/bug42214.phpt?view=markup&rev=1.1
Index: php-src/ext/soap/tests/bugs/bug42214.phpt
+++ php-src/ext/soap/tests/bugs/bug42214.phpt
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php