#45895 [Opn->Csd]: Exception in set_error_handler() messes up backtrace args

From: Date: Tue, 02 Sep 2008 13:35:02 +0000
Subject: #45895 [Opn->Csd]: Exception in set_error_handler() messes up backtrace args
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-128613@lists.php.net to get a copy of this message
ID: 45895 Updated by: dmitry@php.net Reported By: jmcgraw1 at gmail dot com -Status: Open +Status: Closed Bug Type: Scripting Engine problem Operating System: CentOS PHP Version: 5.2.6 -Assigned To: +Assigned To: dmitry New Comment: The bug is already fixed in CVS HEAD and PHP_5_3, however it is not possible to fix it in PHP_5_2 branch without binary compatibility break. Previous Comments: ------------------------------------------------------------------------ [2008-08-27 13:13:14] jmcgraw1 at gmail dot com PHP 5.2.6 (cli) (built: May 8 2008 16:50:48) Output: array(3) { [0]=> array(4) { ["file"]=> string(26) "/home/jmcgraw/test_old.php" ["line"]=> int(10) ["function"]=> string(13) "handle_errors" ["args"]=> array(0) { } } [1]=> array(4) { ["file"]=> string(26) "/home/jmcgraw/test_old.php" ["line"]=> int(14) ["function"]=> string(1) "A" ["args"]=> array(1) { [0]=> string(6) "foobar" } } [2]=> array(3) { ["file"]=> string(26) "/home/jmcgraw/test_old.php" ["line"]=> int(18) ["function"]=> string(1) "B" } } PHP 5.2.7-dev (cli) (built: Aug 27 2008 12:47:06) Output: array(3) { [0]=> array(4) { ["file"]=> string(22) "/home/jmcgraw/test_new.php" ["line"]=> int(10) ["function"]=> string(13) "handle_errors" ["args"]=> array(0) { } } [1]=> array(4) { ["file"]=> string(22) "/home/jmcgraw/test_new.php" ["line"]=> int(14) ["function"]=> string(1) "A" ["args"]=> array(1) { [0]=> string(6) "foobar" } } [2]=> array(3) { ["file"]=> string(22) "/home/jmcgraw/test_new.php" ["line"]=> int(18) ["function"]=> string(1) "B" } } Result: Latest snapshot does NOT solve problem. ------------------------------------------------------------------------ [2008-08-26 22:36:18] jani@php.net Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows (zip): http://snaps.php.net/win32/php5.2-win32-latest.zip For Windows (installer): http://snaps.php.net/win32/php5.2-win32-installer-latest.msi ------------------------------------------------------------------------ [2008-08-22 21:52:57] jmcgraw1 at gmail dot com Description: ------------ Throwing an exception within set_error_handler() produces an exception which produces a messed up backtrace. Each entry within the backtrace contains the 'args' for the previous call, with the most immediate entry missing its 'args'. In the case of my example below the string 'foobar' should be in the array 'args' for the call to B(), not A(). Reproduce code: --------------- function handle_errors() { throw new ErrorException(); } set_error_handler('handle_errors', E_ALL); function A() { $foo->bar; // Purposely cause error } function B($c) { A(); } try { B('foobar'); } catch (Exception $e) { var_dump($e->getTrace()); } Expected result: ---------------- array(3) { [0]=> array(4) { ["file"]=> string(42) "/home/public/pdt/framework/html/error.php" ["line"]=> int(10) ["function"]=> string(13) "handle_errors" ["args"]=> array(0) { } } [1]=> array(4) { ["file"]=> string(42) "/home/public/pdt/framework/html/error.php" ["line"]=> int(14) ["function"]=> string(1) "A" } [2]=> array(3) { ["file"]=> string(42) "/home/public/pdt/framework/html/error.php" ["line"]=> int(18) ["function"]=> string(1) "B" ["args"]=> array(1) { [0]=> string(6) "foobar" } } } Actual result: -------------- array(3) { [0]=> array(4) { ["file"]=> string(42) "/home/public/pdt/framework/html/error.php" ["line"]=> int(10) ["function"]=> string(13) "handle_errors" ["args"]=> array(0) { } } [1]=> array(4) { ["file"]=> string(42) "/home/public/pdt/framework/html/error.php" ["line"]=> int(14) ["function"]=> string(1) "A" ["args"]=> array(1) { [0]=> string(6) "foobar" } } [2]=> array(3) { ["file"]=> string(42) "/home/public/pdt/framework/html/error.php" ["line"]=> int(18) ["function"]=> string(1) "B" } } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=45895&edit=1

« previous php.bugs (#128613) next »