Skip to content

Commit fd61666

Browse files
committed
Fix bug #70875 Segmentation fault if wsdl has no targetNamespace attribute
1 parent 089ca13 commit fd61666

File tree

4 files changed

+211
-1
lines changed

4 files changed

+211
-1
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ PHP NEWS
1515
. Fixed bug #69757 (Segmentation fault on nextRowset).
1616
(miracle at rpz dot name)
1717

18+
- SOAP:
19+
. Fixed bug #70875 (Segmentation fault if wsdl has no targetNamespace
20+
attribute). (Matteo)
21+
1822
- SPL:
1923
. Fixed bug #70852 Segfault getting NULL offset of an ArrayObject.
2024
(Reeze Xia)

ext/soap/php_sdl.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ encodePtr get_encoder(sdlPtr sdl, const char *ns, const char *type)
111111
{
112112
encodePtr enc = NULL;
113113
char *nscat;
114-
int ns_len = strlen(ns);
114+
int ns_len = ns ? strlen(ns) : 0;
115115
int type_len = strlen(type);
116116
int len = ns_len + type_len + 1;
117117

ext/soap/tests/bug70875.phpt

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
--TEST--
2+
SOAP Bug #70875 - Segmentation fault if wsdl has no targetNamespace attribute
3+
--SKIPIF--
4+
<?php require_once('skipif.inc'); ?>
5+
--INI--
6+
soap.wsdl_cache_enabled=0
7+
--FILE--
8+
<?php
9+
10+
class bug70875 extends SOAPClient
11+
{
12+
public function __doRequest($request, $location, $action, $version, $one_way = 0)
13+
{
14+
die("no SIGSEGV");
15+
}
16+
}
17+
18+
$c = new bug70875(__DIR__.'/bug70875.wsdl', [
19+
'trace' => 1,
20+
'classmap' => [
21+
'TestService' => 'TestService',
22+
'TestServiceRQ' => 'TestServiceRQ',
23+
'RqHeader' => 'RqHeader',
24+
],
25+
]);
26+
27+
28+
class TestService
29+
{
30+
public $TestServiceRQ;
31+
}
32+
33+
class TestServiceRQ
34+
{
35+
public $RqHeader;
36+
}
37+
38+
class RqHeader
39+
{
40+
}
41+
42+
$r = new TestService();
43+
$r->TestServiceRQ = new TestServiceRQ();
44+
$r->TestServiceRQ->RqHeader = new RqHeader();
45+
46+
$c->testService($r);
47+
48+
?>
49+
--EXPECT--
50+
no SIGSEGV

ext/soap/tests/bug70875.wsdl

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<wsdl:definitions name="BookingService" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
3+
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"
4+
xmlns:wsa10="http://www.w3.org/2005/08/addressing"
5+
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract"
6+
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
7+
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"
8+
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
9+
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
10+
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
11+
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
12+
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
13+
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
14+
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
15+
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
16+
<wsdl:types>
17+
<xs:schema elementFormDefault="unqualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
18+
<xs:element name="TestService">
19+
<xs:complexType>
20+
<xs:sequence>
21+
<xs:element minOccurs="0" maxOccurs="1" name="TestServiceRQ" type="TestServiceRQ"/>
22+
</xs:sequence>
23+
</xs:complexType>
24+
</xs:element>
25+
<xs:complexType name="TestServiceRQ">
26+
<xs:complexContent mixed="false">
27+
<xs:extension base="BaseRequest"/>
28+
</xs:complexContent>
29+
</xs:complexType>
30+
<xs:complexType name="BaseRequest">
31+
<xs:sequence>
32+
<xs:element minOccurs="0" maxOccurs="1" name="RqHeader" type="RequestHeader"/>
33+
</xs:sequence>
34+
</xs:complexType>
35+
<xs:complexType name="RequestHeader">
36+
<xs:sequence>
37+
<xs:element minOccurs="0" maxOccurs="1" name="AvesAutoLogin" type="AutoLogin"/>
38+
</xs:sequence>
39+
<xs:attribute name="HostID" type="xs:string"/>
40+
<xs:attribute name="Xtoken" type="xs:string"/>
41+
<xs:attribute name="Interface" type="xs:string"/>
42+
<xs:attribute name="UserName" type="xs:string"/>
43+
</xs:complexType>
44+
<xs:complexType name="AutoLogin">
45+
<xs:attribute name="VatCode" type="xs:string"/>
46+
<xs:attribute name="ZipCode" type="xs:string"/>
47+
<xs:attribute name="HashCode" type="xs:string"/>
48+
</xs:complexType>
49+
<xs:element name="TestServiceResponse">
50+
<xs:complexType>
51+
<xs:sequence>
52+
<xs:element minOccurs="0" maxOccurs="1" name="TestServiceRS" type="TestServiceRS"/>
53+
</xs:sequence>
54+
</xs:complexType>
55+
</xs:element>
56+
<xs:complexType name="TestServiceRS">
57+
<xs:complexContent mixed="false">
58+
<xs:extension base="BaseResponse"/>
59+
</xs:complexContent>
60+
</xs:complexType>
61+
<xs:complexType name="BaseResponse">
62+
<xs:sequence>
63+
<xs:element minOccurs="0" maxOccurs="1" name="RsStatus" type="ResponseStatus"/>
64+
</xs:sequence>
65+
</xs:complexType>
66+
<xs:complexType name="ResponseStatus">
67+
<xs:sequence>
68+
<xs:element minOccurs="0" maxOccurs="1" name="ErrorCode" type="xs:string"/>
69+
<xs:element minOccurs="0" maxOccurs="1" name="ErrorDescription" type="xs:string"/>
70+
<xs:element minOccurs="0" maxOccurs="unbounded" name="Warnings" type="ResponseWarning"/>
71+
<xs:element minOccurs="0" maxOccurs="1" name="InternalLog" type="xs:string"/>
72+
<xs:element minOccurs="0" maxOccurs="1" name="ProviderLogs" type="ArrayOfProviderLog"/>
73+
</xs:sequence>
74+
<xs:attribute name="Status" type="ResponseStatusType" use="required"/>
75+
</xs:complexType>
76+
<xs:complexType name="ResponseWarning">
77+
<xs:attribute name="WarnType" type="ResponseWarningTypes" use="required"/>
78+
<xs:attribute name="Description" type="xs:string"/>
79+
</xs:complexType>
80+
<xs:simpleType name="ResponseWarningTypes">
81+
<xs:restriction base="xs:string">
82+
<xs:enumeration value="Unknown"/>
83+
<xs:enumeration value="DataNotFound"/>
84+
<xs:enumeration value="InactiveAgency"/>
85+
</xs:restriction>
86+
</xs:simpleType>
87+
<xs:complexType name="ArrayOfProviderLog">
88+
<xs:sequence>
89+
<xs:element minOccurs="0" maxOccurs="unbounded" name="ProviderLog" nillable="true"
90+
type="ProviderLog"/>
91+
</xs:sequence>
92+
</xs:complexType>
93+
<xs:complexType name="ProviderLog">
94+
<xs:sequence>
95+
<xs:element minOccurs="0" maxOccurs="1" name="OtaReqContent">
96+
<xs:complexType mixed="true">
97+
<xs:sequence>
98+
<xs:any/>
99+
</xs:sequence>
100+
</xs:complexType>
101+
</xs:element>
102+
<xs:element minOccurs="0" maxOccurs="1" name="OtaResContent">
103+
<xs:complexType mixed="true">
104+
<xs:sequence>
105+
<xs:any/>
106+
</xs:sequence>
107+
</xs:complexType>
108+
</xs:element>
109+
</xs:sequence>
110+
<xs:attribute name="ProviderCode" type="xs:string"/>
111+
<xs:attribute name="RequestTime" type="xs:string"/>
112+
<xs:attribute name="PostRequestTime" type="xs:string"/>
113+
<xs:attribute name="ResponseCount" type="xs:string"/>
114+
<xs:attribute name="ResponseMessage" type="xs:string"/>
115+
</xs:complexType>
116+
<xs:simpleType name="ResponseStatusType">
117+
<xs:restriction base="xs:string">
118+
<xs:enumeration value="OK"/>
119+
<xs:enumeration value="ERROR"/>
120+
<xs:enumeration value="WARNING"/>
121+
<xs:enumeration value="TIMEOUT"/>
122+
</xs:restriction>
123+
</xs:simpleType>
124+
</xs:schema>
125+
</wsdl:types>
126+
<wsdl:message name="IBookingService_TestService_InputMessage">
127+
<wsdl:part name="parameters" element="TestService"/>
128+
</wsdl:message>
129+
<wsdl:message name="IBookingService_TestService_OutputMessage">
130+
<wsdl:part name="parameters" element="TestServiceResponse"/>
131+
</wsdl:message>
132+
<wsdl:portType name="IBookingService">
133+
<wsdl:operation name="TestService">
134+
<wsdl:input wsaw:Action="urn:IBookingService/TestService"
135+
message="IBookingService_TestService_InputMessage"/>
136+
<wsdl:output wsaw:Action="urn:IBookingService/TestServiceResponse"
137+
message="IBookingService_TestService_OutputMessage"/>
138+
</wsdl:operation>
139+
</wsdl:portType>
140+
<wsdl:binding name="interop_booking_v2" type="IBookingService">
141+
<wsdl:operation name="TestService">
142+
<soap:operation soapAction="urn:IBookingService/TestService" style="document"/>
143+
<wsdl:input>
144+
<soap:body use="literal"/>
145+
</wsdl:input>
146+
<wsdl:output>
147+
<soap:body use="literal"/>
148+
</wsdl:output>
149+
</wsdl:operation>
150+
</wsdl:binding>
151+
<wsdl:service name="BookingService">
152+
<wsdl:port name="interop_booking_v2" binding="interop_booking_v2">
153+
<soap:address location="http://localhost/foobar/soap"/>
154+
</wsdl:port>
155+
</wsdl:service>
156+
</wsdl:definitions>

0 commit comments

Comments
 (0)