From d34db58797427ddc55ade11bcdcefbc614b20eba Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Thu, 6 Aug 2015 15:38:35 +0900 Subject: implicit type conversion caused unexpected result. fixes #8. --- src/pack.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/pack.c b/src/pack.c index dcc03e0e5..276944e4b 100644 --- a/src/pack.c +++ b/src/pack.c @@ -211,9 +211,15 @@ unpack_l(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, un n = sl; } else { if (flags & PACK_FLAG_LITTLEENDIAN) { - ul = src[3] * 256*256*256 + (src[2] *256*256) + (src[1] * 256) + src[0]; + ul = (unsigned long)src[3] * 256*256*256; + ul += (unsigned long)src[2] *256*256; + ul += (unsigned long)src[1] *256; + ul += (unsigned long)src[0]; } else { - ul = src[0] * 256*256*256 + (src[1] *256*256) + (src[2] * 256) + src[3]; + ul = (unsigned long)src[0] * 256*256*256; + ul += (unsigned long)src[1] *256*256; + ul += (unsigned long)src[2] *256; + ul += (unsigned long)src[3]; } if (!POSFIXABLE(ul)) { snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %lu", ul); -- cgit v1.2.3