summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2015-01-07 23:21:12 +0100
committerNikita Popov <nikic@php.net>2015-01-07 23:21:12 +0100
commit3e826c97366044991ae3c892e00d607449f69d66 (patch)
tree5c51af11da2f842023bd613fd95956e1930663c4
parent98c2ceacf81116065028cb18a918adafe7a38ee2 (diff)
downloadphp-git-3e826c97366044991ae3c892e00d607449f69d66.tar.gz
Fix the same leak with %=
-rw-r--r--Zend/tests/compound_assign_with_numeric_strings.phpt (renamed from Zend/tests/compound_shift_string_error.phpt)12
-rw-r--r--Zend/zend_operators.c7
2 files changed, 15 insertions, 4 deletions
diff --git a/Zend/tests/compound_shift_string_error.phpt b/Zend/tests/compound_assign_with_numeric_strings.phpt
index 7f01962451..803650cb02 100644
--- a/Zend/tests/compound_shift_string_error.phpt
+++ b/Zend/tests/compound_assign_with_numeric_strings.phpt
@@ -19,7 +19,13 @@ $n = "-1";
$n >>= $n;
var_dump($n);
-?>
+$n = "0";
+$n %= $n;
+var_dump($n);
+
+$n = "-1";
+$n %= $n;
+var_dump($n);
--EXPECTF--
int(0)
@@ -29,3 +35,7 @@ int(0)
Warning: Bit shift by negative number in %s on line %d
bool(false)
+
+Warning: Division by zero in %s on line %d
+bool(false)
+int(0)
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index 31d92c4711..0b1b9f2188 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -1143,6 +1143,10 @@ ZEND_API int mod_function(zval *result, zval *op1, zval *op2) /* {{{ */
zend_long op1_lval, op2_lval;
convert_op1_op2_long(op1, op1_lval, op2, op2_lval, ZEND_MOD, mod_function);
+
+ if (op1 == result) {
+ zval_dtor(result);
+ }
if (op2_lval == 0) {
zend_error(E_WARNING, "Division by zero");
@@ -1156,9 +1160,6 @@ ZEND_API int mod_function(zval *result, zval *op1, zval *op2) /* {{{ */
return SUCCESS;
}
- if (op1 == result) {
- zval_dtor(result);
- }
ZVAL_LONG(result, op1_lval % op2_lval);
return SUCCESS;
}