ID:               44428
 Comment by:       php at xuefeng dot org
 Reported By:      thuejk at gmail dot com
 Status:           Open
 Bug Type:         Scripting Engine problem
 Operating System: *
 PHP Version:      5.2.5
 New Comment:

Index: zend_builtin_functions.c
===================================================================
RCS file: /repository/ZendEngine2/zend_builtin_functions.c,v
retrieving revision 1.277.2.12.2.25.2.14
diff -u -r1.277.2.12.2.25.2.14 zend_builtin_functions.c
--- zend_builtin_functions.c    10 Mar 2008 22:02:41
-0000   1.277.2.12.2.25.2.14
+++ zend_builtin_functions.c    30 Mar 2008 17:54:29 -0000
@@ -2000,6 +2000,19 @@
        } else if (ptr->function_state.function->common.scope) {
                add_assoc_string_ex(stack_frame, "class", sizeof("class"),
ptr->function_state.function->common.scope->name, 1);
                add_assoc_string_ex(stack_frame, "type", sizeof("type"), "::", 
1);
+
+       } else if (ptr->function_state.function->common.type ==
ZEND_USER_FUNCTION) {
+
+               if (ptr->function_state.function->op_array.filename) {
+                       add_assoc_string_ex(stack_frame, "file", 
sizeof("file"), 
+                                                               
ptr->function_state.function->op_array.filename, 1
+                       );
+               }
+               if (ptr->function_state.function->op_array.opcodes) {
+                       add_assoc_long_ex(stack_frame, "line", sizeof("line"), 
+                                                               
ptr->function_state.function->op_array.opcodes->lineno
+                       );
+               }
        }
 
        if ((! ptr->opline) || ((ptr->opline->opcode ==
ZEND_DO_FCALL_BY_NAME) || (ptr->opline->opcode == ZEND_DO_FCALL))) {


Previous Comments:
------------------------------------------------------------------------

[2008-03-13 12:03:59] thuejk at gmail dot com

Description:
------------
In all cases (but the one below one), "file" and "line" indexes are
defined in each frame of the output of debug_backtrace.

But when using call_user_function() or call_user_function_array, "file"
and "line" is not defined for one of the frames.

It would be nice if I could count on file and line always being defined
when using the output of debug_backtrace, thereby avoiding code for
special cases.

For the missing file and line in the example code below, when calling
f() inside call_user_function(), I suggest using the file and line of
the call_user_function() call.

See also bug 38047 and 24405.

Reproduce code:
---------------
<?php
error_reporting(E_ALL | E_STRICT);


function f() {
  $a = $b;
  var_dump(debug_backtrace());
}

//The backtrace generated here will not have file and line defined
call_user_func("f", Array());

//The backtrace generated here will have file and line defined.
f();

?>

Expected result:
----------------
The frame with index 0 of the first debug_backtrace_call should contain
indexes "file" => "test.php" and "line" => 6

Actual result:
--------------
array(2) {
  [0]=>
  array(2) {
    ["function"]=>
    string(1) "f"
    ["args"]=>
    array(1) {
      [0]=>
      &array(0) {
      }
    }
  }
  [1]=>
  array(4) {
    ["file"]=>
    string(18) "/home/tjk/test.php"
    ["line"]=>
    int(6)
    ["function"]=>
    string(14) "call_user_func"
    ["args"]=>
    array(2) {
      [0]=>
      &string(1) "f"
      [1]=>
      &array(0) {
      }
    }
  }
}
array(1) {
  [0]=>
  array(4) {
    ["file"]=>
    string(18) "/home/tjk/test.php"
    ["line"]=>
    int(8)
    ["function"]=>
    string(1) "f"
    ["args"]=>
    array(0) {
    }
  }
}



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=44428&edit=1

Reply via email to