VM: refactor bignum.cpp so that GC_BIGNUM is never called on a NULL
pointer The purpose of this fix is to ensure that no NULL checks are needed when traversing the bignum_roots vector.db4
parent
0c9e61ca99
commit
75129d34ad
|
@ -744,10 +744,13 @@ void factor_vm::bignum_divide_unsigned_large_denominator(
|
||||||
bignum_length_type length_n = ((BIGNUM_LENGTH(numerator)) + 1);
|
bignum_length_type length_n = ((BIGNUM_LENGTH(numerator)) + 1);
|
||||||
bignum_length_type length_d = (BIGNUM_LENGTH(denominator));
|
bignum_length_type length_d = (BIGNUM_LENGTH(denominator));
|
||||||
|
|
||||||
bignum* q = ((quotient != ((bignum**)0))
|
bignum *q = NULL;
|
||||||
? (allot_bignum((length_n - length_d), q_negative_p))
|
if (quotient != ((bignum**)0)) {
|
||||||
: BIGNUM_OUT_OF_BAND);
|
q = allot_bignum(length_n - length_d, q_negative_p);
|
||||||
GC_BIGNUM(q);
|
GC_BIGNUM(q);
|
||||||
|
} else {
|
||||||
|
q = BIGNUM_OUT_OF_BAND;
|
||||||
|
}
|
||||||
|
|
||||||
bignum* u = (allot_bignum(length_n, r_negative_p));
|
bignum* u = (allot_bignum(length_n, r_negative_p));
|
||||||
GC_BIGNUM(u);
|
GC_BIGNUM(u);
|
||||||
|
@ -932,9 +935,6 @@ void factor_vm::bignum_divide_unsigned_medium_denominator(
|
||||||
GC_BIGNUM(numerator);
|
GC_BIGNUM(numerator);
|
||||||
|
|
||||||
bignum_length_type length_n = (BIGNUM_LENGTH(numerator));
|
bignum_length_type length_n = (BIGNUM_LENGTH(numerator));
|
||||||
bignum_length_type length_q;
|
|
||||||
bignum* q = NULL;
|
|
||||||
GC_BIGNUM(q);
|
|
||||||
|
|
||||||
int shift = 0;
|
int shift = 0;
|
||||||
/* Because `bignum_digit_divide' requires a normalized denominator. */
|
/* Because `bignum_digit_divide' requires a normalized denominator. */
|
||||||
|
@ -942,15 +942,13 @@ void factor_vm::bignum_divide_unsigned_medium_denominator(
|
||||||
denominator <<= 1;
|
denominator <<= 1;
|
||||||
shift += 1;
|
shift += 1;
|
||||||
}
|
}
|
||||||
if (shift == 0) {
|
|
||||||
length_q = length_n;
|
|
||||||
|
|
||||||
q = (allot_bignum(length_q, q_negative_p));
|
bignum_length_type length_q = (shift == 0) ? length_n : length_n + 1;
|
||||||
|
bignum* q = (allot_bignum(length_q, q_negative_p));
|
||||||
|
GC_BIGNUM(q);
|
||||||
|
if (shift == 0) {
|
||||||
bignum_destructive_copy(numerator, q);
|
bignum_destructive_copy(numerator, q);
|
||||||
} else {
|
} else {
|
||||||
length_q = (length_n + 1);
|
|
||||||
|
|
||||||
q = (allot_bignum(length_q, q_negative_p));
|
|
||||||
bignum_destructive_normalization(numerator, q, shift);
|
bignum_destructive_normalization(numerator, q, shift);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue