tony2001 Wed Oct 11 15:52:56 2006 UTC Added files: (Branch: PHP_5_2) /php-src/ext/reflection/tests 008.phpt
Modified files: /php-src NEWS /php-src/ext/reflection php_reflection.c Log: MFH: fix #39125 (Memleak when reflecting non-existing class/method) http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.301&r2=1.2027.2.547.2.302&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.301 php-src/NEWS:1.2027.2.547.2.302 --- php-src/NEWS:1.2027.2.547.2.301 Wed Oct 11 03:23:51 2006 +++ php-src/NEWS Wed Oct 11 15:52:56 2006 @@ -4,9 +4,10 @@ - Fixed bug #38458, PECL bug #8944, PECL bug #7775 (error retrieving columns after long/text columns with PDO_ODBC). (Wez) - Fixed PECL bug #8816 (issue in php_oci_statement_fetch with more than one + piecewise column) (jeff at badtz-maru dot com, Tony) - Fixed PECL bug #7755 (error selecting DOUBLE fields with PDO_ODBC). ("slaws", Wez) - piecewise column) (jeff at badtz-maru dot com, Tony) +- Fixed bug #39125 (Memleak when reflecting non-existing class/method). (Tony) - Fixed bug #39067 (getDeclaringClass() and private properties). (Tony) - Fixed bug #39034 (curl_exec() with return transfer returns TRUE on empty files). (Ilia) http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/php_reflection.c?r1=1.164.2.33.2.29&r2=1.164.2.33.2.30&diff_format=u Index: php-src/ext/reflection/php_reflection.c diff -u php-src/ext/reflection/php_reflection.c:1.164.2.33.2.29 php-src/ext/reflection/php_reflection.c:1.164.2.33.2.30 --- php-src/ext/reflection/php_reflection.c:1.164.2.33.2.29 Fri Oct 6 18:03:19 2006 +++ php-src/ext/reflection/php_reflection.c Wed Oct 11 15:52:56 2006 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_reflection.c,v 1.164.2.33.2.29 2006/10/06 18:03:19 tony2001 Exp $ */ +/* $Id: php_reflection.c,v 1.164.2.33.2.30 2006/10/11 15:52:56 tony2001 Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -2165,6 +2165,7 @@ return; } if ((tmp = strstr(name_str, "::")) == NULL) { + zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Invalid method name %s", name_str); return; } classname = &ztmp; @@ -2186,6 +2187,9 @@ if (zend_lookup_class(Z_STRVAL_P(classname), Z_STRLEN_P(classname), &pce TSRMLS_CC) == FAILURE) { zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Class %s does not exist", Z_STRVAL_P(classname)); + if (classname == &ztmp) { + zval_dtor(&ztmp); + } return; } ce = *pce; @@ -2196,6 +2200,9 @@ break; default: + if (classname == &ztmp) { + zval_dtor(&ztmp); + } _DO_THROW("The parameter class is expected to be either a string or an object"); /* returns out of this function */ } @@ -4844,7 +4851,7 @@ php_info_print_table_start(); php_info_print_table_header(2, "Reflection", "enabled"); - php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.164.2.33.2.29 2006/10/06 18:03:19 tony2001 Exp $"); + php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.164.2.33.2.30 2006/10/11 15:52:56 tony2001 Exp $"); php_info_print_table_end(); } /* }}} */ http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/tests/008.phpt?view=markup&rev=1.1 Index: php-src/ext/reflection/tests/008.phpt +++ php-src/ext/reflection/tests/008.phpt --TEST-- ReflectionProperty::getDefaultValue() --FILE-- <?php class root { public $rPub = "rPub"; public $xPub = "xPub"; protected $rPro = "rPro"; protected $xPro = "xPub"; private $rPri = "rPri"; private $xPri = "xPri"; static public $stat = "rStat"; } class derived extends root { public $dPub = "dPub"; public $xPub = "nPub"; protected $dPro = "dPro"; protected $xPro = "nPub"; private $dPri = "dPri"; private $xPri = "nPri"; } function show_prop($p) { echo "{$p->class}::{$p->name} = " . $p->getDefaultValue() . "\n"; } function show_class($c) { echo "===$c===\n"; $r = new ReflectionClass($c); foreach($r->getProperties() as $p) { show_prop($p); } } show_class("root"); show_class("derived"); ?> ===DONE=== <?php exit(0); ?> --EXPECTF-- ===root=== root::rPub = rPub root::xPub = xPub root::rPro = rPro root::xPro = xPub root::rPri = rPri root::xPri = xPri root::stat = rStat ===derived=== derived::dPub = dPub derived::xPub = nPub derived::dPro = dPro derived::xPro = nPub derived::dPri = dPri derived::xPri = nPri derived::rPub = rPub derived::rPro = rPro derived::stat = rStat ===DONE=== -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php