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

Reply via email to