bug68361.phpt 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. --TEST--
  2. Bug #68361 Segmentation fault on SoapClient::__getTypes
  3. --EXTENSIONS--
  4. soap
  5. --FILE--
  6. <?php
  7. $xml = <<<XML
  8. <?xml version="1.0" encoding="UTF-8"?>
  9. <definitions name="TestServer" targetNamespace="http://foo.bar/testserver" xmlns:tns="http://foo.bar/testserver" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ns="http://foo.bar/testserver/types">
  10. <types>
  11. <xsd:schema targetNamespace="http://foo.bar/testserver/types" xmlns="http://foo.bar/testserver/types">
  12. <xsd:complexType name="ArrayOfEmployeeReturn">
  13. <xsd:complexContent>
  14. <xsd:restriction base="soapenc:Array">
  15. <xsd:attribute ref="soapenc:arrayType" arrayType="ns:Employee[]"/>
  16. </xsd:restriction>
  17. </xsd:complexContent>
  18. </xsd:complexType>
  19. <xsd:complexType name="Employee">
  20. <xsd:sequence>
  21. <xsd:element name="id" type="xsd:int"/>
  22. <xsd:element name="department" type="xsd:string"/>
  23. <xsd:element name="name" type="xsd:string"/>
  24. <xsd:element name="age" type="xsd:int"/>
  25. </xsd:sequence>
  26. </xsd:complexType>
  27. <xsd:element name="Employee" nillable="true" type="ns:Employee"/>
  28. <xsd:complexType name="User">
  29. <xsd:sequence>
  30. <xsd:element name="name" type="xsd:string"/>
  31. <xsd:element name="age" type="xsd:int"/>
  32. </xsd:sequence>
  33. </xsd:complexType>
  34. <xsd:element name="User" nillable="true" type="ns:User"/>
  35. </xsd:schema>
  36. </types>
  37. <message name="getEmployeeRequest">
  38. <part name="name" type="xsd:name"/>
  39. </message>
  40. <message name="getEmployeeResponse">
  41. <part name="employeeReturn" type="ns:ArrayOfEmployeeReturn"/>
  42. </message>
  43. <message name="getUserRequest">
  44. <part name="id" type="xsd:id"/>
  45. </message>
  46. <message name="getUserResponse">
  47. <part name="userReturn" element="ns:User"/>
  48. </message>
  49. <portType name="TestServerPortType">
  50. <operation name="getEmployee">
  51. <input message="tns:getEmployeeRequest"/>
  52. <output message="tns:getEmployeeResponse"/>
  53. </operation>
  54. <operation name="getUser">
  55. <input message="tns:getUserRequest"/>
  56. <output message="tns:getUserResponse"/>
  57. </operation>
  58. </portType>
  59. <binding name="TestServerBinding" type="tns:TestServerPortType">
  60. <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  61. <operation name="getEmployee">
  62. <soap:operation soapAction="http://foo.bar/testserver/#getEmployee"/>
  63. <input>
  64. <soap:body use="literal" namespace="http://foo.bar/testserver"/>
  65. </input>
  66. <output>
  67. <soap:body use="literal" namespace="http://foo.bar/testserver"/>
  68. </output>
  69. </operation>
  70. <operation name="getUser">
  71. <soap:operation soapAction="http://foo.bar/testserver/#getUser"/>
  72. <input>
  73. <soap:body use="literal" namespace="http://foo.bar/testserver"/>
  74. </input>
  75. <output>
  76. <soap:body use="literal" namespace="http://foo.bar/testserver"/>
  77. </output>
  78. </operation>
  79. </binding>
  80. <service name="TestServerService">
  81. <port name="TestServerPort" binding="tns:TestServerBinding">
  82. <soap:address location="http://localhost/wsdl-creator/TestClass.php"/>
  83. </port>
  84. </service>
  85. </definitions>
  86. XML;
  87. file_put_contents(__DIR__ . "/bug68361.xml", $xml);
  88. $client = new SoapClient(__DIR__ . "/bug68361.xml");
  89. $res = $client->__getTypes(); // Segmentation fault here
  90. print_r($res);
  91. ?>
  92. --CLEAN--
  93. <?php
  94. unlink(__DIR__ . "/bug68361.xml");
  95. ?>
  96. --EXPECT--
  97. Array
  98. (
  99. [0] => anyType ArrayOfEmployeeReturn[]
  100. [1] => struct Employee {
  101. int id;
  102. string department;
  103. string name;
  104. int age;
  105. }
  106. [2] => struct User {
  107. string name;
  108. int age;
  109. }
  110. )