dmitry          Mon Aug  9 01:50:06 2004 EDT

  Added files:                 (Branch: PHP_5_0)
    /php-src/ext/soap/tests/bugs        .cvsignore bug28985.phpt bug28985.wsdl 
                                        bug29061.phpt bug29061.wsdl 
                                        bug29109.phpt bug29109.wsdl 
                                        bug29236.phpt bug29236.wsdl 

  Modified files:              
    /php-src    NEWS 
    /php-src/ext/soap   php_sdl.c soap.c 
  Log:
  Included ext/soap fixes from CVS HEAD.
  
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1760.2.24&r2=1.1760.2.25&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.1760.2.24 php-src/NEWS:1.1760.2.25
--- php-src/NEWS:1.1760.2.24    Mon Aug  9 00:33:39 2004
+++ php-src/NEWS        Mon Aug  9 01:50:05 2004
@@ -1,6 +1,10 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2004, PHP 5.0.1
+- Fixed bug #29236 (memory error when wsdl-cache is enabled). (Dmitry)
+- Fixed bug #29109 (SoapFault exception: [WSDL] Out of memory). (Dmitry)
+- Fixed bug #29061 (soap extension segfaults). (Dmitry)
+- Fixed bug #28985 (__getTypes() returning nothing on complex WSDL). (Dmitry)
 - Updated several libraries bundled with the windows release which now 
   includes libxml2-2.6.11, libxslt-1.1.7 and iconv-1.9.1. (Rob, Edin)
 - Improved and moved ActiveScript SAPI to PECL.  (Wez)
http://cvs.php.net/diff.php/php-src/ext/soap/php_sdl.c?r1=1.70&r2=1.70.2.1&ty=u
Index: php-src/ext/soap/php_sdl.c
diff -u php-src/ext/soap/php_sdl.c:1.70 php-src/ext/soap/php_sdl.c:1.70.2.1
--- php-src/ext/soap/php_sdl.c:1.70     Mon Jul  5 17:31:35 2004
+++ php-src/ext/soap/php_sdl.c  Mon Aug  9 01:50:05 2004
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_sdl.c,v 1.70 2004/07/05 21:31:35 iliaa Exp $ */
+/* $Id: php_sdl.c,v 1.70.2.1 2004/08/09 05:50:05 dmitry Exp $ */
 
 #include "php_soap.h"
 #include "libxml/uri.h"
@@ -1459,14 +1459,12 @@
                        binding->name = sdl_deserialize_string(&in);
                        binding->location = sdl_deserialize_string(&in);
                        WSDL_CACHE_GET_1(binding->bindingType,sdlBindingType,&in);
-                       if (binding->bindingType == BINDING_SOAP) {
-                               if (*in != 0) {
-                                 sdlSoapBindingPtr soap_binding = 
binding->bindingAttributes = emalloc(sizeof(sdlSoapBinding));
-                                       
WSDL_CACHE_GET_1(soap_binding->style,sdlEncodingStyle,&in);
-                                       
WSDL_CACHE_GET_1(soap_binding->transport,sdlTransport,&in);
-                               } else {
-                                       WSDL_CACHE_SKIP(1,&in);
-                               }
+                       if (binding->bindingType == BINDING_SOAP && *in != 0) {
+                         sdlSoapBindingPtr soap_binding = binding->bindingAttributes 
= emalloc(sizeof(sdlSoapBinding));
+                               
WSDL_CACHE_GET_1(soap_binding->style,sdlEncodingStyle,&in);
+                               
WSDL_CACHE_GET_1(soap_binding->transport,sdlTransport,&in);
+                       } else {
+                               WSDL_CACHE_SKIP(1,&in);
                        }
                        bindings[i] = binding;
                }
@@ -1490,18 +1488,16 @@
                } else {
                        func->binding = bindings[binding_num-1];
                }
