mirror of
https://github.com/php/php-src.git
synced 2024-09-27 04:47:22 +00:00
115 lines
3.8 KiB
Plaintext
115 lines
3.8 KiB
Plaintext
|
--TEST--
|
||
|
Bug #68361 Segmentation fault on SoapClient::__getTypes
|
||
|
--SKIPIF--
|
||
|
<?php require_once('skipif.inc'); ?>
|
||
|
--FILE--
|
||
|
<?php
|
||
|
|
||
|
$xml = <<<XML
|
||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||
|
<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">
|
||
|
<types>
|
||
|
<xsd:schema targetNamespace="http://foo.bar/testserver/types" xmlns="http://foo.bar/testserver/types">
|
||
|
<xsd:complexType name="ArrayOfEmployeeReturn">
|
||
|
<xsd:complexContent>
|
||
|
<xsd:restriction base="soapenc:Array">
|
||
|
<xsd:attribute ref="soapenc:arrayType" arrayType="ns:Employee[]"/>
|
||
|
</xsd:restriction>
|
||
|
</xsd:complexContent>
|
||
|
</xsd:complexType>
|
||
|
<xsd:complexType name="Employee">
|
||
|
<xsd:sequence>
|
||
|
<xsd:element name="id" type="xsd:int"/>
|
||
|
<xsd:element name="department" type="xsd:string"/>
|
||
|
<xsd:element name="name" type="xsd:string"/>
|
||
|
<xsd:element name="age" type="xsd:int"/>
|
||
|
</xsd:sequence>
|
||
|
</xsd:complexType>
|
||
|
<xsd:element name="Employee" nillable="true" type="ns:Employee"/>
|
||
|
<xsd:complexType name="User">
|
||
|
<xsd:sequence>
|
||
|
<xsd:element name="name" type="xsd:string"/>
|
||
|
<xsd:element name="age" type="xsd:int"/>
|
||
|
</xsd:sequence>
|
||
|
</xsd:complexType>
|
||
|
<xsd:element name="User" nillable="true" type="ns:User"/>
|
||
|
</xsd:schema>
|
||
|
</types>
|
||
|
<message name="getEmployeeRequest">
|
||
|
<part name="name" type="xsd:name"/>
|
||
|
</message>
|
||
|
<message name="getEmployeeResponse">
|
||
|
<part name="employeeReturn" type="ns:ArrayOfEmployeeReturn"/>
|
||
|
</message>
|
||
|
<message name="getUserRequest">
|
||
|
<part name="id" type="xsd:id"/>
|
||
|
</message>
|
||
|
<message name="getUserResponse">
|
||
|
<part name="userReturn" element="ns:User"/>
|
||
|
</message>
|
||
|
<portType name="TestServerPortType">
|
||
|
<operation name="getEmployee">
|
||
|
<input message="tns:getEmployeeRequest"/>
|
||
|
<output message="tns:getEmployeeResponse"/>
|
||
|
</operation>
|
||
|
<operation name="getUser">
|
||
|
<input message="tns:getUserRequest"/>
|
||
|
<output message="tns:getUserResponse"/>
|
||
|
</operation>
|
||
|
</portType>
|
||
|
<binding name="TestServerBinding" type="tns:TestServerPortType">
|
||
|
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
|
||
|
<operation name="getEmployee">
|
||
|
<soap:operation soapAction="http://foo.bar/testserver/#getEmployee"/>
|
||
|
<input>
|
||
|
<soap:body use="literal" namespace="http://foo.bar/testserver"/>
|
||
|
</input>
|
||
|
<output>
|
||
|
<soap:body use="literal" namespace="http://foo.bar/testserver"/>
|
||
|
</output>
|
||
|
</operation>
|
||
|
<operation name="getUser">
|
||
|
<soap:operation soapAction="http://foo.bar/testserver/#getUser"/>
|
||
|
<input>
|
||
|
<soap:body use="literal" namespace="http://foo.bar/testserver"/>
|
||
|
</input>
|
||
|
<output>
|
||
|
<soap:body use="literal" namespace="http://foo.bar/testserver"/>
|
||
|
</output>
|
||
|
</operation>
|
||
|
</binding>
|
||
|
<service name="TestServerService">
|
||
|
<port name="TestServerPort" binding="tns:TestServerBinding">
|
||
|
<soap:address location="http://localhost/wsdl-creator/TestClass.php"/>
|
||
|
</port>
|
||
|
</service>
|
||
|
</definitions>
|
||
|
XML;
|
||
|
|
||
|
file_put_contents(__DIR__ . "/bug68361.xml", $xml);
|
||
|
$client = new SoapClient(__DIR__ . "/bug68361.xml");
|
||
|
|
||
|
$res = $client->__getTypes(); // Segmentation fault here
|
||
|
|
||
|
print_r($res);
|
||
|
?>
|
||
|
--CLEAN--
|
||
|
<?php
|
||
|
unlink(__DIR__ . "/bug68361.xml");
|
||
|
?>
|
||
|
--EXPECT--
|
||
|
Array
|
||
|
(
|
||
|
[0] => anyType ArrayOfEmployeeReturn[]
|
||
|
[1] => struct Employee {
|
||
|
int id;
|
||
|
string department;
|
||
|
string name;
|
||
|
int age;
|
||
|
}
|
||
|
[2] => struct User {
|
||
|
string name;
|
||
|
int age;
|
||
|
}
|
||
|
)
|