From: Dmitry Stogov Date: Thu, 14 Jun 2007 07:09:31 +0000 (+0000) Subject: Fixed bug #41566 (SOAP Server not properly generating href attributes) X-Git-Tag: php-5.2.4RC1~352 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3b27cd22b62a126a13d1904ac744d677529f04d7;p=php Fixed bug #41566 (SOAP Server not properly generating href attributes) --- diff --git a/NEWS b/NEWS index 8f1ae9a6d6..dde2a9137b 100644 --- a/NEWS +++ b/NEWS @@ -45,6 +45,8 @@ PHP NEWS other SAPIs disabling options). (Jani) - Fixed bug #41567 (json_encode() double conversion is inconsistent with PHP). (Lucas, Ilia) +- Fixed bug #41566 (SOAP Server not properly generating href attributes). + (Dmitry) - Fixed bug #41561 (Values set with php_admin_* in httpd.conf can be overwritten with ini_set()). (Tony, Dmitry) - Fixed bug #41555 (configure failure: regression caused by fix for #41265). diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 6a2c71d583..14b05e0210 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -297,6 +297,10 @@ static zend_bool soap_check_zval_ref(zval *data, xmlNodePtr node TSRMLS_DC) { } if (attr) { id = (char*)attr->children->content; + smart_str_appendc(&prefix, '#'); + smart_str_appends(&prefix, id); + smart_str_0(&prefix); + id = prefix.c; } else { SOAP_GLOBAL(cur_uniq_ref)++; smart_str_appendl(&prefix, "#ref", 4); @@ -310,6 +314,10 @@ static zend_bool soap_check_zval_ref(zval *data, xmlNodePtr node TSRMLS_DC) { attr = get_attribute_ex(attr, "id", SOAP_1_2_ENC_NAMESPACE); if (attr) { id = (char*)attr->children->content; + smart_str_appendc(&prefix, '#'); + smart_str_appends(&prefix, id); + smart_str_0(&prefix); + id = prefix.c; } else { SOAP_GLOBAL(cur_uniq_ref)++; smart_str_appendl(&prefix, "#ref", 4); diff --git a/ext/soap/tests/bugs/bug41566.phpt b/ext/soap/tests/bugs/bug41566.phpt new file mode 100755 index 0000000000..03ecdde043 --- /dev/null +++ b/ext/soap/tests/bugs/bug41566.phpt @@ -0,0 +1,65 @@ +--TEST-- +Bug #41566 (SOAP Server not properly generating href attributes) +--SKIPIF-- + +--FILE-- +sName = 'newUser'; + + $aUsers = Array(); + $aUsers[] = $aUser; + $aUsers[] = $aUser; + $aUsers[] = $aUser; + $aUsers[] = $aUser; + return $aUsers; +} + +/* Simple User definition */ +Class User { + /** @var string */ + public $sName; +} + +$server = new soapserver(null,array('uri'=>"http://testuri.org", 'soap_version'=>SOAP_1_2)); +$server->addfunction("test"); + +$HTTP_RAW_POST_DATA = << + + + + + +EOF; +ob_start(); +$server->handle($HTTP_RAW_POST_DATA); +echo "ok\n"; + +$HTTP_RAW_POST_DATA = << + + + + + +EOF; +$server->handle($HTTP_RAW_POST_DATA); +echo "ok\n"; +ob_flush(); +--EXPECT-- + +newUser +ok + +returnnewUser +ok