summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-07-08 16:19:18 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-07-08 16:19:18 +0000
commitfa1e85c9331d0761418ef4dca87d9a51f5849cfc (patch)
tree8ece9016abfdd9590600ca3826109ea1d9b1c8f7
parent2db6f96cd0c06e18b592446cdc5bb684eb191caf (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--ChangeLog4
-rw-r--r--bignum.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 43365c401f..7b9b116700 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/bignum.c b/bignum.c
index c93061d44f..5918cefb7e 100644
--- a/bignum.c
+++ b/bignum.c
@@ -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);
}