merge revision(s) 61517: [Backport #14259]

numeric.c: Fix Integer#pow with a large Fixnum modulo

	* numeric.c: Fix Integer#pow with a large Fixnum modulo
	  [Bug #14259] [ruby-core:84562]

	* test/ruby/test_numeric.rb: add assertions for reproducing this bug.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@61629 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2018-01-05 20:40:12 +00:00
parent 311d499f5e
commit a697c8b61b
3 changed files with 9 additions and 2 deletions

View file

@ -7016,7 +7016,9 @@ int_pow_tmp2(VALUE x, VALUE y, long mm, int nega_flg)
xx = MUL_MODULO(xx, xx, m);
}
#ifndef DLONG
#ifdef DLONG
tmp = tmp2;
#else
tmp = FIX2LONG(tmp2);
#endif
if (nega_flg && tmp) {

View file

@ -400,6 +400,11 @@ class TestNumeric < Test::Unit::TestCase
2120078484650058507891187874713297895455.
pow(5478118174010360425845660566650432540723,
5263488859030795548286226023720904036518))
assert_equal(12, 12.pow(1, 10000000000), '[Bug #14259]')
assert_equal(12, 12.pow(1, 10000000001), '[Bug #14259]')
assert_equal(12, 12.pow(1, 10000000002), '[Bug #14259]')
assert_equal(17298641040, 12.pow(72387894339363242, 243682743764), '[Bug #14259]')
end
end

View file

@ -1,6 +1,6 @@
#define RUBY_VERSION "2.5.0"
#define RUBY_RELEASE_DATE "2018-01-06"
#define RUBY_PATCHLEVEL 7
#define RUBY_PATCHLEVEL 8
#define RUBY_RELEASE_YEAR 2018
#define RUBY_RELEASE_MONTH 1