com php-src: Remove warning upon division by zero: Zend/tests/bug69957.phpt Zend/zend_operators.c tests/run-test/test005.phpt
tests/run-test/test006.phpt tests/run-test/test0 08a.phpt

From: Date: Thu, 02 Jul 2015 00:20:58 +0000
Subject: com php-src: Remove warning upon division by zero: Zend/tests/bug69957.phpt Zend/zend_operators.c tests/run-test/test005.phpt
tests/run-test/test006.phpt tests/run-test/test0 08a.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-87678@lists.php.net to get a copy of this message
Commit: f9724b93f6592d2f77fa9165038a0ba0db3da0c6 Author: Bob Weinand <bobwei9@hotmail.com> Thu, 2 Jul 2015 00:32:46 +0200 Parents: fa1abb567798fb50a2d84e82021b79909c6aefba Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=f9724b93f6592d2f77fa9165038a0ba0db3da0c6 Log: Remove warning upon division by zero Changed paths: M Zend/tests/bug69957.phpt M Zend/zend_operators.c M tests/run-test/test005.phpt M tests/run-test/test006.phpt M tests/run-test/test008a.phpt Diff: diff --git a/Zend/tests/bug69957.phpt b/Zend/tests/bug69957.phpt index 3653df7..7f2c76b 100644 --- a/Zend/tests/bug69957.phpt +++ b/Zend/tests/bug69957.phpt @@ -61,21 +61,16 @@ try { ?> --EXPECTF-- -Warning: Division by zero in %sbug69957.php on line %d float(INF) Variable mod Type: Exception Message: Division by zero - -Warning: Division by zero in %sbug69957.php on line %d float(INF) Literal mod Type: Exception Message: Division by zero - -Warning: Division by zero in %sbug69957.php on line %d float(INF) Double mod diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 2b90475..7abd978 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -1103,40 +1103,24 @@ ZEND_API int ZEND_FASTCALL div_function(zval *result, zval *op1, zval *op2) /* { while (1) { switch (TYPE_PAIR(Z_TYPE_P(op1), Z_TYPE_P(op2))) { case TYPE_PAIR(IS_LONG, IS_LONG): - if (Z_LVAL_P(op2) == 0) { - zend_error(E_WARNING, "Division by zero"); - ZVAL_DOUBLE(result, ((double) Z_LVAL_P(op1) / (double) Z_LVAL_P(op2))); - return SUCCESS; - } else if (Z_LVAL_P(op2) == -1 && Z_LVAL_P(op1) == ZEND_LONG_MIN) { - /* Prevent overflow error/crash */ - ZVAL_DOUBLE(result, (double) ZEND_LONG_MIN / -1); + /* prevent crashes (arithmetic exception) */ + if (UNEXPECTED(Z_LVAL_P(op2) == 0 || (Z_LVAL_P(op2) == -1 && Z_LVAL_P(op1) == ZEND_LONG_MIN) || Z_LVAL_P(op1) % Z_LVAL_P(op2) != 0)) { + ZVAL_DOUBLE(result, ((double) Z_LVAL_P(op1)) / Z_LVAL_P(op2)); return SUCCESS; - } - if (Z_LVAL_P(op1) % Z_LVAL_P(op2) == 0) { /* integer */ - ZVAL_LONG(result, Z_LVAL_P(op1) / Z_LVAL_P(op2)); } else { - ZVAL_DOUBLE(result, ((double) Z_LVAL_P(op1)) / Z_LVAL_P(op2)); + ZVAL_LONG(result, Z_LVAL_P(op1) / Z_LVAL_P(op2)); } return SUCCESS; case TYPE_PAIR(IS_DOUBLE, IS_LONG): - if (Z_LVAL_P(op2) == 0) { - zend_error(E_WARNING, "Division by zero"); - } ZVAL_DOUBLE(result, Z_DVAL_P(op1) / (double)Z_LVAL_P(op2)); return SUCCESS; case TYPE_PAIR(IS_LONG, IS_DOUBLE): - if (Z_DVAL_P(op2) == 0) { - zend_error(E_WARNING, "Division by zero"); - } ZVAL_DOUBLE(result, (double)Z_LVAL_P(op1) / Z_DVAL_P(op2)); return SUCCESS; case TYPE_PAIR(IS_DOUBLE, IS_DOUBLE): - if (Z_DVAL_P(op2) == 0) { - zend_error(E_WARNING, "Division by zero"); - } ZVAL_DOUBLE(result, Z_DVAL_P(op1) / Z_DVAL_P(op2)); return SUCCESS; diff --git a/tests/run-test/test005.phpt b/tests/run-test/test005.phpt index 5dcb650..1413a19 100644 --- a/tests/run-test/test005.phpt +++ b/tests/run-test/test005.phpt @@ -19,8 +19,7 @@ var_dump(ini_get('track_errors')); ini_set('display_errors', 0); var_dump(ini_get('display_errors')); var_dump($php_errormsg); -$zero = 0; -$error = 1 / $zero; +ini_set("zend.assertions", -1); var_dump($php_errormsg); ?> --EXPECTF-- @@ -30,4 +29,4 @@ string(1) "0" string(1) "1" string(1) "0" NULL -string(%d) "%sivision by zer%s" +string(%d) "%senabled or disabled%s" diff --git a/tests/run-test/test006.phpt b/tests/run-test/test006.phpt index 4dca66a..0ab1092 100644 --- a/tests/run-test/test006.phpt +++ b/tests/run-test/test006.phpt @@ -3,7 +3,7 @@ Error messages are shown --FILE-- <?php // If this test fails ask the developers of run-test.php -$error = 1 / 0; +ini_set("zend.assertions", -1); ?> --EXPECTREGEX-- -.*Division by zero.* +.*enabled or disabled.* diff --git a/tests/run-test/test008a..phpt b/tests/run-test/test008a.phpt index ff2a93b..954f899 100644 --- a/tests/run-test/test008a.phpt +++ b/tests/run-test/test008a.phpt @@ -19,8 +19,7 @@ var_dump(ini_get('track_errors')); ini_set('display_errors', 0); var_dump(ini_get('display_errors')); var_dump($php_errormsg); -$zero = 0; -$error = 1 / $zero; +ini_set('zend.assertions', -1); var_dump($php_errormsg); ?> --EXPECTF-- @@ -30,4 +29,4 @@ string(1) "0" string(1) "1" string(1) "0" NULL -string(%d) "%sivision by zer%s" +string(%d) "%senabled or disabled%s"

« previous php.cvs (#87678) next »