-               if (func->binding && func->binding->bindingType == BINDING_SOAP) {
-                       if (*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 (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);
http://cvs.php.net/diff.php/php-src/ext/soap/soap.c?r1=1.110&r2=1.110.2.1&ty=u
Index: php-src/ext/soap/soap.c
diff -u php-src/ext/soap/soap.c:1.110 php-src/ext/soap/soap.c:1.110.2.1
--- php-src/ext/soap/soap.c:1.110       Tue Jul 13 16:41:55 2004
+++ php-src/ext/soap/soap.c     Mon Aug  9 01:50:05 2004
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: soap.c,v 1.110 2004/07/13 20:41:55 zeev Exp $ */
+/* $Id: soap.c,v 1.110.2.1 2004/08/09 05:50:05 dmitry Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1262,7 +1262,7 @@
                                                INIT_ZVAL(readfile_ret);
                                                MAKE_STD_ZVAL(param);
 
-                                               sapi_add_header("Content-Type: 
text/xml; charset=\"utf-8\"", sizeof("Content-Type: text/xml; charset=\"utf-8\""), 1);
+                                               sapi_add_header("Content-Type: 
text/xml; charset=\"utf-8\"", sizeof("Content-Type: text/xml; charset=\"utf-8\"")-1, 
1);
                                                ZVAL_STRING(param, 
service->sdl->source, 1);
                                                ZVAL_STRING(&readfile, "readfile", 1);
                                                if 
(call_user_function(EG(function_table), NULL, &readfile, &readfile_ret, 1, &param  
TSRMLS_CC) == FAILURE) {
@@ -1623,11 +1623,11 @@
        }
 
        sprintf(cont_len, "Content-Length: %d", size);
-       sapi_add_header(cont_len, strlen(cont_len) + 1, 1);
+       sapi_add_header(cont_len, strlen(cont_len), 1);
        if (soap_version == SOAP_1_2) {
-               sapi_add_header("Content-Type: application/soap+xml; 
charset=\"utf-8\"", sizeof("Content-Type: application/soap+xml; charset=\"utf-8\""), 
1);
+               sapi_add_header("Content-Type: application/soap+xml; 
charset=\"utf-8\"", sizeof("Content-Type: application/soap+xml; charset=\"utf-8\"")-1, 
1);
        } else {
-               sapi_add_header("Content-Type: text/xml; charset=\"utf-8\"", 
sizeof("Content-Type: text/xml; charset=\"utf-8\""), 1);
+               sapi_add_header("Content-Type: text/xml; charset=\"utf-8\"", 
sizeof("Content-Type: text/xml; charset=\"utf-8\"")-1, 1);
        }
 
        xmlFreeDoc(doc_return);
@@ -1707,13 +1707,13 @@
           Want to return HTTP 500 but apache wants to over write
           our fault code with their own handling... Figure this out later
        */
-       sapi_add_header("HTTP/1.1 500 Internal Service Error", sizeof("HTTP/1.1 500 
Internal Service Error"), 1);
+       sapi_add_header("HTTP/1.1 500 Internal Service Error", sizeof("HTTP/1.1 500 
Internal Service Error")-1, 1);
        sprintf(cont_len,"Content-Length: %d", size);
-       sapi_add_header(cont_len, strlen(cont_len) + 1, 1);
+       sapi_add_header(cont_len, strlen(cont_len), 1);
        if (soap_version == SOAP_1_2) {
-               sapi_add_header("Content-Type: application/soap+xml; 
charset=\"utf-8\"", sizeof("Content-Type: application/soap+xml; charset=\"utf-8\""), 
1);
+               sapi_add_header("Content-Type: application/soap+xml; 
charset=\"utf-8\"", sizeof("Content-Type: application/soap+xml; charset=\"utf-8\"")-1, 
1);
        } else {
-               sapi_add_header("Content-Type: text/xml; charset=\"utf-8\"", 
sizeof("Content-Type: text/xml; charset=\"utf-8\""), 1);
+               sapi_add_header("Content-Type: text/xml; charset=\"utf-8\"", 
sizeof("Content-Type: text/xml; charset=\"utf-8\"")-1, 1);
        }
        php_write(buf, size TSRMLS_CC);
 
@@ -1993,10 +1993,18 @@
        ZVAL_STRINGL(params[0], buf, buf_size, 0);
        INIT_ZVAL(param1);
        params[1] = &param1;
-       ZVAL_STRING(params[1], location, 0);
+       if (location == NULL) {
+               ZVAL_NULL(params[1]);
+       } else {
+               ZVAL_STRING(params[1], location, 0);
+       }
        INIT_ZVAL(param2);
        params[2] = &param2;
-       ZVAL_STRING(params[2], action, 0);
+       if (action == NULL) {
+               ZVAL_NULL(params[2]);
+       } else {
+               ZVAL_STRING(params[2], action, 0);
+       }
        INIT_ZVAL(param3);
        params[3] = &param3;
        ZVAL_LONG(params[3], version);
@@ -2035,8 +2043,6 @@
        sdlPtr old_sdl = NULL;
        sdlFunctionPtr fn;
        xmlDocPtr request = NULL;
-       char *buffer;
-       int len;
        int ret = FALSE;
        int soap_version;
        zval response;
@@ -2603,8 +2609,6 @@
        xmlAttrPtr attr;
        sdlFunctionPtr function;
 
-       ZVAL_EMPTY_STRING(function_name);
-
        /* Get <Envelope> element */
        env = NULL;
        trav = request->children;
@@ -3745,8 +3749,12 @@
                case XSD_TYPEKIND_SIMPLE:
                case XSD_TYPEKIND_LIST:
                case XSD_TYPEKIND_UNION:
-                       smart_str_appendl(buf, type->encode->details.type_str, 
strlen(type->encode->details.type_str));
-                       smart_str_appendc(buf, ' ');
+                       if (type->encode) {
+                               smart_str_appendl(buf, type->encode->details.type_str, 
strlen(type->encode->details.type_str));
+                               smart_str_appendc(buf, ' ');
+                       } else {
+                               smart_str_appendl(buf, "anyType ", sizeof("anyType 
")-1);
+                       }
                        smart_str_appendl(buf, type->name, strlen(type->name));
                        break;
                case XSD_TYPEKIND_COMPLEX:
@@ -3771,7 +3779,7 @@
                                                len = end-(*ext)->val;
                                        }
                                        if (len == 0) {
-                                               smart_str_appendl(buf, "anyType", 7);
+                                               smart_str_appendl(buf, "anyType", 
sizeof("anyType")-1);
                                        } else {
                                                smart_str_appendl(buf, (*ext)->val, 
len);
                                        }

http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/.cvsignore?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/.cvsignore
+++ php-src/ext/soap/tests/bugs/.cvsignore
phpt.*
*.diff
*.log
*.exp
*.out

http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug28985.phpt?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug28985.phpt
+++ php-src/ext/soap/tests/bugs/bug28985.phpt
--TEST--
Bug #28985 (__getTypes() returning nothing on complex WSDL)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
$client = new SOAPClient(dirname(__FILE__).'/bug28985.wsdl', array('trace'=>1));
var_dump($client->__getTypes());
?>
--EXPECT--
array(42) {
  [0]=>
  string(100) "struct LoginMGDIS {
 string iUserLogin;
 string iUserId;
 string iUserPassword;
 string iProfilId;
}"
  [1]=>
  string(29) "struct LoginMGDISResponse {
}"
  [2]=>
  string(28) "struct GetIdentification {
}"
  [3]=>
  string(77) "struct GetIdentificationResponse {
 ArrayOfAnyType GetIdentificationResult;
}"
  [4]=>
  string(43) "struct ArrayOfAnyType {
 anyType anyType;
}"
  [5]=>
  string(37) "struct RollbackCurrentTransaction {
}"
  [6]=>
  string(45) "struct RollbackCurrentTransactionResponse {
}"
  [7]=>
  string(68) "struct GetListeProfil {
 string iUserLogin;
 string iUserPassword;
}"
  [8]=>
  string(86) "struct MGCodeLibelle {
 string Code;
 string Libelle;
 boolean Defaut;
 anyType Tag;
}"
  [9]=>
  string(61) "struct ArrayOfMGCodeLibelle {
 MGCodeLibelle MGCodeLibelle;
}"
  [10]=>
  string(77) "struct GetListeProfilResponse {
 ArrayOfMGCodeLibelle GetListeProfilResult;
}"
  [11]=>
  string(41) "struct GetListeValCodif {
 string Code;
}"
  [12]=>
  string(43) "struct ArrayOfMGCodif {
 MGCodif MGCodif;
}"
  [13]=>
  string(18) "struct MGCodif {
}"
  [14]=>
  string(75) "struct GetListeValCodifResponse {
 ArrayOfMGCodif GetListeValCodifResult;
}"
  [15]=>
  string(39) "struct TestPhpSoap {
 MGCodif entree;
}"
  [16]=>
  string(57) "struct TestPhpSoapResponse {
 string TestPhpSoapResult;
}"
  [17]=>
  string(50) "struct GetListeCodif {
 boolean iGetListeValeur;
}"
  [18]=>
  string(87) "struct MGCodifGrp {
 string TypeCodif;
 string LibCodif;
 ArrayOfMGCodif ListeCodifs;
}"
  [19]=>
  string(52) "struct ArrayOfMGCodifGrp {
 MGCodifGrp MGCodifGrp;
}"
  [20]=>
  string(72) "struct GetListeCodifResponse {
 ArrayOfMGCodifGrp GetListeCodifResult;
}"
  [21]=>
  string(57) "struct DroitCreation {
 string iObjet;
 string iProfil;
}"
  [22]=>
  string(62) "struct DroitCreationResponse {
 boolean DroitCreationResult;
}"
  [23]=>
  string(74) "struct ListeDroitCreation {
 ArrayOfString iListeObjet;
 string iProfil;
}"
  [24]=>
  string(40) "struct ArrayOfString {
 string string;
}"
  [25]=>
  string(79) "struct ListeDroitCreationResponse {
 ArrayOfAnyType ListeDroitCreationResult;
}"
  [26]=>
  string(87) "struct GetDroitsObjetProtege {
 string iObjet;
 string iProfil;
 string iUtilisateur;
}"
  [27]=>
  string(154) "struct MGDroitsObjetProtege {
 string LbUti;
 string LbProf;
 string LbServ;
 string LbDir;
 boolean isProtected;
 ArrayOfMGDroitAcces ListeDroitsAcces;
}"
  [28]=>
  string(58) "struct ArrayOfMGDroitAcces {
 MGDroitAcces MGDroitAcces;
}"
  [29]=>
  string(104) "struct MGDroitAcces {
 string IdProfil;
 boolean Lecture;
 boolean Modification;
 boolean Suppression;
}"
  [30]=>
  string(91) "struct GetDroitsObjetProtegeResponse {
 MGDroitsObjetProtege GetDroitsObjetProtegeResult;
}"
  [31]=>
  string(76) "struct GetPrivileges {
 string iIdSupport;
 int iIdForme;
 string iProfil;
}"
  [32]=>
  string(68) "struct GetPrivilegesResponse {
 ArrayOfString GetPrivilegesResult;
}"
  [33]=>
  string(46) "struct GetLibelleProfil {
 string iIdProfil;
}"
  [34]=>
  string(67) "struct GetLibelleProfilResponse {
 string GetLibelleProfilResult;
}"
  [35]=>
  string(91) "struct GetValeurRecherche {
 string iChampSource;
 string iTable;
 string iOrderByClause;
}"
  [36]=>
  string(78) "struct GetValeurRechercheResponse {
 ArrayOfString GetValeurRechercheResult;
}"
  [37]=>
  string(128) "struct GetValeurRechercheWithClauseWhere {
 string iChampSource;
 string iTable;
 string iClauseWhere;
 string iOrderByClause;
}"
  [38]=>
  string(108) "struct GetValeurRechercheWithClauseWhereResponse {
 ArrayOfString GetValeurRechercheWithClauseWhereResult;
}"
  [39]=>
  string(27) "struct GetEnvironnement {
}"
  [40]=>
  string(106) "struct MGEnvironnement {
 string RepBureautique;
 string RepBureautiqueImage;
 string RepBureautiqueDoc;
}"
  [41]=>
  string(76) "struct GetEnvironnementResponse {
 MGEnvironnement GetEnvironnementResult;
}"
}
http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug28985.wsdl?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug28985.wsdl
+++ php-src/ext/soap/tests/bugs/bug28985.wsdl
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:s="http://www.w3.org/2001/XMLSchema";
xmlns:s0="http://tempuri.org/";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/";
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/";
targetNamespace="http://tempuri.org/";
xmlns="http://schemas.xmlsoap.org/wsdl/";>
  <types>
    <s:schema elementFormDefault="qualified"
