From 8bd1c5646514f342bd215f078eedcc71da2073c4 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 21 Jul 2022 19:26:12 +0900 Subject: [PATCH] bigint.c (mpz_get_str): fixed wrong loop termination condition. --- mrbgems/mruby-bigint/core/bigint.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/mrbgems/mruby-bigint/core/bigint.c b/mrbgems/mruby-bigint/core/bigint.c index 7b42c3935..40d59eb38 100644 --- a/mrbgems/mruby-bigint/core/bigint.c +++ b/mrbgems/mruby-bigint/core/bigint.c @@ -688,15 +688,16 @@ mpz_get_str(mrb_state *mrb, char *s, mrb_int sz, mrb_int base, mpz_t *x) char *se = s+sz; int xlen = digits(x); mp_limb *t = (mp_limb*)mrb_malloc(mrb, xlen*sizeof(mp_limb)); + mp_limb *tend = t + xlen; memcpy(t, x->p, xlen*sizeof(mp_limb)); mp_limb b2 = base; - const int blim = (sizeof(mp_limb)==sizeof(int))?(base<=10?4:3):(base<=10?9:5); + const int blim = (sizeof(mp_limb)==4)?(base<=10?4:3):(base<=10?9:5); for (int i=1; i= t) { mp_limb d0 = *d, d1; @@ -720,14 +721,14 @@ mpz_get_str(mrb_state *mrb, char *s, mrb_int sz, mrb_int base, mpz_t *x) } // check if number is zero - for (d = t; d < t + xlen; ++d) { + for (d = t; d < tend; d++) { if (*d != 0) break; - while (pssn < 0) { *s++ = '-';