Skip to content

Commit fb149f6

Browse files
committed
Fix behaviour for division by zero
1 parent 4537783 commit fb149f6

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

Zend/zend_compile.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8730,7 +8730,7 @@ ZEND_API bool zend_binary_op_produces_error(uint32_t opcode, const zval *op1, co
87308730
/* Division by zero throws an error. */
87318731
return 1;
87328732
}
8733-
if ((opcode == ZEND_POW) && zval_get_long(op1) == 0 && zval_get_long(op2) <= 0) {
8733+
if ((opcode == ZEND_POW) && zval_get_long(op1) == 0 && zval_get_long(op2) < 0) {
87348734
/* 0 ** (<=0) throws a division by zero error. */
87358735
zend_error(E_DEPRECATED, "Power of base 0 and negative exponent is deprecated");
87368736
}

Zend/zend_operators.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1294,7 +1294,7 @@ static void ZEND_COLD zend_power_base_0_exponent_lt_eq_0_error(void)
12941294

12951295
static zend_result safe_pow(double *result, double base, double exponent)
12961296
{
1297-
if (base == 0.0 && exponent <= 0.0) {
1297+
if (base == 0.0 && exponent < 0.0) {
12981298
zend_power_base_0_exponent_lt_eq_0_error();
12991299
}
13001300

ext/standard/tests/math/pow.phpt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,6 @@ bool(true)
190190

191191
Deprecated: Power of base 0 and negative exponent is deprecated in %s on line %d
192192
bool(true)
193-
194-
Deprecated: Power of base 0 and negative exponent is deprecated in %s on line %d
195193
bool(true)
196194
bool(true)
197195
bool(true)
@@ -228,8 +226,6 @@ bool(true)
228226

229227
Deprecated: Power of base 0 and negative exponent is deprecated in %s on line %d
230228
bool(true)
231-
232-
Deprecated: Power of base 0 and negative exponent is deprecated in %s on line %d
233229
bool(true)
234230
bool(true)
235231
bool(true)
@@ -259,8 +255,6 @@ bool(true)
259255

260256
Deprecated: Power of base 0 and negative exponent is deprecated in %s on line %d
261257
bool(true)
262-
263-
Deprecated: Power of base 0 and negative exponent is deprecated in %s on line %d
264258
bool(true)
265259
bool(true)
266260
bool(true)

ext/standard/tests/math/pow_divisionbyzero.phpt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,27 @@ pow() division by zero error
55

66
var_dump(pow(0, -0));
77
var_dump(pow(0.0, -0));
8+
var_dump(pow(0, -0.0));
9+
var_dump(pow(0.0, -0.0));
810
var_dump(pow(0, -0.01));
911
var_dump(pow(0.0, -0.01));
1012
var_dump(pow(0, -1));
1113
var_dump(pow(0.0, -1));
14+
var_dump(pow(0, -1.1));
15+
var_dump(pow(0.0, -1.1));
1216

1317
?>
1418
--EXPECTF--
1519
int(1)
16-
int(1)
20+
float(1)
21+
float(1)
22+
float(1)
23+
24+
Deprecated: Power of base 0 and negative exponent is deprecated in %s on line %d
25+
float(INF)
26+
27+
Deprecated: Power of base 0 and negative exponent is deprecated in %s on line %d
28+
float(INF)
1729

1830
Deprecated: Power of base 0 and negative exponent is deprecated in %s on line %d
1931
float(INF)

0 commit comments

Comments
 (0)