targetNamespace="http://tempuri.org/";>
      <s:element name="LoginMGDIS">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="iUserLogin"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iUserId"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iUserPassword"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iProfilId"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="LoginMGDISResponse">
        <s:complexType />
      </s:element>
      <s:element name="GetIdentification">
        <s:complexType />
      </s:element>
      <s:element name="GetIdentificationResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="GetIdentificationResult" type="s0:ArrayOfAnyType" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="ArrayOfAnyType">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="anyType"
nillable="true" />
        </s:sequence>
      </s:complexType>
      <s:element name="RollbackCurrentTransaction">
        <s:complexType />
      </s:element>
      <s:element name="RollbackCurrentTransactionResponse">
        <s:complexType />
      </s:element>
      <s:element name="GetListeProfil">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="iUserLogin"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iUserPassword"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="MGCodeLibelle">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="Code"
type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="Libelle"
type="s:string" />
          <s:element minOccurs="1" maxOccurs="1" name="Defaut"
type="s:boolean" />
          <s:element minOccurs="0" maxOccurs="1" name="Tag" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="ArrayOfMGCodeLibelle">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded"
name="MGCodeLibelle" nillable="true" type="s0:MGCodeLibelle" />
        </s:sequence>
      </s:complexType>
      <s:element name="GetListeProfilResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="GetListeProfilResult" type="s0:ArrayOfMGCodeLibelle" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetListeValCodif">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="Code"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="ArrayOfMGCodif">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="MGCodif"
