From: Dmitry Stogov Date: Tue, 1 Nov 2005 11:11:19 +0000 (+0000) Subject: Fixed SIGSEGV X-Git-Tag: RELEASE_2_0_1~88 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d846b5382d760fc142791485c8213143925a06ed;p=php Fixed SIGSEGV --- diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 92c031f471..d17dc6e262 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -2766,7 +2766,7 @@ static xmlNodePtr to_xml_any(encodeTypePtr type, zval *data, int style, xmlNodeP zval_copy_ctor(&tmp); convert_to_string(&tmp); - ret = xmlNewTextLen(Z_STRVAL_P(data), Z_STRLEN_P(data)); + ret = xmlNewTextLen(Z_STRVAL(tmp), Z_STRLEN(tmp)); zval_dtor(&tmp); } ret->name = xmlStringTextNoenc; diff --git a/ext/soap/tests/any.phpt b/ext/soap/tests/any.phpt new file mode 100755 index 0000000000..306557b302 --- /dev/null +++ b/ext/soap/tests/any.phpt @@ -0,0 +1,83 @@ +--TEST-- +SOAP handling of +--SKIPIF-- + +--FILE-- +varString = $s; + $this->varInt = $i; + $this->varFloat = $f; + } +} +$struct = new SOAPComplexType('arg',34,325.325); + +function echoAnyElement($x) { + global $g; + + $g = $x; + $struct = $x->inputAny->any; + if ($struct instanceof SOAPComplexType) { + return array("return" => array("any" => new SoapVar($struct, SOAP_ENC_OBJECT, "SOAPComplexType", "http://soapinterop.org/xsd", "SOAPComplexType", "http://soapinterop.org/"))); + } else { + return "?"; + } +} + +class TestSoapClient extends SoapClient { + function __construct($wsdl, $options) { + parent::__construct($wsdl, $options); + $this->server = new SoapServer($wsdl, $options); + $this->server->addFunction('echoAnyElement'); + } + + function __doRequest($request, $location, $action, $version) { + ob_start(); + $this->server->handle($request); + $response = ob_get_contents(); + ob_end_clean(); + return $response; + } +} + +$client = new TestSoapClient(dirname(__FILE__)."/interop/Round4/GroupI/round4_groupI_xsd.wsdl", + array("trace"=>1,"exceptions"=>0, + 'classmap' => array('SOAPComplexType'=>'SOAPComplexType'))); +$ret = $client->echoAnyElement( + array( + "inputAny"=>array( + "any"=>new SoapVar($struct, SOAP_ENC_OBJECT, "SOAPComplexType", "http://soapinterop.org/xsd", "SOAPComplexType", "http://soapinterop.org/") + ))); +var_dump($g); +var_dump($ret); +?> +--EXPECT-- +object(stdClass)#5 (1) { + ["inputAny"]=> + object(stdClass)#6 (1) { + ["any"]=> + object(SOAPComplexType)#7 (3) { + ["varInt"]=> + int(34) + ["varString"]=> + string(3) "arg" + ["varFloat"]=> + float(325.325) + } + } +} +object(stdClass)#8 (1) { + ["return"]=> + object(stdClass)#9 (1) { + ["any"]=> + object(SOAPComplexType)#10 (3) { + ["varInt"]=> + int(34) + ["varString"]=> + string(3) "arg" + ["varFloat"]=> + float(325.325) + } + } +} diff --git a/ext/soap/tests/bugs/bug34449.phpt b/ext/soap/tests/bugs/bug34449.phpt index 95cd4867d8..5aa30bbcac 100755 --- a/ext/soap/tests/bugs/bug34449.phpt +++ b/ext/soap/tests/bugs/bug34449.phpt @@ -1,5 +1,7 @@ --TEST-- Bug #34449 (ext/soap: XSD_ANYXML functionality not exposed) +--SKIPIF-- + --FILE--