diff options
author | nagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-07-13 14:25:36 +0000 |
---|---|---|
committer | nagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-07-13 14:25:36 +0000 |
commit | 57ec0834a1fdd759d942feba1568305853d77270 (patch) | |
tree | c629d27251472d01b19254931f09e89f22c77ef5 /bignum.c | |
parent | e62660c9208ff1da2bbe5b72197f74e9c1cdf4da (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.c | 8 |
1 files changed, 4 insertions, 4 deletions
@@ -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); } |