From d245c52e0cc0bc984747833c8bdc53840453ffca Mon Sep 17 00:00:00 2001 From: Zeev Suraski Date: Wed, 2 Jul 2003 15:06:10 +0000 Subject: [PATCH] Fix for bug #22367. Heads up - this will break syntactical compatiblity, return($foo) will not work with functions that return references - return $foo should be used instead. It never worked well before, and caused all sorts of odd bugs. It *might* be possible to support this specifically, albeit unlikely --- Zend/zend_execute.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 5b6c38994e1..e830ea58f41 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -2748,6 +2748,11 @@ int zend_return_handler(ZEND_OPCODE_HANDLER_ARGS) zend_error(E_ERROR, "Cannot return overloaded elements or string offsets by reference"); } + if (!(*retval_ptr_ptr)->is_ref + && EX_T(EX(opline)->op1.u.var).var.ptr_ptr == &EX_T(EX(opline)->op1.u.var).var.ptr) { + zend_error(E_ERROR, "Only variables or references can be returned by reference"); + } + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr); (*retval_ptr_ptr)->refcount++;