ID: 37746 Updated by: [EMAIL PROTECTED] Reported By: glideraerobatics at hotmail dot com Status: Wont fix Bug Type: XMLRPC-EPI related Operating System: FreeBSD 6.1 PHP Version: 5.1.4 New Comment:
Well, 4 years with an unknown amount of people relying on it. [EMAIL PROTECTED]:~$ cli -r 'var_dump(xmlrpc_get_type(array(123=>123)), xmlrpc_get_type(array("a"=>123)), xmlrpc_get_type(array(123=>123,"a"=>123)));' string(5) "array" string(6) "struct" string(5) "mixed" Previous Comments: ------------------------------------------------------------------------ [2006-06-21 01:36:19] glideraerobatics at hotmail dot com I'm confused. Is "It's been that way since the very first release" the reason why it won't be fixed? I'm glad Microsoft didn't think that way otherwise I'ld still be seeing multiple BSOD's every day. ------------------------------------------------------------------------ [2006-06-19 08:20:56] [EMAIL PROTECTED] It's been that way since the very first release, if the array contains numeric indices only. ------------------------------------------------------------------------ [2006-06-08 15:02:04] lars dot maes at gmail dot com I confirm this bug on Debian 3.1a sarge with php4 version 4.3.10 The chr(0x00) solution also works ------------------------------------------------------------------------ [2006-06-08 14:16:45] glideraerobatics at hotmail dot com By the way, a quick workaround to the problem is to append a NULL byte to the keys: $key1 = '666' . chr(0x00); This way the hash is returned as a correct xml-rpc response without the NULL bytes. ------------------------------------------------------------------------ [2006-06-08 14:02:55] glideraerobatics at hotmail dot com Description: ------------ I've noticed that when a key of a hash begins with a digit between 1 and 9 that the resulting XML-RPC response will contain an empty key. This array: $result = array('666' => 'me', '007' => 'Bond'); will be returned as this which is obviously wrong: <?xml version="1.0" encoding="iso-8859-1"?> <methodResponse> <params> <param> <value> <struct> <member> <name/> <value> <string>me</string> </value> </member> <member> <name>007</name> <value> <string>bond</string> </value> </member> </struct> </value> </param> </params> </methodResponse> Clearly the xmlrpc module has correctly detected that the result is a hash and has therefore made a 'struct'. What it didn't do correctly for some strange reason is treat all keys of the hash as strings (they even really are strings - ask gettype()). Reproduce code: --------------- function debug_getHash($method_name, $params, $app_data) { $key1 = '666'; $key2 = '007'; $result = array( $key1 => 'key1 is a ' . gettype($key1), $key2 => 'key2 is a ' . gettype($key2), ); return $result; } xmlrpc_server_register_method($xmlrpc_server, 'debug.getHash', 'debug_getHash'); Expected result: ---------------- <?xml version="1.0" encoding="iso-8859-1"?> <methodResponse> <params> <param> <value> <struct> <member> <name>666</name> <value> <string>key1 is a string</string> </value> </member> <member> <name>007</name> <value> <string>key2 is a string</string> </value> </member> </struct> </value> </param> </params> </methodResponse> Actual result: -------------- <?xml version="1.0" encoding="iso-8859-1"?> <methodResponse> <params> <param> <value> <struct> <member> <name/> <value> <string>key1 is a string</string> </value> </member> <member> <name>007</name> <value> <string>key2 is a string</string> </value> </member> </struct> </value> </param> </params> </methodResponse> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=37746&edit=1