Merge branch 'PHP-8.4'

* PHP-8.4:
  Fixed GH-17275: Fixed the calculation logic of dividend scale (#17279)
This commit is contained in:
Saki Takamachi 2024-12-27 21:36:36 +09:00
commit 2b36680f0a
No known key found for this signature in database
GPG key ID: 770426E17EBBB3DD
2 changed files with 24 additions and 4 deletions

View file

@ -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;

View 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"