bigint.c (mpz_mmod): should call mpz_clear() for internal mpz_t.

This commit is contained in:
Yukihiro "Matz" Matsumoto
2022-07-25 14:11:16 +09:00
parent 7d5475916c
commit e02e9ae434
+4 -3
View File
@@ -498,7 +498,7 @@ static void
mpz_mmod(mrb_state *mrb, mpz_t *r, mpz_t *x, mpz_t *y)
{
mpz_t q;
short sn1 = x->sn, sn2 = y->sn;
short sn1 = x->sn, sn2 = y->sn, sn3;
mpz_init(mrb, &q);
if (sn1 == 0) {
@@ -506,12 +506,13 @@ mpz_mmod(mrb_state *mrb, mpz_t *r, mpz_t *x, mpz_t *y)
return;
}
udiv(mrb, &q, r, x, y);
mpz_clear(mrb, &q);
if (uzero(r)) {
r->sn = 0;
return;
}
q.sn = sn1*sn2;
if (q.sn > 0)
sn3 = sn1*sn2;
if (sn3 > 0)
r->sn = sn1;
else if (sn1 < 0 && sn2 > 0) {
r->sn = 1;