From a64d2bfbe67ce0520cdd9bb72ac8b9194269927a Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 9 Jul 2022 10:47:23 +0900 Subject: [PATCH] bigint.c (mpz_mul,mpz_mdiv): return early on zero. --- mrbgems/mruby-bigint/core/bigint.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mrbgems/mruby-bigint/core/bigint.c b/mrbgems/mruby-bigint/core/bigint.c index d51efdf6f..b7892ef21 100644 --- a/mrbgems/mruby-bigint/core/bigint.c +++ b/mrbgems/mruby-bigint/core/bigint.c @@ -294,6 +294,10 @@ mpz_mul(mrb_state *mrb, mpz_t *ww, mpz_t *u, mpz_t *v) mp_limb cc; mpz_t w; + if (uzero(u) || uzero(v)) { + mpz_set_int(mrb, ww, 0); + return; + } mpz_init(mrb, &w); mpz_realloc(mrb, &w, (size_t)(u->sz + v->sz)); for (j=0; j < 2*u->sz; j++) { @@ -517,6 +521,10 @@ mpz_mdiv(mrb_state *mrb, mpz_t *q, mpz_t *x, mpz_t *y) { mpz_t r; short sn1 = x->sn, sn2 = y->sn, qsign; + if (uzero(x)) { + mpz_init_set_int(mrb, q, 0); + return; + } mpz_init(mrb,&r); udiv(mrb,q,&r,x,y); qsign = q->sn = sn1*sn2;