]> granicus.if.org Git - php/commitdiff
Fixed bug #29061 (soap extension segfaults).
authorDmitry Stogov <dmitry@php.net>
Mon, 19 Jul 2004 12:53:29 +0000 (12:53 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 19 Jul 2004 12:53:29 +0000 (12:53 +0000)
NEWS
ext/soap/soap.c
ext/soap/tests/bugs/bug29061.phpt [new file with mode: 0644]
ext/soap/tests/bugs/bug29061.wsdl [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 4df4ccf43076acee5b42e46418a6d0a2b6677453..d2c6d65b6cc36d27f334e28451dd0b57f9ceb40e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2004, PHP 5.1.0
+- Fixed bug #29061 (soap extension segfaults). (Dmitry)
 - Added zlib stream filter suport. (Sara)
 - Changed the implementation of TRUE, FALSE, and NULL from constants to
   keywords. (Marcus)
index e6ccc79a31b79d2c434a6115870f7a742c0b4d27..1125849dc8a9cc360126d9c16c52d7cd59bc0400 100644 (file)
@@ -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 (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