summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--bignum.c8
-rw-r--r--version.h2
3 files changed, 13 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 23a92a0106..6f0f295332 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Sat Jul 13 23:16:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigrsh_bang): Fix bignum digits overrun.
+
+Sat Jul 13 23:16:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (biglsh_bang): Fix bignum digits under-run.
+
Sat Jul 13 22:45:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* configure.in (RUBY_DTRACE_POSTPROCESS): dtrace version SUN D 1.11
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);
}
diff --git a/version.h b/version.h
index 9dc2e74ba4..c6af636702 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.0.0"
#define RUBY_RELEASE_DATE "2013-07-13"
-#define RUBY_PATCHLEVEL 257
+#define RUBY_PATCHLEVEL 258
#define RUBY_RELEASE_YEAR 2013
#define RUBY_RELEASE_MONTH 7