diff options
| author | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:35:28 -0400 |
|---|---|---|
| committer | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:35:28 -0400 |
| commit | ba50031707469046407a35b77a3cd81351e951b3 (patch) | |
| tree | 5c03e723bdbfabae09d41a3ab1253dff41eeed4a /ext/xmlrpc | |
| parent | 0a36161e13484a99ccf69bb38f206462d27cc6d6 (diff) | |
| download | php-ba50031707469046407a35b77a3cd81351e951b3.tar.gz | |
Imported Upstream version 5.1.5upstream/5.1.5
Diffstat (limited to 'ext/xmlrpc')
| -rw-r--r-- | ext/xmlrpc/tests/bug37057.phpt | 62 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug38431.phpt | 25 | ||||
| -rw-r--r-- | ext/xmlrpc/xmlrpc-epi-php.c | 10 |
3 files changed, 95 insertions, 2 deletions
diff --git a/ext/xmlrpc/tests/bug37057.phpt b/ext/xmlrpc/tests/bug37057.phpt new file mode 100644 index 000000000..0764d8af6 --- /dev/null +++ b/ext/xmlrpc/tests/bug37057.phpt @@ -0,0 +1,62 @@ +--TEST-- +Bug #37057 (xmlrpc_decode() may produce arrays with numeric string keys which are unaccessible) +--FILE-- +<?php +$response='<?xml version="1.0"?> +<methodResponse> + <params> + <param> + <value> + <struct> + <member> + <name>50</name> + <value><string>0.29</string></value> + </member> + </struct> + </value> + </param> + </params> +</methodResponse>'; + +$retval=xmlrpc_decode($response); +var_dump($retval); +var_dump($retval["50"]); +var_dump($retval[50]); + +$response='<?xml version="1.0"?> +<methodResponse> + <params> + <param> + <value> + <struct> + <member> + <name>0</name> + <value><string>0.29</string></value> + </member> + </struct> + </value> + </param> + </params> +</methodResponse>'; + +$retval=xmlrpc_decode($response); +var_dump($retval); +var_dump($retval["0"]); +var_dump($retval[0]); + +echo "Done\n"; +?> +--EXPECT-- +array(1) { + [50]=> + string(4) "0.29" +} +string(4) "0.29" +string(4) "0.29" +array(1) { + [0]=> + string(4) "0.29" +} +string(4) "0.29" +string(4) "0.29" +Done diff --git a/ext/xmlrpc/tests/bug38431.phpt b/ext/xmlrpc/tests/bug38431.phpt new file mode 100644 index 000000000..288fe1041 --- /dev/null +++ b/ext/xmlrpc/tests/bug38431.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #38431 (xmlrpc_get_type() crashes PHP on objects) +--SKIPIF-- +<?php if (!extension_loaded("xmlrpc")) print "skip"; ?> +--FILE-- +<?php + +var_dump(xmlrpc_get_type(new stdclass)); +var_dump(xmlrpc_get_type(array())); +$var = array(1,2,3); +var_dump(xmlrpc_get_type($var)); +$var = array("test"=>1,2,3); +var_dump(xmlrpc_get_type($var)); +$var = array("test"=>1,"test2"=>2); +var_dump(xmlrpc_get_type($var)); + +echo "Done\n"; +?> +--EXPECTF-- +string(5) "array" +string(5) "array" +string(5) "array" +string(5) "mixed" +string(6) "struct" +Done diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c index 6af8009de..9a043e59e 100644 --- a/ext/xmlrpc/xmlrpc-epi-php.c +++ b/ext/xmlrpc/xmlrpc-epi-php.c @@ -51,7 +51,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: xmlrpc-epi-php.c,v 1.39.2.4 2006/01/01 12:50:16 sniper Exp $ */ +/* $Id: xmlrpc-epi-php.c,v 1.39.2.7 2006/08/11 19:16:29 tony2001 Exp $ */ /********************************************************************** * BUGS: * @@ -300,7 +300,13 @@ static int add_zval(zval* list, const char* id, zval** val) { if (list && val) { if (id) { - return zend_hash_update(Z_ARRVAL_P(list), (char*) id, strlen(id) + 1, (void *) val, sizeof(zval **), NULL); + int id_len = strlen(id); + if (!(id_len > 1 && id[0] == '0') && is_numeric_string((char *)id, id_len, NULL, NULL, 0) == IS_LONG) { + long index = strtol(id, NULL, 0); + return zend_hash_index_update(Z_ARRVAL_P(list), index, (void *) val, sizeof(zval **), NULL); + } else { + return zend_hash_update(Z_ARRVAL_P(list), (char*) id, strlen(id) + 1, (void *) val, sizeof(zval **), NULL); + } } else { return zend_hash_next_index_insert(Z_ARRVAL_P(list), (void *) val, sizeof(zval **), NULL); } |
