diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-07-08 16:19:18 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-07-08 16:19:18 +0000 |
commit | fa1e85c9331d0761418ef4dca87d9a51f5849cfc (patch) | |
tree | 8ece9016abfdd9590600ca3826109ea1d9b1c8f7 | |
parent | 2db6f96cd0c06e18b592446cdc5bb684eb191caf (diff) |
* bignum.c (bigrsh_bang): Fix bignum digits overrun.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | bignum.c | 4 |
2 files changed, 6 insertions, 2 deletions
@@ -1,3 +1,7 @@ +Tue Jul 9 01:17:57 2013 Tanaka Akira <akr@fsij.org> + + * bignum.c (bigrsh_bang): Fix bignum digits overrun. + Tue Jul 9 00:46:22 2013 Tanaka Akira <akr@fsij.org> * bignum.c (biglsh_bang): Fix bignum digits under-run. @@ -4452,11 +4452,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++] = BIGLO(*zds<<s3) | num; num = *zds++>>s2; } - while (i < xn - s1 - 1); + assert(i < xn); xds[i] = num; MEMZERO(xds + xn - s1, BDIGIT, s1); } |