dmitry          Thu Aug 26 14:36:47 2004 EDT

  Added files:                 (Branch: PHP_5_0)
    /php-src/ext/soap/tests/bugs        bug29839.phpt bug29839.wsdl xml.xsd 

  Modified files:              
    /php-src    NEWS 
    /php-src/ext/soap   php_encoding.c php_encoding.h php_schema.c 
                        php_sdl.c php_sdl.h 
  Log:
  Fixed bug #29839 (incorrect convert (xml:lang to lang))
  
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1760.2.60&r2=1.1760.2.61&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.1760.2.60 php-src/NEWS:1.1760.2.61
--- php-src/NEWS:1.1760.2.60    Thu Aug 26 11:23:57 2004
+++ php-src/NEWS        Thu Aug 26 14:36:46 2004
@@ -11,6 +11,7 @@
 - Fixed a file-descriptor leak with phpinfo() and other 'special' URLs (Zeev)
 - Fixed bug #29844 (SOAP doesn't return the result of a valid SOAP request).
   (Dmitry)
+- Fixed bug #29839 (incorrect convert (xml:lang to lang)). (Dmitry)
 - Fixed bug #29830 (SoapServer::setClass() should not export non-public
   methods). (Dmitry)
 - Fixed bug #29821 (Fixed possible crashes in convert_uudecode() on invalid
http://cvs.php.net/diff.php/php-src/ext/soap/php_encoding.c?r1=1.71.2.2&r2=1.71.2.3&ty=u
Index: php-src/ext/soap/php_encoding.c
diff -u php-src/ext/soap/php_encoding.c:1.71.2.2 
php-src/ext/soap/php_encoding.c:1.71.2.3
--- php-src/ext/soap/php_encoding.c:1.71.2.2    Thu Aug 26 11:23:57 2004
+++ php-src/ext/soap/php_encoding.c     Thu Aug 26 14:36:46 2004
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_encoding.c,v 1.71.2.2 2004/08/26 15:23:57 dmitry Exp $ */
+/* $Id: php_encoding.c,v 1.71.2.3 2004/08/26 18:36:46 dmitry Exp $ */
 
 #include <time.h>
 
@@ -1357,7 +1357,14 @@
                                                                if ((*attr)->fixed && 
strcmp((*attr)->fixed,dummy->children->content) != 0) {
                                                                        
soap_error3(E_ERROR, "Encoding: Attribute '%s' has fixed value '%s' (value '%s' is not 
allowed)", (*attr)->name, (*attr)->fixed, dummy->children->content);
                                                                }
-                                                               xmlSetProp(xmlParam, 
(*attr)->name, dummy->children->content);
+                                                               if ((*attr)->namens && 
+                                                                   (type->ns == NULL 
|| strcmp((*attr)->namens, type->ns))) {
+                                                                       xmlNsPtr nsp = 
encode_add_ns(xmlParam, (*attr)->namens);
+
+                                                                       
xmlSetNsProp(xmlParam, nsp, (*attr)->name, dummy->children->content);
+                                                               } else {
+                                                                       
xmlSetProp(xmlParam, (*attr)->name, dummy->children->content);
+                                                               }
                                                        }
                                                        xmlUnlinkNode(dummy);
                                                        xmlFreeNode(dummy);
http://cvs.php.net/diff.php/php-src/ext/soap/php_encoding.h?r1=1.35&r2=1.35.2.1&ty=u
Index: php-src/ext/soap/php_encoding.h
diff -u php-src/ext/soap/php_encoding.h:1.35 php-src/ext/soap/php_encoding.h:1.35.2.1
--- php-src/ext/soap/php_encoding.h:1.35        Tue Feb 24 05:12:45 2004
+++ php-src/ext/soap/php_encoding.h     Thu Aug 26 14:36:46 2004
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_encoding.h,v 1.35 2004/02/24 10:12:45 dmitry Exp $ */
+/* $Id: php_encoding.h,v 1.35.2.1 2004/08/26 18:36:46 dmitry Exp $ */
 
 #ifndef PHP_ENCODING_H
 #define PHP_ENCODING_H
@@ -43,6 +43,8 @@
 #define XSD_NS_PREFIX "xsd"
 #define XSI_NAMESPACE "http://www.w3.org/2001/XMLSchema-instance";
 #define XSI_NS_PREFIX "xsi"
+#define XML_NAMESPACE "http://www.w3.org/XML/1998/namespace";
+#define XML_NS_PREFIX "xml"
 
 #define XSD_STRING 101
 #define XSD_STRING_STRING "string"
