Avoid undefined behavior of left shifting negative integer; #3728

This commit is contained in:
Yukihiro "Matz" Matsumoto
2017-07-05 03:07:44 +09:00
parent c377d504f6
commit cc01dedc65
+2 -2
View File
@@ -962,16 +962,16 @@ lshift(mrb_state *mrb, mrb_int val, mrb_int width)
(val > (MRB_INT_MAX >> width))) {
goto bit_overflow;
}
return mrb_fixnum_value(val << width);
}
else {
if ((width > NUMERIC_SHIFT_WIDTH_MAX) ||
(val < (MRB_INT_MIN >> width))) {
goto bit_overflow;
}
return mrb_fixnum_value(val * (1u << width));
}
return mrb_fixnum_value(val << width);
bit_overflow:
{
mrb_float f = (mrb_float)val;