]> granicus.if.org Git - php/commitdiff
Fix ** operator with references
authorNikita Popov <nikic@php.net>
Mon, 26 May 2014 16:17:55 +0000 (18:17 +0200)
committerNikita Popov <nikic@php.net>
Mon, 26 May 2014 16:17:55 +0000 (18:17 +0200)
Zend/tests/pow_ref.phpt [new file with mode: 0644]
Zend/zend_operators.c

diff --git a/Zend/tests/pow_ref.phpt b/Zend/tests/pow_ref.phpt
new file mode 100644 (file)
index 0000000..488e1d2
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+Use power operator on reference
+--FILE--
+<?php
+
+$a = 2;
+$b = 3;
+
+$ref =& $b;
+
+$a **= $b;
+
+var_dump($a);
+
+?>
+--EXPECT--
+int(8)
index 163a4930602c509872199c73b2e464dcab75d82d..72ac9fca1ff97137ad4445a5c52da282fd40353e 100644 (file)
@@ -1137,7 +1137,11 @@ ZEND_API int pow_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ *
                                return SUCCESS;
 
                        default:
-                               if (!converted) {
+                               if (Z_ISREF_P(op1)) {
+                                       op1 = Z_REFVAL_P(op1);
+                               } else if (Z_ISREF_P(op2)) {
+                                       op2 = Z_REFVAL_P(op2);
+                               } else if (!converted) {
                                        ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_POW);
 
                                        if (Z_TYPE_P(op1) == IS_ARRAY) {