http://cvs.php.net/diff.php/php-src/ext/soap/php_schema.c?r1=1.49&r2=1.49.2.1&ty=u
Index: php-src/ext/soap/php_schema.c
diff -u php-src/ext/soap/php_schema.c:1.49 php-src/ext/soap/php_schema.c:1.49.2.1
--- php-src/ext/soap/php_schema.c:1.49  Wed May  5 06:31:26 2004
+++ php-src/ext/soap/php_schema.c       Thu Aug 26 14:36:46 2004
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_schema.c,v 1.49 2004/05/05 10:31:26 dmitry Exp $ */
+/* $Id: php_schema.c,v 1.49.2.1 2004/08/26 18:36:46 dmitry Exp $ */
 
 #include "php_soap.h"
 #include "libxml/uri.h"
@@ -1729,6 +1729,7 @@
                        if (nsptr != NULL) {
                                smart_str_appends(&key, nsptr->href);
                                smart_str_appendc(&key, ':');
+                               newAttr->namens = estrdup(nsptr->href);
                        }
                        smart_str_appends(&key, attr_name);
                        smart_str_0(&key);
@@ -1745,6 +1746,7 @@
                        if (ns != NULL) {
                                smart_str_appends(&key, ns->children->content);
                                smart_str_appendc(&key, ':');
+                               newAttr->namens = estrdup(ns->children->content);
                        }
                        smart_str_appends(&key, name->children->content);
                        smart_str_0(&key);
@@ -2014,6 +2016,9 @@
                                if ((*tmp)->name != NULL && attr->name == NULL) {
                                        attr->name = estrdup((*tmp)->name);
                                }
+                               if ((*tmp)->namens != NULL && attr->namens == NULL) {
+                                       attr->namens = estrdup((*tmp)->namens);
+                               }
                                if ((*tmp)->def != NULL && attr->def == NULL) {
                                        attr->def = estrdup((*tmp)->def);
                                }
@@ -2071,6 +2076,7 @@
                                                        memcpy(newAttr, *tmp_attr, 
sizeof(sdlAttribute));
                                                        if (newAttr->def) 
{newAttr->def = estrdup(newAttr->def);}
                                                        if (newAttr->fixed) 
{newAttr->fixed = estrdup(newAttr->fixed);}
+                                                       if (newAttr->namens) 
{newAttr->namens = estrdup(newAttr->namens);}
                                                        if (newAttr->name) 
{newAttr->name = estrdup(newAttr->name);}
                                                        if (newAttr->extraAttributes) {
                                                          xmlNodePtr node;
@@ -2329,6 +2335,9 @@
        }
        if (attr->name) {
                efree(attr->name);
+       }
+       if (attr->namens) {
+               efree(attr->namens);
        }
        if (attr->ref) {
                efree(attr->ref);
http://cvs.php.net/diff.php/php-src/ext/soap/php_sdl.c?r1=1.70.2.2&r2=1.70.2.3&ty=u
Index: php-src/ext/soap/php_sdl.c
diff -u php-src/ext/soap/php_sdl.c:1.70.2.2 php-src/ext/soap/php_sdl.c:1.70.2.3
--- php-src/ext/soap/php_sdl.c:1.70.2.2 Tue Aug 10 12:30:30 2004
+++ php-src/ext/soap/php_sdl.c  Thu Aug 26 14:36:46 2004
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_sdl.c,v 1.70.2.2 2004/08/10 16:30:30 dmitry Exp $ */
+/* $Id: php_sdl.c,v 1.70.2.3 2004/08/26 18:36:46 dmitry Exp $ */
 
 #include "php_soap.h"
 #include "libxml/uri.h"
@@ -993,7 +993,7 @@
        return ctx.sdl;
 }
 
-#define WSDL_CACHE_VERSION 0x09
+#define WSDL_CACHE_VERSION 0x0a
 
 #define WSDL_CACHE_GET(ret,type,buf)   memcpy(&ret,*buf,sizeof(type)); *buf += 
sizeof(type);
 #define WSDL_CACHE_GET_INT(ret,buf)    ret = ((unsigned char)(*buf)[0])|((unsigned 
char)(*buf)[1]<<8)|((unsigned char)(*buf)[2]<<16)|((int)(*buf)[3]<<24); *buf += 4;
@@ -1042,6 +1042,7 @@
        int i;
 
        attr->name = sdl_deserialize_string(in);
+       attr->namens = sdl_deserialize_string(in);
        attr->ref = sdl_deserialize_string(in);
        attr->def = sdl_deserialize_string(in);
        attr->fixed = sdl_deserialize_string(in);