nillable="true" type="s0:MGCodif" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="MGCodif">
        <s:complexContent mixed="false">
          <s:extension base="s0:MGCodeLibelle" />
        </s:complexContent>
      </s:complexType>
      <s:element name="GetListeValCodifResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="GetListeValCodifResult" type="s0:ArrayOfMGCodif" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="TestPhpSoap">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="entree"
type="s0:MGCodif" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="TestPhpSoapResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="TestPhpSoapResult" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetListeCodif">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1"
name="iGetListeValeur" type="s:boolean" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="MGCodifGrp">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="TypeCodif"
type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="LibCodif"
type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="ListeCodifs"
type="s0:ArrayOfMGCodif" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="ArrayOfMGCodifGrp">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded"
name="MGCodifGrp" nillable="true" type="s0:MGCodifGrp" />
        </s:sequence>
      </s:complexType>
      <s:element name="GetListeCodifResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="GetListeCodifResult" type="s0:ArrayOfMGCodifGrp" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="DroitCreation">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="iObjet"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iProfil"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="DroitCreationResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1"
name="DroitCreationResult" type="s:boolean" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="ListeDroitCreation">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="iListeObjet"
type="s0:ArrayOfString" />
            <s:element minOccurs="0" maxOccurs="1" name="iProfil"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="ArrayOfString">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="string"
nillable="true" type="s:string" />
        </s:sequence>
      </s:complexType>
      <s:element name="ListeDroitCreationResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="ListeDroitCreationResult" type="s0:ArrayOfAnyType" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetDroitsObjetProtege">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="iObjet"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iProfil"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iUtilisateur"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="MGDroitsObjetProtege">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="LbUti"
type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="LbProf"
type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="LbServ"
type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="LbDir"
type="s:string" />
          <s:element minOccurs="1" maxOccurs="1" name="isProtected"
type="s:boolean" />
          <s:element minOccurs="0" maxOccurs="1" name="ListeDroitsAcces"
type="s0:ArrayOfMGDroitAcces" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="ArrayOfMGDroitAcces">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded"
name="MGDroitAcces" nillable="true" type="s0:MGDroitAcces" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="MGDroitAcces">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="IdProfil"
type="s:string" />
          <s:element minOccurs="1" maxOccurs="1" name="Lecture"
type="s:boolean" />
          <s:element minOccurs="1" maxOccurs="1" name="Modification"
type="s:boolean" />
          <s:element minOccurs="1" maxOccurs="1" name="Suppression"
type="s:boolean" />
        </s:sequence>
      </s:complexType>
      <s:element name="GetDroitsObjetProtegeResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="GetDroitsObjetProtegeResult" type="s0:MGDroitsObjetProtege" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetPrivileges">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="iIdSupport"
type="s:string" />
            <s:element minOccurs="1" maxOccurs="1" name="iIdForme"
type="s:int" />
            <s:element minOccurs="0" maxOccurs="1" name="iProfil"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetPrivilegesResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="GetPrivilegesResult" type="s0:ArrayOfString" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetLibelleProfil">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="iIdProfil"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetLibelleProfilResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="GetLibelleProfilResult" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetValeurRecherche">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="iChampSource"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iTable"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iOrderByClause"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetValeurRechercheResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="GetValeurRechercheResult" type="s0:ArrayOfString" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetValeurRechercheWithClauseWhere">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="iChampSource"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iTable"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iClauseWhere"
type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="iOrderByClause"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetValeurRechercheWithClauseWhereResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="GetValeurRechercheWithClauseWhereResult" type="s0:ArrayOfString"
/>
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetEnvironnement">
        <s:complexType />
      </s:element>
      <s:complexType name="MGEnvironnement">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="RepBureautique"
type="s:string" />
          <s:element minOccurs="0" maxOccurs="1"
name="RepBureautiqueImage" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1"
name="RepBureautiqueDoc" type="s:string" />
        </s:sequence>
      </s:complexType>
      <s:element name="GetEnvironnementResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1"
name="GetEnvironnementResult" type="s0:MGEnvironnement" />
          </s:sequence>
        </s:complexType>
      </s:element>
    </s:schema>
  </types>
  <message name="LoginMGDISSoapIn">
    <part name="parameters" element="s0:LoginMGDIS" />
  </message>
  <message name="LoginMGDISSoapOut">
    <part name="parameters" element="s0:LoginMGDISResponse" />
  </message>
  <message name="GetIdentificationSoapIn">
    <part name="parameters" element="s0:GetIdentification" />
  </message>
  <message name="GetIdentificationSoapOut">
    <part name="parameters" element="s0:GetIdentificationResponse" />
  </message>
  <message name="RollbackCurrentTransactionSoapIn">
    <part name="parameters" element="s0:RollbackCurrentTransaction" />
  </message>
  <message name="RollbackCurrentTransactionSoapOut">
    <part name="parameters"
