Bug #79827 [Dup]: debug_backtrace() does not return passed args
| From: | nikic@php.net | Date: | Fri, 10 Jul 2020 19:09:19 +0000 |
| Subject: | Bug #79827 [Dup]: debug_backtrace() does not return passed args | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-227944@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=79827&edit=1
ID: 79827
Updated by: nikic@php.net
Reported by: michael dot vorisek at email dot cz
Summary: debug_backtrace() does not return passed args
Status: Duplicate
Type: Bug
Package: Scripting Engine problem
Operating System: any
PHP Version: 7.4.8
Block user comment: N
Private report: N
New Comment:
As I have already indicated with the link above, this is an intentional behavior change in PHP 7.0,
which is mentioned in https://www.php.net/manual/en/migration70.incompatible.php#migration70.incompatible.other.func-parameter-modified.
It has nothing to do with by-value / by-reference passing, it is just a question of whether the
original or current values of parameter variables are provided. Not providing the original values
removes the need to copy the original values for every call. Extensions like xdebug remember
original values, with the associated performance cost.
Previous Comments:
------------------------------------------------------------------------
[2020-07-10 19:00:31] michael dot vorisek at email dot cz
This actually violates the language definition, as
$filename = realpath($filename);
is not an assigment by reference!
------------------------------------------------------------------------
[2020-07-10 16:09:39] michael dot vorisek at email dot cz
Any functions that rely on backtrace are currently affected.
Is the penalty of copy on write really that high and is there a will to fix this issue?
------------------------------------------------------------------------
[2020-07-10 14:10:35] nikic@php.net
Duplicate of bug #71547.
------------------------------------------------------------------------
[2020-07-10 14:08:03] michael dot vorisek at email dot cz
Description:
------------
debug_backtrace() currently returns args by reference, ie. the returned args variables, not the
passed values.
Very hard to debug, backtrace should always return the passed data.
Test script:
---------------
function x(string $filename) {
$filename = realpath($filename);
$trace = debug_backtrace();
var_dump($trace[0]['args']);
}
x('non_existing_file.txt');
Expected result:
----------------
array(1) {
[0]=>
bool(false)
}
Actual result:
--------------
array(1) {
[0]=>
string(21) "non_existing_file.txt"
}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=79827&edit=1