dmitry Wed Jun 1 10:42:50 2005 EDT Added files: (Branch: PHP_5_0) /php-src/ext/soap/tests/bugs bug32941.phpt bug32941.wsdl
Modified files: /php-src NEWS /php-src/ext/soap php_encoding.c php_schema.c php_sdl.c Log: Fixed bug #32941 (Sending structured SOAP fault kills a php) http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1760.2.409&r2=1.1760.2.410&ty=u Index: php-src/NEWS diff -u php-src/NEWS:1.1760.2.409 php-src/NEWS:1.1760.2.410 --- php-src/NEWS:1.1760.2.409 Wed Jun 1 06:53:57 2005 +++ php-src/NEWS Wed Jun 1 10:42:48 2005 @@ -35,6 +35,7 @@ - Fixed bug #32947 (Incorrect option for mysqli default password). (Georg) - Fixed bug #32944 (Disabling session.use_cookies doesn't prevent reading session cookies). (Jani, Tony) +- Fixed bug #32941 (Sending structured SOAP fault kills a php). (Dmitry) - Fixed bug #32936 (http redirects URLs are not checked for control chars). (Ilia) - Fixed bug #32933 (Cannot extend class "SQLiteDatabase"). (Marcus) - Fixed bug #32932 (Oracle LDAP: ldap_get_entries(), invalid pointer). (Jani) http://cvs.php.net/diff.php/php-src/ext/soap/php_encoding.c?r1=1.71.2.18&r2=1.71.2.19&ty=u Index: php-src/ext/soap/php_encoding.c diff -u php-src/ext/soap/php_encoding.c:1.71.2.18 php-src/ext/soap/php_encoding.c:1.71.2.19 --- php-src/ext/soap/php_encoding.c:1.71.2.18 Wed Apr 20 04:31:09 2005 +++ php-src/ext/soap/php_encoding.c Wed Jun 1 10:42:49 2005 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_encoding.c,v 1.71.2.18 2005/04/20 08:31:09 dmitry Exp $ */ +/* $Id: php_encoding.c,v 1.71.2.19 2005/06/01 14:42:49 dmitry Exp $ */ #include <time.h> @@ -2297,6 +2297,9 @@ if (tmpattr != NULL) { type_name = tmpattr->children->content; enc = get_encoder_from_prefix(SOAP_GLOBAL(sdl), data, tmpattr->children->content); + if (type == &enc->details) { + enc = NULL; + } if (enc != NULL) { encodePtr tmp = enc; while (tmp && http://cvs.php.net/diff.php/php-src/ext/soap/php_schema.c?r1=1.49.2.5&r2=1.49.2.6&ty=u Index: php-src/ext/soap/php_schema.c diff -u php-src/ext/soap/php_schema.c:1.49.2.5 php-src/ext/soap/php_schema.c:1.49.2.6 --- php-src/ext/soap/php_schema.c:1.49.2.5 Wed Apr 20 04:31:10 2005 +++ php-src/ext/soap/php_schema.c Wed Jun 1 10:42:50 2005 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_schema.c,v 1.49.2.5 2005/04/20 08:31:10 dmitry Exp $ */ +/* $Id: php_schema.c,v 1.49.2.6 2005/06/01 14:42:50 dmitry Exp $ */ #include "php_soap.h" #include "libxml/uri.h" @@ -88,20 +88,10 @@ static encodePtr get_create_encoder(sdlPtr sdl, sdlTypePtr cur_type, const char *ns, const char *type) { - encodePtr enc = NULL; - smart_str nscat = {0}; - - smart_str_appends(&nscat, ns); - smart_str_appendc(&nscat, ':'); - smart_str_appends(&nscat, type); - smart_str_0(&nscat); - - enc = get_encoder_ex(sdl, nscat.c, nscat.len); + encodePtr enc = get_encoder(sdl, ns, type); if (enc == NULL) { enc = create_encoder(sdl, cur_type, ns, type); } - - smart_str_free(&nscat); return enc; } http://cvs.php.net/diff.php/php-src/ext/soap/php_sdl.c?r1=1.70.2.10&r2=1.70.2.11&ty=u Index: php-src/ext/soap/php_sdl.c diff -u php-src/ext/soap/php_sdl.c:1.70.2.10 php-src/ext/soap/php_sdl.c:1.70.2.11 --- php-src/ext/soap/php_sdl.c:1.70.2.10 Fri Apr 29 01:38:31 2005 +++ php-src/ext/soap/php_sdl.c Wed Jun 1 10:42:50 2005 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_sdl.c,v 1.70.2.10 2005/04/29 05:38:31 dmitry Exp $ */ +/* $Id: php_sdl.c,v 1.70.2.11 2005/06/01 14:42:50 dmitry Exp $ */ #include "php_soap.h" #include "ext/libxml/php_libxml.h" @@ -50,21 +50,10 @@ parse_namespace(type, &cptype, &ns); nsptr = xmlSearchNs(node->doc, node, ns); if (nsptr != NULL) { - int ns_len = strlen(nsptr->href); - int type_len = strlen(cptype); - int len = ns_len + type_len + 1; - char *nscat = emalloc(len + 1); - - memcpy(nscat, nsptr->href, ns_len); - nscat[ns_len] = ':'; - memcpy(nscat+ns_len+1, cptype, type_len); - nscat[len] = '\0'; - - enc = get_encoder_ex(sdl, nscat, len); + enc = get_encoder(sdl, nsptr->href, cptype); if (enc == NULL) { - enc = get_encoder_ex(sdl, type, type_len); + enc = get_encoder_ex(sdl, cptype, strlen(cptype)); } - efree(nscat); } else { enc = get_encoder_ex(sdl, type, strlen(type)); } @@ -128,8 +117,24 @@ nscat[len] = '\0'; enc = get_encoder_ex(sdl, nscat, len); - efree(nscat); + + if (enc == NULL && + ((ns_len == sizeof(SOAP_1_1_ENC_NAMESPACE)-1 && + memcmp(ns, SOAP_1_1_ENC_NAMESPACE, sizeof(SOAP_1_1_ENC_NAMESPACE)-1) == 0) || + (ns_len == sizeof(SOAP_1_2_ENC_NAMESPACE)-1 && + memcmp(ns, SOAP_1_2_ENC_NAMESPACE, sizeof(SOAP_1_2_ENC_NAMESPACE)-1) == 0))) { + ns_len = sizeof(XSD_NAMESPACE)-1; + len = ns_len + type_len + 1; + nscat = emalloc(len + 1); + memcpy(nscat, XSD_NAMESPACE, sizeof(XSD_NAMESPACE)-1); + nscat[ns_len] = ':'; + memcpy(nscat+ns_len+1, type, type_len); + nscat[len] = '\0'; + + enc = get_encoder_ex(sdl, nscat, len); + efree(nscat); + } return enc; } http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug32941.phpt?r=1.1&p=1 Index: php-src/ext/soap/tests/bugs/bug32941.phpt +++ php-src/ext/soap/tests/bugs/bug32941.phpt http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug32941.wsdl?r=1.1&p=1 Index: php-src/ext/soap/tests/bugs/bug32941.wsdl +++ php-src/ext/soap/tests/bugs/bug32941.wsdl -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php