summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numeric.c2
-rw-r--r--test/ruby/test_bignum.rb3
-rw-r--r--version.h2
3 files changed, 5 insertions, 2 deletions
diff --git a/numeric.c b/numeric.c
index 41891acf1a..63a13906ed 100644
--- a/numeric.c
+++ b/numeric.c
@@ -5487,7 +5487,7 @@ rb_int_digits_bigbase(VALUE num, VALUE base)
}
bases = rb_ary_new();
- for (VALUE b = base; int_lt(b, num) == Qtrue; b = rb_int_mul(b, b)) {
+ for (VALUE b = base; int_le(b, num) == Qtrue; b = rb_int_mul(b, b)) {
rb_ary_push(bases, b);
}
digits = rb_ary_new_from_args(1, num);
diff --git a/test/ruby/test_bignum.rb b/test/ruby/test_bignum.rb
index 1b705b02a8..b969927293 100644
--- a/test/ruby/test_bignum.rb
+++ b/test/ruby/test_bignum.rb
@@ -778,6 +778,9 @@ class TestBignum < Test::Unit::TestCase
assert_equal([7215, 2413, 6242], T1024P.digits(10_000).first(3))
assert_equal([11], 11.digits(T1024P))
assert_equal([T1024P - 1, 1], (T1024P + T1024P - 1).digits(T1024P))
+ bug21680 = '[ruby-core:123769] [Bug #21680]'
+ assert_equal([0] * 64 + [1], (2**512).digits(256), bug21680)
+ assert_equal([0] * 128 + [1], (123**128).digits(123), bug21680)
end
def test_digits_for_negative_numbers
diff --git a/version.h b/version.h
index b461174221..9ac6650171 100644
--- a/version.h
+++ b/version.h
@@ -11,7 +11,7 @@
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
#define RUBY_VERSION_TEENY 10
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
-#define RUBY_PATCHLEVEL 193
+#define RUBY_PATCHLEVEL 194
#include "ruby/version.h"
#include "ruby/internal/abi.h"