mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Fixed SIGSEGV
This commit is contained in:
parent
02eb02d1ce
commit
e98a40f1fa
2 changed files with 86 additions and 2 deletions
|
@ -2760,15 +2760,16 @@ static xmlNodePtr to_xml_any(encodeTypePtr type, zval *data, int style, xmlNodeP
|
|||
|
||||
if (Z_TYPE_P(data) == IS_STRING) {
|
||||
ret = xmlNewTextLen(Z_STRVAL_P(data), Z_STRLEN_P(data));
|
||||
ret->name = xmlStringTextNoenc;
|
||||
} else {
|
||||
zval tmp = *data;
|
||||
|
||||
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;
|
||||
}
|
||||
ret->name = xmlStringTextNoenc;
|
||||
xmlAddChild(parent, ret);
|
||||
|
||||
return ret;
|
||||
|
|
83
ext/soap/tests/any.phpt
Executable file
83
ext/soap/tests/any.phpt
Executable file
|
@ -0,0 +1,83 @@
|
|||
--TEST--
|
||||
SOAP handling of <any>
|
||||
--SKIPIF--
|
||||
<?php require_once('skipif.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
class SOAPComplexType {
|
||||
function SOAPComplexType($s, $i, $f) {
|
||||
$this->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)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue