Skip to content

Commit

Permalink
Merge branch 'pull-request/2745'
Browse files Browse the repository at this point in the history
* pull-request/2745:
  Fixed bug #75169 (BCMath errors/warnings bypass error handling)
  • Loading branch information
cmb69 committed Sep 13, 2017
2 parents 1738fa3 + fd73a54 commit 18adc6f
Show file tree
Hide file tree
Showing 14 changed files with 48 additions and 123 deletions.
1 change: 1 addition & 0 deletions NEWS
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ PHP NEWS
- BCMath: - BCMath:
. Implemented request #67855 (No way to get current scale in use). (Chris . Implemented request #67855 (No way to get current scale in use). (Chris
Wright, cmb) Wright, cmb)
. Fixed bug #75169 (BCMath errors/warnings bypass PHP's error handling). (cmb)


- Date: - Date:
. Implemented FR #74668: Add DateTime::createFromImmutable() method. . Implemented FR #74668: Add DateTime::createFromImmutable() method.
Expand Down
4 changes: 4 additions & 0 deletions UPGRADING
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ Core:
dependencies. dependencies.
. Support for BeOS has been dropped. . Support for BeOS has been dropped.


BCMath:
. All warnings thrown by BCMath functions are now using PHP's error handling.
Formerly some warnings have directly been written to stderr.

