summaryrefslogtreecommitdiff
path: root/ext/soap
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2004-07-19 12:53:29 +0000
committerDmitry Stogov <dmitry@php.net>2004-07-19 12:53:29 +0000
commite0f33c589fa590d28b24a69ffd78c06b7b0232fc (patch)
treeafa0f7e8b5ccd8a48f3571f10369c0f48afabb35 /ext/soap
parente35bc2e2b4eed3fc2bbbe01d7e78ba0981bcebb4 (diff)
downloadphp-git-e0f33c589fa590d28b24a69ffd78c06b7b0232fc.tar.gz
Fixed bug #29061 (soap extension segfaults).
Diffstat (limited to 'ext/soap')
-rw-r--r--ext/soap/soap.c12
-rw-r--r--ext/soap/tests/bugs/bug29061.phpt12
-rw-r--r--ext/soap/tests/bugs/bug29061.wsdl41
3 files changed, 63 insertions, 2 deletions
diff --git a/ext/soap/soap.c b/ext/soap/soap.c
index e6ccc79a31..1125849dc8 100644
--- a/ext/soap/soap.c
+++ b/ext/soap/soap.c
@@ -1993,10 +1993,18 @@ static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *act
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);
diff --git a/ext/soap/tests/bugs/bug29061.phpt b/ext/soap/tests/bugs/bug29061.phpt
new file mode 100644
index 0000000000..0bf8917fa5
--- /dev/null
+++ b/ext/soap/tests/bugs/bug29061.phpt
@@ -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
index 0000000000..fb4d9aa3b5
--- /dev/null
+++ b/ext/soap/tests/bugs/bug29061.wsdl
@@ -0,0 +1,41 @@
+<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>