element="s0:RollbackCurrentTransactionResponse" />
  </message>
  <message name="GetListeProfilSoapIn">
    <part name="parameters" element="s0:GetListeProfil" />
  </message>
  <message name="GetListeProfilSoapOut">
    <part name="parameters" element="s0:GetListeProfilResponse" />
  </message>
  <message name="GetListeValCodifSoapIn">
    <part name="parameters" element="s0:GetListeValCodif" />
  </message>
  <message name="GetListeValCodifSoapOut">
    <part name="parameters" element="s0:GetListeValCodifResponse" />
  </message>
  <message name="TestPhpSoapSoapIn">
    <part name="parameters" element="s0:TestPhpSoap" />
  </message>
  <message name="TestPhpSoapSoapOut">
    <part name="parameters" element="s0:TestPhpSoapResponse" />
  </message>
  <message name="GetListeCodifSoapIn">
    <part name="parameters" element="s0:GetListeCodif" />
  </message>
  <message name="GetListeCodifSoapOut">
    <part name="parameters" element="s0:GetListeCodifResponse" />
  </message>
  <message name="DroitCreationSoapIn">
    <part name="parameters" element="s0:DroitCreation" />
  </message>
  <message name="DroitCreationSoapOut">
    <part name="parameters" element="s0:DroitCreationResponse" />
  </message>
  <message name="ListeDroitCreationSoapIn">
    <part name="parameters" element="s0:ListeDroitCreation" />
  </message>
  <message name="ListeDroitCreationSoapOut">
    <part name="parameters" element="s0:ListeDroitCreationResponse" />
  </message>
  <message name="GetDroitsObjetProtegeSoapIn">
    <part name="parameters" element="s0:GetDroitsObjetProtege" />
  </message>
  <message name="GetDroitsObjetProtegeSoapOut">
    <part name="parameters" element="s0:GetDroitsObjetProtegeResponse"
/>
  </message>
  <message name="GetPrivilegesSoapIn">
    <part name="parameters" element="s0:GetPrivileges" />
  </message>
  <message name="GetPrivilegesSoapOut">
    <part name="parameters" element="s0:GetPrivilegesResponse" />
  </message>
  <message name="GetLibelleProfilSoapIn">
    <part name="parameters" element="s0:GetLibelleProfil" />
  </message>
  <message name="GetLibelleProfilSoapOut">
    <part name="parameters" element="s0:GetLibelleProfilResponse" />
  </message>
  <message name="GetValeurRechercheSoapIn">
    <part name="parameters" element="s0:GetValeurRecherche" />
  </message>
  <message name="GetValeurRechercheSoapOut">
    <part name="parameters" element="s0:GetValeurRechercheResponse" />
  </message>
  <message name="GetValeurRechercheWithClauseWhereSoapIn">
    <part name="parameters"
element="s0:GetValeurRechercheWithClauseWhere" />
  </message>
  <message name="GetValeurRechercheWithClauseWhereSoapOut">
    <part name="parameters"
element="s0:GetValeurRechercheWithClauseWhereResponse" />
  </message>
  <message name="GetEnvironnementSoapIn">
    <part name="parameters" element="s0:GetEnvironnement" />
  </message>
  <message name="GetEnvironnementSoapOut">
    <part name="parameters" element="s0:GetEnvironnementResponse" />
  </message>
  <portType name="MGServiceNoyauNETSoap">
    <operation name="LoginMGDIS">
      <input message="s0:LoginMGDISSoapIn" />
      <output message="s0:LoginMGDISSoapOut" />
    </operation>
    <operation name="GetIdentification">
      <input message="s0:GetIdentificationSoapIn" />
      <output message="s0:GetIdentificationSoapOut" />
    </operation>
    <operation name="RollbackCurrentTransaction">
      <input message="s0:RollbackCurrentTransactionSoapIn" />
      <output message="s0:RollbackCurrentTransactionSoapOut" />
    </operation>
    <operation name="GetListeProfil">
      <input message="s0:GetListeProfilSoapIn" />
      <output message="s0:GetListeProfilSoapOut" />
    </operation>
    <operation name="GetListeValCodif">
      <input message="s0:GetListeValCodifSoapIn" />
      <output message="s0:GetListeValCodifSoapOut" />
    </operation>
    <operation name="TestPhpSoap">
      <input message="s0:TestPhpSoapSoapIn" />
      <output message="s0:TestPhpSoapSoapOut" />
    </operation>
    <operation name="GetListeCodif">
      <input message="s0:GetListeCodifSoapIn" />
      <output message="s0:GetListeCodifSoapOut" />
    </operation>
    <operation name="DroitCreation">
      <input message="s0:DroitCreationSoapIn" />
      <output message="s0:DroitCreationSoapOut" />
    </operation>
    <operation name="ListeDroitCreation">
      <input message="s0:ListeDroitCreationSoapIn" />
      <output message="s0:ListeDroitCreationSoapOut" />
    </operation>
    <operation name="GetDroitsObjetProtege">
      <input message="s0:GetDroitsObjetProtegeSoapIn" />
      <output message="s0:GetDroitsObjetProtegeSoapOut" />
    </operation>
    <operation name="GetPrivileges">
      <input message="s0:GetPrivilegesSoapIn" />
      <output message="s0:GetPrivilegesSoapOut" />
    </operation>
    <operation name="GetLibelleProfil">
      <input message="s0:GetLibelleProfilSoapIn" />
      <output message="s0:GetLibelleProfilSoapOut" />
    </operation>
    <operation name="GetValeurRecherche">
      <input message="s0:GetValeurRechercheSoapIn" />
      <output message="s0:GetValeurRechercheSoapOut" />
    </operation>
    <operation name="GetValeurRechercheWithClauseWhere">
      <input message="s0:GetValeurRechercheWithClauseWhereSoapIn" />
      <output message="s0:GetValeurRechercheWithClauseWhereSoapOut" />
    </operation>
    <operation name="GetEnvironnement">
      <input message="s0:GetEnvironnementSoapIn" />
      <output message="s0:GetEnvironnementSoapOut" />
    </operation>
  </portType>
  <binding name="MGServiceNoyauNETSoap"
type="s0:MGServiceNoyauNETSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http";
style="document" />
    <operation name="LoginMGDIS">
      <soap:operation soapAction="http://tempuri.org/LoginMGDIS";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="GetIdentification">
      <soap:operation soapAction="http://tempuri.org/GetIdentification";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="RollbackCurrentTransaction">
      <soap:operation
soapAction="http://tempuri.org/RollbackCurrentTransaction";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="GetListeProfil">
      <soap:operation soapAction="http://tempuri.org/GetListeProfil";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="GetListeValCodif">
      <soap:operation soapAction="http://tempuri.org/GetListeValCodif";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="TestPhpSoap">
      <soap:operation soapAction="http://tempuri.org/TestPhpSoap";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="GetListeCodif">
      <soap:operation soapAction="http://tempuri.org/GetListeCodif";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="DroitCreation">
      <soap:operation soapAction="http://tempuri.org/DroitCreation";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="ListeDroitCreation">
      <soap:operation soapAction="http://tempuri.org/ListeDroitCreation";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="GetDroitsObjetProtege">
      <soap:operation
soapAction="http://tempuri.org/GetDroitsObjetProtege"; style="document"
/>
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="GetPrivileges">
      <soap:operation soapAction="http://tempuri.org/GetPrivileges";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="GetLibelleProfil">
      <soap:operation soapAction="http://tempuri.org/GetLibelleProfil";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="GetValeurRecherche">
      <soap:operation soapAction="http://tempuri.org/GetValeurRecherche";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="GetValeurRechercheWithClauseWhere">
      <soap:operation
soapAction="http://tempuri.org/GetValeurRechercheWithClauseWhere";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="GetEnvironnement">
      <soap:operation soapAction="http://tempuri.org/GetEnvironnement";
style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
  </binding>
  <service name="MGServiceNoyauNET">
    <port name="MGServiceNoyauNETSoap"
binding="s0:MGServiceNoyauNETSoap">
      <soap:address
location="http://localhost/SoapSrvSOFI/MGServiceNoyauNET.asmx"; />
    </port>
  </service>
</definitions>

http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug29061.phpt?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug29061.phpt
+++ php-src/ext/soap/tests/bugs/bug29061.phpt
--TEST--
Bug #29061 (soap extension segfaults)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
$client = new SoapClient(dirname(__FILE__)."/bug29061.wsdl", array("exceptions"=>0)); 
$client->getQuote("ibm"); 
echo "ok\n";
?>
--EXPECT--
ok
http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug29061.wsdl?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug29061.wsdl
+++ php-src/ext/soap/tests/bugs/bug29061.wsdl
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; xmlns:http="http://
schemas.xmlsoap.org/wsdl/http/"
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/e
ncoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/";
xmlns:y="http://new.webservice.namespace"; targetNamespace="http
://new.webservice.namespace">
<types>
<xs:schema/>
</types>
<message name="getQuoteResponse">
<part name="parameter" element="" type="xs:string"/>
</message>
<message name="getQuoteRequest">
<part name="String" element="" type="xs:string"/>
</message>
<portType name="SOAPport">
<operation name="getQuote">
<input message="y:getQuoteRequest"/>
<output message="y:getQuoteResponse"/>
</operation>
</portType>
<binding name="bindingName" type="y:SOAPport">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getQuote">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="myService">
<port name="myPort" binding="y:bindingName">
<soap:address location="test://"/>
</port>
</service>
</definitions>

http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug29109.phpt?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug29109.phpt
+++ php-src/ext/soap/tests/bugs/bug29109.phpt
--TEST--
Bug #29109 (Uncaught SoapFault exception: [WSDL] Out of memory)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
$client = new SoapClient(dirname(__FILE__)."/bug29109.wsdl");
var_dump($client->__getFunctions()); 
?>
--EXPECT--
array(3) {
  [0]=>
  string(53) "HelloWorldResponse HelloWorld(HelloWorld $parameters)"
  [1]=>
  string(19) "string HelloWorld()"
  [2]=>
  string(19) "string HelloWorld()"
}
http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug29109.wsdl?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug29109.wsdl
+++ php-src/ext/soap/tests/bugs/bug29109.wsdl
<?xml version="1.0" encoding="windows-1257"?>
<definitions xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/";
xmlns:s0="http://tempuri.org/";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:s="http://www.w3.org/2001/XMLSchema";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/";
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"; name="test"
targetNamespace="http://tempuri.org/";
xmlns="http://schemas.xmlsoap.org/wsdl/";>
  <types>
    <xs:schema elementFormDefault="qualified"
targetNamespace="http://tempuri.org/";
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
      <xs:element name="HelloWorld">
        <xs:complexType />
      </xs:element>
      <xs:element name="HelloWorldResponse">
        <xs:complexType>
          <xs:sequence>

            <xs:element minOccurs="0" maxOccurs="1"
name="HelloWorldResult" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="string" type="xs:string" />
    </xs:schema>
  </types>
  <message name="HelloWorldSoapIn">
    <part name="parameters" element="s0:HelloWorld" />

  </message>
  <message name="HelloWorldSoapOut">
    <part name="parameters" element="s0:HelloWorldResponse" />
  </message>
  <message name="HelloWorldHttpGetIn" />
  <message name="HelloWorldHttpGetOut">
    <part name="Body" element="s0:string" />
  </message>
  <message name="HelloWorldHttpPostIn" />

  <message name="HelloWorldHttpPostOut">
    <part name="Body" element="s0:string" />
  </message>
  <portType name="testSoap">
    <operation name="HelloWorld">
      <input message="s0:HelloWorldSoapIn" />
      <output message="s0:HelloWorldSoapOut" />
    </operation>
  </portType>

  <portType name="testHttpGet">
    <operation name="HelloWorld">
      <input message="s0:HelloWorldHttpGetIn" />
      <output message="s0:HelloWorldHttpGetOut" />
    </operation>
  </portType>
  <portType name="testHttpPost">
    <operation name="HelloWorld">
      <input message="s0:HelloWorldHttpPostIn" />

      <output message="s0:HelloWorldHttpPostOut" />
    </operation>
  </portType>
  <binding name="testSoap" type="s0:testSoap">
    <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"; />
    <operation name="HelloWorld">
      <soap:operation soapAction="http://tempuri.org/HelloWorld";
