From 62c36c03b3b44e8c6b09fbb1470f4909569fd066 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 26 Aug 2022 12:55:29 +0900 Subject: [PATCH] bigint.c (mpz_set_int): fixed a bug in integer size check. --- mrbgems/mruby-bigint/core/bigint.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mrbgems/mruby-bigint/core/bigint.c b/mrbgems/mruby-bigint/core/bigint.c index b69b853b7..11eda437c 100644 --- a/mrbgems/mruby-bigint/core/bigint.c +++ b/mrbgems/mruby-bigint/core/bigint.c @@ -65,9 +65,6 @@ mpz_init_set(mrb_state *mrb, mpz_t *s, mpz_t *t) mpz_set(mrb, s, t); } -#define MRB_INT_MSB ((mrb_uint)1 << (MRB_INT_BIT-1)) -#define MRB_INT_MASK (MRB_INT_MSB-1) - static void mpz_set_int(mrb_state *mrb, mpz_t *y, mrb_int v) { @@ -87,10 +84,10 @@ mpz_set_int(mrb_state *mrb, mpz_t *y, mrb_int v) else u = -v; } #if MRB_INT_BIT > DIG_SIZE - if ((u & ~MRB_INT_MASK) != 0) { + if ((u & ~DIG_MASK) != 0) { mpz_realloc(mrb, y, 2); - y->p[1] = (mp_limb)(u >> (MRB_INT_BIT-1)); - y->p[0] = (mp_limb)(u & MRB_INT_MASK); + y->p[1] = (mp_limb)HIGH(u); + y->p[0] = (mp_limb)LOW(u); } else #endif