summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2014-05-26 18:17:55 +0200
committerNikita Popov <nikic@php.net>2014-05-26 18:17:55 +0200
commit4ee14c6f8dd7324d9634d11a1f665cf6065e588a (patch)
tree974a5c23f23e15520156f3fb9e53c2310c31b246
parentff72c7bfd7b018c6b82ed6c97e1a8ac6ba6eebba (diff)
downloadphp-git-4ee14c6f8dd7324d9634d11a1f665cf6065e588a.tar.gz
Fix ** operator with references
-rw-r--r--Zend/tests/pow_ref.phpt17
-rw-r--r--Zend/zend_operators.c6
2 files changed, 22 insertions, 1 deletions
diff --git a/Zend/tests/pow_ref.phpt b/Zend/tests/pow_ref.phpt
new file mode 100644
index 0000000000..488e1d2d89
--- /dev/null
+++ b/Zend/tests/pow_ref.phpt
@@ -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)
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index 163a493060..72ac9fca1f 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -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) {