@@ -1317,7 +1318,7 @@
        sdlPtr sdl;
        time_t old_t;
        int  i, num_groups, num_types, num_elements, num_encoders, num_bindings, 
num_func;
-       sdlFunctionPtr *functions;
+       sdlFunctionPtr *functions = NULL;
        sdlBindingPtr *bindings;
        sdlTypePtr *types;
        encodePtr *encoders;
@@ -1472,69 +1473,71 @@
 
        /* deserialize functions */
        WSDL_CACHE_GET_INT(num_func, &in);
-       zend_hash_init(&sdl->functions, num_func, NULL, delete_function, 0);
-       functions = emalloc(num_func*sizeof(sdlFunctionPtr));
-       for (i = 0; i < num_func; i++) {
-               int binding_num, num_faults;
-               sdlFunctionPtr func = emalloc(sizeof(sdlFunction));
-               sdl_deserialize_key(&sdl->functions, func, &in);
-               func->functionName = sdl_deserialize_string(&in);
-               func->requestName = sdl_deserialize_string(&in);
-               func->responseName = sdl_deserialize_string(&in);
-
-               WSDL_CACHE_GET_INT(binding_num, &in);
-               if (binding_num == 0) {
-                       func->binding = NULL;
-               } else {
-                       func->binding = bindings[binding_num-1];
-               }
-               if (func->binding && func->binding->bindingType == BINDING_SOAP && *in 
!= 0) {
-                       sdlSoapBindingFunctionPtr binding = func->bindingAttributes = 
emalloc(sizeof(sdlSoapBindingFunction));
-                       memset(binding, 0, sizeof(sdlSoapBindingFunction));
-                       WSDL_CACHE_GET_1(binding->style,sdlEncodingStyle,&in);
-                       binding->soapAction = sdl_deserialize_string(&in);
-                       sdl_deserialize_soap_body(&binding->input, encoders, types, 
&in);
-                       sdl_deserialize_soap_body(&binding->output, encoders, types, 
&in);
-               } else {
-                       WSDL_CACHE_SKIP(1, &in);
-                       func->bindingAttributes = NULL;
-               }
+       if (num_func > 0) {
+               zend_hash_init(&sdl->functions, num_func, NULL, delete_function, 0);
+               functions = emalloc(num_func*sizeof(sdlFunctionPtr));
+               for (i = 0; i < num_func; i++) {
+                       int binding_num, num_faults;
+                       sdlFunctionPtr func = emalloc(sizeof(sdlFunction));
+                       sdl_deserialize_key(&sdl->functions, func, &in);
+                       func->functionName = sdl_deserialize_string(&in);
+                       func->requestName = sdl_deserialize_string(&in);
+                       func->responseName = sdl_deserialize_string(&in);
+
+                       WSDL_CACHE_GET_INT(binding_num, &in);
+                       if (binding_num == 0) {
+                               func->binding = NULL;
+                       } else {
+                               func->binding = bindings[binding_num-1];
+                       }
+                       if (func->binding && func->binding->bindingType == 
BINDING_SOAP && *in != 0) {
+                               sdlSoapBindingFunctionPtr binding = 
func->bindingAttributes = emalloc(sizeof(sdlSoapBindingFunction));
+                               memset(binding, 0, sizeof(sdlSoapBindingFunction));
+                               WSDL_CACHE_GET_1(binding->style,sdlEncodingStyle,&in);
+                               binding->soapAction = sdl_deserialize_string(&in);
+                               sdl_deserialize_soap_body(&binding->input, encoders, 
types, &in);
+                               sdl_deserialize_soap_body(&binding->output, encoders, 
types, &in);
+                       } else {
+                               WSDL_CACHE_SKIP(1, &in);
+                               func->bindingAttributes = NULL;
+                       }
 
-               func->requestParameters = sdl_deserialize_parameters(encoders, types, 
&in);
-               func->responseParameters = sdl_deserialize_parameters(encoders, types, 
&in);
+                       func->requestParameters = sdl_deserialize_parameters(encoders, 
types, &in);
+                       func->responseParameters = 
sdl_deserialize_parameters(encoders, types, &in);
 
-               WSDL_CACHE_GET_INT(num_faults, &in);
-               if (num_faults > 0) {
-                 int j;
-
-                       func->faults = emalloc(sizeof(HashTable));
-                       zend_hash_init(func->faults, num_faults, NULL, delete_fault, 
0);
-
-                       for (j = 0; j < num_faults; j++) {
-                               sdlFaultPtr fault = emalloc(sizeof(sdlFault));
-
-                               sdl_deserialize_key(func->faults, fault, &in);
-                               fault->name =sdl_deserialize_string(&in);
-                               fault->details =sdl_deserialize_parameters(encoders, 
types, &in);
-                               if (*in != 0) {
-                                       sdlSoapBindingFunctionFaultPtr binding = 
fault->bindingAttributes = emalloc(sizeof(sdlSoapBindingFunctionFault));
-                                       memset(binding, 0, 
sizeof(sdlSoapBindingFunctionFault));
-                                       
WSDL_CACHE_GET_1(binding->use,sdlEncodingUse,&in);
-                                       if (binding->use == SOAP_ENCODED) {
-                                               
WSDL_CACHE_GET_1(binding->encodingStyle, sdlRpcEncodingStyle, &in);
+                       WSDL_CACHE_GET_INT(num_faults, &in);
+                       if (num_faults > 0) {
+                         int j;
+
+                               func->faults = emalloc(sizeof(HashTable));
+                               zend_hash_init(func->faults, num_faults, NULL, 
delete_fault, 0);
+
+                               for (j = 0; j < num_faults; j++) {
+                                       sdlFaultPtr fault = emalloc(sizeof(sdlFault));
+
+                                       sdl_deserialize_key(func->faults, fault, &in);
+                                       fault->name =sdl_deserialize_string(&in);
+                                       fault->details 
=sdl_deserialize_parameters(encoders, types, &in);
+                                       if (*in != 0) {
+                                               sdlSoapBindingFunctionFaultPtr binding 
= fault->bindingAttributes = emalloc(sizeof(sdlSoapBindingFunctionFault));
+                                               memset(binding, 0, 
sizeof(sdlSoapBindingFunctionFault));
+                                               
WSDL_CACHE_GET_1(binding->use,sdlEncodingUse,&in);
+                                               if (binding->use == SOAP_ENCODED) {
+                                                       
WSDL_CACHE_GET_1(binding->encodingStyle, sdlRpcEncodingStyle, &in);
+                                               } else {
+                                                       binding->encodingStyle = 
SOAP_ENCODING_DEFAULT;
+                                               }
+                                               binding->ns = 
sdl_deserialize_string(&in);
                                        } else {
-                                               binding->encodingStyle = 
SOAP_ENCODING_DEFAULT;
+                                               WSDL_CACHE_SKIP(1, &in);
+                                               fault->bindingAttributes = NULL;
                                        }
-                                       binding->ns = sdl_deserialize_string(&in);
-                               } else {
-                                       WSDL_CACHE_SKIP(1, &in);
-                                       fault->bindingAttributes = NULL;
                                }
+                       } else {
+                               func->faults = NULL;
                        }
-               } else {
-                       func->faults = NULL;
+                       functions[i] = func;
                }
-               functions[i] = func;
        }
 
        /* deserialize requests */
@@ -1551,7 +1554,9 @@
                }
        }
 
-       efree(functions);
+       if (functions) {
+               efree(functions);
+       }
        efree(bindings);
        efree(encoders);
        efree(types);
@@ -1619,6 +1624,7 @@
        int i;
 
        sdl_serialize_string(attr->name, out);
+       sdl_serialize_string(attr->namens, out);
        sdl_serialize_string(attr->ref, out);
        sdl_serialize_string(attr->def, out);
        sdl_serialize_string(attr->fixed, out);
http://cvs.php.net/diff.php/php-src/ext/soap/php_sdl.h?r1=1.31&r2=1.31.2.1&ty=u
Index: php-src/ext/soap/php_sdl.h
diff -u php-src/ext/soap/php_sdl.h:1.31 php-src/ext/soap/php_sdl.h:1.31.2.1
--- php-src/ext/soap/php_sdl.h:1.31     Tue Feb 24 10:06:41 2004
+++ php-src/ext/soap/php_sdl.h  Thu Aug 26 14:36:46 2004
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_sdl.h,v 1.31 2004/02/24 15:06:41 dmitry Exp $ */
+/* $Id: php_sdl.h,v 1.31.2.1 2004/08/26 18:36:46 dmitry Exp $ */
 
 #ifndef PHP_SDL_H
 #define PHP_SDL_H
@@ -239,6 +239,7 @@
 
 struct _sdlAttribute {
        char      *name;
+       char      *namens;
        char      *ref;
        char      *def;
        char      *fixed;

http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug29839.phpt?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug29839.phpt
+++ php-src/ext/soap/tests/bugs/bug29839.phpt

http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug29839.wsdl?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug29839.wsdl
+++ php-src/ext/soap/tests/bugs/bug29839.wsdl

http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/xml.xsd?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/xml.xsd
+++ php-src/ext/soap/tests/bugs/xml.xsd

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to