Check bignum multiplication digits overflow

This commit is contained in:
Nobuyoshi Nakada 2024-11-08 19:04:07 +09:00 committed by Nobuyoshi Nakada
parent edb1c8215d
commit 39537e07fe
Notes: git 2024-11-08 15:08:22 +00:00

View file

@ -5914,6 +5914,8 @@ bigsq(VALUE x)
BDIGIT *xds, *zds; BDIGIT *xds, *zds;
xn = BIGNUM_LEN(x); xn = BIGNUM_LEN(x);
if (MUL_OVERFLOW_LONG_P(2, xn))
rb_raise(rb_eArgError, "square overflow");
zn = 2 * xn; zn = 2 * xn;
z = bignew(zn, 1); z = bignew(zn, 1);
@ -5942,6 +5944,8 @@ bigmul0(VALUE x, VALUE y)
xn = BIGNUM_LEN(x); xn = BIGNUM_LEN(x);
yn = BIGNUM_LEN(y); yn = BIGNUM_LEN(y);
if (ADD_OVERFLOW_LONG_P(xn, yn))
rb_raise(rb_eArgError, "multiplication overflow");
zn = xn + yn; zn = xn + yn;
z = bignew(zn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y)); z = bignew(zn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));