diff options
author | Felipe Pena <felipe@php.net> | 2009-06-15 17:36:00 +0000 |
---|---|---|
committer | Felipe Pena <felipe@php.net> | 2009-06-15 17:36:00 +0000 |
commit | 51781931e25b39bd4c9ca401596c0391d6132a5c (patch) | |
tree | 386f4ba24d93b053ad7622b5ab658236c989e371 | |
parent | 13594f8a98775080ac2682473ca5dd4aac3b74ef (diff) | |
download | php-git-51781931e25b39bd4c9ca401596c0391d6132a5c.tar.gz |
- MFH: Fixed bug #48557 (Numeric string keys in Apache Hashmaps are not cast to integers) patch by David Zülke <david.zuelke at bitextender.com>
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/soap/php_encoding.c | 2 | ||||
-rw-r--r-- | ext/soap/tests/bug48557.phpt | 78 | ||||
-rw-r--r-- | ext/soap/tests/bug48557.wsdl | 31 |
4 files changed, 112 insertions, 1 deletions
@@ -1,6 +1,8 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? Jun 2009, PHP 5.2.10 +- Fixed bug #48557 (Numeric string keys in Apache Hashmaps are not cast to + integers). (David Zülke) - Fixed bug #48514 (cURL extension uses same resource name for simple and multi APIs). (Felipe) - Fixed missing erealloc() in fix for Bug #40091 in spl_autoload_register. diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 613a226629..336dbbcc75 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -2726,7 +2726,7 @@ static zval *to_zval_map(encodeTypePtr type, xmlNodePtr data) value = master_to_zval(NULL, xmlValue); if (Z_TYPE_P(key) == IS_STRING) { - zend_hash_update(Z_ARRVAL_P(ret), Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, &value, sizeof(zval *), NULL); + zend_symtable_update(Z_ARRVAL_P(ret), Z_STRVAL_P(key), Z_STRLEN_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 { diff --git a/ext/soap/tests/bug48557.phpt b/ext/soap/tests/bug48557.phpt new file mode 100644 index 0000000000..7d197d4491 --- /dev/null +++ b/ext/soap/tests/bug48557.phpt @@ -0,0 +1,78 @@ +--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) diff --git a/ext/soap/tests/bug48557.wsdl b/ext/soap/tests/bug48557.wsdl new file mode 100644 index 0000000000..dfab543c87 --- /dev/null +++ b/ext/soap/tests/bug48557.wsdl @@ -0,0 +1,31 @@ +<?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> |