Skip to content

Commit acba295

Browse files
committed
Fix info vars with refs/indirects
1 parent 22c7c11 commit acba295

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

sapi/phpdbg/phpdbg_info.c

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,9 @@ PHPDBG_INFO(constants) /* {{{ */
153153
return SUCCESS;
154154
} /* }}} */
155155

156-
static int phpdbg_arm_auto_global(zend_auto_global *auto_global) {
156+
static int phpdbg_arm_auto_global(zval *ptrzv) {
157+
zend_auto_global *auto_global = Z_PTR_P(ptrzv);
158+
157159
if (auto_global->armed) {
158160
if (PHPDBG_G(flags) & PHPDBG_IN_SIGNAL_HANDLER) {
159161
phpdbg_notice("variableinfo", "unreachable=\"%.*s\"", "Cannot show information about superglobal variable %.*s", ZSTR_LEN(auto_global->name), ZSTR_VAL(auto_global->name));
@@ -204,9 +206,9 @@ static int phpdbg_print_symbols(zend_bool show_globals) {
204206

205207
if (ops->function_name) {
206208
if (ops->scope) {
207-
phpdbg_notice("variableinfo", "method=\"%s::%s\" num=\"%d\"", "Variables in %s::%s() (%d)", ops->scope->name, ops->function_name, zend_hash_num_elements(&vars));
209+
phpdbg_notice("variableinfo", "method=\"%s::%s\" num=\"%d\"", "Variables in %s::%s() (%d)", ops->scope->name->val, ops->function_name->val, zend_hash_num_elements(&vars));
208210
} else {
209-
phpdbg_notice("variableinfo", "function=\"%s\" num=\"%d\"", "Variables in %s() (%d)", ops->function_name, zend_hash_num_elements(&vars));
211+
phpdbg_notice("variableinfo", "function=\"%s\" num=\"%d\"", "Variables in %s() (%d)", ZSTR_VAL(ops->function_name), zend_hash_num_elements(&vars));
210212
}
211213
} else {
212214
if (ops->filename) {
@@ -221,8 +223,9 @@ static int phpdbg_print_symbols(zend_bool show_globals) {
221223
phpdbg_out("Address Refs Type Variable\n");
222224
ZEND_HASH_FOREACH_STR_KEY_VAL(&vars, var, data) {
223225
phpdbg_try_access {
224-
#define VARIABLEINFO(attrs, msg, ...) phpdbg_writeln("variable", "address=\"%p\" refcount=\"%d\" type=\"%s\" refstatus=\"%s\" name=\"%.*s\" " attrs, "%-18p %-7d %-9s %s$%.*s" msg, data, Z_REFCOUNT_P(data), zend_zval_type_name(data), Z_ISREF_P(data) ? "&": "", ZSTR_LEN(var), ZSTR_VAL(var), ##__VA_ARGS__)
225-
226+
const char *isref = "";
227+
#define VARIABLEINFO(attrs, msg, ...) phpdbg_writeln("variable", "address=\"%p\" refcount=\"%d\" type=\"%s\" refstatus=\"%s\" name=\"%.*s\" " attrs, "%-18p %-7d %-9s %s$%.*s" msg, data, Z_REFCOUNTED_P(data) ? Z_REFCOUNT_P(data) : 1, zend_zval_type_name(data), isref, ZSTR_LEN(var), ZSTR_VAL(var), ##__VA_ARGS__)
228+
retry_switch:
226229
switch (Z_TYPE_P(data)) {
227230
case IS_RESOURCE:
228231
phpdbg_try_access {
@@ -258,6 +261,13 @@ static int phpdbg_print_symbols(zend_bool show_globals) {
258261
case IS_DOUBLE:
259262
VARIABLEINFO("value=\"%lf\"", "\ndouble (%lf)", Z_DVAL_P(data));
260263
break;
264+
case IS_REFERENCE:
265+
isref = "&";
266+
data = Z_REFVAL_P(data);
267+
goto retry_switch;
268+
case IS_INDIRECT:
269+
data = Z_INDIRECT_P(data);
270+
goto retry_switch;
261271
default:
262272
VARIABLEINFO("", "");
263273
}
@@ -290,13 +300,13 @@ PHPDBG_INFO(literal) /* {{{ */
290300
zend_bool in_executor = PHPDBG_G(in_execution) && EG(current_execute_data) && EG(current_execute_data)->func;
291301
if (in_executor || PHPDBG_G(ops)) {
292302
zend_op_array *ops = in_executor ? &EG(current_execute_data)->func->op_array : PHPDBG_G(ops);
293-
int literal = 0, count = ops->last_literal-1;
303+
int literal = 0, count = ops->last_literal - 1;
294304

295305
if (ops->function_name) {
296306
if (ops->scope) {
297-
phpdbg_notice("literalinfo", "method=\"%s::%s\" num=\"%d\"", "Literal Constants in %s::%s() (%d)", ops->scope->name, ops->function_name, count);
307+
phpdbg_notice("literalinfo", "method=\"%s::%s\" num=\"%d\"", "Literal Constants in %s::%s() (%d)", ops->scope->name->val, ops->function_name->val, count);
298308
} else {
299-
phpdbg_notice("literalinfo", "function=\"%s\" num=\"%d\"", "Literal Constants in %s() (%d)", ops->function_name, count);
309+
phpdbg_notice("literalinfo", "function=\"%s\" num=\"%d\"", "Literal Constants in %s() (%d)", ops->function_name->val, count);
300310
}
301311
} else {
302312
if (ops->filename) {

0 commit comments

Comments
 (0)