summaryrefslogtreecommitdiff
path: root/marshal.c
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-11-15 07:34:01 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-11-15 07:34:01 +0000
commit86d1fc88637223edb248df7e5d327e8d1a427afb (patch)
treed7e7eaa47d04854f04305c2bb0b0e2205f94b2a5 /marshal.c
parenta42784000e102df0909e8a307c0b0b8ba2938304 (diff)
suppress integer overflow warnings
* util.c: annotate as NO_SANITIZE * bignum.c: avoid (size_t)-- * marshal.c: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65739 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'marshal.c')
-rw-r--r--marshal.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/marshal.c b/marshal.c
index a9518bace6..15ed3ae705 100644
--- a/marshal.c
+++ b/marshal.c
@@ -817,6 +817,7 @@ w_object(VALUE obj, struct dump_arg *arg, int limit)
char sign = BIGNUM_SIGN(obj) ? '+' : '-';
size_t len = BIGNUM_LEN(obj);
size_t slen;
+ size_t j;
BDIGIT *d = BIGNUM_DIGITS(obj);
slen = SHORTLEN(len);
@@ -826,7 +827,7 @@ w_object(VALUE obj, struct dump_arg *arg, int limit)
w_byte(sign, arg);
w_long((long)slen, arg);
- while (len--) {
+ for (j = 0; j < len; j++) {
#if SIZEOF_BDIGIT > SIZEOF_SHORT
BDIGIT num = *d;
int i;
@@ -834,7 +835,7 @@ w_object(VALUE obj, struct dump_arg *arg, int limit)
for (i=0; i<SIZEOF_BDIGIT; i+=SIZEOF_SHORT) {
w_short(num & SHORTMASK, arg);
num = SHORTDN(num);
- if (len == 0 && num == 0) break;
+ if (j == len - 1 && num == 0) break;
}
#else
w_short(*d, arg);