diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-09-07 16:22:01 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-10-12 18:20:22 +0900 |
| commit | 3ff2757bf705082e40013796ef2bac1277499de8 (patch) | |
| tree | 35765477da5408a63198c8d1fa9b651b0b1e8bfd | |
| parent | 4dcc1819c9a5d2ad8c786dd4c7443c048c639575 (diff) | |
| download | mruby-3ff2757bf705082e40013796ef2bac1277499de8.tar.gz mruby-3ff2757bf705082e40013796ef2bac1277499de8.zip | |
Fix `mrb_int_mul_overflow()` to check either operand being zero.
| -rw-r--r-- | include/mruby/numeric.h | 6 | ||||
| -rw-r--r-- | mrbgems/mruby-sprintf/src/sprintf.c | 4 |
2 files changed, 5 insertions, 5 deletions
diff --git a/include/mruby/numeric.h b/include/mruby/numeric.h index f88868796..7e70b9dee 100644 --- a/include/mruby/numeric.h +++ b/include/mruby/numeric.h @@ -136,15 +136,15 @@ mrb_int_mul_overflow(mrb_int multiplier, mrb_int multiplicand, mrb_int *product) if (multiplicand > 0) { if (multiplier > MRB_INT_MAX / multiplicand) return TRUE; } - else { + else if (multiplicand < 0) { if (multiplicand < MRB_INT_MAX / multiplier) return TRUE; } } - else { + else if (multiplier < 0) { if (multiplicand > 0) { if (multiplier < MRB_INT_MAX / multiplicand) return TRUE; } - else { + else if (multiplicand < 0) { if (multiplier != 0 && multiplicand < MRB_INT_MAX / multiplier) return TRUE; } } diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 144fe88c6..3ecf11afb 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -1082,7 +1082,7 @@ retry: need = width; if (need < 0) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "width too big 2"); + mrb_raise(mrb, E_ARGUMENT_ERROR, "width too big"); } FILL(' ', need); if (flags & FMINUS) { @@ -1108,7 +1108,7 @@ retry: if (need > MRB_INT_MAX - ((flags&FPREC) ? prec : 6)) { too_big_width: mrb_raise(mrb, E_ARGUMENT_ERROR, - (width > prec ? "width too big 3" : "prec too big")); + (width > prec ? "width too big" : "prec too big")); } need += (flags&FPREC) ? prec : 6; if ((flags&FWIDTH) && need < width) |
