summaryrefslogtreecommitdiff
path: root/ext/soap
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2004-11-16 13:04:39 +0000
committerDmitry Stogov <dmitry@php.net>2004-11-16 13:04:39 +0000
commit94a372b992edaf92e18d62f8385fe78b77fe8f3e (patch)
tree19c39ca16eef81feeb53b20cd55171f7e18c78d9 /ext/soap
parenta9a5dbd9b8bfe68fe4306145023d16d38224ea85 (diff)
downloadphp-git-94a372b992edaf92e18d62f8385fe78b77fe8f3e.tar.gz
Fixed bug #30799 (SoapServer doesn't handle private or protected properties)
Diffstat (limited to 'ext/soap')
-rw-r--r--ext/soap/php_encoding.c13
-rw-r--r--ext/soap/tests/bugs/bug30799.phpt25
2 files changed, 37 insertions, 1 deletions
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c
index 185d3e07fa..43ddd65a2f 100644
--- a/ext/soap/php_encoding.c
+++ b/ext/soap/php_encoding.c
@@ -1424,7 +1424,18 @@ static xmlNodePtr to_xml_object(encodeTypePtr type, zval *data, int style, xmlNo
property = master_to_xml(get_conversion((*zprop)->type), (*zprop), style, xmlParam);
if (key_type == HASH_KEY_IS_STRING) {
- xmlNodeSetName(property, str_key);
+ char *prop_name;
+
+ if (Z_TYPE_P(data) == IS_OBJECT) {
+ char *class_name;
+
+ zend_unmangle_property_name(str_key, &class_name, &prop_name);
+ } else {
+ prop_name = str_key;
+ }
+ if (prop_name) {
+ xmlNodeSetName(property, prop_name);
+ }
}
zend_hash_move_forward(prop);
}
diff --git a/ext/soap/tests/bugs/bug30799.phpt b/ext/soap/tests/bugs/bug30799.phpt
new file mode 100644
index 0000000000..9fa0b12f0e
--- /dev/null
+++ b/ext/soap/tests/bugs/bug30799.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #30799 SoapServer doesn't handle private or protected properties
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+class foo {
+ public $a="a";
+ private $b="b";
+ protected $c="c";
+
+}
+
+$x = new SoapClient(NULL,array("location"=>"test://",
+ "uri" => "test://",
+ "exceptions" => 0,
+ "trace" => 1 ));
+$x->test(new foo());
+echo $x->__getLastRequest();
+echo "ok\n";
+?>
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="test://" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:test><param0 xsi:type="SOAP-ENC:Struct"><a xsi:type="xsd:string">a</a><b xsi:type="xsd:string">b</b><c xsi:type="xsd:string">c</c></param0></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope>
+ok