felipe Mon Jun 15 17:25:28 2009 UTC Added files: /php-src/ext/soap/tests bug48557.phpt bug48557.wsdl
Modified files: /php-src/ext/soap php_encoding.c Log: - Fixed bug #48557 (Numeric string keys in Apache Hashmaps are not cast to integers) patch by David Zülke <david.zuelke at bitextender.com> http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_encoding.c?r1=1.177&r2=1.178&diff_format=u Index: php-src/ext/soap/php_encoding.c diff -u php-src/ext/soap/php_encoding.c:1.177 php-src/ext/soap/php_encoding.c:1.178 --- php-src/ext/soap/php_encoding.c:1.177 Thu Mar 26 20:02:12 2009 +++ php-src/ext/soap/php_encoding.c Mon Jun 15 17:25:28 2009 @@ -17,7 +17,7 @@ | Dmitry Stogov <dmi...@zend.com> | +----------------------------------------------------------------------+ */ -/* $Id: php_encoding.c,v 1.177 2009/03/26 20:02:12 felipe Exp $ */ +/* $Id: php_encoding.c,v 1.178 2009/06/15 17:25:28 felipe Exp $ */ #include <time.h> @@ -2782,7 +2782,7 @@ value = master_to_zval(NULL, xmlValue); if (Z_TYPE_P(key) == IS_STRING || Z_TYPE_P(key) == IS_UNICODE) { - zend_u_hash_update(Z_ARRVAL_P(ret), Z_TYPE_P(key), Z_UNIVAL_P(key), Z_UNILEN_P(key) + 1, &value, sizeof(zval *), NULL); + zend_u_symtable_update(Z_ARRVAL_P(ret), Z_TYPE_P(key), Z_UNIVAL_P(key), Z_UNILEN_P(key) + 1, &value, sizeof(zval *), NULL); } else if (Z_TYPE_P(key) == IS_LONG) { zend_hash_index_update(Z_ARRVAL_P(ret), Z_LVAL_P(key), &value, sizeof(zval *), NULL); } else { http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/bug48557.phpt?view=markup&rev=1.1 Index: php-src/ext/soap/tests/bug48557.phpt +++ php-src/ext/soap/tests/bug48557.phpt --TEST-- Bug #48557 (Numeric string keys in Apache Hashmaps are not cast to integers) --FILE-- <?php error_reporting(E_ALL); ini_set('display_errors', 1); ini_set("soap.wsdl_cache_enabled", 0); function test($map) { var_dump($map, $map[1], $map[2]);die; if(isset($map[2])) { die("Success\n"); } else { die("Fail\n"); } } $y = new SoapServer(dirname(__FILE__) . '/bug48557.wsdl'); $y->addfunction("test"); $request = <<<XML <?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:test> <testParam xsi:type="ns2:Map"> <item> <key xsi:type="xsd:int">1</key> <value xsi:type="xsd:int">123</value> </item> <item> <key xsi:type="xsd:int">-1000</key> <value xsi:type="xsd:string">123</value> </item> <item> <key xsi:type="xsd:string">2</key> <value xsi:type="xsd:float">123.5</value> </item> <item> <key xsi:type="xsd:string">-2000</key> <value xsi:type="xsd:float">123.5</value> </item> <item> <key xsi:type="xsd:string">011</key> <value xsi:type="xsd:float">123.5</value> </item> <item> <key xsi:type="xsd:int">012</key> <value xsi:type="xsd:float">123.5</value> </item> </testParam> </ns1:test> </SOAP-ENV:Body> </SOAP-ENV:Envelope> XML; #$v = array(1 => 123, "2" => 123.5, "asd" => 555); #var_dump($v);die; $y->handle($request); ?> ===DONE=== --EXPECTF-- array(6) { [1]=> int(123) [-1000]=> %string|unicode%(3) "123" [2]=> float(123.5) [-2000]=> float(123.5) [%u|b%"011"]=> float(123.5) [12]=> float(123.5) } int(123) float(123.5) http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/bug48557.wsdl?view=markup&rev=1.1 Index: php-src/ext/soap/tests/bug48557.wsdl +++ php-src/ext/soap/tests/bug48557.wsdl <?xml version="1.0"?> <definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://test-uri/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" name="InteropTest" targetNamespace="http://test-uri/"> <types> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test-uri/"> <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/> </schema> </types> <message name="testMessage"> <part xmlns:apache="http://xml.apache.org/xml-soap" name="testParam" type="apache:Map"/> </message> <portType name="testPortType"> <operation name="test"> <input message="testMessage"/> </operation> </portType> <binding name="testBinding" type="testPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="test"> <soap:operation soapAction="#test" style="rpc"/> <input> <soap:body use="encoded" namespace="http://test-uri/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> </operation> </binding> <service name="testService"> <port name="testPort" binding="tns:testBinding"> <soap:address location="test://"/> </port> </service> </definitions> -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php