summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2005-06-22 08:31:19 +0000
committerDmitry Stogov <dmitry@php.net>2005-06-22 08:31:19 +0000
commit21bdd33fffed2bc4762359ff7b7da50154f0e104 (patch)
treec64cb8e5a4f9f6b6c9031d7bb9999cd3348834d6 /Zend/zend_execute.c
parentb857a3579f3faa29b8942466285ac9dcf52ffcd0 (diff)
downloadphp-git-21bdd33fffed2bc4762359ff7b7da50154f0e104.tar.gz
Fixed bug #33257 (array_splice() inconsistent when passed function instead of variable)
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r--Zend/zend_execute.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 514f47d167..711f89dd57 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -3037,7 +3037,10 @@ int zend_send_var_no_ref_handler(ZEND_OPCODE_HANDLER_ARGS)
} else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
return zend_send_by_var_helper(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
}
- {
+ if ((opline->extended_value & ZEND_ARG_SEND_FUNCTION) &&
+ !EX_T(opline->op1.u.var).var.fcall_returned_reference) {
+ zend_error(E_ERROR, "Only variables can be passed by reference");
+ } else {
zval *varptr;
varptr = get_zval_ptr(&opline->op1, EX(Ts), &EG(free_op1), BP_VAR_R);