]> granicus.if.org Git - php/commitdiff
MFH: fix #38431 (xmlrpc_get_type() crashes PHP on objects)
authorAntony Dovgal <tony2001@php.net>
Fri, 11 Aug 2006 17:43:04 +0000 (17:43 +0000)
committerAntony Dovgal <tony2001@php.net>
Fri, 11 Aug 2006 17:43:04 +0000 (17:43 +0000)
NEWS
ext/xmlrpc/tests/bug38431.phpt [new file with mode: 0644]
ext/xmlrpc/xmlrpc-epi-php.c

diff --git a/NEWS b/NEWS
index 9fe70358a171da38071557243ad304a67b89fdfd..37ff4420e0db48899740780f2b6e6e3eea20aacc 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -37,6 +37,7 @@ PHP                                                                        NEWS
 - Fixed phpinfo() cutoff of variables at \0. (Ilia)
 - Fixed a bug in the filter extension that prevented magic_quotes_gpc from
   being applied when RAW filter is used. (Ilia)
+- Fixed bug #38431 (xmlrpc_get_type() crashes PHP on objects). (Tony)
 - Fixed bug #38394 (PDO fails to recover from failed prepared statement
   execution). (Ilia)
 - Fixed bug #38377 (session_destroy() gives warning after
diff --git a/ext/xmlrpc/tests/bug38431.phpt b/ext/xmlrpc/tests/bug38431.phpt
new file mode 100644 (file)
index 0000000..288fe10
--- /dev/null
@@ -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
index 8b6f963f5d7574a45100fe62dea682a574ccd583..69fe7534e9f93ef77b674cd5e4371f9edf085f3a 100644 (file)
@@ -1468,7 +1468,7 @@ PHP_FUNCTION(xmlrpc_get_type)
 
        type = get_zval_xmlrpc_type(*arg, 0);
        if (type == xmlrpc_vector) {
-               vtype = determine_vector_type(Z_ARRVAL_PP(arg));
+               vtype = determine_vector_type((Z_TYPE_PP(arg) == IS_OBJECT) ? Z_OBJPROP_PP(arg) : Z_ARRVAL_PP(arg));
        }
    
        RETURN_STRING((char*) xmlrpc_type_as_str(type, vtype), 1);