From a697c8b61b74744a63f2e896b36207fadf52f766 Mon Sep 17 00:00:00 2001 From: naruse Date: Fri, 5 Jan 2018 20:40:12 +0000 Subject: [PATCH] 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 --- bignum.c | 4 +++- test/ruby/test_numeric.rb | 5 +++++ version.h | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/bignum.c b/bignum.c index 148276743f..7ffb798e5e 100644 --- a/bignum.c +++ b/bignum.c @@ -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) { diff --git a/test/ruby/test_numeric.rb b/test/ruby/test_numeric.rb index 02a6b8f4a8..6efc40320a 100644 --- a/test/ruby/test_numeric.rb +++ b/test/ruby/test_numeric.rb @@ -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 diff --git a/version.h b/version.h index ca59f6ddeb..6cbc4ba608 100644 --- a/version.h +++ b/version.h @@ -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