style="document" />
      <input>
        <soap:body use="literal" />

      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
  </binding>
  <binding name="testHttpGet" type="s0:testHttpGet">
    <http:binding verb="GET" />
    <operation name="HelloWorld">

      <http:operation location="/HelloWorld" />
      <input>
        <http:urlEncoded />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>
    </operation>
  </binding>

  <binding name="testHttpPost" type="s0:testHttpPost">
    <http:binding verb="POST" />
    <operation name="HelloWorld">
      <http:operation location="/HelloWorld" />
      <input>
        <mime:content part="" type="application/x-www-form-urlencoded"
/>
      </input>
      <output>
        <mime:mimeXml part="Body" />

      </output>
    </operation>
  </binding>
  <service name="test">
    <port name="testSoap" binding="s0:testSoap">
      <soap:address location="http://localhost:81/test.asmx"; />
    </port>
    <port name="testHttpGet" binding="s0:testHttpGet">
      <http:address location="http://localhost:81/test.asmx"; />

    </port>
    <port name="testHttpPost" binding="s0:testHttpPost">
      <http:address location="http://localhost:81/test.asmx"; />
    </port>
  </service>
</definitions>

http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug29236.phpt?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug29236.phpt
+++ php-src/ext/soap/tests/bugs/bug29236.phpt
--TEST--
Bug #29236 (memory error when wsdl-cache is enabled)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?
$client = new SoapClient(dirname(__FILE__)."/bug29236.wsdl");
var_dump($client->__getFunctions()); 
?>
--EXPECT--
array(4) {
  [0]=>
  string(59) "StartSessionResponse StartSession(StartSession $parameters)"
  [1]=>
  string(62) "VerifySessionResponse VerifySession(VerifySession $parameters)"
  [2]=>
  string(41) "LogoutResponse Logout(Logout $parameters)"
  [3]=>
  string(62) "GetSystemInfoResponse GetSystemInfo(GetSystemInfo $parameters)"
}
http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug29236.wsdl?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug29236.wsdl
+++ php-src/ext/soap/tests/bugs/bug29236.wsdl
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"; 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
xmlns:s="http://www.w3.org/2001/XMLSchema"; xmlns:s0="http://isis.ais.ucla.edu/ws/"; 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"; 
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"; 
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"; 
targetNamespace="http://isis.ais.ucla.edu/ws/"; 
xmlns="http://schemas.xmlsoap.org/wsdl/";>
  <types>
    <s:schema elementFormDefault="qualified" 
targetNamespace="http://isis.ais.ucla.edu/ws/";>
      <s:element name="StartSession">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="uclaId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="StartSessionResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" 
type="s0:IwsResponse" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="IwsResponse">
        <s:sequence>
          <s:element minOccurs="1" maxOccurs="1" name="sessionInfo" nillable="true" 
type="s0:IwsSession" />
          <s:element minOccurs="1" maxOccurs="1" name="errorInfo" nillable="true" 
type="s0:IwsErrorCollection" />
        </s:sequence>
        <s:attribute name="action" type="s0:ActionEnum" />
        <s:attribute name="hasErrors" type="s:boolean" />
        <s:attribute name="transactionId" type="s:long" />
      </s:complexType>
      <s:complexType name="IwsSession">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="userAttributes" 
type="s0:ArrayOfIwsUserAttribute" />
          <s:element minOccurs="0" maxOccurs="1" name="accounts" 
type="s0:ArrayOfIwsAccount" />
          <s:element minOccurs="1" maxOccurs="1" name="ticket" nillable="true" 
type="s:string" />
          <s:element minOccurs="1" maxOccurs="1" name="uclaId" nillable="true" 
type="s:string" />
        </s:sequence>
        <s:attribute name="status" type="s0:SessionStatus" />
      </s:complexType>
      <s:complexType name="ArrayOfIwsUserAttribute">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="attribute" 
type="s0:IwsUserAttribute" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="IwsUserAttribute">
        <s:attribute name="name" type="s:string" />
        <s:attribute name="value" type="s:string" />
      </s:complexType>
      <s:complexType name="ArrayOfIwsAccount">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="account" 
type="s0:IwsAccount" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="IwsAccount">
        <s:attribute name="loginId" type="s:string" />
        <s:attribute name="type" type="s0:LoginType" />
        <s:attribute name="status" type="s0:AccountStatus" />
      </s:complexType>
      <s:simpleType name="LoginType">
        <s:restriction base="s:string">
          <s:enumeration value="BruinOnline" />
          <s:enumeration value="ACF2" />
          <s:enumeration value="QDB" />
          <s:enumeration value="UID" />
          <s:enumeration value="CommonLogon" />
          <s:enumeration value="RACF" />
        </s:restriction>
      </s:simpleType>
      <s:simpleType name="AccountStatus">
        <s:restriction base="s:string">
          <s:enumeration value="Unknown" />
          <s:enumeration value="Active" />
          <s:enumeration value="Authenticated" />
          <s:enumeration value="AuthenticatedWithCachedCredential" />
          <s:enumeration value="NotAuthenticated" />
          <s:enumeration value="PermmanentlySuspended" />
          <s:enumeration value="TemporarilySuspended" />
          <s:enumeration value="PasswordResetRequired" />
          <s:enumeration value="InvalidID" />
        </s:restriction>
      </s:simpleType>
      <s:simpleType name="SessionStatus">
        <s:restriction base="s:string">
          <s:enumeration value="Uninitialized" />
          <s:enumeration value="Active" />
          <s:enumeration value="ActiveWithCachedCredential" />
          <s:enumeration value="ActiveWithMultipleCredentials" />
          <s:enumeration value="Expired" />
        </s:restriction>
      </s:simpleType>
      <s:complexType name="IwsErrorCollection">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="errors" 
