]> granicus.if.org Git - php/commitdiff
This commit was manufactured by cvs2svn to create branch 'PHP_5_0'.
authorSVN Migration <svn@php.net>
Mon, 19 Jul 2004 17:51:42 +0000 (17:51 +0000)
committerSVN Migration <svn@php.net>
Mon, 19 Jul 2004 17:51:42 +0000 (17:51 +0000)
ext/soap/tests/bugs/bug28985.phpt [new file with mode: 0644]
ext/soap/tests/bugs/bug28985.wsdl [new file with mode: 0644]
ext/soap/tests/bugs/bug29061.phpt [new file with mode: 0644]
ext/soap/tests/bugs/bug29061.wsdl [new file with mode: 0644]
ext/soap/tests/bugs/bug29109.phpt [new file with mode: 0644]
ext/soap/tests/bugs/bug29109.wsdl [new file with mode: 0644]
ext/soap/tests/bugs/bug29236.phpt [new file with mode: 0644]
ext/soap/tests/bugs/bug29236.wsdl [new file with mode: 0644]
ext/standard/tests/strings/bug29119.phpt [new file with mode: 0644]

diff --git a/ext/soap/tests/bugs/bug28985.phpt b/ext/soap/tests/bugs/bug28985.phpt
new file mode 100644 (file)
index 0000000..291cce0
--- /dev/null
@@ -0,0 +1,204 @@
+--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;
+}"
+}
\ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug28985.wsdl b/ext/soap/tests/bugs/bug28985.wsdl
new file mode 100644 (file)
index 0000000..ee52881
--- /dev/null
@@ -0,0 +1,683 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"\r
+xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"\r
+xmlns:s="http://www.w3.org/2001/XMLSchema"\r
+xmlns:s0="http://tempuri.org/"\r
+xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"\r
+xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"\r
+xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"\r
+targetNamespace="http://tempuri.org/"\r
+xmlns="http://schemas.xmlsoap.org/wsdl/">\r
+  <types>\r
+    <s:schema elementFormDefault="qualified"\r
+targetNamespace="http://tempuri.org/">\r
+      <s:element name="LoginMGDIS">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="iUserLogin"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iUserId"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iUserPassword"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iProfilId"\r
+type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="LoginMGDISResponse">\r
+        <s:complexType />\r
+      </s:element>\r
+      <s:element name="GetIdentification">\r
+        <s:complexType />\r
+      </s:element>\r
+      <s:element name="GetIdentificationResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="GetIdentificationResult" type="s0:ArrayOfAnyType" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:complexType name="ArrayOfAnyType">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded" name="anyType"\r
+nillable="true" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:element name="RollbackCurrentTransaction">\r
+        <s:complexType />\r
+      </s:element>\r
+      <s:element name="RollbackCurrentTransactionResponse">\r
+        <s:complexType />\r
+      </s:element>\r
+      <s:element name="GetListeProfil">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="iUserLogin"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iUserPassword"\r
+type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:complexType name="MGCodeLibelle">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="1" name="Code"\r
+type="s:string" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="Libelle"\r
+type="s:string" />\r
+          <s:element minOccurs="1" maxOccurs="1" name="Defaut"\r
+type="s:boolean" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="Tag" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="ArrayOfMGCodeLibelle">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded"\r
+name="MGCodeLibelle" nillable="true" type="s0:MGCodeLibelle" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:element name="GetListeProfilResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="GetListeProfilResult" type="s0:ArrayOfMGCodeLibelle" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetListeValCodif">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="Code"\r
+type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:complexType name="ArrayOfMGCodif">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded" name="MGCodif"\r
+nillable="true" type="s0:MGCodif" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="MGCodif">\r
+        <s:complexContent mixed="false">\r
+          <s:extension base="s0:MGCodeLibelle" />\r
+        </s:complexContent>\r
+      </s:complexType>\r
+      <s:element name="GetListeValCodifResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="GetListeValCodifResult" type="s0:ArrayOfMGCodif" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="TestPhpSoap">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="entree"\r
+type="s0:MGCodif" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="TestPhpSoapResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="TestPhpSoapResult" type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetListeCodif">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="1" maxOccurs="1"\r
+name="iGetListeValeur" type="s:boolean" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:complexType name="MGCodifGrp">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="1" name="TypeCodif"\r
+type="s:string" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="LibCodif"\r
+type="s:string" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="ListeCodifs"\r
+type="s0:ArrayOfMGCodif" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="ArrayOfMGCodifGrp">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded"\r
+name="MGCodifGrp" nillable="true" type="s0:MGCodifGrp" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:element name="GetListeCodifResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="GetListeCodifResult" type="s0:ArrayOfMGCodifGrp" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="DroitCreation">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="iObjet"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iProfil"\r
+type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="DroitCreationResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="1" maxOccurs="1"\r
+name="DroitCreationResult" type="s:boolean" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="ListeDroitCreation">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="iListeObjet"\r
+type="s0:ArrayOfString" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iProfil"\r
+type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:complexType name="ArrayOfString">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded" name="string"\r
+nillable="true" type="s:string" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:element name="ListeDroitCreationResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="ListeDroitCreationResult" type="s0:ArrayOfAnyType" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetDroitsObjetProtege">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="iObjet"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iProfil"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iUtilisateur"\r
+type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:complexType name="MGDroitsObjetProtege">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="1" name="LbUti"\r
+type="s:string" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="LbProf"\r
+type="s:string" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="LbServ"\r
+type="s:string" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="LbDir"\r
+type="s:string" />\r
+          <s:element minOccurs="1" maxOccurs="1" name="isProtected"\r
+type="s:boolean" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="ListeDroitsAcces"\r
+type="s0:ArrayOfMGDroitAcces" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="ArrayOfMGDroitAcces">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded"\r
+name="MGDroitAcces" nillable="true" type="s0:MGDroitAcces" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="MGDroitAcces">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="1" name="IdProfil"\r
+type="s:string" />\r
+          <s:element minOccurs="1" maxOccurs="1" name="Lecture"\r
+type="s:boolean" />\r
+          <s:element minOccurs="1" maxOccurs="1" name="Modification"\r
+type="s:boolean" />\r
+          <s:element minOccurs="1" maxOccurs="1" name="Suppression"\r
+type="s:boolean" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:element name="GetDroitsObjetProtegeResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="GetDroitsObjetProtegeResult" type="s0:MGDroitsObjetProtege" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetPrivileges">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="iIdSupport"\r
+type="s:string" />\r
+            <s:element minOccurs="1" maxOccurs="1" name="iIdForme"\r
+type="s:int" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iProfil"\r
+type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetPrivilegesResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="GetPrivilegesResult" type="s0:ArrayOfString" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetLibelleProfil">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="iIdProfil"\r
+type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetLibelleProfilResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="GetLibelleProfilResult" type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetValeurRecherche">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="iChampSource"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iTable"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iOrderByClause"\r
+type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetValeurRechercheResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="GetValeurRechercheResult" type="s0:ArrayOfString" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetValeurRechercheWithClauseWhere">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="iChampSource"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iTable"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iClauseWhere"\r
+type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="iOrderByClause"\r
+type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetValeurRechercheWithClauseWhereResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="GetValeurRechercheWithClauseWhereResult" type="s0:ArrayOfString"\r
+/>\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetEnvironnement">\r
+        <s:complexType />\r
+      </s:element>\r
+      <s:complexType name="MGEnvironnement">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="1" name="RepBureautique"\r
+type="s:string" />\r
+          <s:element minOccurs="0" maxOccurs="1"\r
+name="RepBureautiqueImage" type="s:string" />\r
+          <s:element minOccurs="0" maxOccurs="1"\r
+name="RepBureautiqueDoc" type="s:string" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:element name="GetEnvironnementResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1"\r
+name="GetEnvironnementResult" type="s0:MGEnvironnement" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+    </s:schema>\r
+  </types>\r
+  <message name="LoginMGDISSoapIn">\r
+    <part name="parameters" element="s0:LoginMGDIS" />\r
+  </message>\r
+  <message name="LoginMGDISSoapOut">\r
+    <part name="parameters" element="s0:LoginMGDISResponse" />\r
+  </message>\r
+  <message name="GetIdentificationSoapIn">\r
+    <part name="parameters" element="s0:GetIdentification" />\r
+  </message>\r
+  <message name="GetIdentificationSoapOut">\r
+    <part name="parameters" element="s0:GetIdentificationResponse" />\r
+  </message>\r
+  <message name="RollbackCurrentTransactionSoapIn">\r
+    <part name="parameters" element="s0:RollbackCurrentTransaction" />\r
+  </message>\r
+  <message name="RollbackCurrentTransactionSoapOut">\r
+    <part name="parameters"\r
+element="s0:RollbackCurrentTransactionResponse" />\r
+  </message>\r
+  <message name="GetListeProfilSoapIn">\r
+    <part name="parameters" element="s0:GetListeProfil" />\r
+  </message>\r
+  <message name="GetListeProfilSoapOut">\r
+    <part name="parameters" element="s0:GetListeProfilResponse" />\r
+  </message>\r
+  <message name="GetListeValCodifSoapIn">\r
+    <part name="parameters" element="s0:GetListeValCodif" />\r
+  </message>\r
+  <message name="GetListeValCodifSoapOut">\r
+    <part name="parameters" element="s0:GetListeValCodifResponse" />\r
+  </message>\r
+  <message name="TestPhpSoapSoapIn">\r
+    <part name="parameters" element="s0:TestPhpSoap" />\r
+  </message>\r
+  <message name="TestPhpSoapSoapOut">\r
+    <part name="parameters" element="s0:TestPhpSoapResponse" />\r
+  </message>\r
+  <message name="GetListeCodifSoapIn">\r
+    <part name="parameters" element="s0:GetListeCodif" />\r
+  </message>\r
+  <message name="GetListeCodifSoapOut">\r
+    <part name="parameters" element="s0:GetListeCodifResponse" />\r
+  </message>\r
+  <message name="DroitCreationSoapIn">\r
+    <part name="parameters" element="s0:DroitCreation" />\r
+  </message>\r
+  <message name="DroitCreationSoapOut">\r
+    <part name="parameters" element="s0:DroitCreationResponse" />\r
+  </message>\r
+  <message name="ListeDroitCreationSoapIn">\r
+    <part name="parameters" element="s0:ListeDroitCreation" />\r
+  </message>\r
+  <message name="ListeDroitCreationSoapOut">\r
+    <part name="parameters" element="s0:ListeDroitCreationResponse" />\r
+  </message>\r
+  <message name="GetDroitsObjetProtegeSoapIn">\r
+    <part name="parameters" element="s0:GetDroitsObjetProtege" />\r
+  </message>\r
+  <message name="GetDroitsObjetProtegeSoapOut">\r
+    <part name="parameters" element="s0:GetDroitsObjetProtegeResponse"\r
+/>\r
+  </message>\r
+  <message name="GetPrivilegesSoapIn">\r
+    <part name="parameters" element="s0:GetPrivileges" />\r
+  </message>\r
+  <message name="GetPrivilegesSoapOut">\r
+    <part name="parameters" element="s0:GetPrivilegesResponse" />\r
+  </message>\r
+  <message name="GetLibelleProfilSoapIn">\r
+    <part name="parameters" element="s0:GetLibelleProfil" />\r
+  </message>\r
+  <message name="GetLibelleProfilSoapOut">\r
+    <part name="parameters" element="s0:GetLibelleProfilResponse" />\r
+  </message>\r
+  <message name="GetValeurRechercheSoapIn">\r
+    <part name="parameters" element="s0:GetValeurRecherche" />\r
+  </message>\r
+  <message name="GetValeurRechercheSoapOut">\r
+    <part name="parameters" element="s0:GetValeurRechercheResponse" />\r
+  </message>\r
+  <message name="GetValeurRechercheWithClauseWhereSoapIn">\r
+    <part name="parameters"\r
+element="s0:GetValeurRechercheWithClauseWhere" />\r
+  </message>\r
+  <message name="GetValeurRechercheWithClauseWhereSoapOut">\r
+    <part name="parameters"\r
+element="s0:GetValeurRechercheWithClauseWhereResponse" />\r
+  </message>\r
+  <message name="GetEnvironnementSoapIn">\r
+    <part name="parameters" element="s0:GetEnvironnement" />\r
+  </message>\r
+  <message name="GetEnvironnementSoapOut">\r
+    <part name="parameters" element="s0:GetEnvironnementResponse" />\r
+  </message>\r
+  <portType name="MGServiceNoyauNETSoap">\r
+    <operation name="LoginMGDIS">\r
+      <input message="s0:LoginMGDISSoapIn" />\r
+      <output message="s0:LoginMGDISSoapOut" />\r
+    </operation>\r
+    <operation name="GetIdentification">\r
+      <input message="s0:GetIdentificationSoapIn" />\r
+      <output message="s0:GetIdentificationSoapOut" />\r
+    </operation>\r
+    <operation name="RollbackCurrentTransaction">\r
+      <input message="s0:RollbackCurrentTransactionSoapIn" />\r
+      <output message="s0:RollbackCurrentTransactionSoapOut" />\r
+    </operation>\r
+    <operation name="GetListeProfil">\r
+      <input message="s0:GetListeProfilSoapIn" />\r
+      <output message="s0:GetListeProfilSoapOut" />\r
+    </operation>\r
+    <operation name="GetListeValCodif">\r
+      <input message="s0:GetListeValCodifSoapIn" />\r
+      <output message="s0:GetListeValCodifSoapOut" />\r
+    </operation>\r
+    <operation name="TestPhpSoap">\r
+      <input message="s0:TestPhpSoapSoapIn" />\r
+      <output message="s0:TestPhpSoapSoapOut" />\r
+    </operation>\r
+    <operation name="GetListeCodif">\r
+      <input message="s0:GetListeCodifSoapIn" />\r
+      <output message="s0:GetListeCodifSoapOut" />\r
+    </operation>\r
+    <operation name="DroitCreation">\r
+      <input message="s0:DroitCreationSoapIn" />\r
+      <output message="s0:DroitCreationSoapOut" />\r
+    </operation>\r
+    <operation name="ListeDroitCreation">\r
+      <input message="s0:ListeDroitCreationSoapIn" />\r
+      <output message="s0:ListeDroitCreationSoapOut" />\r
+    </operation>\r
+    <operation name="GetDroitsObjetProtege">\r
+      <input message="s0:GetDroitsObjetProtegeSoapIn" />\r
+      <output message="s0:GetDroitsObjetProtegeSoapOut" />\r
+    </operation>\r
+    <operation name="GetPrivileges">\r
+      <input message="s0:GetPrivilegesSoapIn" />\r
+      <output message="s0:GetPrivilegesSoapOut" />\r
+    </operation>\r
+    <operation name="GetLibelleProfil">\r
+      <input message="s0:GetLibelleProfilSoapIn" />\r
+      <output message="s0:GetLibelleProfilSoapOut" />\r
+    </operation>\r
+    <operation name="GetValeurRecherche">\r
+      <input message="s0:GetValeurRechercheSoapIn" />\r
+      <output message="s0:GetValeurRechercheSoapOut" />\r
+    </operation>\r
+    <operation name="GetValeurRechercheWithClauseWhere">\r
+      <input message="s0:GetValeurRechercheWithClauseWhereSoapIn" />\r
+      <output message="s0:GetValeurRechercheWithClauseWhereSoapOut" />\r
+    </operation>\r
+    <operation name="GetEnvironnement">\r
+      <input message="s0:GetEnvironnementSoapIn" />\r
+      <output message="s0:GetEnvironnementSoapOut" />\r
+    </operation>\r
+  </portType>\r
+  <binding name="MGServiceNoyauNETSoap"\r
+type="s0:MGServiceNoyauNETSoap">\r
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"\r
+style="document" />\r
+    <operation name="LoginMGDIS">\r
+      <soap:operation soapAction="http://tempuri.org/LoginMGDIS"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetIdentification">\r
+      <soap:operation soapAction="http://tempuri.org/GetIdentification"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="RollbackCurrentTransaction">\r
+      <soap:operation\r
+soapAction="http://tempuri.org/RollbackCurrentTransaction"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetListeProfil">\r
+      <soap:operation soapAction="http://tempuri.org/GetListeProfil"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetListeValCodif">\r
+      <soap:operation soapAction="http://tempuri.org/GetListeValCodif"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="TestPhpSoap">\r
+      <soap:operation soapAction="http://tempuri.org/TestPhpSoap"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetListeCodif">\r
+      <soap:operation soapAction="http://tempuri.org/GetListeCodif"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="DroitCreation">\r
+      <soap:operation soapAction="http://tempuri.org/DroitCreation"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="ListeDroitCreation">\r
+      <soap:operation soapAction="http://tempuri.org/ListeDroitCreation"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetDroitsObjetProtege">\r
+      <soap:operation\r
+soapAction="http://tempuri.org/GetDroitsObjetProtege" style="document"\r
+/>\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetPrivileges">\r
+      <soap:operation soapAction="http://tempuri.org/GetPrivileges"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetLibelleProfil">\r
+      <soap:operation soapAction="http://tempuri.org/GetLibelleProfil"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetValeurRecherche">\r
+      <soap:operation soapAction="http://tempuri.org/GetValeurRecherche"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetValeurRechercheWithClauseWhere">\r
+      <soap:operation\r
+soapAction="http://tempuri.org/GetValeurRechercheWithClauseWhere"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetEnvironnement">\r
+      <soap:operation soapAction="http://tempuri.org/GetEnvironnement"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+  </binding>\r
+  <service name="MGServiceNoyauNET">\r
+    <port name="MGServiceNoyauNETSoap"\r
+binding="s0:MGServiceNoyauNETSoap">\r
+      <soap:address\r
+location="http://localhost/SoapSrvSOFI/MGServiceNoyauNET.asmx" />\r
+    </port>\r
+  </service>\r
+</definitions>\r
diff --git a/ext/soap/tests/bugs/bug29061.phpt b/ext/soap/tests/bugs/bug29061.phpt
new file mode 100644 (file)
index 0000000..0bf8917
--- /dev/null
@@ -0,0 +1,12 @@
+--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
\ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug29061.wsdl b/ext/soap/tests/bugs/bug29061.wsdl
new file mode 100644 (file)
index 0000000..fb4d9aa
--- /dev/null
@@ -0,0 +1,41 @@
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"\r
+xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://\r
+schemas.xmlsoap.org/wsdl/http/"\r
+xmlns:xs="http://www.w3.org/2001/XMLSchema"\r
+xmlns:soapenc="http://schemas.xmlsoap.org/soap/e\r
+ncoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"\r
+xmlns:y="http://new.webservice.namespace" targetNamespace="http\r
+://new.webservice.namespace">\r
+<types>\r
+<xs:schema/>\r
+</types>\r
+<message name="getQuoteResponse">\r
+<part name="parameter" element="" type="xs:string"/>\r
+</message>\r
+<message name="getQuoteRequest">\r
+<part name="String" element="" type="xs:string"/>\r
+</message>\r
+<portType name="SOAPport">\r
+<operation name="getQuote">\r
+<input message="y:getQuoteRequest"/>\r
+<output message="y:getQuoteResponse"/>\r
+</operation>\r
+</portType>\r
+<binding name="bindingName" type="y:SOAPport">\r
+<soap:binding style="rpc"\r
+transport="http://schemas.xmlsoap.org/soap/http"/>\r
+<operation name="getQuote">\r
+<input>\r
+<soap:body use="literal"/>\r
+</input>\r
+<output>\r
+<soap:body use="literal"/>\r
+</output>\r
+</operation>\r
+</binding>\r
+<service name="myService">\r
+<port name="myPort" binding="y:bindingName">\r
+<soap:address location="test://"/>\r
+</port>\r
+</service>\r
+</definitions>\r
diff --git a/ext/soap/tests/bugs/bug29109.phpt b/ext/soap/tests/bugs/bug29109.phpt
new file mode 100644 (file)
index 0000000..91d3ea2
--- /dev/null
@@ -0,0 +1,18 @@
+--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()"
+}
\ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug29109.wsdl b/ext/soap/tests/bugs/bug29109.wsdl
new file mode 100644 (file)
index 0000000..800cd23
--- /dev/null
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="windows-1257"?>\r
+<definitions xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"\r
+xmlns:s0="http://tempuri.org/"\r
+xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"\r
+xmlns:s="http://www.w3.org/2001/XMLSchema"\r
+xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"\r
+xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"\r
+xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" name="test"\r
+targetNamespace="http://tempuri.org/"\r
+xmlns="http://schemas.xmlsoap.org/wsdl/">\r
+  <types>\r
+    <xs:schema elementFormDefault="qualified"\r
+targetNamespace="http://tempuri.org/"\r
+xmlns:xs="http://www.w3.org/2001/XMLSchema">\r
+      <xs:element name="HelloWorld">\r
+        <xs:complexType />\r
+      </xs:element>\r
+      <xs:element name="HelloWorldResponse">\r
+        <xs:complexType>\r
+          <xs:sequence>\r
+\r
+            <xs:element minOccurs="0" maxOccurs="1"\r
+name="HelloWorldResult" type="xs:string" />\r
+          </xs:sequence>\r
+        </xs:complexType>\r
+      </xs:element>\r
+      <xs:element name="string" type="xs:string" />\r
+    </xs:schema>\r
+  </types>\r
+  <message name="HelloWorldSoapIn">\r
+    <part name="parameters" element="s0:HelloWorld" />\r
+\r
+  </message>\r
+  <message name="HelloWorldSoapOut">\r
+    <part name="parameters" element="s0:HelloWorldResponse" />\r
+  </message>\r
+  <message name="HelloWorldHttpGetIn" />\r
+  <message name="HelloWorldHttpGetOut">\r
+    <part name="Body" element="s0:string" />\r
+  </message>\r
+  <message name="HelloWorldHttpPostIn" />\r
+\r
+  <message name="HelloWorldHttpPostOut">\r
+    <part name="Body" element="s0:string" />\r
+  </message>\r
+  <portType name="testSoap">\r
+    <operation name="HelloWorld">\r
+      <input message="s0:HelloWorldSoapIn" />\r
+      <output message="s0:HelloWorldSoapOut" />\r
+    </operation>\r
+  </portType>\r
+\r
+  <portType name="testHttpGet">\r
+    <operation name="HelloWorld">\r
+      <input message="s0:HelloWorldHttpGetIn" />\r
+      <output message="s0:HelloWorldHttpGetOut" />\r
+    </operation>\r
+  </portType>\r
+  <portType name="testHttpPost">\r
+    <operation name="HelloWorld">\r
+      <input message="s0:HelloWorldHttpPostIn" />\r
+\r
+      <output message="s0:HelloWorldHttpPostOut" />\r
+    </operation>\r
+  </portType>\r
+  <binding name="testSoap" type="s0:testSoap">\r
+    <soap:binding style="document"\r
+transport="http://schemas.xmlsoap.org/soap/http" />\r
+    <operation name="HelloWorld">\r
+      <soap:operation soapAction="http://tempuri.org/HelloWorld"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+  </binding>\r
+  <binding name="testHttpGet" type="s0:testHttpGet">\r
+    <http:binding verb="GET" />\r
+    <operation name="HelloWorld">\r
+\r
+      <http:operation location="/HelloWorld" />\r
+      <input>\r
+        <http:urlEncoded />\r
+      </input>\r
+      <output>\r
+        <mime:mimeXml part="Body" />\r
+      </output>\r
+    </operation>\r
+  </binding>\r
+\r
+  <binding name="testHttpPost" type="s0:testHttpPost">\r
+    <http:binding verb="POST" />\r
+    <operation name="HelloWorld">\r
+      <http:operation location="/HelloWorld" />\r
+      <input>\r
+        <mime:content part="" type="application/x-www-form-urlencoded"\r
+/>\r
+      </input>\r
+      <output>\r
+        <mime:mimeXml part="Body" />\r
+\r
+      </output>\r
+    </operation>\r
+  </binding>\r
+  <service name="test">\r
+    <port name="testSoap" binding="s0:testSoap">\r
+      <soap:address location="http://localhost:81/test.asmx" />\r
+    </port>\r
+    <port name="testHttpGet" binding="s0:testHttpGet">\r
+      <http:address location="http://localhost:81/test.asmx" />\r
+\r
+    </port>\r
+    <port name="testHttpPost" binding="s0:testHttpPost">\r
+      <http:address location="http://localhost:81/test.asmx" />\r
+    </port>\r
+  </service>\r
+</definitions>\r
diff --git a/ext/soap/tests/bugs/bug29236.phpt b/ext/soap/tests/bugs/bug29236.phpt
new file mode 100644 (file)
index 0000000..372449f
--- /dev/null
@@ -0,0 +1,20 @@
+--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)"
+}
\ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug29236.wsdl b/ext/soap/tests/bugs/bug29236.wsdl
new file mode 100644 (file)
index 0000000..d60a487
--- /dev/null
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<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/">\r
+  <types>\r
+    <s:schema elementFormDefault="qualified" targetNamespace="http://isis.ais.ucla.edu/ws/">\r
+      <s:element name="StartSession">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="uclaId" type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="StartSessionResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" type="s0:IwsResponse" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:complexType name="IwsResponse">\r
+        <s:sequence>\r
+          <s:element minOccurs="1" maxOccurs="1" name="sessionInfo" nillable="true" type="s0:IwsSession" />\r
+          <s:element minOccurs="1" maxOccurs="1" name="errorInfo" nillable="true" type="s0:IwsErrorCollection" />\r
+        </s:sequence>\r
+        <s:attribute name="action" type="s0:ActionEnum" />\r
+        <s:attribute name="hasErrors" type="s:boolean" />\r
+        <s:attribute name="transactionId" type="s:long" />\r
+      </s:complexType>\r
+      <s:complexType name="IwsSession">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="1" name="userAttributes" type="s0:ArrayOfIwsUserAttribute" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="accounts" type="s0:ArrayOfIwsAccount" />\r
+          <s:element minOccurs="1" maxOccurs="1" name="ticket" nillable="true" type="s:string" />\r
+          <s:element minOccurs="1" maxOccurs="1" name="uclaId" nillable="true" type="s:string" />\r
+        </s:sequence>\r
+        <s:attribute name="status" type="s0:SessionStatus" />\r
+      </s:complexType>\r
+      <s:complexType name="ArrayOfIwsUserAttribute">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded" name="attribute" type="s0:IwsUserAttribute" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="IwsUserAttribute">\r
+        <s:attribute name="name" type="s:string" />\r
+        <s:attribute name="value" type="s:string" />\r
+      </s:complexType>\r
+      <s:complexType name="ArrayOfIwsAccount">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded" name="account" type="s0:IwsAccount" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="IwsAccount">\r
+        <s:attribute name="loginId" type="s:string" />\r
+        <s:attribute name="type" type="s0:LoginType" />\r
+        <s:attribute name="status" type="s0:AccountStatus" />\r
+      </s:complexType>\r
+      <s:simpleType name="LoginType">\r
+        <s:restriction base="s:string">\r
+          <s:enumeration value="BruinOnline" />\r
+          <s:enumeration value="ACF2" />\r
+          <s:enumeration value="QDB" />\r
+          <s:enumeration value="UID" />\r
+          <s:enumeration value="CommonLogon" />\r
+          <s:enumeration value="RACF" />\r
+        </s:restriction>\r
+      </s:simpleType>\r
+      <s:simpleType name="AccountStatus">\r
+        <s:restriction base="s:string">\r
+          <s:enumeration value="Unknown" />\r
+          <s:enumeration value="Active" />\r
+          <s:enumeration value="Authenticated" />\r
+          <s:enumeration value="AuthenticatedWithCachedCredential" />\r
+          <s:enumeration value="NotAuthenticated" />\r
+          <s:enumeration value="PermmanentlySuspended" />\r
+          <s:enumeration value="TemporarilySuspended" />\r
+          <s:enumeration value="PasswordResetRequired" />\r
+          <s:enumeration value="InvalidID" />\r
+        </s:restriction>\r
+      </s:simpleType>\r
+      <s:simpleType name="SessionStatus">\r
+        <s:restriction base="s:string">\r
+          <s:enumeration value="Uninitialized" />\r
+          <s:enumeration value="Active" />\r
+          <s:enumeration value="ActiveWithCachedCredential" />\r
+          <s:enumeration value="ActiveWithMultipleCredentials" />\r
+          <s:enumeration value="Expired" />\r
+        </s:restriction>\r
+      </s:simpleType>\r
+      <s:complexType name="IwsErrorCollection">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="1" name="errors" type="s0:ArrayOfIwsError" />\r
+        </s:sequence>\r
+        <s:attribute name="count" type="s:int" />\r
+      </s:complexType>\r
+      <s:complexType name="ArrayOfIwsError">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded" name="error" type="s0:IwsError" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="IwsError">\r
+        <s:attribute name="errorCode" type="s:int" />\r
+        <s:attribute name="detail" type="s:string" />\r
+      </s:complexType>\r
+      <s:simpleType name="ActionEnum">\r
+        <s:restriction base="s:string">\r
+          <s:enumeration value="GetInfo" />\r
+          <s:enumeration value="Start" />\r
+          <s:enumeration value="Verify" />\r
+          <s:enumeration value="Logout" />\r
+        </s:restriction>\r
+      </s:simpleType>\r
+      <s:element name="wsConsumerCredential" type="s0:WsConsumerCredential" />\r
+      <s:complexType name="WsConsumerCredential">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="1" name="id" type="s:string" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:element name="VerifySession">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />\r
+            <s:element minOccurs="1" maxOccurs="1" name="returnExtendedAttributes" type="s:boolean" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="VerifySessionResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" type="s0:IwsResponse" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="Logout">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="LogoutResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" type="s0:IwsResponse" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetSystemInfo">\r
+        <s:complexType />\r
+      </s:element>\r
+      <s:element name="GetSystemInfoResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="GetSystemInfoResult" type="s0:ArrayOfIwsAttribute" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:complexType name="ArrayOfIwsAttribute">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded" name="IwsAttribute" type="s0:IwsAttribute" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="IwsAttribute">\r
+        <s:attribute name="name" type="s:string" />\r
+        <s:attribute name="value" type="s:string" />\r
+      </s:complexType>\r
+    </s:schema>\r
+  </types>\r
+  <message name="StartSessionSoapIn">\r
+    <part name="parameters" element="s0:StartSession" />\r
+  </message>\r
+  <message name="StartSessionSoapOut">\r
+    <part name="parameters" element="s0:StartSessionResponse" />\r
+  </message>\r
+  <message name="StartSessionwsConsumerCredential">\r
+    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />\r
+  </message>\r
+  <message name="VerifySessionSoapIn">\r
+    <part name="parameters" element="s0:VerifySession" />\r
+  </message>\r
+  <message name="VerifySessionSoapOut">\r
+    <part name="parameters" element="s0:VerifySessionResponse" />\r
+  </message>\r
+  <message name="VerifySessionwsConsumerCredential">\r
+    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />\r
+  </message>\r
+  <message name="LogoutSoapIn">\r
+    <part name="parameters" element="s0:Logout" />\r
+  </message>\r
+  <message name="LogoutSoapOut">\r
+    <part name="parameters" element="s0:LogoutResponse" />\r
+  </message>\r
+  <message name="LogoutwsConsumerCredential">\r
+    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />\r
+  </message>\r
+  <message name="GetSystemInfoSoapIn">\r
+    <part name="parameters" element="s0:GetSystemInfo" />\r
+  </message>\r
+  <message name="GetSystemInfoSoapOut">\r
+    <part name="parameters" element="s0:GetSystemInfoResponse" />\r
+  </message>\r
+  <message name="GetSystemInfowsConsumerCredential">\r
+    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />\r
+  </message>\r
+  <portType name="IsisSoap">\r
+    <operation name="StartSession">\r
+      <input message="s0:StartSessionSoapIn" />\r
+      <output message="s0:StartSessionSoapOut" />\r
+    </operation>\r
+    <operation name="VerifySession">\r
+      <input message="s0:VerifySessionSoapIn" />\r
+      <output message="s0:VerifySessionSoapOut" />\r
+    </operation>\r
+    <operation name="Logout">\r
+      <input message="s0:LogoutSoapIn" />\r
+      <output message="s0:LogoutSoapOut" />\r
+    </operation>\r
+    <operation name="GetSystemInfo">\r
+      <input message="s0:GetSystemInfoSoapIn" />\r
+      <output message="s0:GetSystemInfoSoapOut" />\r
+    </operation>\r
+  </portType>\r
+  <portType name="IsisHttpGet" />\r
+  <portType name="IsisHttpPost" />\r
+  <binding name="IsisSoap" type="s0:IsisSoap">\r
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />\r
+    <operation name="StartSession">\r
+      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/StartSession" style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+        <soap:header d5p1:required="true" message="s0:StartSessionwsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="VerifySession">\r
+      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/VerifySession" style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+        <soap:header d5p1:required="true" message="s0:VerifySessionwsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="Logout">\r
+      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/Logout" style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+        <soap:header d5p1:required="true" message="s0:LogoutwsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetSystemInfo">\r
+      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/GetSystemInfo" style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+        <soap:header d5p1:required="true" message="s0:GetSystemInfowsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+  </binding>\r
+  <binding name="IsisHttpGet" type="s0:IsisHttpGet">\r
+    <http:binding verb="GET" />\r
+  </binding>\r
+  <binding name="IsisHttpPost" type="s0:IsisHttpPost">\r
+    <http:binding verb="POST" />\r
+  </binding>\r
+  <service name="Isis">\r
+    <port name="IsisSoap" binding="s0:IsisSoap">\r
+      <soap:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx" />\r
+    </port>\r
+    <port name="IsisHttpGet" binding="s0:IsisHttpGet">\r
+      <http:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx" />\r
+    </port>\r
+    <port name="IsisHttpPost" binding="s0:IsisHttpPost">\r
+      <http:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx" />\r
+    </port>\r
+  </service>\r
+</definitions>
\ No newline at end of file
diff --git a/ext/standard/tests/strings/bug29119.phpt b/ext/standard/tests/strings/bug29119.phpt
new file mode 100644 (file)
index 0000000..bb2707f
--- /dev/null
@@ -0,0 +1,8 @@
+--TEST--
+Bug #29199 (html_entity_decode() misbehaves with UTF-8)
+--FILE--
+<?php
+var_dump(bin2hex(html_entity_decode('&ensp;&thinsp;&lsquo;&dagger;&prime;&frasl;&euro;', ENT_QUOTES, 'UTF-8')));
+?>
+--EXPECT--
+string(42) "e28082e28089e28098e280a0e280b2e28184e282ac"