Skip to content

Commit 98799aa

Browse files
committed
Fix infinite recursive call bugs in integer division.
1 parent 3deb62d commit 98799aa

File tree

2 files changed

+4
-0
lines changed

2 files changed

+4
-0
lines changed

mrbgems/mruby-complex/src/complex.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ int_div(mrb_state *mrb, mrb_value x)
304304
}
305305
switch (mrb_type(y)) {
306306
case MRB_TT_COMPLEX:
307+
x = complex_new(mrb, (mrb_float)a, 0);
307308
return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y);
308309
default:
309310
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)
323324

324325
switch (mrb_type(y)) {
325326
case MRB_TT_COMPLEX:
327+
x = complex_new(mrb, (mrb_float)a, 0);
326328
return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y);
327329
default:
328330
return mrb_float_value(mrb, (mrb_float)a * mrb_to_flo(mrb, y));

mrbgems/mruby-rational/src/rational.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ int_div(mrb_state *mrb, mrb_value x)
428428
return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y);
429429
#if defined(MRB_USE_COMPLEX)
430430
case MRB_TT_COMPLEX:
431+
x = mrb_complex_new(mrb, (mrb_float)a, 0);
431432
return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y);
432433
#endif
433434
case MRB_TT_FLOAT:
@@ -460,6 +461,7 @@ int_quo(mrb_state *mrb, mrb_value x)
460461
return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y);
461462
#if defined(MRB_USE_COMPLEX)
462463
case MRB_TT_COMPLEX:
464+
x = mrb_complex_new(mrb, (mrb_float)a, 0);
463465
return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y);
464466
#endif
465467
default:

0 commit comments

Comments
 (0)