type="s0:ArrayOfIwsError" />
        </s:sequence>
        <s:attribute name="count" type="s:int" />
      </s:complexType>
      <s:complexType name="ArrayOfIwsError">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="error" 
type="s0:IwsError" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="IwsError">
        <s:attribute name="errorCode" type="s:int" />
        <s:attribute name="detail" type="s:string" />
      </s:complexType>
      <s:simpleType name="ActionEnum">
        <s:restriction base="s:string">
          <s:enumeration value="GetInfo" />
          <s:enumeration value="Start" />
          <s:enumeration value="Verify" />
          <s:enumeration value="Logout" />
        </s:restriction>
      </s:simpleType>
      <s:element name="wsConsumerCredential" type="s0:WsConsumerCredential" />
      <s:complexType name="WsConsumerCredential">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="id" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
        </s:sequence>
      </s:complexType>
      <s:element name="VerifySession">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />
            <s:element minOccurs="1" maxOccurs="1" name="returnExtendedAttributes" 
type="s:boolean" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="VerifySessionResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" 
type="s0:IwsResponse" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="Logout">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="LogoutResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" 
type="s0:IwsResponse" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="GetSystemInfo">
        <s:complexType />
      </s:element>
      <s:element name="GetSystemInfoResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="GetSystemInfoResult" 
type="s0:ArrayOfIwsAttribute" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="ArrayOfIwsAttribute">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="IwsAttribute" 
type="s0:IwsAttribute" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="IwsAttribute">
        <s:attribute name="name" type="s:string" />
        <s:attribute name="value" type="s:string" />
      </s:complexType>
    </s:schema>
  </types>
  <message name="StartSessionSoapIn">
    <part name="parameters" element="s0:StartSession" />
  </message>
  <message name="StartSessionSoapOut">
    <part name="parameters" element="s0:StartSessionResponse" />
  </message>
  <message name="StartSessionwsConsumerCredential">
    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />
  </message>
  <message name="VerifySessionSoapIn">
    <part name="parameters" element="s0:VerifySession" />
  </message>
  <message name="VerifySessionSoapOut">
    <part name="parameters" element="s0:VerifySessionResponse" />
  </message>
  <message name="VerifySessionwsConsumerCredential">
    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />
  </message>
  <message name="LogoutSoapIn">
    <part name="parameters" element="s0:Logout" />
  </message>
  <message name="LogoutSoapOut">
    <part name="parameters" element="s0:LogoutResponse" />
  </message>
  <message name="LogoutwsConsumerCredential">
    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />
  </message>
  <message name="GetSystemInfoSoapIn">
    <part name="parameters" element="s0:GetSystemInfo" />
  </message>
  <message name="GetSystemInfoSoapOut">
    <part name="parameters" element="s0:GetSystemInfoResponse" />
  </message>
  <message name="GetSystemInfowsConsumerCredential">
    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />
  </message>
  <portType name="IsisSoap">
    <operation name="StartSession">
      <input message="s0:StartSessionSoapIn" />
      <output message="s0:StartSessionSoapOut" />
    </operation>
    <operation name="VerifySession">
      <input message="s0:VerifySessionSoapIn" />
      <output message="s0:VerifySessionSoapOut" />
    </operation>
    <operation name="Logout">
      <input message="s0:LogoutSoapIn" />
      <output message="s0:LogoutSoapOut" />
    </operation>
    <operation name="GetSystemInfo">
      <input message="s0:GetSystemInfoSoapIn" />
      <output message="s0:GetSystemInfoSoapOut" />
    </operation>
  </portType>
  <portType name="IsisHttpGet" />
  <portType name="IsisHttpPost" />
  <binding name="IsisSoap" type="s0:IsisSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"; style="document" />
    <operation name="StartSession">
      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/StartSession"; 
style="document" />
      <input>
        <soap:body use="literal" />
        <soap:header d5p1:required="true" 
message="s0:StartSessionwsConsumerCredential" part="wsConsumerCredential" 
use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/"; />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="VerifySession">
      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/VerifySession"; 
style="document" />
      <input>
        <soap:body use="literal" />
        <soap:header d5p1:required="true" 
message="s0:VerifySessionwsConsumerCredential" part="wsConsumerCredential" 
use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/"; />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="Logout">
      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/Logout"; style="document" 
/>
      <input>
        <soap:body use="literal" />
        <soap:header d5p1:required="true" message="s0:LogoutwsConsumerCredential" 
part="wsConsumerCredential" use="literal" 
xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/"; />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="GetSystemInfo">
      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/GetSystemInfo"; 
style="document" />
      <input>
        <soap:body use="literal" />
        <soap:header d5p1:required="true" 
message="s0:GetSystemInfowsConsumerCredential" part="wsConsumerCredential" 
use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/"; />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
  </binding>
  <binding name="IsisHttpGet" type="s0:IsisHttpGet">
    <http:binding verb="GET" />
  </binding>
  <binding name="IsisHttpPost" type="s0:IsisHttpPost">
    <http:binding verb="POST" />
  </binding>
  <service name="Isis">
    <port name="IsisSoap" binding="s0:IsisSoap">
      <soap:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx"; />
    </port>
    <port name="IsisHttpGet" binding="s0:IsisHttpGet">
      <http:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx"; />
    </port>
    <port name="IsisHttpPost" binding="s0:IsisHttpPost">
      <http:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx"; />
    </port>
  </service>
</definitions>
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to