summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorTomoyuki Sahara <[email protected]>2015-08-06 15:38:35 +0900
committerTomoyuki Sahara <[email protected]>2015-08-06 15:38:35 +0900
commitd34db58797427ddc55ade11bcdcefbc614b20eba (patch)
treeeed58f0e2236f2fae8bdee7abb0d273e0726f510 /src
parentb913e7eefd90705ee8e3e832cbfa3c9af73e7597 (diff)
downloadmruby-d34db58797427ddc55ade11bcdcefbc614b20eba.tar.gz
mruby-d34db58797427ddc55ade11bcdcefbc614b20eba.zip
implicit type conversion caused unexpected result. fixes #8.
Diffstat (limited to 'src')
-rw-r--r--src/pack.c10
1 files changed, 8 insertions, 2 deletions
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);