dmitry Mon Jan 26 11:20:23 2009 UTC
Modified files:
/php-src/ext/soap php_encoding.c
/php-src/ext/soap/tests/bugs bug46419.phpt
Log:
Fixed bug #46419 (Elements of associative arrays with NULL value are lost)
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_encoding.c?r1=1.174&r2=1.175&diff_format=u
Index: php-src/ext/soap/php_encoding.c
diff -u php-src/ext/soap/php_encoding.c:1.174
php-src/ext/soap/php_encoding.c:1.175
--- php-src/ext/soap/php_encoding.c:1.174 Wed Dec 31 11:12:35 2008
+++ php-src/ext/soap/php_encoding.c Mon Jan 26 11:20:18 2009
@@ -17,7 +17,7 @@
| Dmitry Stogov <[email protected]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_encoding.c,v 1.174 2008/12/31 11:12:35 sebastian Exp $ */
+/* $Id: php_encoding.c,v 1.175 2009/01/26 11:20:18 dmitry Exp $ */
#include <time.h>
@@ -705,7 +705,9 @@
soap_error0(E_ERROR, "Encoding: Violation of encoding
rules");
}
} else {
- ZVAL_EMPTY_STRING(ret);
+ TSRMLS_FETCH();
+
+ soap_decode_string(ret, "" TSRMLS_CC);
}
return ret;
}
@@ -2715,39 +2717,38 @@
ulong int_val;
zend_hash_get_current_data(data->value.ht, (void
**)&temp_data);
- if (Z_TYPE_PP(temp_data) != IS_NULL) {
- item = xmlNewNode(NULL, BAD_CAST("item"));
- xmlAddChild(xmlParam, item);
- key = xmlNewNode(NULL, BAD_CAST("key"));
- xmlAddChild(item,key);
- key_type =
zend_hash_get_current_key_ex(data->value.ht, &key_val, &key_len, &int_val,
FALSE, NULL);
- if (key_type == HASH_KEY_IS_STRING || key_type
== HASH_KEY_IS_UNICODE) {
- char *str;
- TSRMLS_FETCH();
-
- if (style == SOAP_ENCODED) {
- set_xsi_type(key, "xsd:string");
- }
- str = soap_encode_string_ex(key_type,
key_val, key_len TSRMLS_CC);
- xmlNodeSetContent(key, BAD_CAST(str));
- efree(str);
- } else {
- smart_str tmp = {0};
- smart_str_append_long(&tmp, int_val);
- smart_str_0(&tmp);
-
- if (style == SOAP_ENCODED) {
- set_xsi_type(key, "xsd:int");
- }
- xmlNodeSetContentLen(key,
BAD_CAST(tmp.c), tmp.len);
+ item = xmlNewNode(NULL, BAD_CAST("item"));
+ xmlAddChild(xmlParam, item);
+ key = xmlNewNode(NULL, BAD_CAST("key"));
+ xmlAddChild(item,key);
+ key_type = zend_hash_get_current_key_ex(data->value.ht,
&key_val, &key_len, &int_val, FALSE, NULL);
+ if (key_type == HASH_KEY_IS_STRING || key_type ==
HASH_KEY_IS_UNICODE) {
+ char *str;
+ TSRMLS_FETCH();
- smart_str_free(&tmp);
+ if (style == SOAP_ENCODED) {
+ set_xsi_type(key, "xsd:string");
}
+ str = soap_encode_string_ex(key_type, key_val,
key_len TSRMLS_CC);
+ xmlNodeSetContent(key, BAD_CAST(str));
+ efree(str);
+ } else {
+ smart_str tmp = {0};
+ smart_str_append_long(&tmp, int_val);
+ smart_str_0(&tmp);
- xparam =
master_to_xml(get_conversion((*temp_data)->type), (*temp_data), style, item);
+ if (style == SOAP_ENCODED) {
+ set_xsi_type(key, "xsd:int");
+ }
+ xmlNodeSetContentLen(key, BAD_CAST(tmp.c),
tmp.len);
- xmlNodeSetName(xparam, BAD_CAST("value"));
+ smart_str_free(&tmp);
}
+
+ xparam =
master_to_xml(get_conversion((*temp_data)->type), (*temp_data), style, item);
+
+ xmlNodeSetName(xparam, BAD_CAST("value"));
+
zend_hash_move_forward(data->value.ht);
}
}
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/bugs/bug46419.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/soap/tests/bugs/bug46419.phpt
diff -u /dev/null php-src/ext/soap/tests/bugs/bug46419.phpt:1.2
--- /dev/null Mon Jan 26 11:20:23 2009
+++ php-src/ext/soap/tests/bugs/bug46419.phpt Mon Jan 26 11:20:22 2009
@@ -0,0 +1,43 @@
+--TEST--
+Bug #46419 (Elements of associative arrays with NULL value are lost)
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+function bar() {
+ return array('a' => 1, 'b' => NULL, 'c' => 2, 'd'=>'');
+}
+
+class LocalSoapClient extends SoapClient {
+
+ function __construct($wsdl, $options) {
+ parent::__construct($wsdl, $options);
+ $this->server = new SoapServer($wsdl, $options);
+ $this->server->addFunction('bar');
+ }
+
+ function __doRequest($request, $location, $action, $version, $one_way = 0) {
+ ob_start();
+ $this->server->handle($request);
+ $response = ob_get_contents();
+ ob_end_clean();
+ return $response;
+ }
+
+}
+
+$x = new LocalSoapClient(NULL,array('location'=>'test://',
+ 'uri'=>'http://testuri.org'));
+var_dump($x->bar());
+?>
+--EXPECT--
+array(4) {
+ [u"a"]=>
+ int(1)
+ [u"b"]=>
+ NULL
+ [u"c"]=>
+ int(2)
+ [u"d"]=>
+ unicode(0) ""
+}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php