mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Merge branch 'PHP-8.4'
* PHP-8.4: Fixed GH-17275: Fixed the calculation logic of dividend scale (#17279)
This commit is contained in:
commit
2b36680f0a
2 changed files with 24 additions and 4 deletions
|
@ -427,6 +427,9 @@ bool bc_divide(bc_num numerator, bc_num divisor, bc_num *quot, size_t scale)
|
|||
return true;
|
||||
}
|
||||
|
||||
/* Length of numerator data that can be read */
|
||||
size_t numerator_readable_len = numeratorend - numeratorptr + 1;
|
||||
|
||||
/* set scale to numerator */
|
||||
if (numerator_scale > scale) {
|
||||
size_t scale_diff = numerator_scale - scale;
|
||||
|
@ -434,7 +437,13 @@ bool bc_divide(bc_num numerator, bc_num divisor, bc_num *quot, size_t scale)
|
|||
numerator_bottom_extension -= scale_diff;
|
||||
} else {
|
||||
numerator_bottom_extension = 0;
|
||||
numeratorend -= scale_diff > numerator_top_extension ? scale_diff - numerator_top_extension : 0;
|
||||
if (EXPECTED(numerator_readable_len > scale_diff)) {
|
||||
numerator_readable_len -= scale_diff;
|
||||
numeratorend -= scale_diff;
|
||||
} else {
|
||||
numerator_readable_len = 0;
|
||||
numeratorend = numeratorptr;
|
||||
}
|
||||
}
|
||||
numerator_top_extension = MIN(numerator_top_extension, scale);
|
||||
} else {
|
||||
|
@ -442,9 +451,6 @@ bool bc_divide(bc_num numerator, bc_num divisor, bc_num *quot, size_t scale)
|
|||
}
|
||||
numerator_scale = scale;
|
||||
|
||||
/* Length of numerator data that can be read */
|
||||
size_t numerator_readable_len = numeratorend - numeratorptr + 1;
|
||||
|
||||
if (divisor_len > numerator_readable_len + numerator_bottom_extension) {
|
||||
*quot = bc_copy_num(BCG(_zero_));
|
||||
return true;
|
||||
|
|
14
ext/bcmath/tests/gh17275.phpt
Normal file
14
ext/bcmath/tests/gh17275.phpt
Normal file
|
@ -0,0 +1,14 @@
|
|||
--TEST--
|
||||
GH-17275 Incorrect result of bcdiv function
|
||||
--EXTENSIONS--
|
||||
bcmath
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(
|
||||
bcdiv('0.03772321', '9650.0', 8),
|
||||
bcdiv('0.03772321', '9650.0', 9),
|
||||
);
|
||||
?>
|
||||
--EXPECT--
|
||||
string(10) "0.00000390"
|
||||
string(11) "0.000003909"
|
Loading…
Add table
Add a link
Reference in a new issue