summaryrefslogtreecommitdiff
path: root/bignum.c
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-07-13 14:25:36 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-07-13 14:25:36 +0000
commit57ec0834a1fdd759d942feba1568305853d77270 (patch)
treec629d27251472d01b19254931f09e89f22c77ef5 /bignum.c
parente62660c9208ff1da2bbe5b72197f74e9c1cdf4da (diff)
merge revision(s) 41839,41841:
* bignum.c (biglsh_bang): Fix bignum digits under-run. * bignum.c (bigrsh_bang): Fix bignum digits overrun. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@41944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bignum.c')
-rw-r--r--bignum.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/bignum.c b/bignum.c
index 97557165b7..a9448ceab0 100644
--- a/bignum.c
+++ b/bignum.c
@@ -2335,11 +2335,11 @@ biglsh_bang(BDIGIT *xds, long xn, unsigned long shift)
zds = xds + xn - 1;
xn -= s1 + 1;
num = xds[xn]<<s2;
- do {
+ while (0 < xn) {
*zds-- = num | xds[--xn]>>s3;
num = xds[xn]<<s2;
}
- while (xn > 0);
+ assert(xds <= zds);
*zds = num;
for (i = s1; i > 0; --i)
*zds-- = 0;
@@ -2362,11 +2362,11 @@ bigrsh_bang(BDIGIT* xds, long xn, unsigned long shift)
i = 0;
zds = xds + s1;
num = *zds++>>s2;
- do {
+ while (i < xn - s1 - 1) {
xds[i++] = (BDIGIT)(*zds<<s3) | num;
num = *zds++>>s2;
}
- while (i < xn - s1 - 1);
+ assert(i < xn);
xds[i] = num;
MEMZERO(xds + xn - s1, BDIGIT, s1);
}