Standard: Standard:
. getimagesize() and related functions now report the mime type of BMP images . getimagesize() and related functions now report the mime type of BMP images
as image/bmp instead of image/x-ms-bmp, since the former has been registered as image/bmp instead of image/x-ms-bmp, since the former has been registered
Expand Down
2 changes: 1 addition & 1 deletion ext/bcmath/config.m4
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ PHP_ARG_ENABLE(bcmath, whether to enable bc style precision math functions,


if test "$PHP_BCMATH" != "no"; then if test "$PHP_BCMATH" != "no"; then
PHP_NEW_EXTENSION(bcmath, bcmath.c \ PHP_NEW_EXTENSION(bcmath, bcmath.c \
libbcmath/src/add.c libbcmath/src/div.c libbcmath/src/init.c libbcmath/src/neg.c libbcmath/src/outofmem.c libbcmath/src/raisemod.c libbcmath/src/rt.c libbcmath/src/sub.c \ libbcmath/src/add.c libbcmath/src/div.c libbcmath/src/init.c libbcmath/src/neg.c libbcmath/src/outofmem.c libbcmath/src/raisemod.c libbcmath/src/sub.c \
libbcmath/src/compare.c libbcmath/src/divmod.c libbcmath/src/int2num.c libbcmath/src/num2long.c libbcmath/src/output.c libbcmath/src/recmul.c \ libbcmath/src/compare.c libbcmath/src/divmod.c libbcmath/src/int2num.c libbcmath/src/num2long.c libbcmath/src/output.c libbcmath/src/recmul.c \
libbcmath/src/sqrt.c libbcmath/src/zero.c libbcmath/src/debug.c libbcmath/src/doaddsub.c libbcmath/src/nearzero.c libbcmath/src/num2str.c libbcmath/src/raise.c \ libbcmath/src/sqrt.c libbcmath/src/zero.c libbcmath/src/debug.c libbcmath/src/doaddsub.c libbcmath/src/nearzero.c libbcmath/src/num2str.c libbcmath/src/raise.c \
libbcmath/src/rmzero.c libbcmath/src/str2num.c, libbcmath/src/rmzero.c libbcmath/src/str2num.c,
Expand Down
2 changes: 1 addition & 1 deletion ext/bcmath/config.w32
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ ARG_ENABLE("bcmath", "bc style precision math functions", "yes");
if (PHP_BCMATH == "yes") { if (PHP_BCMATH == "yes") {
EXTENSION("bcmath", "bcmath.c", null, "-Iext/bcmath/libbcmath/src /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); EXTENSION("bcmath", "bcmath.c", null, "-Iext/bcmath/libbcmath/src /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
ADD_SOURCES("ext/bcmath/libbcmath/src", "add.c div.c init.c neg.c \ ADD_SOURCES("ext/bcmath/libbcmath/src", "add.c div.c init.c neg.c \
outofmem.c raisemod.c rt.c sub.c compare.c divmod.c int2num.c \ outofmem.c raisemod.c sub.c compare.c divmod.c int2num.c \
num2long.c output.c recmul.c sqrt.c zero.c debug.c doaddsub.c \ num2long.c output.c recmul.c sqrt.c zero.c debug.c doaddsub.c \
nearzero.c num2str.c raise.c rmzero.c str2num.c", "bcmath"); nearzero.c num2str.c raise.c rmzero.c str2num.c", "bcmath");


Expand Down
2 changes: 0 additions & 2 deletions ext/bcmath/libbcmath/src/bcmath.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -151,8 +151,6 @@ _PROTOTYPE(void bc_out_num, (bc_num num, int o_base, void (* out_char)(int),


/* Prototypes needed for external utility routines. */ /* Prototypes needed for external utility routines. */


_PROTOTYPE(void bc_rt_warn, (char *mesg ,...));
_PROTOTYPE(void bc_rt_error, (char *mesg ,...));
_PROTOTYPE(void bc_out_of_memory, (void)); _PROTOTYPE(void bc_out_of_memory, (void));


#define bc_new_num(length, scale) _bc_new_num_ex((length), (scale), 0) #define bc_new_num(length, scale) _bc_new_num_ex((length), (scale), 0)
Expand Down
4 changes: 2 additions & 2 deletions ext/bcmath/libbcmath/src/raise.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -55,10 +55,10 @@ bc_raise (bc_num num1, bc_num num2, bc_num *result, int scale)


/* Check the exponent for scale digits and convert to a long. */ /* Check the exponent for scale digits and convert to a long. */
if (num2->n_scale != 0) if (num2->n_scale != 0)
bc_rt_warn ("non-zero scale in exponent"); php_error_docref (NULL, E_WARNING, "non-zero scale in exponent");
exponent = bc_num2long (num2); exponent = bc_num2long (num2);
if (exponent == 0 && (num2->n_len > 1 || num2->n_value[0] != 0)) if (exponent == 0 && (num2->n_len > 1 || num2->n_value[0] != 0))
bc_rt_error ("exponent too large in raise"); php_error_docref (NULL, E_WARNING, "exponent too large");


/* Special case if exponent is a zero. */ /* Special case if exponent is a zero. */
if (exponent == 0) if (exponent == 0)
Expand Down
6 changes: 3 additions & 3 deletions ext/bcmath/libbcmath/src/raisemod.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -80,21 +80,21 @@ bc_raisemod (bc_num base, bc_num expo, bc_num mod, bc_num *result, int scale)
/* Check the base for scale digits. */ /* Check the base for scale digits. */
if (power->n_scale != 0) if (power->n_scale != 0)
{ {
bc_rt_warn ("non-zero scale in base"); php_error_docref (NULL, E_WARNING, "non-zero scale in base");
_bc_truncate (&power); _bc_truncate (&power);
} }


/* Check the exponent for scale digits. */ /* Check the exponent for scale digits. */
if (exponent->n_scale != 0) if (exponent->n_scale != 0)
{ {
bc_rt_warn ("non-zero scale in exponent"); php_error_docref (NULL, E_WARNING, "non-zero scale in exponent");
_bc_truncate (&exponent); _bc_truncate (&exponent);
} }


/* Check the modulus for scale digits. */ /* Check the modulus for scale digits. */
if (modulus->n_scale != 0) if (modulus->n_scale != 0)
{ {
bc_rt_warn ("non-zero scale in modulus"); php_error_docref (NULL, E_WARNING, "non-zero scale in modulus");
_bc_truncate (&modulus); _bc_truncate (&modulus);
} }


Expand Down
65 changes: 0 additions & 65 deletions ext/bcmath/libbcmath/src/rt.c

This file was deleted.

15 changes: 15 additions & 0 deletions ext/bcmath/tests/bcpow_error1.phpt
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,15 @@
--TEST--
bcpow() does not support non-integral exponents
--SKIPIF--
<?php
if (!extension_loaded('bcmath')) die('skip bcmath extension is not available');
?>
--FILE--
<?php
var_dump(bcpow('1', '1.1', 2));
?>
===DONE===
--EXPECTF--
Warning: bcpow(): non-zero scale in exponent in %s on line %d
string(1) "1"
===DONE===
15 changes: 15 additions & 0 deletions ext/bcmath/tests/bcpow_error2.phpt
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,15 @@
--TEST--
bcpow() does not support exponents >= 2**63
--SKIPIF--
<?php
if (!extension_loaded('bcmath')) die('skip bcmath extension is not available');
?>
--FILE--
<?php
var_dump(bcpow('0', '9223372036854775808', 2));
?>
===DONE===
--EXPECTF--
Warning: bcpow(): exponent too large in %s on line %d
string(1) "1"
===DONE===
18 changes: 0 additions & 18 deletions ext/bcmath/tests/bug72093-win32.phpt

This file was deleted.

6 changes: 2 additions & 4 deletions ext/bcmath/tests/bug72093.phpt
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@ Bug 72093: bcpowmod accepts negative scale and corrupts _one_ definition
--SKIPIF-- --SKIPIF--
<?php <?php
if(!extension_loaded("bcmath")) print "skip"; if(!extension_loaded("bcmath")) print "skip";
if (substr(PHP_OS, 0, 3) == 'WIN') {
die('skip Not valid for windows');
}
?> ?>
--FILE-- --FILE--
<?php <?php
Expand All @@ -14,5 +11,6 @@ var_dump(bcpowmod(1, 1.2, 1, 1));
?> ?>
--EXPECTF-- --EXPECTF--
string(1) "1" string(1) "1"
bc math warning: non-zero scale in exponent
Warning: bcpowmod(): non-zero scale in exponent in %s on line %d
string(3) "0.0" string(3) "0.0"
21 changes: 0 additions & 21 deletions ext/bcmath/tests/bug75178-win32.phpt

This file was deleted.

10 changes: 4 additions & 6 deletions ext/bcmath/tests/bug75178.phpt
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -3,19 +3,17 @@ Bug #75178 (bcpowmod() misbehaves for non-integer base or modulus)
--SKIPIF-- --SKIPIF--
<?php <?php
if (!extension_loaded('bcmath')) die('skip bcmath extension is not available'); if (!extension_loaded('bcmath')) die('skip bcmath extension is not available');
if (substr(PHP_OS, 0, 3) == 'WIN') {
die('skip Not valid for windows');
}
?> ?>
--FILE-- --FILE--
<?php <?php
var_dump(bcpowmod('4.1', '4', '3', 3)); var_dump(bcpowmod('4.1', '4', '3', 3));
var_dump(bcpowmod('4', '4', '3.1', 3)); var_dump(bcpowmod('4', '4', '3.1', 3));
?> ?>
===DONE=== ===DONE===
--EXPECT-- --EXPECTF--
bc math warning: non-zero scale in base Warning: bcpowmod(): non-zero scale in base in %s on line %d
string(5) "1.000" string(5) "1.000"
bc math warning: non-zero scale in modulus
Warning: bcpowmod(): non-zero scale in modulus in %s on line %d
string(5) "1.000" string(5) "1.000"
===DONE=== ===DONE===

0 comments on commit 18adc6f

Please sign in to comment.