[ruby/prism] Fix recursive multiply when values are switched in karatsuba_multiply

https://github.com/ruby/prism/commit/4dc6ea960d
This commit is contained in:
Kevin Newton 2024-04-23 14:05:04 -04:00 committed by git
parent 4f57262338
commit 0defbc11a5

View File

@ -141,6 +141,13 @@ karatsuba_multiply(pm_integer_t *destination, pm_integer_t *left, pm_integer_t *
size_t end_offset = start_offset + left_length;
if (end_offset > right_length) end_offset = right_length;
pm_integer_t sliced_left = {
.value = 0,
.length = left_length,
.values = left_values,
.negative = false
};
pm_integer_t sliced_right = {
.value = 0,
.length = end_offset - start_offset,
@ -149,7 +156,7 @@ karatsuba_multiply(pm_integer_t *destination, pm_integer_t *left, pm_integer_t *
};
pm_integer_t product;
karatsuba_multiply(&product, left, &sliced_right, base);
karatsuba_multiply(&product, &sliced_left, &sliced_right, base);
uint32_t carry = 0;
for (size_t index = 0; index < product.length; index++) {