Skip to content

Commit 5259801

Browse files
committed
Fix possible use of unitialized variable
1 parent 2595ed1 commit 5259801

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

Zend/zend_builtin_functions.c

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,7 +1559,8 @@ static void debug_backtrace_get_args(zend_execute_data *call, zval *arg_array) /
15591559
*/
15601560
while (i < first_extra_arg) {
15611561
zend_string *arg_name = call->func->op_array.vars[i];
1562-
zval *arg = zend_hash_find_ex_ind(call->symbol_table, arg_name, 1);
1562+
zval arg;
1563+
zval *old_arg = zend_hash_find_ex_ind(call->symbol_table, arg_name, 1);
15631564
zend_attribute *attribute = zend_get_parameter_attribute_str(
15641565
call->func->op_array.attributes,
15651566
"sensitiveparameter",
@@ -1574,28 +1575,29 @@ static void debug_backtrace_get_args(zend_execute_data *call, zval *arg_array) /
15741575

15751576
}
15761577

1577-
if (arg) {
1578-
ZVAL_DEREF(arg);
1579-
Z_TRY_ADDREF_P(arg);
1578+
if (old_arg) {
1579+
ZVAL_DEREF(old_arg);
1580+
Z_TRY_ADDREF_P(old_arg);
1581+
arg = *old_arg;
15801582
} else {
1581-
ZVAL_NULL(arg);
1583+
ZVAL_NULL(&arg);
15821584
}
15831585

15841586
if (last_was_sensitive) {
15851587
zval new_arg;
15861588
object_init_ex(&new_arg, zend_ce_sensitive_parameter_value);
1587-
zend_call_method_with_1_params(Z_OBJ_P(&new_arg), zend_ce_sensitive_parameter_value, &zend_ce_sensitive_parameter_value->constructor, "__construct", NULL, arg);
1589+
zend_call_method_with_1_params(Z_OBJ_P(&new_arg), zend_ce_sensitive_parameter_value, &zend_ce_sensitive_parameter_value->constructor, "__construct", NULL, &arg);
15881590
ZEND_HASH_FILL_SET(&new_arg);
15891591
} else {
1590-
ZEND_HASH_FILL_SET(arg);
1592+
ZEND_HASH_FILL_SET(&arg);
15911593
}
15921594

15931595
ZEND_HASH_FILL_NEXT();
15941596
i++;
15951597
}
15961598
} else {
15971599
while (i < first_extra_arg) {
1598-
zval *arg;
1600+
zval arg;
15991601

16001602
zend_attribute *attribute = zend_get_parameter_attribute_str(
16011603
call->func->op_array.attributes,
@@ -1611,20 +1613,20 @@ static void debug_backtrace_get_args(zend_execute_data *call, zval *arg_array) /
16111613
}
16121614

16131615
if (EXPECTED(Z_TYPE_INFO_P(p) != IS_UNDEF)) {
1614-
arg = p;
1615-
ZVAL_DEREF(arg);
1616-
Z_TRY_ADDREF_P(arg);
1616+
ZVAL_DEREF(p);
1617+
Z_TRY_ADDREF_P(p);
1618+
arg = *p;
16171619
} else {
1618-
ZVAL_NULL(arg);
1620+
ZVAL_NULL(&arg);
16191621
}
16201622

16211623
if (last_was_sensitive) {
16221624
zval new_arg;
16231625
object_init_ex(&new_arg, zend_ce_sensitive_parameter_value);
1624-
zend_call_method_with_1_params(Z_OBJ_P(&new_arg), zend_ce_sensitive_parameter_value, &zend_ce_sensitive_parameter_value->constructor, "__construct", NULL, arg);
1626+
zend_call_method_with_1_params(Z_OBJ_P(&new_arg), zend_ce_sensitive_parameter_value, &zend_ce_sensitive_parameter_value->constructor, "__construct", NULL, &arg);
16251627
ZEND_HASH_FILL_SET(&new_arg);
16261628
} else {
1627-
ZEND_HASH_FILL_SET(arg);
1629+
ZEND_HASH_FILL_SET(&arg);
16281630
}
16291631

16301632
ZEND_HASH_FILL_NEXT();
@@ -1636,7 +1638,7 @@ static void debug_backtrace_get_args(zend_execute_data *call, zval *arg_array) /
16361638
}
16371639

16381640
while (i < num_args) {
1639-
zval *arg;
1641+
zval arg;
16401642

16411643
zend_attribute *attribute = zend_get_parameter_attribute_str(
16421644
call->func->op_array.attributes,
@@ -1657,20 +1659,20 @@ static void debug_backtrace_get_args(zend_execute_data *call, zval *arg_array) /
16571659

16581660

16591661
if (EXPECTED(Z_TYPE_INFO_P(p) != IS_UNDEF)) {
1660-
arg = p;
1661-
ZVAL_DEREF(arg);
1662-
Z_TRY_ADDREF_P(arg);
1662+
ZVAL_DEREF(p);
1663+
Z_TRY_ADDREF_P(p);
1664+
arg = *p;
16631665
} else {
1664-
ZVAL_NULL(arg);
1666+
ZVAL_NULL(&arg);
16651667
}
16661668

16671669
if (last_was_sensitive) {
16681670
zval new_arg;
16691671
object_init_ex(&new_arg, zend_ce_sensitive_parameter_value);
1670-
zend_call_method_with_1_params(Z_OBJ_P(&new_arg), zend_ce_sensitive_parameter_value, &zend_ce_sensitive_parameter_value->constructor, "__construct", NULL, arg);
1672+
zend_call_method_with_1_params(Z_OBJ_P(&new_arg), zend_ce_sensitive_parameter_value, &zend_ce_sensitive_parameter_value->constructor, "__construct", NULL, &arg);
16711673
ZEND_HASH_FILL_SET(&new_arg);
16721674
} else {
1673-
ZEND_HASH_FILL_SET(arg);
1675+
ZEND_HASH_FILL_SET(&arg);
16741676
}
16751677

16761678
ZEND_HASH_FILL_NEXT();

0 commit comments

Comments
 (0)