Skip to content

Commit fe8221a

Browse files
committed
merge revision(s) f4f728b: [Backport #21680]
[PATCH] [Bug #21680] Fix (base**power_of_two).digits(base) bug (ruby#15144) Fix wrong condition in base multiplying loop.
1 parent 625eeae commit fe8221a

3 files changed

Lines changed: 5 additions & 2 deletions

File tree

numeric.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5552,7 +5552,7 @@ rb_int_digits_bigbase(VALUE num, VALUE base)
55525552
}
55535553

55545554
bases = rb_ary_new();
5555-
for (VALUE b = base; int_lt(b, num) == Qtrue; b = rb_int_mul(b, b)) {
5555+
for (VALUE b = base; int_le(b, num) == Qtrue; b = rb_int_mul(b, b)) {
55565556
rb_ary_push(bases, b);
55575557
}
55585558
digits = rb_ary_new_from_args(1, num);

test/ruby/test_bignum.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -778,6 +778,9 @@ def test_digits
778778
assert_equal([7215, 2413, 6242], T1024P.digits(10_000).first(3))
779779
assert_equal([11], 11.digits(T1024P))
780780
assert_equal([T1024P - 1, 1], (T1024P + T1024P - 1).digits(T1024P))
781+
bug21680 = '[ruby-core:123769] [Bug #21680]'
782+
assert_equal([0] * 64 + [1], (2**512).digits(256), bug21680)
783+
assert_equal([0] * 128 + [1], (123**128).digits(123), bug21680)
781784
end
782785

783786
def test_digits_for_negative_numbers

version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
1212
#define RUBY_VERSION_TEENY 7
1313
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
14-
#define RUBY_PATCHLEVEL 66
14+
#define RUBY_PATCHLEVEL 67
1515

1616
#include "ruby/version.h"
1717
#include "ruby/internal/abi.h"

0 commit comments

Comments
 (0)