From ac3b1c4c5a024301af54460e7846b880ed9de099 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 19 Oct 2012 01:50:40 +0900 Subject: lshift must not assume sizeof(long) >= sizeof(mrb_int) --- src/numeric.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src') diff --git a/src/numeric.c b/src/numeric.c index 6970869df..284d0a82e 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -949,8 +949,7 @@ fix_xor(mrb_state *mrb, mrb_value x) static mrb_value lshift(mrb_state *mrb, mrb_int val, unsigned long width) { - if (width > (sizeof(mrb_int)*CHAR_BIT-1) - || ((unsigned long)abs(val))>>(sizeof(mrb_int)*CHAR_BIT-1-width) > 0) { + if (width > (sizeof(mrb_int)*CHAR_BIT-1)) { mrb_raise(mrb, E_RANGE_ERROR, "width(%d) > (%d:sizeof(mrb_int)*CHAR_BIT-1)", width, sizeof(mrb_int)*CHAR_BIT-1); } -- cgit v1.2.3