From 98799aa6b8cff160c510046b374ebec76fd6692c Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 24 Mar 2021 10:41:14 +0900 Subject: Fix infinite recursive call bugs in integer division. --- mrbgems/mruby-complex/src/complex.c | 2 ++ mrbgems/mruby-rational/src/rational.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/mrbgems/mruby-complex/src/complex.c b/mrbgems/mruby-complex/src/complex.c index b4e3499cf..11ca2bb95 100644 --- a/mrbgems/mruby-complex/src/complex.c +++ b/mrbgems/mruby-complex/src/complex.c @@ -304,6 +304,7 @@ int_div(mrb_state *mrb, mrb_value x) } switch (mrb_type(y)) { case MRB_TT_COMPLEX: + x = complex_new(mrb, (mrb_float)a, 0); return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y); default: return mrb_float_value(mrb, (mrb_float)a * mrb_to_flo(mrb, y)); @@ -323,6 +324,7 @@ int_quo(mrb_state *mrb, mrb_value x) switch (mrb_type(y)) { case MRB_TT_COMPLEX: + x = complex_new(mrb, (mrb_float)a, 0); return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y); default: return mrb_float_value(mrb, (mrb_float)a * mrb_to_flo(mrb, y)); diff --git a/mrbgems/mruby-rational/src/rational.c b/mrbgems/mruby-rational/src/rational.c index 9d819d0f8..497a36d8e 100644 --- a/mrbgems/mruby-rational/src/rational.c +++ b/mrbgems/mruby-rational/src/rational.c @@ -428,6 +428,7 @@ int_div(mrb_state *mrb, mrb_value x) return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y); #if defined(MRB_USE_COMPLEX) case MRB_TT_COMPLEX: + x = mrb_complex_new(mrb, (mrb_float)a, 0); return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y); #endif case MRB_TT_FLOAT: @@ -460,6 +461,7 @@ int_quo(mrb_state *mrb, mrb_value x) return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y); #if defined(MRB_USE_COMPLEX) case MRB_TT_COMPLEX: + x = mrb_complex_new(mrb, (mrb_float)a, 0); return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y); #endif default: -- cgit v1.2.3