From 7fe201b1485fd773daf031c2eed10ad221f96c19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 23 Feb 2012 09:14:02 +0100 Subject: [PATCH 001/530] Initial .spec for Ruby 2.0.0. --- ...9.3-added-site-and-vendor-arch-flags.patch | 2 +- ruby-1.9.3-arch-specific-dir.patch | 2 +- ruby-1.9.3-bignum-test-fix.patch | 31 -------- ruby-1.9.3-mkmf-verbose.patch | 4 +- ruby-1.9.3-webrick-test-fix.patch | 24 ------- ruby.spec | 71 ++++++++----------- 6 files changed, 34 insertions(+), 100 deletions(-) delete mode 100644 ruby-1.9.3-bignum-test-fix.patch delete mode 100644 ruby-1.9.3-webrick-test-fix.patch diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch index 1363063..6f217c2 100644 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch @@ -43,7 +43,7 @@ index 83e5d76..31532bd 100644 +done + AC_ARG_WITH(vendordir, - AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]]]), + AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), [vendordir=$withval], @@ -2820,19 +2829,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDOR_DIR}" diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index 8440ea7..acf60c8 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -40,7 +40,7 @@ index 83e5d76..e6dc38c 100644 +done + AC_ARG_WITH(sitedir, - AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]]]), + AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), [sitedir=$withval], @@ -2815,16 +2824,25 @@ if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) diff --git a/ruby-1.9.3-bignum-test-fix.patch b/ruby-1.9.3-bignum-test-fix.patch deleted file mode 100644 index cb3682d..0000000 --- a/ruby-1.9.3-bignum-test-fix.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- ruby-1.9.3-p0/test/ruby/test_bignum.rb.orig 2011-11-10 09:52:59.101925465 +0100 -+++ ruby-1.9.3-p0/test/ruby/test_bignum.rb 2011-11-10 09:54:14.580798826 +0100 -@@ -378,7 +378,7 @@ - assert_equal(true, (2**32).even?) - end - -- def interrupt -+ def assert_interrupt - time = Time.now - start_flag = false - end_flag = false -@@ -387,14 +387,16 @@ - yield - end_flag = true - end -- sleep 1 -+ Thread.pass until start_flag - thread.raise - thread.join rescue nil -- start_flag && !end_flag && Time.now - time < 10 -+ time = Time.now - time -+ assert_equal([true, false], [start_flag, end_flag]) -+ assert_operator(time, :<, 10) - end - - def test_interrupt -- assert(interrupt { (65536 ** 65536).to_s }) -+ assert_interrupt {(65536 ** 65536).to_s} - end - - def test_too_big_to_s diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index 7da66c8..f23d6cc 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -1,6 +1,6 @@ --- ruby-1.9.3-p0/lib/mkmf.rb.debug 2011-08-11 15:07:37.000000000 +0900 +++ ruby-1.9.3-p0/lib/mkmf.rb 2012-01-29 21:34:17.000000000 +0900 -@@ -1638,7 +1638,7 @@ +@@ -1701,7 +1701,7 @@ SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. @@ -8,4 +8,4 @@ +V = 1 Q1 = $(V:1=) Q = $(Q1:0=@) - n=$(NULLCMD) + ECHO1 = $(V:1=@#{CONFIG['NULLCMD']}) diff --git a/ruby-1.9.3-webrick-test-fix.patch b/ruby-1.9.3-webrick-test-fix.patch deleted file mode 100644 index c6eb3fa..0000000 --- a/ruby-1.9.3-webrick-test-fix.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/test/webrick/test_cgi.rb b/test/webrick/test_cgi.rb -index 1185316..0ef1b37 100644 ---- a/test/webrick/test_cgi.rb -+++ b/test/webrick/test_cgi.rb -@@ -14,6 +14,7 @@ class TestWEBrickCGI < Test::Unit::TestCase - def req.meta_vars - meta = super - meta["RUBYLIB"] = $:.join(File::PATH_SEPARATOR) -+ meta[RbConfig::CONFIG['LIBPATHENV']] = ENV[RbConfig::CONFIG['LIBPATHENV']] - return meta - end - }, -diff --git a/test/webrick/test_filehandler.rb b/test/webrick/test_filehandler.rb -index bcdb3df..f78ba5c 100644 ---- a/test/webrick/test_filehandler.rb -+++ b/test/webrick/test_filehandler.rb -@@ -252,6 +252,7 @@ class WEBrick::TestFileHandler < Test::Unit::TestCase - def req.meta_vars - meta = super - meta["RUBYLIB"] = $:.join(File::PATH_SEPARATOR) -+ meta[RbConfig::CONFIG['LIBPATHENV']] = ENV[RbConfig::CONFIG['LIBPATHENV']] - return meta - end - }, diff --git a/ruby.spec b/ruby.spec index 887454d..274491d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,13 +1,15 @@ -%global major_version 1 -%global minor_version 9 -%global teeny_version 3 -%global patch_level 385 +%global major_version 2 +%global minor_version 0 +%global teeny_version 0 +%global patch_level 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_version_patch_level %{major_minor_version}.%{teeny_version}.%{patch_level} -%global ruby_abi %{major_minor_version}.1 +# Keep the ruby abi 1.9.1 for compatibility with gems. +# %global ruby_abi %{major_minor_version}.0 +%global ruby_abi 1.9.1 %global ruby_archive %{name}-%{ruby_version}-p%{patch_level} @@ -44,7 +46,7 @@ %global bigdecimal_version 1.1.0 %global io_console_version 0.3 %global json_version 1.5.4 -%global minitest_version 2.5.1 +%global minitest_version 2.8.1 %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') @@ -78,9 +80,6 @@ Patch4: ruby-1.9.3-fix-s390x-build.patch # Fix the uninstaller, so that it doesn't say that gem doesn't exist # when it exists outside of the GEM_HOME (already fixed in the upstream) Patch5: ruby-1.9.3-rubygems-1.8.11-uninstaller.patch -# Already fixed upstream: -# https://github.com/ruby/ruby/commit/f212df564a4e1025f9fb019ce727022a97bfff53 -Patch7: ruby-1.9.3-bignum-test-fix.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://redmine.ruby-lang.org/issues/5617 Patch8: ruby-1.9.3-custom-rubygems-location.patch @@ -330,6 +329,9 @@ minitest/pride shows pride in testing and adds coloring to your test output. +# TODO: +# %%pacakge -n rubygem-psych + %package tcltk Summary: Tcl/Tk interface for scripting language Ruby Group: Development/Languages @@ -348,7 +350,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch3 -p1 %patch4 -p1 %patch5 -p1 -%patch7 -p1 %patch8 -p1 %patch9 -p1 %patch10 -p1 @@ -424,7 +425,7 @@ mkdir -p %{buildroot}%{rubygems_dir}/rubygems/defaults cp %{SOURCE1} %{buildroot}%{rubygems_dir}/rubygems/defaults # Move gems root into common direcotry, out of Ruby directory structure. -mv %{buildroot}%{ruby_libdir}/gems/%{ruby_abi} %{buildroot}%{gem_dir} +mv %{buildroot}%{ruby_libdir}/gems/2.0.0 %{buildroot}%{gem_dir} # Create folders for gem binary extensions. mkdir -p %{buildroot}%{gem_extdir}/exts @@ -460,49 +461,31 @@ mkdir -p %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib mv %{buildroot}%{ruby_libdir}/minitest %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib # Adjust the gemspec files so that the gems will load properly -sed -i '2 a\ - s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/rake-%{rake_version}.gemspec +sed -i '8 a\ + s.require_paths = ["lib"]' %{buildroot}/%{gem_dir}/specifications/rake-%{rake_version}.gemspec -sed -i '2 a\ - s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec +sed -i '8 a\ + s.require_paths = ["lib"]' %{buildroot}/%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec -sed -i '2 a\ +sed -i '8 a\ s.require_paths = ["lib"]\ s.extensions = ["bigdecimal.so"]' %{buildroot}%{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec -sed -i '2 a\ +sed -i '8 a\ s.require_paths = ["lib"]\ s.extensions = ["io/console.so"]' %{buildroot}%{gem_dir}/specifications/io-console-%{io_console_version}.gemspec -sed -i '2 a\ +sed -i '8 a\ s.require_paths = ["lib"]\ s.extensions = ["json/ext/parser.so", "json/ext/generator.so"]' %{buildroot}%{gem_dir}/specifications/json-%{json_version}.gemspec -sed -i '2 a\ - s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec +sed -i '8 a\ + s.require_paths = ["lib"]' %{buildroot}/%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec %check -DISABLE_TESTS="" - -# OpenSSL 1.0.1 is breaking the drb test suite. -# https://bugs.ruby-lang.org/issues/6221 -DISABLE_TESTS="-x test_drbssl.rb $DISABLE_TESTS" - -%ifarch armv7l armv7hl armv7hnl -# test_call_double(DL::TestDL) fails on ARM HardFP -# http://bugs.ruby-lang.org/issues/6592 -DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" -%endif - -%ifarch %{arm} -# test_parse.rb fails on ARM at line 787 -# http://bugs.ruby-lang.org/issues/6899 -DISABLE_TESTS="-x test_parse.rb $DISABLE_TESTS" -%endif - -%ifnarch ppc ppc64 -make check TESTS="-v $DISABLE_TESTS" -%endif +# TODO: Investigate the test failures. +# https://bugs.ruby-lang.org/issues/6036 +make check TESTS="-v -x test_pathname.rb -x test_drbssl.rb -x test_x509cert.rb" %post libs -p /sbin/ldconfig @@ -513,6 +496,11 @@ make check TESTS="-v $DISABLE_TESTS" %lang(ja) %doc COPYING.ja %doc GPL %doc LEGAL +%doc NEWS +%doc README +%lang(ja) %doc README.ja +%doc doc/ChangeLog-* +%doc doc/NEWS-* %{_bindir}/erb %{_bindir}/ruby %{_bindir}/testrb @@ -665,6 +653,7 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/enc/utf_32be.so %{ruby_libarchdir}/enc/utf_32le.so %{ruby_libarchdir}/enc/windows_1251.so +%{ruby_libarchdir}/enc/windows_31j.so %{ruby_libarchdir}/etc.so %{ruby_libarchdir}/fcntl.so %{ruby_libarchdir}/fiber.so From ea3cb65d830a50ea5cdede10652529563d91ab51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 18 Apr 2012 19:40:36 +0200 Subject: [PATCH 002/530] Upgrade to Ruby 2.0.0 (r35368). --- ...9.3-added-site-and-vendor-arch-flags.patch | 31 +++++++++---------- ruby-1.9.3-always-use-i386.patch | 2 +- ruby-1.9.3-arch-specific-dir.patch | 18 +++++------ ruby-1.9.3-custom-rubygems-location.patch | 14 ++++----- ruby-1.9.3-disable-versioned-paths.patch | 10 +++--- ruby-1.9.3-mkmf-verbose.patch | 2 +- ruby.spec | 26 ++++++++++------ 7 files changed, 54 insertions(+), 49 deletions(-) diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch index 6f217c2..cf91b02 100644 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch @@ -15,7 +15,7 @@ diff --git a/Makefile.in b/Makefile.in index bcdaf5f..f57e4c4 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -34,6 +34,9 @@ datadir = @datadir@ +@@ -37,6 +37,9 @@ datadir = @datadir@ archdir = @archdir@ sitearch = @sitearch@ sitedir = @sitedir@ @@ -29,7 +29,7 @@ diff --git a/configure.in b/configure.in index 83e5d76..31532bd 100644 --- a/configure.in +++ b/configure.in -@@ -2811,6 +2811,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do +@@ -2866,6 +2866,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do dir="${SITE_DIR}" done @@ -45,7 +45,7 @@ index 83e5d76..31532bd 100644 AC_ARG_WITH(vendordir, AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), [vendordir=$withval], -@@ -2820,19 +2829,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -2875,19 +2884,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDOR_DIR}" done @@ -78,7 +78,7 @@ index 83e5d76..31532bd 100644 fi pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)' -@@ -2850,6 +2872,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], +@@ -2905,12 +2927,26 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], [ RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\"" ]) @@ -92,31 +92,30 @@ index 83e5d76..31532bd 100644 AS_CASE(["$RUBY_VENDOR_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_VENDOR_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_LIB_PATH\" : \"$pat\"`"'"' -@@ -2857,6 +2886,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], + ], [ RUBY_VENDOR_LIB_PATH="\"${RUBY_VENDOR_LIB_PATH}\"" - ]) ++ ]) +AS_CASE(["$RUBY_VENDOR_ARCHLIB_PATH"], + ["$RUBY_LIB_PREFIX/"*], [ + RUBY_VENDOR_ARCHLIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_ARCHLIB_PATH\" : \"$pat\"`"'"' + ], + [ + RUBY_VENDOR_ARCHLIB_PATH="\"${RUBY_VENDOR_ARCHLIB_PATH}\"" -+ ]) + ]) pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)' AS_CASE(["$RUBY_LIB_PREFIX"], - ["$RUBY_EXEC_PREFIX/"*], [ -@@ -2878,19 +2914,23 @@ if test "x$SITE_DIR" = xno; then - AC_DEFINE(NO_RUBY_SITE_LIB) +@@ -2933,19 +2969,23 @@ if test "x$SITE_DIR" = xno; then + AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else - AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH}) -+ AC_DEFINE_UNQUOTED(RUBY_SITE_ARCHLIB, ${RUBY_SITE_ARCHLIB_PATH}) + AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH} !!) ++ AC_DEFINE_UNQUOTED(RUBY_SITE_ARCHLIB, ${RUBY_SITE_ARCHLIB_PATH} !!) fi if test "x$VENDOR_DIR" = xno; then - AC_DEFINE(NO_RUBY_VENDOR_LIB) + AC_DEFINE(NO_RUBY_VENDOR_LIB, [] !!) else - AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB, ${RUBY_VENDOR_LIB_PATH}) -+ AC_DEFINE_UNQUOTED(RUBY_VENDOR_ARCHLIB, ${RUBY_VENDOR_ARCHLIB_PATH}) + AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB, ${RUBY_VENDOR_LIB_PATH} !!) ++ AC_DEFINE_UNQUOTED(RUBY_VENDOR_ARCHLIB, ${RUBY_VENDOR_ARCHLIB_PATH} !!) fi AC_SUBST(arch)dnl @@ -170,7 +169,7 @@ diff --git a/version.c b/version.c index 59d4e5e..2558aa0 100644 --- a/version.c +++ b/version.c -@@ -50,8 +50,12 @@ +@@ -51,8 +51,12 @@ #ifndef RUBY_ARCHLIB #define RUBY_ARCHLIB RUBY_LIB "/"RUBY_ARCH #endif diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch index f5a8c3d..c7e3b75 100644 --- a/ruby-1.9.3-always-use-i386.patch +++ b/ruby-1.9.3-always-use-i386.patch @@ -1,6 +1,6 @@ --- a/configure.in.orig 2011-10-18 08:56:21.587594685 +0200 +++ b/configure.in 2011-10-18 08:56:59.751593321 +0200 -@@ -2935,6 +2935,8 @@ +@@ -2990,6 +2990,8 @@ configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index acf60c8..c5017e3 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -14,7 +14,7 @@ diff --git a/Makefile.in b/Makefile.in index bcdaf5f..d61b2ee 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -31,6 +31,7 @@ libexecdir = @libexecdir@ +@@ -34,6 +34,7 @@ libexecdir = @libexecdir@ datarootdir = @datarootdir@ datadir = @datadir@ arch = @arch@ @@ -26,7 +26,7 @@ diff --git a/configure.in b/configure.in index 83e5d76..e6dc38c 100644 --- a/configure.in +++ b/configure.in -@@ -2793,6 +2793,15 @@ else +@@ -2848,6 +2848,15 @@ else RUBY_LIB_VERSION="\"${ruby_version}\"" fi @@ -42,7 +42,7 @@ index 83e5d76..e6dc38c 100644 AC_ARG_WITH(sitedir, AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), [sitedir=$withval], -@@ -2815,16 +2824,25 @@ if test "${LOAD_RELATIVE+set}"; then +@@ -2870,16 +2879,25 @@ if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" @@ -68,15 +68,15 @@ index 83e5d76..e6dc38c 100644 AS_CASE(["$RUBY_SITE_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"' -@@ -2855,6 +2873,7 @@ else +@@ -2910,6 +2928,7 @@ fi AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}") - AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX}) -+AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, ${RUBY_ARCH_LIB_PATH}) + AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX} !!) ++AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, ${RUBY_ARCH_LIB_PATH} !!) if test "x$SITE_DIR" = xno; then - AC_DEFINE(NO_RUBY_SITE_LIB) + AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else -@@ -2869,6 +2888,7 @@ fi +@@ -2924,6 +2943,7 @@ fi AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -117,7 +117,7 @@ diff --git a/version.c b/version.c index 59d4e5e..915a0a2 100644 --- a/version.c +++ b/version.c -@@ -47,7 +47,9 @@ +@@ -48,7 +48,9 @@ #define RUBY_SITE_LIB2 RUBY_SITE_LIB "/"RUBY_LIB_VERSION #define RUBY_VENDOR_LIB2 RUBY_VENDOR_LIB "/"RUBY_LIB_VERSION #endif diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index 62d3dad..1db16aa 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index b1bc951..91c5d0d 100644 --- a/configure.in +++ b/configure.in -@@ -2838,6 +2838,13 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -2893,6 +2893,13 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDORARCH_DIR}" done @@ -29,7 +29,7 @@ index b1bc951..91c5d0d 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" -@@ -2931,6 +2938,7 @@ AC_SUBST(sitearch)dnl +@@ -2986,6 +2993,7 @@ AC_SUBST(sitearch)dnl AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorarchdir)dnl @@ -53,15 +53,15 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index 6bfc73e..31dc446 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -300,6 +300,7 @@ sitelibdir = CONFIG["sitelibdir"] +@@ -311,6 +311,7 @@ sitelibdir = CONFIG["sitelibdir"] sitearchlibdir = CONFIG["sitearchdir"] vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] +rubygemsdir = CONFIG["rubygemsdir"] - mandir = CONFIG["mandir"] - capidir = CONFIG["docdir"] + mandir = CONFIG["mandir", true] + capidir = CONFIG["docdir", true] configure_args = Shellwords.shellwords(CONFIG["configure_args"]) -@@ -487,7 +488,15 @@ end +@@ -498,7 +499,15 @@ end install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[README* *.txt *.rdoc] @@ -81,7 +81,7 @@ diff --git a/version.c b/version.c index 59d4e5e..12ba7e9 100644 --- a/version.c +++ b/version.c -@@ -103,6 +103,10 @@ const char ruby_initial_load_paths[] = +@@ -104,6 +104,10 @@ const char ruby_initial_load_paths[] = #endif #endif diff --git a/ruby-1.9.3-disable-versioned-paths.patch b/ruby-1.9.3-disable-versioned-paths.patch index 6d0c5e1..2b7f6fb 100644 --- a/ruby-1.9.3-disable-versioned-paths.patch +++ b/ruby-1.9.3-disable-versioned-paths.patch @@ -13,7 +13,7 @@ diff --git a/configure.in b/configure.in index e742e74..86cb68f 100644 --- a/configure.in +++ b/configure.in -@@ -2963,6 +2963,17 @@ else +@@ -3018,6 +3018,17 @@ else fi AC_SUBST(USE_RUBYGEMS) @@ -75,7 +75,7 @@ diff --git a/version.c b/version.c index 59d4e5e..641dc33 100644 --- a/version.c +++ b/version.c -@@ -38,9 +38,15 @@ +@@ -39,9 +39,15 @@ #define RUBY_VENDOR_LIB RUBY_LIB_PREFIX"/vendor_ruby" #endif @@ -91,7 +91,7 @@ index 59d4e5e..641dc33 100644 #define RUBY_ARCHLIB RUBY_LIB "/"RUBY_ARCH #define RUBY_SITE_ARCHLIB RUBY_SITE_LIB2 "/"RUBY_SITEARCH #define RUBY_VENDOR_ARCHLIB RUBY_VENDOR_LIB2 "/"RUBY_SITEARCH -@@ -75,8 +81,10 @@ const char ruby_initial_load_paths[] = +@@ -76,8 +82,10 @@ const char ruby_initial_load_paths[] = RUBY_SITE_THIN_ARCHLIB "\0" #endif RUBY_SITE_ARCHLIB "\0" @@ -102,7 +102,7 @@ index 59d4e5e..641dc33 100644 #ifndef NO_RUBY_VENDOR_LIB RUBY_VENDOR_LIB2 "\0" -@@ -84,8 +92,10 @@ const char ruby_initial_load_paths[] = +@@ -85,8 +93,10 @@ const char ruby_initial_load_paths[] = RUBY_VENDOR_THIN_ARCHLIB "\0" #endif RUBY_VENDOR_ARCHLIB "\0" @@ -135,7 +135,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index cec8c9f..fed14d2 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -379,7 +379,7 @@ end +@@ -390,7 +390,7 @@ end install?(:doc, :rdoc) do if $rdocdir diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index f23d6cc..69e61bd 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -1,6 +1,6 @@ --- ruby-1.9.3-p0/lib/mkmf.rb.debug 2011-08-11 15:07:37.000000000 +0900 +++ ruby-1.9.3-p0/lib/mkmf.rb 2012-01-29 21:34:17.000000000 +0900 -@@ -1701,7 +1701,7 @@ +@@ -1725,7 +1725,7 @@ SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. diff --git a/ruby.spec b/ruby.spec index 274491d..33f195c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -11,7 +11,13 @@ # %global ruby_abi %{major_minor_version}.0 %global ruby_abi 1.9.1 -%global ruby_archive %{name}-%{ruby_version}-p%{patch_level} +# If revision is removed/commented out, the official release build is expected. +# Keep the revision enabled for pre-releases from SVN. +%global revision 35368 + +%global release 1 + +%global ruby_archive %{name}-%{ruby_version}-%{?revision:r%{revision}}%{!?revision:p%{patch_level}} %global ruby_libdir %{_datadir}/%{name} %global ruby_libarchdir %{_libdir}/%{name} @@ -45,7 +51,7 @@ %global rdoc_version 3.9.5 %global bigdecimal_version 1.1.0 %global io_console_version 0.3 -%global json_version 1.5.4 +%global json_version 1.6.6 %global minitest_version 2.8.1 %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') @@ -53,12 +59,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version_patch_level} -# Note: -# As seen on perl srpm, as this (ruby) srpm contains several sub-components, -# we cannot reset the release number to 1 even when the main (ruby) version -# is updated - because it may be that the versions of sub-components don't -# change. -Release: 28%{?dist} +Release: %{?revision:0.}%{release}%{?revision:.r%{revision}}%{?dist} Group: Development/Languages # Public Domain for example for: include/ruby/st.h, strftime.c, ... License: (Ruby or BSD) and Public Domain @@ -484,8 +485,13 @@ sed -i '8 a\ %check # TODO: Investigate the test failures. -# https://bugs.ruby-lang.org/issues/6036 -make check TESTS="-v -x test_pathname.rb -x test_drbssl.rb -x test_x509cert.rb" +# OpenSSL 1.0.1 is breaking the drb test suite. +# https://bugs.ruby-lang.org/issues/6221 +# TestTimeTZ failures - Resolved by r35377. +# https://bugs.ruby-lang.org/issues/6318 +# TestWEBrickHTTPRequest and WEBrick::TestFileHandler fail +# https://bugs.ruby-lang.org/issues/6319 +make check TESTS="-v -x test_drbssl.rb -x test_time_tz.rb -x test_httprequest.rb -x test_filehandler.rb" %post libs -p /sbin/ldconfig From 4efe111a88832169e59c893d2b09e3519f58ffaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 5 Jun 2012 14:52:00 +0200 Subject: [PATCH 003/530] Upgrade to Ruby 2.0.0 (r35922). --- ruby-1.9.3-custom-rubygems-location.patch | 2 +- ruby.spec | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index 1db16aa..8ea2162 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -59,7 +59,7 @@ index 6bfc73e..31dc446 100755 vendorarchlibdir = CONFIG["vendorarchdir"] +rubygemsdir = CONFIG["rubygemsdir"] mandir = CONFIG["mandir", true] - capidir = CONFIG["docdir", true] + docdir = CONFIG["docdir", true] configure_args = Shellwords.shellwords(CONFIG["configure_args"]) @@ -498,7 +499,15 @@ end install?(:local, :comm, :lib) do diff --git a/ruby.spec b/ruby.spec index 33f195c..cf20c6c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ # If revision is removed/commented out, the official release build is expected. # Keep the revision enabled for pre-releases from SVN. -%global revision 35368 +%global revision 35922 %global release 1 @@ -51,8 +51,8 @@ %global rdoc_version 3.9.5 %global bigdecimal_version 1.1.0 %global io_console_version 0.3 -%global json_version 1.6.6 -%global minitest_version 2.8.1 +%global json_version 1.7.1 +%global minitest_version 3.0.0 %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') @@ -579,6 +579,7 @@ make check TESTS="-v -x test_drbssl.rb -x test_time_tz.rb -x test_httprequest.rb %{ruby_libdir}/rss %{ruby_libdir}/shell %{ruby_libdir}/syck +%{ruby_libdir}/syslog %{ruby_libdir}/test %exclude %{ruby_libdir}/tk %exclude %{ruby_libdir}/tkextlib @@ -665,7 +666,6 @@ make check TESTS="-v -x test_drbssl.rb -x test_time_tz.rb -x test_httprequest.rb %{ruby_libarchdir}/fiber.so %{ruby_libarchdir}/fiddle.so %{ruby_libarchdir}/gdbm.so -%{ruby_libarchdir}/iconv.so %dir %{ruby_libarchdir}/io %{ruby_libarchdir}/io/nonblock.so %{ruby_libarchdir}/io/wait.so From dc683b73ac303765d7329cb77c9ea958420f999e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 6 Jun 2012 14:19:36 +0200 Subject: [PATCH 004/530] Patch updated to contain !! mark. Moves the RUBYGEMS_DIR macro definition into verconf.h. This change was requested by nobu at https://bugs.ruby-lang.org/issues/5617 --- ruby-1.9.3-custom-rubygems-location.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index 8ea2162..24195c7 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -23,7 +23,7 @@ index b1bc951..91c5d0d 100644 + AS_HELP_STRING([--with-rubygemsdir=DIR], [custom rubygems directory]), + [rubygemsdir=$withval]) +if test "$rubygemsdir" != ""; then -+ AC_DEFINE_UNQUOTED(RUBYGEMS_DIR,"$rubygemsdir") ++ AC_DEFINE_UNQUOTED(RUBYGEMS_DIR,"$rubygemsdir" !!) +fi + if test "${LOAD_RELATIVE+set}"; then From 54ae4143676223ecd28a9c563b488f3390a4d30c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 19 Apr 2012 10:03:22 +0200 Subject: [PATCH 005/530] Remove superfluous slashes. --- ruby.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index cf20c6c..7e1fde4 100644 --- a/ruby.spec +++ b/ruby.spec @@ -463,10 +463,10 @@ mv %{buildroot}%{ruby_libdir}/minitest %{buildroot}%{gem_dir}/gems/minitest-%{mi # Adjust the gemspec files so that the gems will load properly sed -i '8 a\ - s.require_paths = ["lib"]' %{buildroot}/%{gem_dir}/specifications/rake-%{rake_version}.gemspec + s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/rake-%{rake_version}.gemspec sed -i '8 a\ - s.require_paths = ["lib"]' %{buildroot}/%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec + s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec sed -i '8 a\ s.require_paths = ["lib"]\ @@ -481,7 +481,7 @@ sed -i '8 a\ s.extensions = ["json/ext/parser.so", "json/ext/generator.so"]' %{buildroot}%{gem_dir}/specifications/json-%{json_version}.gemspec sed -i '8 a\ - s.require_paths = ["lib"]' %{buildroot}/%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec + s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec %check # TODO: Investigate the test failures. From 95c97f6ea7dcef50ccb2be26b6dffc1ff96df14d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 14 Jun 2012 14:56:26 +0200 Subject: [PATCH 006/530] Enable tests and small ARM tweaks. The most of the tests are functional now. The only exception is the one test failing on armv7. Not sure about the PPC though. --- ruby.spec | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/ruby.spec b/ruby.spec index 7e1fde4..bbea036 100644 --- a/ruby.spec +++ b/ruby.spec @@ -484,14 +484,17 @@ sed -i '8 a\ s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec %check -# TODO: Investigate the test failures. -# OpenSSL 1.0.1 is breaking the drb test suite. -# https://bugs.ruby-lang.org/issues/6221 -# TestTimeTZ failures - Resolved by r35377. -# https://bugs.ruby-lang.org/issues/6318 -# TestWEBrickHTTPRequest and WEBrick::TestFileHandler fail -# https://bugs.ruby-lang.org/issues/6319 -make check TESTS="-v -x test_drbssl.rb -x test_time_tz.rb -x test_httprequest.rb -x test_filehandler.rb" +DISABLE_TESTS="" + +%ifarch armv7l armv7hl armv7hnl +# test_call_double(DL::TestDL) fails on ARM HardFP +# http://bugs.ruby-lang.org/issues/6592 +DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" +%endif + +%ifnarch ppc ppc64 +make check TESTS="-v $DISABLE_TESTS" +%endif %post libs -p /sbin/ldconfig From 6aa88d69aea017f384b3614476324aa008eb2c83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Jun 2012 16:54:05 +0200 Subject: [PATCH 007/530] Upgrade to Ruby 2.0.0 (r36169). --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index bbea036..54f5c5b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ # If revision is removed/commented out, the official release build is expected. # Keep the revision enabled for pre-releases from SVN. -%global revision 35922 +%global revision 36169 %global release 1 From 752aa5455a57c55d3a924eededb8489e1f1a4eef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 25 Jun 2012 10:02:24 +0200 Subject: [PATCH 008/530] Upgrade to Ruby 2.0.0 (r36213). --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 54f5c5b..36836e2 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ # If revision is removed/commented out, the official release build is expected. # Keep the revision enabled for pre-releases from SVN. -%global revision 36169 +%global revision 36213 %global release 1 From ccac016359504978a3f15cd5fb7d0ae07a53d3e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 1 Aug 2012 17:25:26 +0200 Subject: [PATCH 009/530] ruby-libs must require rubygems (rhbz#45011). --- ruby.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 36836e2..fbd1ebf 100644 --- a/ruby.spec +++ b/ruby.spec @@ -54,7 +54,7 @@ %global json_version 1.7.1 %global minitest_version 3.0.0 -%global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') +%global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') Summary: An interpreter of object-oriented scripting language Name: ruby @@ -110,7 +110,6 @@ Patch12: ruby-1.9.3-mkmf-verbose.patch Patch14: ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} -Requires: ruby(rubygems) >= %{rubygems_version} # Make the bigdecimal gem a runtime dependency of Ruby to avoid problems # with user-installed gems, that don't require it in gemspec/Gemfile # See https://bugzilla.redhat.com/show_bug.cgi?id=829209 @@ -154,6 +153,7 @@ Ruby or an application embedding Ruby. Summary: Libraries necessary to run Ruby Group: Development/Libraries License: Ruby or BSD +Requires: ruby(rubygems) >= %{rubygems_version} Provides: ruby(abi) = %{ruby_abi} %description libs From a5d4d8f85d7b2c43831eaf9e530f927c54b9b056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 14 Aug 2012 12:44:33 +0200 Subject: [PATCH 010/530] Revert the dependency of ruby-libs on rubygems (rhbz#845011, rhbz#847482). --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index fbd1ebf..7dfe04f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -110,6 +110,7 @@ Patch12: ruby-1.9.3-mkmf-verbose.patch Patch14: ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} +Requires: ruby(rubygems) >= %{rubygems_version} # Make the bigdecimal gem a runtime dependency of Ruby to avoid problems # with user-installed gems, that don't require it in gemspec/Gemfile # See https://bugzilla.redhat.com/show_bug.cgi?id=829209 @@ -153,7 +154,6 @@ Ruby or an application embedding Ruby. Summary: Libraries necessary to run Ruby Group: Development/Libraries License: Ruby or BSD -Requires: ruby(rubygems) >= %{rubygems_version} Provides: ruby(abi) = %{ruby_abi} %description libs From 5961c79b1c8238bed45cfdc5e0d2795553be3f9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 3 Sep 2012 14:44:25 +0200 Subject: [PATCH 011/530] Upgrade to Ruby 2.0.0 (r36887). --- ...0-r36832-rb_float_value-optimization.patch | 46 +++++++++++++++++++ ruby.spec | 12 +++-- 2 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 ruby-2.0-r36832-rb_float_value-optimization.patch diff --git a/ruby-2.0-r36832-rb_float_value-optimization.patch b/ruby-2.0-r36832-rb_float_value-optimization.patch new file mode 100644 index 0000000..97dc58b --- /dev/null +++ b/ruby-2.0-r36832-rb_float_value-optimization.patch @@ -0,0 +1,46 @@ +From 0b89d6d5f9f8c788f4391d8a0499f10aed624371 Mon Sep 17 00:00:00 2001 +From: ko1 +Date: Mon, 27 Aug 2012 09:22:21 +0000 +Subject: [PATCH] * include/ruby/ruby.h (rb_float_value): optimize it. This + technique was pointed by shinichiro.hamaji + . + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + ChangeLog | 6 ++++++ + include/ruby/ruby.h | 10 +++++----- + 2 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h +index 3905b32..b8b2267 100644 +--- a/include/ruby/ruby.h ++++ b/include/ruby/ruby.h +@@ -733,10 +733,7 @@ struct RFloat { + rb_float_value(VALUE v) + { + if (FLONUM_P(v)) { +- if (v == (VALUE)0x8000000000000002) { +- return 0.0; +- } +- else { ++ if (v != (VALUE)0x8000000000000002) { /* LIKELY */ + union { + double d; + VALUE v; +@@ -746,9 +743,12 @@ struct RFloat { + /* e: xx1... -> 011... */ + /* xx0... -> 100... */ + /* ^b63 */ +- t.v = RUBY_BIT_ROTR(((b63 ^ 1) << 1) | b63 | (v & ~0x03), 3); ++ t.v = RUBY_BIT_ROTR(2 - b63 | (v & ~0x03), 3); + return t.d; + } ++ else { ++ return 0.0; ++ } + } + else { + return ((struct RFloat *)v)->float_value; +-- +1.7.10 + diff --git a/ruby.spec b/ruby.spec index 7dfe04f..3e3449e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ # If revision is removed/commented out, the official release build is expected. # Keep the revision enabled for pre-releases from SVN. -%global revision 36213 +%global revision 36887 %global release 1 @@ -52,7 +52,7 @@ %global bigdecimal_version 1.1.0 %global io_console_version 0.3 %global json_version 1.7.1 -%global minitest_version 3.0.0 +%global minitest_version 3.3.0 %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') @@ -109,6 +109,10 @@ Patch12: ruby-1.9.3-mkmf-verbose.patch # TODO: Should be probably upstreamed with #5281. Patch14: ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch +# This patch breaks a test suite, so revert it for now. +# https://bugs.ruby-lang.org/issues/6971 +Patch100: ruby-2.0-r36832-rb_float_value-optimization.patch + Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} # Make the bigdecimal gem a runtime dependency of Ruby to avoid problems @@ -359,6 +363,8 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. #%%patch13 -p1 %patch14 -p1 +%patch100 -p1 -R + %build autoconf @@ -581,7 +587,6 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/ripper %{ruby_libdir}/rss %{ruby_libdir}/shell -%{ruby_libdir}/syck %{ruby_libdir}/syslog %{ruby_libdir}/test %exclude %{ruby_libdir}/tk @@ -690,7 +695,6 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/socket.so %{ruby_libarchdir}/stringio.so %{ruby_libarchdir}/strscan.so -%{ruby_libarchdir}/syck.so %{ruby_libarchdir}/syslog.so %exclude %{ruby_libarchdir}/tcltklib.so %exclude %{ruby_libarchdir}/tkutil.so From 0917ed3f905a48eae51b575c2a97b6553787cc03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 6 Sep 2012 09:28:09 +0200 Subject: [PATCH 012/530] Update TODO about rubygems-filesystem. --- ruby.spec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 3e3449e..e2e87e5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -41,7 +41,9 @@ # Specify custom RubyGems root. %global gem_dir %{_datadir}/gems -# TODO: Should we create arch specific rubygems-filesystem? +# TODO: These folders should go into rubygem-filesystem but how to achieve it, +# since noarch package cannot provide arch dependent subpackages? +# http://rpm.org/ticket/78 %global gem_extdir %{_exec_prefix}/lib{,64}/gems %global rake_version 0.9.2.2 From ff0af32c7d4fd3abcaefa3fedd419210b38c7bd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 6 Sep 2012 14:20:29 +0200 Subject: [PATCH 013/530] Split documentation into -doc subpackage. --- ruby.spec | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/ruby.spec b/ruby.spec index e2e87e5..946448b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -513,11 +513,6 @@ make check TESTS="-v $DISABLE_TESTS" %lang(ja) %doc COPYING.ja %doc GPL %doc LEGAL -%doc NEWS -%doc README -%lang(ja) %doc README.ja -%doc doc/ChangeLog-* -%doc doc/NEWS-* %{_bindir}/erb %{_bindir}/ruby %{_bindir}/testrb @@ -743,10 +738,12 @@ make check TESTS="-v $DISABLE_TESTS" %{_mandir}/man1/ri* %files doc +%doc NEWS %doc README %lang(ja) %doc README.ja %doc ChangeLog %doc doc/ChangeLog-* +%doc doc/NEWS-* %{_datadir}/ri %files -n rubygem-bigdecimal From 223ff9d8e4a12d1d985515d4b05f699db8afc253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 18 Oct 2012 07:28:23 +0200 Subject: [PATCH 014/530] Move NEWS to the main package. --- ruby.spec | 2 -- 1 file changed, 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 946448b..09551bd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -738,12 +738,10 @@ make check TESTS="-v $DISABLE_TESTS" %{_mandir}/man1/ri* %files doc -%doc NEWS %doc README %lang(ja) %doc README.ja %doc ChangeLog %doc doc/ChangeLog-* -%doc doc/NEWS-* %{_datadir}/ri %files -n rubygem-bigdecimal From 4531f33ec9ad12808ca2e73acf80cb33c5d24c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 5 Nov 2012 16:38:52 +0100 Subject: [PATCH 015/530] Upgrade to Ruby 2.0.0 (r37421). --- ...9.3-added-site-and-vendor-arch-flags.patch | 10 ++++---- ruby-1.9.3-always-use-i386.patch | 2 +- ruby-1.9.3-arch-specific-dir.patch | 10 ++++---- ruby-1.9.3-custom-rubygems-location.patch | 8 +++---- ruby-1.9.3-disable-versioned-paths.patch | 4 ++-- ruby-1.9.3-mkmf-verbose.patch | 2 +- ruby.spec | 14 +++++------ rubygems-1.8.11-binary-extensions.patch | 24 +++++++++---------- 8 files changed, 36 insertions(+), 38 deletions(-) diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch index cf91b02..add7b38 100644 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch @@ -15,7 +15,7 @@ diff --git a/Makefile.in b/Makefile.in index bcdaf5f..f57e4c4 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -37,6 +37,9 @@ datadir = @datadir@ +@@ -38,6 +38,9 @@ datadir = @datadir@ archdir = @archdir@ sitearch = @sitearch@ sitedir = @sitedir@ @@ -29,7 +29,7 @@ diff --git a/configure.in b/configure.in index 83e5d76..31532bd 100644 --- a/configure.in +++ b/configure.in -@@ -2866,6 +2866,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do +@@ -3028,6 +3028,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do dir="${SITE_DIR}" done @@ -45,7 +45,7 @@ index 83e5d76..31532bd 100644 AC_ARG_WITH(vendordir, AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), [vendordir=$withval], -@@ -2875,19 +2884,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -3037,19 +3046,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDOR_DIR}" done @@ -78,7 +78,7 @@ index 83e5d76..31532bd 100644 fi pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)' -@@ -2905,12 +2927,26 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], +@@ -3067,12 +3089,26 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], [ RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\"" ]) @@ -105,7 +105,7 @@ index 83e5d76..31532bd 100644 ]) pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)' AS_CASE(["$RUBY_LIB_PREFIX"], -@@ -2933,19 +2969,23 @@ if test "x$SITE_DIR" = xno; then +@@ -3095,19 +3131,23 @@ if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH} !!) diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch index c7e3b75..5eecdbf 100644 --- a/ruby-1.9.3-always-use-i386.patch +++ b/ruby-1.9.3-always-use-i386.patch @@ -1,6 +1,6 @@ --- a/configure.in.orig 2011-10-18 08:56:21.587594685 +0200 +++ b/configure.in 2011-10-18 08:56:59.751593321 +0200 -@@ -2990,6 +2990,8 @@ +@@ -3152,6 +3152,8 @@ configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index c5017e3..3088602 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -14,7 +14,7 @@ diff --git a/Makefile.in b/Makefile.in index bcdaf5f..d61b2ee 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -34,6 +34,7 @@ libexecdir = @libexecdir@ +@@ -35,6 +35,7 @@ libexecdir = @libexecdir@ datarootdir = @datarootdir@ datadir = @datadir@ arch = @arch@ @@ -26,7 +26,7 @@ diff --git a/configure.in b/configure.in index 83e5d76..e6dc38c 100644 --- a/configure.in +++ b/configure.in -@@ -2848,6 +2848,15 @@ else +@@ -3010,6 +3010,15 @@ else RUBY_LIB_VERSION="\"${ruby_version}\"" fi @@ -42,7 +42,7 @@ index 83e5d76..e6dc38c 100644 AC_ARG_WITH(sitedir, AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), [sitedir=$withval], -@@ -2870,16 +2879,25 @@ if test "${LOAD_RELATIVE+set}"; then +@@ -3032,16 +3041,25 @@ if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" @@ -68,7 +68,7 @@ index 83e5d76..e6dc38c 100644 AS_CASE(["$RUBY_SITE_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"' -@@ -2910,6 +2928,7 @@ +@@ -3072,6 +3090,7 @@ fi AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}") AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX} !!) @@ -76,7 +76,7 @@ index 83e5d76..e6dc38c 100644 if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else -@@ -2924,6 +2943,7 @@ fi +@@ -3086,6 +3105,7 @@ fi AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index 24195c7..d79d54c 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index b1bc951..91c5d0d 100644 --- a/configure.in +++ b/configure.in -@@ -2893,6 +2893,13 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -3055,6 +3055,13 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDORARCH_DIR}" done @@ -29,7 +29,7 @@ index b1bc951..91c5d0d 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" -@@ -2986,6 +2993,7 @@ AC_SUBST(sitearch)dnl +@@ -3148,6 +3155,7 @@ AC_SUBST(sitearch)dnl AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorarchdir)dnl @@ -53,7 +53,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index 6bfc73e..31dc446 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -311,6 +311,7 @@ sitelibdir = CONFIG["sitelibdir"] +@@ -313,6 +313,7 @@ sitelibdir = CONFIG["sitelibdir"] sitearchlibdir = CONFIG["sitearchdir"] vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] @@ -61,7 +61,7 @@ index 6bfc73e..31dc446 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] configure_args = Shellwords.shellwords(CONFIG["configure_args"]) -@@ -498,7 +499,15 @@ end +@@ -500,7 +501,15 @@ end install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[README* *.txt *.rdoc] diff --git a/ruby-1.9.3-disable-versioned-paths.patch b/ruby-1.9.3-disable-versioned-paths.patch index 2b7f6fb..648f4c3 100644 --- a/ruby-1.9.3-disable-versioned-paths.patch +++ b/ruby-1.9.3-disable-versioned-paths.patch @@ -13,7 +13,7 @@ diff --git a/configure.in b/configure.in index e742e74..86cb68f 100644 --- a/configure.in +++ b/configure.in -@@ -3018,6 +3018,17 @@ else +@@ -3177,6 +3177,17 @@ else fi AC_SUBST(USE_RUBYGEMS) @@ -135,7 +135,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index cec8c9f..fed14d2 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -390,7 +390,7 @@ end +@@ -392,7 +392,7 @@ end install?(:doc, :rdoc) do if $rdocdir diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index 69e61bd..729ee80 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -1,6 +1,6 @@ --- ruby-1.9.3-p0/lib/mkmf.rb.debug 2011-08-11 15:07:37.000000000 +0900 +++ ruby-1.9.3-p0/lib/mkmf.rb 2012-01-29 21:34:17.000000000 +0900 -@@ -1725,7 +1725,7 @@ +@@ -1746,7 +1746,7 @@ SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. diff --git a/ruby.spec b/ruby.spec index 09551bd..660d59b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ # If revision is removed/commented out, the official release build is expected. # Keep the revision enabled for pre-releases from SVN. -%global revision 36887 +%global revision 37421 %global release 1 @@ -54,7 +54,7 @@ %global bigdecimal_version 1.1.0 %global io_console_version 0.3 %global json_version 1.7.1 -%global minitest_version 3.3.0 +%global minitest_version 3.4.0 %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') @@ -111,10 +111,6 @@ Patch12: ruby-1.9.3-mkmf-verbose.patch # TODO: Should be probably upstreamed with #5281. Patch14: ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch -# This patch breaks a test suite, so revert it for now. -# https://bugs.ruby-lang.org/issues/6971 -Patch100: ruby-2.0-r36832-rb_float_value-optimization.patch - Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} # Make the bigdecimal gem a runtime dependency of Ruby to avoid problems @@ -339,6 +335,10 @@ output. # TODO: # %%pacakge -n rubygem-psych +# TODO: +# %%pacakge -n rubygem-test-unit + + %package tcltk Summary: Tcl/Tk interface for scripting language Ruby Group: Development/Languages @@ -365,8 +365,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. #%%patch13 -p1 %patch14 -p1 -%patch100 -p1 -R - %build autoconf diff --git a/rubygems-1.8.11-binary-extensions.patch b/rubygems-1.8.11-binary-extensions.patch index 5a3bfb4..b3a5697 100644 --- a/rubygems-1.8.11-binary-extensions.patch +++ b/rubygems-1.8.11-binary-extensions.patch @@ -11,7 +11,7 @@ diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 97db19e..263e7d3 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -843,6 +843,12 @@ class Gem::Specification +@@ -859,6 +859,12 @@ class Gem::Specification File.join full_gem_path, path end @@ -24,7 +24,7 @@ index 97db19e..263e7d3 100644 # gem directories must come after -I and ENV['RUBYLIB'] insert_index = Gem.load_path_insert_index -@@ -954,16 +960,16 @@ class Gem::Specification +@@ -970,16 +976,16 @@ class Gem::Specification def contains_requirable_file? file root = full_gem_path @@ -48,7 +48,7 @@ index 97db19e..263e7d3 100644 end ## -@@ -1273,6 +1279,23 @@ class Gem::Specification +@@ -1295,6 +1301,23 @@ class Gem::Specification end ## @@ -90,7 +90,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 74d803d..0063c7f 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -499,7 +499,7 @@ TEXT +@@ -509,7 +509,7 @@ TEXT def build_extensions return if spec.extensions.empty? say "Building native extensions. This could take a while..." @@ -103,7 +103,7 @@ diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 263e7d3..d31b93b 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -1283,16 +1283,15 @@ class Gem::Specification +@@ -1305,16 +1305,15 @@ class Gem::Specification # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0 def ext_dir @@ -140,7 +140,7 @@ diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index d31b93b..e65ea2d 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -843,11 +843,7 @@ class Gem::Specification +@@ -859,11 +859,7 @@ class Gem::Specification File.join full_gem_path, path end @@ -153,7 +153,7 @@ index d31b93b..e65ea2d 100644 # gem directories must come after -I and ENV['RUBYLIB'] insert_index = Gem.load_path_insert_index -@@ -1291,7 +1287,10 @@ class Gem::Specification +@@ -1313,7 +1309,10 @@ class Gem::Specification # gem directory. eg: /usr/local/lib/ruby/1.8/gems def exts_dir @@ -183,7 +183,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 0063c7f..83b8fd5 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -499,7 +499,7 @@ TEXT +@@ -509,7 +509,7 @@ TEXT def build_extensions return if spec.extensions.empty? say "Building native extensions. This could take a while..." @@ -196,7 +196,7 @@ diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index e65ea2d..8be2ade 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -843,7 +843,7 @@ class Gem::Specification +@@ -859,7 +859,7 @@ class Gem::Specification File.join full_gem_path, path end @@ -205,7 +205,7 @@ index e65ea2d..8be2ade 100644 # gem directories must come after -I and ENV['RUBYLIB'] insert_index = Gem.load_path_insert_index -@@ -1279,7 +1279,7 @@ class Gem::Specification +@@ -1301,7 +1301,7 @@ class Gem::Specification # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0 def ext_dir @@ -257,7 +257,7 @@ diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb index 20b4198..6d8711f 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -87,6 +87,17 @@ module Gem +@@ -94,6 +94,17 @@ module Gem end ## @@ -279,7 +279,7 @@ diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 8be2ade..f54210a 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -1287,10 +1287,7 @@ class Gem::Specification +@@ -1309,10 +1309,7 @@ class Gem::Specification # gem directory. eg: /usr/local/lib/ruby/1.8/gems def exts_dir From 751f271fc3e2a530fb08afc5a9b9a388edc2ff03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 5 Nov 2012 16:39:11 +0100 Subject: [PATCH 016/530] Update infrastructure to allow build of versioned releases. This will allow to build releases such as preview1 or rc1. --- ruby.spec | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/ruby.spec b/ruby.spec index 660d59b..fc4b1e5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -7,17 +7,28 @@ %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_version_patch_level %{major_minor_version}.%{teeny_version}.%{patch_level} -# Keep the ruby abi 1.9.1 for compatibility with gems. -# %global ruby_abi %{major_minor_version}.0 +# Ruby 2.0 keeps the abi Ruby 1.9.1 compatible. +# %%global ruby_abi %%{major_minor_version}.0 %global ruby_abi 1.9.1 -# If revision is removed/commented out, the official release build is expected. +# Specify the named version. It has precedense to revision. +#%%global milestone preview1 + # Keep the revision enabled for pre-releases from SVN. %global revision 37421 -%global release 1 +%global ruby_archive %{name}-%{ruby_version} -%global ruby_archive %{name}-%{ruby_version}-%{?revision:r%{revision}}%{!?revision:p%{patch_level}} +# If revision and milestone are removed/commented out, the official release build is expected. +%if 0%{?milestone:1}%{?revision:1} != 0 +%global development_release %{?milestone}%{?!milestone:%{?revision:r%{revision}}} +%global ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision:r%{revision}}} +%else +%global ruby_archive %{ruby_archive}-p%{patch_level} +%endif + + +%global release 1 %global ruby_libdir %{_datadir}/%{name} %global ruby_libarchdir %{_libdir}/%{name} @@ -61,7 +72,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version_patch_level} -Release: %{?revision:0.}%{release}%{?revision:.r%{revision}}%{?dist} +Release: %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist} Group: Development/Languages # Public Domain for example for: include/ruby/st.h, strftime.c, ... License: (Ruby or BSD) and Public Domain From ed30ceed59040494c3378c150c369eec51093ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 6 Nov 2012 13:22:34 +0100 Subject: [PATCH 017/530] Remove useless dot from Summary. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index fc4b1e5..34d8903 100644 --- a/ruby.spec +++ b/ruby.spec @@ -319,7 +319,7 @@ markup language. %package -n rubygem-minitest -Summary: Minitest provides a complete suite of testing facilities. +Summary: Minitest provides a complete suite of testing facilities Version: %{minitest_version} Group: Development/Libraries License: MIT From dd816cc3e3020d956d54f858ce5214337e467620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 6 Nov 2012 13:25:16 +0100 Subject: [PATCH 018/530] Split Psych into rubygem-psych subpackage. --- ruby.spec | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index 34d8903..c0d977c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -66,6 +66,7 @@ %global io_console_version 0.3 %global json_version 1.7.1 %global minitest_version 3.4.0 +%global psych_version 1.3.4 %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') @@ -343,8 +344,20 @@ minitest/pride shows pride in testing and adds coloring to your test output. -# TODO: -# %%pacakge -n rubygem-psych +%package -n rubygem-psych +Summary: A libyaml wrapper for Ruby +Version: %{psych_version} +Group: Development/Libraries +License: MIT +Requires: ruby(abi) = %{ruby_abi} +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(psych) = %{version}-%{release} + +%description -n rubygem-psych +Psych is a YAML parser and emitter. Psych leverages +libyaml[http://pyyaml.org/wiki/LibYAML] for its YAML parsing and emitting +capabilities. In addition to wrapping libyaml, Psych also knows how to +serialize and de-serialize most Ruby objects to and from the YAML format. # TODO: # %%pacakge -n rubygem-test-unit @@ -478,6 +491,11 @@ mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/exts/json-%{ mkdir -p %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib mv %{buildroot}%{ruby_libdir}/minitest %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib +mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/exts/psych-%{psych_version}/lib +mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib +mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/exts/psych-%{psych_version}/lib/ + # Adjust the gemspec files so that the gems will load properly sed -i '8 a\ s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/rake-%{rake_version}.gemspec @@ -585,7 +603,6 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/net %{ruby_libdir}/openssl %{ruby_libdir}/optparse -%{ruby_libdir}/psych %{ruby_libdir}/racc %{ruby_libdir}/rbconfig %{ruby_libdir}/rexml @@ -690,7 +707,6 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/objspace.so %{ruby_libarchdir}/openssl.so %{ruby_libarchdir}/pathname.so -%{ruby_libarchdir}/psych.so %{ruby_libarchdir}/pty.so %dir %{ruby_libarchdir}/racc %{ruby_libarchdir}/racc/cparse.so @@ -715,6 +731,7 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{_exec_prefix}/lib*/gems/exts/bigdecimal-%{bigdecimal_version} %exclude %{_exec_prefix}/lib*/gems/exts/io-console-%{io_console_version} %exclude %{_exec_prefix}/lib*/gems/exts/json-%{json_version} +%exclude %{_exec_prefix}/lib*/gems/exts/psych-%{psych_version} %exclude %{gem_dir}/gems/rake-%{rake_version} %exclude %{gem_dir}/gems/rdoc-%{rdoc_version} %exclude %{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec @@ -723,6 +740,7 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{gem_dir}/specifications/minitest-%{minitest_version}.gemspec %exclude %{gem_dir}/specifications/rake-%{rake_version}.gemspec %exclude %{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec +%exclude %{gem_dir}/specifications/psych-%{psych_version}.gemspec %files -n rubygems-devel %config(noreplace) %{_sysconfdir}/rpm/macros.rubygems @@ -776,6 +794,11 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/gems/minitest-%{minitest_version} %{gem_dir}/specifications/minitest-%{minitest_version}.gemspec +%files -n rubygem-psych +%{_libdir}/gems/exts/psych-%{psych_version} +%{gem_dir}/gems/psych-%{psych_version} +%{gem_dir}/specifications/psych-%{psych_version}.gemspec + %files tcltk %{ruby_libdir}/*-tk.rb %{ruby_libdir}/tcltk.rb From 3a63053e857ea1cffe0bbbc12ffbadbc9f4561db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 7 Nov 2012 10:17:44 +0100 Subject: [PATCH 019/530] RubyGems needs psych for proper functionality. It is not 100% clear, if RubyGems are the best place to require psych, but lets see how it will work. In the future, it might get moved into ruby-libs if needed, but it doesn't look like it should be there ATM, since it would be unnecessary payload. --- ruby.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/ruby.spec b/ruby.spec index c0d977c..55e203c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -182,6 +182,7 @@ License: Ruby or MIT Requires: ruby(abi) = %{ruby_abi} Requires: rubygem(rdoc) >= %{rdoc_version} Requires: rubygem(io-console) >= %{io_console_version} +Requires: rubygem(psych) >= %{psych_version} Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} BuildArch: noarch From 4fa6c0a0f26194c2e1e62229714d7b4f73bdd383 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 16 Nov 2012 11:54:32 +0100 Subject: [PATCH 020/530] Upgrade to Ruby 2.0.0 (r37589). --- ruby-1.9.3-added-site-and-vendor-arch-flags.patch | 8 ++++---- ruby-1.9.3-always-use-i386.patch | 2 +- ruby-1.9.3-arch-specific-dir.patch | 8 ++++---- ruby-1.9.3-custom-rubygems-location.patch | 4 ++-- ruby-1.9.3-disable-versioned-paths.patch | 2 +- ruby.spec | 6 ++++-- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch index add7b38..cbed3a6 100644 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch @@ -29,7 +29,7 @@ diff --git a/configure.in b/configure.in index 83e5d76..31532bd 100644 --- a/configure.in +++ b/configure.in -@@ -3028,6 +3028,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do +@@ -3029,6 +3029,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do dir="${SITE_DIR}" done @@ -45,7 +45,7 @@ index 83e5d76..31532bd 100644 AC_ARG_WITH(vendordir, AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), [vendordir=$withval], -@@ -3037,19 +3046,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -3038,19 +3047,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDOR_DIR}" done @@ -78,7 +78,7 @@ index 83e5d76..31532bd 100644 fi pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)' -@@ -3067,12 +3089,26 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], +@@ -3068,12 +3090,26 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], [ RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\"" ]) @@ -105,7 +105,7 @@ index 83e5d76..31532bd 100644 ]) pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)' AS_CASE(["$RUBY_LIB_PREFIX"], -@@ -3095,19 +3131,23 @@ if test "x$SITE_DIR" = xno; then +@@ -3096,19 +3132,23 @@ if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH} !!) diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch index 5eecdbf..2c9ca1e 100644 --- a/ruby-1.9.3-always-use-i386.patch +++ b/ruby-1.9.3-always-use-i386.patch @@ -1,6 +1,6 @@ --- a/configure.in.orig 2011-10-18 08:56:21.587594685 +0200 +++ b/configure.in 2011-10-18 08:56:59.751593321 +0200 -@@ -3152,6 +3152,8 @@ +@@ -3153,6 +3153,8 @@ configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index 3088602..ab18fdd 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -26,7 +26,7 @@ diff --git a/configure.in b/configure.in index 83e5d76..e6dc38c 100644 --- a/configure.in +++ b/configure.in -@@ -3010,6 +3010,15 @@ else +@@ -3011,6 +3011,15 @@ else RUBY_LIB_VERSION="\"${ruby_version}\"" fi @@ -42,7 +42,7 @@ index 83e5d76..e6dc38c 100644 AC_ARG_WITH(sitedir, AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), [sitedir=$withval], -@@ -3032,16 +3041,25 @@ if test "${LOAD_RELATIVE+set}"; then +@@ -3033,16 +3042,25 @@ if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" @@ -68,7 +68,7 @@ index 83e5d76..e6dc38c 100644 AS_CASE(["$RUBY_SITE_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"' -@@ -3072,6 +3090,7 @@ +@@ -3073,6 +3091,7 @@ fi AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}") AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX} !!) @@ -76,7 +76,7 @@ index 83e5d76..e6dc38c 100644 if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else -@@ -3086,6 +3105,7 @@ fi +@@ -3087,6 +3106,7 @@ fi AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index d79d54c..c13ca34 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index b1bc951..91c5d0d 100644 --- a/configure.in +++ b/configure.in -@@ -3055,6 +3055,13 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -3056,6 +3056,13 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDORARCH_DIR}" done @@ -29,7 +29,7 @@ index b1bc951..91c5d0d 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" -@@ -3148,6 +3155,7 @@ AC_SUBST(sitearch)dnl +@@ -3149,6 +3156,7 @@ AC_SUBST(sitearch)dnl AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-1.9.3-disable-versioned-paths.patch b/ruby-1.9.3-disable-versioned-paths.patch index 648f4c3..b8ac37a 100644 --- a/ruby-1.9.3-disable-versioned-paths.patch +++ b/ruby-1.9.3-disable-versioned-paths.patch @@ -13,7 +13,7 @@ diff --git a/configure.in b/configure.in index e742e74..86cb68f 100644 --- a/configure.in +++ b/configure.in -@@ -3177,6 +3177,17 @@ else +@@ -3178,6 +3178,17 @@ else fi AC_SUBST(USE_RUBYGEMS) diff --git a/ruby.spec b/ruby.spec index 55e203c..36870be 100644 --- a/ruby.spec +++ b/ruby.spec @@ -15,7 +15,7 @@ #%%global milestone preview1 # Keep the revision enabled for pre-releases from SVN. -%global revision 37421 +%global revision 37589 %global ruby_archive %{name}-%{ruby_version} @@ -520,7 +520,9 @@ sed -i '8 a\ s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec %check -DISABLE_TESTS="" +# http://bugs.ruby-lang.org/issues/7298 +# http://bugs.ruby-lang.org/issues/7312 +DISABLE_TESTS="-x test_enumerator.rb -x test_m17n_comb.rb" %ifarch armv7l armv7hl armv7hnl # test_call_double(DL::TestDL) fails on ARM HardFP From 43f936f6e36384d676cb6a2117c4da38e8db3ff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 19 Nov 2012 12:49:46 +0100 Subject: [PATCH 021/530] Add references to upstream commits of RubyGems's uninstaller patch. --- ruby.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby.spec b/ruby.spec index 36870be..6c86559 100644 --- a/ruby.spec +++ b/ruby.spec @@ -94,6 +94,8 @@ Patch3: ruby-1.9.3-always-use-i386.patch Patch4: ruby-1.9.3-fix-s390x-build.patch # Fix the uninstaller, so that it doesn't say that gem doesn't exist # when it exists outside of the GEM_HOME (already fixed in the upstream) +# This consist of several RubyGems upstream patches: +# 2786a40b, 8e2a9889, 1755effe, 70963846, 21c78318, 88e1e1cc, 415c0ec4 Patch5: ruby-1.9.3-rubygems-1.8.11-uninstaller.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://redmine.ruby-lang.org/issues/5617 From 6193662f24965829180131c4a95ed572c033485c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 19 Nov 2012 14:32:58 +0100 Subject: [PATCH 022/530] Rebase patches. --- ...9.3-added-site-and-vendor-arch-flags.patch | 41 +++++----- ruby-1.9.3-arch-specific-dir.patch | 34 ++++---- ruby-1.9.3-disable-versioned-paths.patch | 82 +++++++++---------- 3 files changed, 79 insertions(+), 78 deletions(-) diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch index cbed3a6..d7601c6 100644 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch @@ -1,21 +1,21 @@ -From b0a875862d14244ca41cd1e1e9090f87757aaeb9 Mon Sep 17 00:00:00 2001 +From be687364922657501e861e9f53f8ec647a73fe00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 5 Sep 2011 13:10:47 +0200 Subject: [PATCH] Added configuration flags for site and vendor architecture specific directories. --- - Makefile.in | 3 +++ - configure.in | 40 ++++++++++++++++++++++++++++++++++++++++ - tool/mkconfig.rb | 8 ++++++-- - version.c | 4 ++++ + Makefile.in | 3 +++ + configure.in | 40 ++++++++++++++++++++++++++++++++++++++++ + tool/mkconfig.rb | 8 ++++++-- + version.c | 4 ++++ 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/Makefile.in b/Makefile.in -index bcdaf5f..f57e4c4 100644 +index 690ff8e..8c7dd98 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -38,6 +38,9 @@ datadir = @datadir@ +@@ -39,6 +39,9 @@ arch = @arch@ archdir = @archdir@ sitearch = @sitearch@ sitedir = @sitedir@ @@ -26,10 +26,10 @@ index bcdaf5f..f57e4c4 100644 TESTUI = console diff --git a/configure.in b/configure.in -index 83e5d76..31532bd 100644 +index 8e4aaec..c65e0c7 100644 --- a/configure.in +++ b/configure.in -@@ -3029,6 +3029,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do +@@ -3169,6 +3169,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do dir="${SITE_DIR}" done @@ -45,7 +45,7 @@ index 83e5d76..31532bd 100644 AC_ARG_WITH(vendordir, AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), [vendordir=$withval], -@@ -3038,19 +3047,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -3178,19 +3187,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDOR_DIR}" done @@ -78,7 +78,7 @@ index 83e5d76..31532bd 100644 fi pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)' -@@ -3068,12 +3090,26 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], +@@ -3208,6 +3230,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], [ RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\"" ]) @@ -92,20 +92,21 @@ index 83e5d76..31532bd 100644 AS_CASE(["$RUBY_VENDOR_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_VENDOR_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_LIB_PATH\" : \"$pat\"`"'"' - ], +@@ -3215,6 +3244,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], [ RUBY_VENDOR_LIB_PATH="\"${RUBY_VENDOR_LIB_PATH}\"" -+ ]) + ]) +AS_CASE(["$RUBY_VENDOR_ARCHLIB_PATH"], + ["$RUBY_LIB_PREFIX/"*], [ + RUBY_VENDOR_ARCHLIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_ARCHLIB_PATH\" : \"$pat\"`"'"' + ], + [ + RUBY_VENDOR_ARCHLIB_PATH="\"${RUBY_VENDOR_ARCHLIB_PATH}\"" - ]) ++ ]) pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)' AS_CASE(["$RUBY_LIB_PREFIX"], -@@ -3096,19 +3132,23 @@ if test "x$SITE_DIR" = xno; then + ["$RUBY_EXEC_PREFIX/"*], [ +@@ -3236,11 +3272,13 @@ if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH} !!) @@ -119,7 +120,7 @@ index 83e5d76..31532bd 100644 fi AC_SUBST(arch)dnl - AC_SUBST(sitearch)dnl +@@ -3248,7 +3286,9 @@ AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl AC_SUBST(archdir)dnl AC_SUBST(sitedir)dnl @@ -130,10 +131,10 @@ index 83e5d76..31532bd 100644 configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb -index b707c4b..6230720 100755 +index 03c3332..79b8e44 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -44,6 +44,8 @@ v_others = [] +@@ -44,6 +44,8 @@ continued_name = nil continued_line = nil path_version = "/$(ruby_version)" archdir_override = "$(vendorlibdir)/$(sitearch)" @@ -166,7 +167,7 @@ index b707c4b..6230720 100755 print < Date: Thu, 8 Sep 2011 15:30:05 +0200 Subject: [PATCH] Add configuration arch specific dir flag. --- - Makefile.in | 1 + - configure.in | 20 ++++++++++++++++++++ - tool/mkconfig.rb | 4 +++- - version.c | 2 ++ - 4 files changed, 26 insertions(+), 1 deletions(-) + Makefile.in | 1 + + configure.in | 20 ++++++++++++++++++++ + tool/mkconfig.rb | 4 +++- + version.c | 2 ++ + 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in -index bcdaf5f..d61b2ee 100644 +index 78d7139..690ff8e 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -35,6 +35,7 @@ libexecdir = @libexecdir@ +@@ -36,6 +36,7 @@ libexecdir = @libexecdir@ datarootdir = @datarootdir@ datadir = @datadir@ arch = @arch@ @@ -23,10 +23,10 @@ index bcdaf5f..d61b2ee 100644 sitedir = @sitedir@ ruby_version = @ruby_version@ diff --git a/configure.in b/configure.in -index 83e5d76..e6dc38c 100644 +index db3641b..8e4aaec 100644 --- a/configure.in +++ b/configure.in -@@ -3011,6 +3011,15 @@ else +@@ -3151,6 +3151,15 @@ else RUBY_LIB_VERSION="\"${ruby_version}\"" fi @@ -42,7 +42,7 @@ index 83e5d76..e6dc38c 100644 AC_ARG_WITH(sitedir, AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), [sitedir=$withval], -@@ -3033,16 +3042,25 @@ if test "${LOAD_RELATIVE+set}"; then +@@ -3173,16 +3182,25 @@ if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" @@ -68,7 +68,7 @@ index 83e5d76..e6dc38c 100644 AS_CASE(["$RUBY_SITE_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"' -@@ -3073,6 +3091,7 @@ +@@ -3213,6 +3231,7 @@ else fi AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}") AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX} !!) @@ -76,7 +76,7 @@ index 83e5d76..e6dc38c 100644 if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else -@@ -3087,6 +3106,7 @@ fi +@@ -3227,6 +3246,7 @@ fi AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -85,10 +85,10 @@ index 83e5d76..e6dc38c 100644 AC_SUBST(vendordir)dnl diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb -index b707c4b..9780ef2 100755 +index d9e26c1..03c3332 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -43,6 +43,7 @@ v_others = [] +@@ -43,6 +43,7 @@ vars = {} continued_name = nil continued_line = nil path_version = "/$(ruby_version)" @@ -114,7 +114,7 @@ index b707c4b..9780ef2 100755 print < Date: Thu, 25 Aug 2011 14:33:51 +0200 Subject: [PATCH] Allow to disable versioned paths. --- - configure.in | 11 +++++++++++ - tool/mkconfig.rb | 9 ++++++--- - version.c | 10 ++++++++++ - 3 files changed, 27 insertions(+), 3 deletions(-) + configure.in | 11 +++++++++++ + lib/rdoc/ri/paths.rb | 4 ++-- + tool/mkconfig.rb | 9 ++++++--- + tool/rbinstall.rb | 2 +- + version.c | 10 ++++++++++ + 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/configure.in b/configure.in -index e742e74..86cb68f 100644 +index f2d22ef..db3641b 100644 --- a/configure.in +++ b/configure.in -@@ -3178,6 +3178,17 @@ else +@@ -3318,6 +3318,17 @@ else fi AC_SUBST(USE_RUBYGEMS) @@ -31,8 +33,24 @@ index e742e74..86cb68f 100644 arch_hdrdir="${EXTOUT}/include/${arch}/ruby" AS_MKDIR_P("${arch_hdrdir}") config_h="${arch_hdrdir}/config.h" +diff --git a/lib/rdoc/ri/paths.rb b/lib/rdoc/ri/paths.rb +index a3c65bf..a4e8559 100644 +--- a/lib/rdoc/ri/paths.rb ++++ b/lib/rdoc/ri/paths.rb +@@ -11,9 +11,9 @@ module RDoc::RI::Paths + version = RbConfig::CONFIG['ruby_version'] + + base = if RbConfig::CONFIG.key? 'ridir' then +- File.join RbConfig::CONFIG['ridir'], version ++ File.join [RbConfig::CONFIG['ridir'], RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil].compact + else +- File.join RbConfig::CONFIG['datadir'], 'ri', version ++ File.join [RbConfig::CONFIG['datadir'], 'ri', RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil].compact + end + + SYSDIR = File.join base, "system" diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb -index a2221f0..47d8c8f 100755 +index f9d97d3..d9e26c1 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb @@ -42,6 +42,7 @@ v_others = [] @@ -71,8 +89,21 @@ index a2221f0..47d8c8f 100755 CONFIG["vendorarchdir"] = "$(vendorlibdir)/$(sitearch)" EOS print < $data_mode) + end diff --git a/version.c b/version.c -index 59d4e5e..641dc33 100644 +index 26e275a..05e5069 100644 --- a/version.c +++ b/version.c @@ -39,9 +39,15 @@ @@ -114,36 +145,5 @@ index 59d4e5e..641dc33 100644 RUBY_LIB "\0" #ifdef RUBY_THIN_ARCHLIB -- -1.7.7.3 -diff --git a/lib/rdoc/ri/paths.rb b/lib/rdoc/ri/paths.rb -index a3c65bf..0575730 100644 ---- a/lib/rdoc/ri/paths.rb -+++ b/lib/rdoc/ri/paths.rb -@@ -11,9 +11,9 @@ module RDoc::RI::Paths - version = RbConfig::CONFIG['ruby_version'] - - base = if RbConfig::CONFIG.key? 'ridir' then -- File.join RbConfig::CONFIG['ridir'], version -+ File.join [RbConfig::CONFIG['ridir'], RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil].compact - else -- File.join RbConfig::CONFIG['datadir'], 'ri', version -+ File.join [RbConfig::CONFIG['datadir'], 'ri', RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil].compact - end - - SYSDIR = File.join base, "system" -diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index cec8c9f..fed14d2 100755 ---- a/tool/rbinstall.rb -+++ b/tool/rbinstall.rb -@@ -392,7 +392,7 @@ end - - install?(:doc, :rdoc) do - if $rdocdir -- ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version'], "system") -+ ridatadir = File.join([CONFIG['ridir'], RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil, "system"].compact) - prepare "rdoc", ridatadir - install_recursive($rdocdir, ridatadir, :mode => $data_mode) - end --- -1.7.6 +1.8.0 From b3f2794361604a40361086c6bee439fbc0fc818d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 19 Nov 2012 14:38:30 +0100 Subject: [PATCH 023/530] Convert to git formated patch. --- ruby-1.9.3-always-use-i386.patch | 20 +++++++++-- ruby-1.9.3-custom-rubygems-location.patch | 28 ++++++++-------- ruby-1.9.3-fix-s390x-build.patch | 19 +++++++++-- ruby-1.9.3-mkmf-verbose.patch | 20 +++++++++-- ruby-1.9.3-rubygems-1.8.11-uninstaller.patch | 35 +++++++++++++++----- 5 files changed, 90 insertions(+), 32 deletions(-) diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch index 2c9ca1e..d2c1bc0 100644 --- a/ruby-1.9.3-always-use-i386.patch +++ b/ruby-1.9.3-always-use-i386.patch @@ -1,6 +1,17 @@ ---- a/configure.in.orig 2011-10-18 08:56:21.587594685 +0200 -+++ b/configure.in 2011-10-18 08:56:59.751593321 +0200 -@@ -3153,6 +3153,8 @@ +From 1f061d350d01fc55272872d6f7932986dba4011d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 19 Nov 2012 14:37:28 +0100 +Subject: [PATCH] Always use i386. + +--- + configure.in | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/configure.in b/configure.in +index c65e0c7..748edc9 100644 +--- a/configure.in ++++ b/configure.in +@@ -3293,6 +3293,8 @@ AC_SUBST(vendorarchdir)dnl configure_args=$ac_configure_args AC_SUBST(configure_args)dnl @@ -9,3 +20,6 @@ if test "${universal_binary-no}" = yes ; then arch="universal-${target_os}" AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available, +-- +1.8.0 + diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index c13ca34..3f13e59 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -1,21 +1,21 @@ -From 279a693ce4ef3a887ce8d4fa59e0f2616a14d91a Mon Sep 17 00:00:00 2001 +From 643a3d3af2a3847e730c79515bc586768053119a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 11 Nov 2011 13:14:45 +0100 Subject: [PATCH] Allow to install RubyGems into custom location, outside of Ruby tree. --- - configure.in | 8 ++++++++ - tool/mkconfig.rb | 1 + - tool/rbinstall.rb | 9 +++++++++ - version.c | 4 ++++ - 4 files changed, 22 insertions(+), 0 deletions(-) + configure.in | 8 ++++++++ + tool/mkconfig.rb | 1 + + tool/rbinstall.rb | 9 +++++++++ + version.c | 4 ++++ + 4 files changed, 22 insertions(+) diff --git a/configure.in b/configure.in -index b1bc951..91c5d0d 100644 +index 748edc9..6a16745 100644 --- a/configure.in +++ b/configure.in -@@ -3056,6 +3056,13 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -3196,6 +3196,13 @@ until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_D dir="${VENDORARCH_DIR}" done @@ -29,7 +29,7 @@ index b1bc951..91c5d0d 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" -@@ -3149,6 +3156,7 @@ AC_SUBST(sitearch)dnl +@@ -3289,6 +3296,7 @@ AC_SUBST(sitedir)dnl AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorarchdir)dnl @@ -38,7 +38,7 @@ index b1bc951..91c5d0d 100644 configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb -index b707c4b..9fecbfb 100755 +index 79b8e44..9cef0c6 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb @@ -84,6 +84,7 @@ File.foreach "config.status" do |line| @@ -50,7 +50,7 @@ index b707c4b..9fecbfb 100755 case val when /^\$\(ac_\w+\)$/; next diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 6bfc73e..31dc446 100755 +index 17294a2..2757a73 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb @@ -313,6 +313,7 @@ sitelibdir = CONFIG["sitelibdir"] @@ -64,7 +64,7 @@ index 6bfc73e..31dc446 100755 @@ -500,7 +501,15 @@ end install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir - noinst = %w[README* *.txt *.rdoc] + noinst = %w[README* *.txt *.rdoc *.gemspec] + noinst += %w[*ubygems.rb rubygems/ datadir.rb] if rubygemsdir install_recursive(File.join(srcdir, "lib"), rubylibdir, :no_install => noinst, :mode => $data_mode) + if rubygemsdir @@ -78,7 +78,7 @@ index 6bfc73e..31dc446 100755 install?(:local, :arch, :lib) do diff --git a/version.c b/version.c -index 59d4e5e..12ba7e9 100644 +index 962f39f..979701d 100644 --- a/version.c +++ b/version.c @@ -104,6 +104,10 @@ const char ruby_initial_load_paths[] = @@ -93,5 +93,5 @@ index 59d4e5e..12ba7e9 100644 #ifdef RUBY_THIN_ARCHLIB RUBY_THIN_ARCHLIB "\0" -- -1.7.7 +1.8.0 diff --git a/ruby-1.9.3-fix-s390x-build.patch b/ruby-1.9.3-fix-s390x-build.patch index d0ade91..5f91aae 100644 --- a/ruby-1.9.3-fix-s390x-build.patch +++ b/ruby-1.9.3-fix-s390x-build.patch @@ -1,6 +1,16 @@ -diff -up ruby-1.9.3-p0/ext/tk/extconf.rb.orig ruby-1.9.3-p0/ext/tk/extconf.rb ---- ruby-1.9.3-p0/ext/tk/extconf.rb.orig 2011-06-29 16:11:19.000000000 +0200 -+++ ruby-1.9.3-p0/ext/tk/extconf.rb 2011-10-18 16:15:59.406299659 +0200 +From d710179fcc088a201339a28fa6a5779da8e6ab62 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 19 Nov 2012 14:39:19 +0100 +Subject: [PATCH] Fix s390x build. + +--- + ext/tk/extconf.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ext/tk/extconf.rb b/ext/tk/extconf.rb +index 72dd6cf..5c6081e 100644 +--- a/ext/tk/extconf.rb ++++ b/ext/tk/extconf.rb @@ -114,7 +114,7 @@ def is_macosx? end @@ -10,3 +20,6 @@ diff -up ruby-1.9.3-p0/ext/tk/extconf.rb.orig ruby-1.9.3-p0/ext/tk/extconf.rb end def check_tcltk_version(version) +-- +1.8.0 + diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index 729ee80..77be75a 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -1,6 +1,17 @@ ---- ruby-1.9.3-p0/lib/mkmf.rb.debug 2011-08-11 15:07:37.000000000 +0900 -+++ ruby-1.9.3-p0/lib/mkmf.rb 2012-01-29 21:34:17.000000000 +0900 -@@ -1746,7 +1746,7 @@ +From b6f6f0b8cd750e97c15f1b739b1c95d6c1989294 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 19 Nov 2012 15:14:51 +0100 +Subject: [PATCH] Verbose mkmf. + +--- + lib/mkmf.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/mkmf.rb b/lib/mkmf.rb +index ded4e89..0870f22 100644 +--- a/lib/mkmf.rb ++++ b/lib/mkmf.rb +@@ -1746,7 +1746,7 @@ SRC SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. @@ -9,3 +20,6 @@ Q1 = $(V:1=) Q = $(Q1:0=@) ECHO1 = $(V:1=@#{CONFIG['NULLCMD']}) +-- +1.8.0 + diff --git a/ruby-1.9.3-rubygems-1.8.11-uninstaller.patch b/ruby-1.9.3-rubygems-1.8.11-uninstaller.patch index af1cff2..f8eb63d 100644 --- a/ruby-1.9.3-rubygems-1.8.11-uninstaller.patch +++ b/ruby-1.9.3-rubygems-1.8.11-uninstaller.patch @@ -1,6 +1,18 @@ ---- ruby-1.9.3-p0/lib/rubygems/uninstaller.rb.orig 2011-10-31 10:22:36.321579483 +0100 -+++ ruby-1.9.3-p0/lib/rubygems/uninstaller.rb 2011-10-31 10:34:25.563626119 +0100 -@@ -51,15 +51,14 @@ +From 6a07398a3aac0793d1a62f6f4778d90baf86ab7e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 19 Nov 2012 14:41:06 +0100 +Subject: [PATCH] RubyGems uninstaller upstream fixes. + +--- + lib/rubygems/uninstaller.rb | 35 +++++++++++++++++++++++------------ + test/rubygems/test_gem_uninstaller.rb | 2 +- + 2 files changed, 24 insertions(+), 13 deletions(-) + +diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb +index cc32ea4..c0e8b4b 100644 +--- a/lib/rubygems/uninstaller.rb ++++ b/lib/rubygems/uninstaller.rb +@@ -51,15 +51,14 @@ class Gem::Uninstaller @bin_dir = options[:bin_dir] @format_executable = options[:format_executable] @@ -21,7 +33,7 @@ end ## -@@ -69,10 +68,24 @@ +@@ -69,10 +68,24 @@ class Gem::Uninstaller def uninstall list = Gem::Specification.find_all_by_name(@gem, @version) @@ -48,7 +60,7 @@ remove_all list elsif list.size > 1 then -@@ -250,12 +263,10 @@ +@@ -250,12 +263,10 @@ class Gem::Uninstaller msg << "\t#{spec.full_name}" spec.dependent_gems.each do |dep_spec, dep, satlist| @@ -63,10 +75,11 @@ msg << 'Continue with Uninstall?' return ask_yes_no(msg.join("\n"), true) end - ---- ruby-1.9.3-p0/test/rubygems/test_gem_uninstaller.rb.orig 2011-11-03 08:58:31.411272176 +0100 -+++ ruby-1.9.3-p0/test/rubygems/test_gem_uninstaller.rb 2011-11-03 08:58:43.010272351 +0100 -@@ -225,7 +225,7 @@ +diff --git a/test/rubygems/test_gem_uninstaller.rb b/test/rubygems/test_gem_uninstaller.rb +index a65b992..1cd186f 100644 +--- a/test/rubygems/test_gem_uninstaller.rb ++++ b/test/rubygems/test_gem_uninstaller.rb +@@ -225,7 +225,7 @@ class TestGemUninstaller < Gem::InstallerTestCase uninstaller = Gem::Uninstaller.new('a') @@ -74,3 +87,7 @@ + use_ui Gem::MockGemUi.new("2\ny\n") do uninstaller.uninstall end + +-- +1.8.0 + From dc03cfc635ae1cbc6fc5e8b3cb131c17f5ce0814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 20 Nov 2012 17:22:00 +0100 Subject: [PATCH 024/530] Upgrade to Ruby 2.0.0 (r37773). --- ruby-1.9.3-added-site-and-vendor-arch-flags.patch | 12 ++++++------ ruby-1.9.3-always-use-i386.patch | 2 +- ruby-1.9.3-arch-specific-dir.patch | 8 ++++---- ruby-1.9.3-custom-rubygems-location.patch | 4 ++-- ruby-1.9.3-disable-versioned-paths.patch | 2 +- ruby.spec | 9 ++++----- 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch index d7601c6..d595118 100644 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch @@ -29,7 +29,7 @@ diff --git a/configure.in b/configure.in index 8e4aaec..c65e0c7 100644 --- a/configure.in +++ b/configure.in -@@ -3169,6 +3169,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do +@@ -3153,6 +3153,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do dir="${SITE_DIR}" done @@ -45,7 +45,7 @@ index 8e4aaec..c65e0c7 100644 AC_ARG_WITH(vendordir, AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), [vendordir=$withval], -@@ -3178,19 +3187,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -3162,19 +3171,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDOR_DIR}" done @@ -78,7 +78,7 @@ index 8e4aaec..c65e0c7 100644 fi pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)' -@@ -3208,6 +3230,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], +@@ -3192,6 +3214,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], [ RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\"" ]) @@ -92,7 +92,7 @@ index 8e4aaec..c65e0c7 100644 AS_CASE(["$RUBY_VENDOR_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_VENDOR_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_LIB_PATH\" : \"$pat\"`"'"' -@@ -3215,6 +3244,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], +@@ -3199,6 +3228,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], [ RUBY_VENDOR_LIB_PATH="\"${RUBY_VENDOR_LIB_PATH}\"" ]) @@ -106,7 +106,7 @@ index 8e4aaec..c65e0c7 100644 pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)' AS_CASE(["$RUBY_LIB_PREFIX"], ["$RUBY_EXEC_PREFIX/"*], [ -@@ -3236,11 +3272,13 @@ if test "x$SITE_DIR" = xno; then +@@ -3220,11 +3256,13 @@ if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH} !!) @@ -120,7 +120,7 @@ index 8e4aaec..c65e0c7 100644 fi AC_SUBST(arch)dnl -@@ -3248,7 +3286,9 @@ AC_SUBST(sitearch)dnl +@@ -3232,7 +3270,9 @@ AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl AC_SUBST(archdir)dnl AC_SUBST(sitedir)dnl diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch index d2c1bc0..00165dc 100644 --- a/ruby-1.9.3-always-use-i386.patch +++ b/ruby-1.9.3-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index c65e0c7..748edc9 100644 --- a/configure.in +++ b/configure.in -@@ -3293,6 +3293,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3277,6 +3277,8 @@ AC_SUBST(vendorarchdir)dnl configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index f96dff8..eb57196 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -26,7 +26,7 @@ diff --git a/configure.in b/configure.in index db3641b..8e4aaec 100644 --- a/configure.in +++ b/configure.in -@@ -3151,6 +3151,15 @@ else +@@ -3135,6 +3135,15 @@ else RUBY_LIB_VERSION="\"${ruby_version}\"" fi @@ -42,7 +42,7 @@ index db3641b..8e4aaec 100644 AC_ARG_WITH(sitedir, AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), [sitedir=$withval], -@@ -3173,16 +3182,25 @@ if test "${LOAD_RELATIVE+set}"; then +@@ -3157,16 +3166,25 @@ if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" @@ -68,7 +68,7 @@ index db3641b..8e4aaec 100644 AS_CASE(["$RUBY_SITE_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"' -@@ -3213,6 +3231,7 @@ else +@@ -3197,6 +3215,7 @@ else fi AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}") AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX} !!) @@ -76,7 +76,7 @@ index db3641b..8e4aaec 100644 if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else -@@ -3227,6 +3246,7 @@ fi +@@ -3211,6 +3230,7 @@ fi AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index 3f13e59..47cd946 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index 748edc9..6a16745 100644 --- a/configure.in +++ b/configure.in -@@ -3196,6 +3196,13 @@ until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_D +@@ -3180,6 +3180,13 @@ until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_D dir="${VENDORARCH_DIR}" done @@ -29,7 +29,7 @@ index 748edc9..6a16745 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" -@@ -3289,6 +3296,7 @@ AC_SUBST(sitedir)dnl +@@ -3273,6 +3280,7 @@ AC_SUBST(sitedir)dnl AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-1.9.3-disable-versioned-paths.patch b/ruby-1.9.3-disable-versioned-paths.patch index 77cfd32..be671a9 100644 --- a/ruby-1.9.3-disable-versioned-paths.patch +++ b/ruby-1.9.3-disable-versioned-paths.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index f2d22ef..db3641b 100644 --- a/configure.in +++ b/configure.in -@@ -3318,6 +3318,17 @@ else +@@ -3302,6 +3302,17 @@ else fi AC_SUBST(USE_RUBYGEMS) diff --git a/ruby.spec b/ruby.spec index 6c86559..ed6896a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -15,7 +15,7 @@ #%%global milestone preview1 # Keep the revision enabled for pre-releases from SVN. -%global revision 37589 +%global revision 37773 %global ruby_archive %{name}-%{ruby_version} @@ -57,7 +57,7 @@ # http://rpm.org/ticket/78 %global gem_extdir %{_exec_prefix}/lib{,64}/gems -%global rake_version 0.9.2.2 +%global rake_version 0.9.4 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version_patch_level} @@ -522,9 +522,8 @@ sed -i '8 a\ s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec %check -# http://bugs.ruby-lang.org/issues/7298 -# http://bugs.ruby-lang.org/issues/7312 -DISABLE_TESTS="-x test_enumerator.rb -x test_m17n_comb.rb" +# https://bugs.ruby-lang.org/issues/7386 +DISABLE_TESTS="-x test_rake_functional.rb" %ifarch armv7l armv7hl armv7hnl # test_call_double(DL::TestDL) fails on ARM HardFP From dcfbb7a72eee825efd841e3b8f2b26574a08d399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 22 Nov 2012 16:02:09 +0100 Subject: [PATCH 025/530] Update to Ruby 2.0.0 (r37807). --- ruby.spec | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index ed6896a..75059e2 100644 --- a/ruby.spec +++ b/ruby.spec @@ -15,7 +15,7 @@ #%%global milestone preview1 # Keep the revision enabled for pre-releases from SVN. -%global revision 37773 +%global revision 37807 %global ruby_archive %{name}-%{ruby_version} @@ -523,7 +523,8 @@ sed -i '8 a\ %check # https://bugs.ruby-lang.org/issues/7386 -DISABLE_TESTS="-x test_rake_functional.rb" +# http://bugs.ruby-lang.org/issues/7422 +DISABLE_TESTS="-x test_rake_functional.rb -x test_rubyoptions.rb" %ifarch armv7l armv7hl armv7hnl # test_call_double(DL::TestDL) fails on ARM HardFP From 3fa802844a2b4a483da1d122183873793bea43da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 4 Dec 2012 12:51:34 +0100 Subject: [PATCH 026/530] Upgrade to Ruby 2.0.0 (r38184). --- ...9.3-added-site-and-vendor-arch-flags.patch | 12 +- ruby-1.9.3-always-use-i386.patch | 2 +- ruby-1.9.3-arch-specific-dir.patch | 8 +- ruby-1.9.3-custom-rubygems-location.patch | 4 +- ruby-1.9.3-disable-versioned-paths.patch | 8 +- ruby-1.9.3-mkmf-verbose.patch | 2 +- ruby-1.9.3-rubygems-1.8.11-uninstaller.patch | 93 ---------------- ruby.spec | 25 +++-- rubygems-1.8.11-binary-extensions.patch | 103 +++++++++--------- 9 files changed, 80 insertions(+), 177 deletions(-) delete mode 100644 ruby-1.9.3-rubygems-1.8.11-uninstaller.patch diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch index d595118..5f72381 100644 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch @@ -29,7 +29,7 @@ diff --git a/configure.in b/configure.in index 8e4aaec..c65e0c7 100644 --- a/configure.in +++ b/configure.in -@@ -3153,6 +3153,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do +@@ -3170,6 +3170,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do dir="${SITE_DIR}" done @@ -45,7 +45,7 @@ index 8e4aaec..c65e0c7 100644 AC_ARG_WITH(vendordir, AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), [vendordir=$withval], -@@ -3162,19 +3171,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -3179,19 +3188,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDOR_DIR}" done @@ -78,7 +78,7 @@ index 8e4aaec..c65e0c7 100644 fi pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)' -@@ -3192,6 +3214,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], +@@ -3209,6 +3231,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], [ RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\"" ]) @@ -92,7 +92,7 @@ index 8e4aaec..c65e0c7 100644 AS_CASE(["$RUBY_VENDOR_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_VENDOR_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_LIB_PATH\" : \"$pat\"`"'"' -@@ -3199,6 +3228,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], +@@ -3216,6 +3245,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], [ RUBY_VENDOR_LIB_PATH="\"${RUBY_VENDOR_LIB_PATH}\"" ]) @@ -106,7 +106,7 @@ index 8e4aaec..c65e0c7 100644 pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)' AS_CASE(["$RUBY_LIB_PREFIX"], ["$RUBY_EXEC_PREFIX/"*], [ -@@ -3220,11 +3256,13 @@ if test "x$SITE_DIR" = xno; then +@@ -3237,11 +3273,13 @@ if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH} !!) @@ -120,7 +120,7 @@ index 8e4aaec..c65e0c7 100644 fi AC_SUBST(arch)dnl -@@ -3232,7 +3270,9 @@ AC_SUBST(sitearch)dnl +@@ -3249,7 +3287,9 @@ AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl AC_SUBST(archdir)dnl AC_SUBST(sitedir)dnl diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch index 00165dc..74e41d7 100644 --- a/ruby-1.9.3-always-use-i386.patch +++ b/ruby-1.9.3-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index c65e0c7..748edc9 100644 --- a/configure.in +++ b/configure.in -@@ -3277,6 +3277,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3294,6 +3294,8 @@ AC_SUBST(vendorarchdir)dnl configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index eb57196..d8970cf 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -26,7 +26,7 @@ diff --git a/configure.in b/configure.in index db3641b..8e4aaec 100644 --- a/configure.in +++ b/configure.in -@@ -3135,6 +3135,15 @@ else +@@ -3152,6 +3152,15 @@ else RUBY_LIB_VERSION="\"${ruby_version}\"" fi @@ -42,7 +42,7 @@ index db3641b..8e4aaec 100644 AC_ARG_WITH(sitedir, AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), [sitedir=$withval], -@@ -3157,16 +3166,25 @@ if test "${LOAD_RELATIVE+set}"; then +@@ -3174,16 +3183,25 @@ if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" @@ -68,7 +68,7 @@ index db3641b..8e4aaec 100644 AS_CASE(["$RUBY_SITE_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"' -@@ -3197,6 +3215,7 @@ else +@@ -3214,6 +3232,7 @@ else fi AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}") AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX} !!) @@ -76,7 +76,7 @@ index db3641b..8e4aaec 100644 if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else -@@ -3211,6 +3230,7 @@ fi +@@ -3228,6 +3247,7 @@ fi AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index 47cd946..397d760 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index 748edc9..6a16745 100644 --- a/configure.in +++ b/configure.in -@@ -3180,6 +3180,13 @@ until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_D +@@ -3197,6 +3197,13 @@ until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_D dir="${VENDORARCH_DIR}" done @@ -29,7 +29,7 @@ index 748edc9..6a16745 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" -@@ -3273,6 +3280,7 @@ AC_SUBST(sitedir)dnl +@@ -3290,6 +3297,7 @@ AC_SUBST(sitedir)dnl AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-1.9.3-disable-versioned-paths.patch b/ruby-1.9.3-disable-versioned-paths.patch index be671a9..79f7bd6 100644 --- a/ruby-1.9.3-disable-versioned-paths.patch +++ b/ruby-1.9.3-disable-versioned-paths.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index f2d22ef..db3641b 100644 --- a/configure.in +++ b/configure.in -@@ -3302,6 +3302,17 @@ else +@@ -3319,6 +3319,17 @@ else fi AC_SUBST(USE_RUBYGEMS) @@ -37,10 +37,10 @@ diff --git a/lib/rdoc/ri/paths.rb b/lib/rdoc/ri/paths.rb index a3c65bf..a4e8559 100644 --- a/lib/rdoc/ri/paths.rb +++ b/lib/rdoc/ri/paths.rb -@@ -11,9 +11,9 @@ module RDoc::RI::Paths +@@ -12,9 +12,9 @@ module RDoc::RI::Paths version = RbConfig::CONFIG['ruby_version'] - base = if RbConfig::CONFIG.key? 'ridir' then + BASE = if RbConfig::CONFIG.key? 'ridir' then - File.join RbConfig::CONFIG['ridir'], version + File.join [RbConfig::CONFIG['ridir'], RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil].compact else @@ -48,7 +48,7 @@ index a3c65bf..a4e8559 100644 + File.join [RbConfig::CONFIG['datadir'], 'ri', RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil].compact end - SYSDIR = File.join base, "system" + homedir = begin diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb index f9d97d3..d9e26c1 100755 --- a/tool/mkconfig.rb diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index 77be75a..df88a50 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,7 +11,7 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index ded4e89..0870f22 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1746,7 +1746,7 @@ SRC +@@ -1747,7 +1747,7 @@ SRC SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. diff --git a/ruby-1.9.3-rubygems-1.8.11-uninstaller.patch b/ruby-1.9.3-rubygems-1.8.11-uninstaller.patch deleted file mode 100644 index f8eb63d..0000000 --- a/ruby-1.9.3-rubygems-1.8.11-uninstaller.patch +++ /dev/null @@ -1,93 +0,0 @@ -From 6a07398a3aac0793d1a62f6f4778d90baf86ab7e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 19 Nov 2012 14:41:06 +0100 -Subject: [PATCH] RubyGems uninstaller upstream fixes. - ---- - lib/rubygems/uninstaller.rb | 35 +++++++++++++++++++++++------------ - test/rubygems/test_gem_uninstaller.rb | 2 +- - 2 files changed, 24 insertions(+), 13 deletions(-) - -diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb -index cc32ea4..c0e8b4b 100644 ---- a/lib/rubygems/uninstaller.rb -+++ b/lib/rubygems/uninstaller.rb -@@ -51,15 +51,14 @@ class Gem::Uninstaller - @bin_dir = options[:bin_dir] - @format_executable = options[:format_executable] - -+ if options[:force] -+ @force_all = true -+ @force_ignore = true -+ end -+ - # only add user directory if install_dir is not set - @user_install = false - @user_install = options[:user_install] unless options[:install_dir] -- -- if @user_install then -- Gem.use_paths Gem.user_dir, @gem_home -- else -- Gem.use_paths @gem_home -- end - end - - ## -@@ -69,10 +68,24 @@ class Gem::Uninstaller - def uninstall - list = Gem::Specification.find_all_by_name(@gem, @version) - -+ list, other_repo_specs = list.partition do |spec| -+ @gem_home == spec.base_dir or -+ (@user_install and spec.base_dir == Gem.user_dir) -+ end -+ - if list.empty? then -- raise Gem::InstallError, "gem #{@gem.inspect} is not installed" -+ raise Gem::InstallError, "gem #{@gem.inspect} is not installed" if -+ other_repo_specs.empty? -+ -+ other_repos = other_repo_specs.map { |spec| spec.base_dir }.uniq -+ -+ message = ["#{@gem} is not installed in GEM_HOME, try:"] -+ message.concat other_repos.map { |repo| -+ "\tgem uninstall -i #{repo} #{@gem}" -+ } - -- elsif list.size > 1 and @force_all then -+ raise Gem::InstallError, message.join("\n") -+ elsif @force_all then - remove_all list - - elsif list.size > 1 then -@@ -250,12 +263,10 @@ class Gem::Uninstaller - msg << "\t#{spec.full_name}" - - spec.dependent_gems.each do |dep_spec, dep, satlist| -- msg << -- ("#{dep_spec.name}-#{dep_spec.version} depends on " + -- "[#{dep.name} (#{dep.requirement})]") -+ msg << "#{dep_spec.name}-#{dep_spec.version} depends on #{dep}" - end - -- msg << 'If you remove this gems, one or more dependencies will not be met.' -+ msg << 'If you remove this gem, one or more dependencies will not be met.' - msg << 'Continue with Uninstall?' - return ask_yes_no(msg.join("\n"), true) - end -diff --git a/test/rubygems/test_gem_uninstaller.rb b/test/rubygems/test_gem_uninstaller.rb -index a65b992..1cd186f 100644 ---- a/test/rubygems/test_gem_uninstaller.rb -+++ b/test/rubygems/test_gem_uninstaller.rb -@@ -225,7 +225,7 @@ class TestGemUninstaller < Gem::InstallerTestCase - - uninstaller = Gem::Uninstaller.new('a') - -- use_ui Gem::MockGemUi.new("2\n") do -+ use_ui Gem::MockGemUi.new("2\ny\n") do - uninstaller.uninstall - end - --- -1.8.0 - diff --git a/ruby.spec b/ruby.spec index 75059e2..b6a6108 100644 --- a/ruby.spec +++ b/ruby.spec @@ -15,7 +15,7 @@ #%%global milestone preview1 # Keep the revision enabled for pre-releases from SVN. -%global revision 37807 +%global revision 38184 %global ruby_archive %{name}-%{ruby_version} @@ -44,7 +44,7 @@ %global ruby_vendorlibdir %{_datadir}/ruby/%{ruby_vendordir} %global ruby_vendorarchdir %{_libdir}/ruby/%{ruby_vendordir} -%global rubygems_version 1.8.23 +%global rubygems_version 2.0.0.preview2 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. @@ -57,16 +57,16 @@ # http://rpm.org/ticket/78 %global gem_extdir %{_exec_prefix}/lib{,64}/gems -%global rake_version 0.9.4 +%global rake_version 0.9.5 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version_patch_level} -%global rdoc_version 3.9.5 +%global rdoc_version 4.0.0.preview2 %global bigdecimal_version 1.1.0 %global io_console_version 0.3 %global json_version 1.7.1 -%global minitest_version 3.4.0 -%global psych_version 1.3.4 +%global minitest_version 4.3.2 +%global psych_version 2.0.0 %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') @@ -92,11 +92,6 @@ Patch2: ruby-1.9.3-added-site-and-vendor-arch-flags.patch Patch3: ruby-1.9.3-always-use-i386.patch # http://redmine.ruby-lang.org/issues/5465 Patch4: ruby-1.9.3-fix-s390x-build.patch -# Fix the uninstaller, so that it doesn't say that gem doesn't exist -# when it exists outside of the GEM_HOME (already fixed in the upstream) -# This consist of several RubyGems upstream patches: -# 2786a40b, 8e2a9889, 1755effe, 70963846, 21c78318, 88e1e1cc, 415c0ec4 -Patch5: ruby-1.9.3-rubygems-1.8.11-uninstaller.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://redmine.ruby-lang.org/issues/5617 Patch8: ruby-1.9.3-custom-rubygems-location.patch @@ -383,7 +378,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch2 -p1 %patch3 -p1 %patch4 -p1 -%patch5 -p1 %patch8 -p1 %patch9 -p1 %patch10 -p1 @@ -468,14 +462,17 @@ mkdir -p %{buildroot}%{gem_extdir}/exts # make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems mkdir -p %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/lib mv %{buildroot}%{ruby_libdir}/rake* %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/lib +mv %{buildroot}%{gem_dir}/specifications/default/rake-%{rake_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib +mv %{buildroot}%{gem_dir}/specifications/default/rdoc-%{rdoc_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/exts/bigdecimal-%{bigdecimal_version}/lib mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/exts/bigdecimal-%{bigdecimal_version}/lib +mv %{buildroot}%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal ln -s %{_libdir}/gems/exts/bigdecimal-%{bigdecimal_version}/lib/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so @@ -483,6 +480,7 @@ mkdir -p %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/exts/io-console-%{io_console_version}/lib/io mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{_libdir}/gems/exts/io-console-%{io_console_version}/lib/io +mv %{buildroot}%{gem_dir}/specifications/default/io-console-%{io_console_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/io-console-%{io_console_version}/lib/io %{buildroot}%{ruby_libdir}/io ln -s %{_libdir}/gems/exts/io-console-%{io_console_version}/lib/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so @@ -490,14 +488,17 @@ mkdir -p %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/exts/json-%{json_version}/lib mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/exts/json-%{json_version}/lib/ +mv %{buildroot}%{gem_dir}/specifications/default/json-%{json_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib mv %{buildroot}%{ruby_libdir}/minitest %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib +mv %{buildroot}%{gem_dir}/specifications/default/minitest-%{minitest_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/exts/psych-%{psych_version}/lib mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/exts/psych-%{psych_version}/lib/ +mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications # Adjust the gemspec files so that the gems will load properly sed -i '8 a\ diff --git a/rubygems-1.8.11-binary-extensions.patch b/rubygems-1.8.11-binary-extensions.patch index b3a5697..d44f9cf 100644 --- a/rubygems-1.8.11-binary-extensions.patch +++ b/rubygems-1.8.11-binary-extensions.patch @@ -4,14 +4,14 @@ Date: Thu, 3 Nov 2011 16:43:05 +0100 Subject: [PATCH 1/6] Add dedicate extensions folder into $LOAD_PATH. --- - lib/rubygems/specification.rb | 37 ++++++++++++++++++++++++++++++------- - 1 files changed, 30 insertions(+), 7 deletions(-) + lib/rubygems/specification.rb | 32 ++++++++++++++++++++++++++++++-- + 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 97db19e..263e7d3 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -859,6 +859,12 @@ class Gem::Specification +@@ -1250,6 +1250,12 @@ class Gem::Specification File.join full_gem_path, path end @@ -24,31 +24,26 @@ index 97db19e..263e7d3 100644 # gem directories must come after -I and ENV['RUBYLIB'] insert_index = Gem.load_path_insert_index -@@ -970,16 +976,16 @@ class Gem::Specification +@@ -1364,11 +1370,16 @@ class Gem::Specification def contains_requirable_file? file - root = full_gem_path -+ ext = ext_dir -+ -+ require_paths.any? do |lib| + root = full_gem_path ++ ext = ext_dir + suffixes = Gem.suffixes + + require_paths.any? do |lib| +- base = "#{root}/#{lib}/#{file}" +- suffixes.any? { |suf| File.file? "#{base}#{suf}" } + base = ["#{root}/#{lib}/#{file}"] + base << "#{ext}/#{lib}/#{file}" unless extensions.empty? - -- require_paths.each do |lib| -- base = "#{root}/#{lib}/#{file}" -- Gem.suffixes.each do |suf| -- path = "#{base}#{suf}" -- return true if File.file? path ++ + base.any? do |path| -+ Gem.suffixes.any? { |suf| File.file? "#{path}#{suf}" } - end ++ suffixes.any? { |suf| File.file? "#{path}#{suf}" } ++ end end -- -- return false end - ## -@@ -1295,6 +1301,23 @@ class Gem::Specification +@@ -1664,6 +1675,23 @@ class Gem::Specification end ## @@ -73,7 +68,7 @@ index 97db19e..263e7d3 100644 # # Formerly used to indicate this gem was RDoc-capable. -- -1.7.7.3 +1.8.0 From 671e4285bf9db948bc5f054d7d3d931cdd7a17f8 Mon Sep 17 00:00:00 2001 @@ -82,18 +77,18 @@ Date: Wed, 16 Nov 2011 13:26:48 +0100 Subject: [PATCH 2/6] Use spec's ext dir for extension installation. --- - lib/rubygems/installer.rb | 2 +- - lib/rubygems/specification.rb | 7 +++---- + lib/rubygems/installer.rb | 2 +- + lib/rubygems/specification.rb | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 74d803d..0063c7f 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -509,7 +509,7 @@ TEXT - def build_extensions - return if spec.extensions.empty? - say "Building native extensions. This could take a while..." +@@ -649,7 +649,7 @@ TEXT + say "This could take a while..." + end + - dest_path = File.join gem_dir, spec.require_paths.first + dest_path = spec.ext_dir ran_rake = false # only run rake once @@ -103,7 +98,7 @@ diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 263e7d3..d31b93b 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -1305,16 +1305,15 @@ class Gem::Specification +@@ -1679,16 +1679,15 @@ class Gem::Specification # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0 def ext_dir @@ -124,7 +119,7 @@ index 263e7d3..d31b93b 100644 ## -- -1.7.7.3 +1.8.0 From 11b4a0cbadd8b1d3320f838881aa60feb6f848e7 Mon Sep 17 00:00:00 2001 @@ -133,14 +128,14 @@ Date: Wed, 16 Nov 2011 14:52:16 +0100 Subject: [PATCH 3/6] Simplify the extending of $LOAD_PATH for binary gems. --- - lib/rubygems/specification.rb | 11 +++++------ - 1 files changed, 5 insertions(+), 6 deletions(-) + lib/rubygems/specification.rb | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index d31b93b..e65ea2d 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -859,11 +859,7 @@ class Gem::Specification +@@ -1250,11 +1250,7 @@ class Gem::Specification File.join full_gem_path, path end @@ -153,7 +148,7 @@ index d31b93b..e65ea2d 100644 # gem directories must come after -I and ENV['RUBYLIB'] insert_index = Gem.load_path_insert_index -@@ -1313,7 +1309,10 @@ class Gem::Specification +@@ -1687,7 +1683,10 @@ class Gem::Specification # gem directory. eg: /usr/local/lib/ruby/1.8/gems def exts_dir @@ -166,7 +161,7 @@ index d31b93b..e65ea2d 100644 ## -- -1.7.7.3 +1.8.0 From 5d46cd2b1ac9517a9cbcfa430261e62bb3a376b8 Mon Sep 17 00:00:00 2001 @@ -175,18 +170,18 @@ Date: Fri, 9 Dec 2011 16:31:04 +0100 Subject: [PATCH 4/6] Fix the binary extension search path construction. --- - lib/rubygems/installer.rb | 2 +- - lib/rubygems/specification.rb | 4 ++-- + lib/rubygems/installer.rb | 2 +- + lib/rubygems/specification.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 0063c7f..83b8fd5 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -509,7 +509,7 @@ TEXT - def build_extensions - return if spec.extensions.empty? - say "Building native extensions. This could take a while..." +@@ -649,7 +649,7 @@ TEXT + say "This could take a while..." + end + - dest_path = spec.ext_dir + dest_path = File.join spec.ext_dir, spec.require_paths.first ran_rake = false # only run rake once @@ -196,7 +191,7 @@ diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index e65ea2d..8be2ade 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -859,7 +859,7 @@ class Gem::Specification +@@ -1250,7 +1250,7 @@ class Gem::Specification File.join full_gem_path, path end @@ -205,7 +200,7 @@ index e65ea2d..8be2ade 100644 # gem directories must come after -I and ENV['RUBYLIB'] insert_index = Gem.load_path_insert_index -@@ -1301,7 +1301,7 @@ class Gem::Specification +@@ -1675,7 +1675,7 @@ class Gem::Specification # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0 def ext_dir @@ -215,7 +210,7 @@ index e65ea2d..8be2ade 100644 ## -- -1.7.7.3 +1.8.0 From 6229583633802b45e5a3e5689ab9077347cd9ef7 Mon Sep 17 00:00:00 2001 @@ -224,14 +219,14 @@ Date: Tue, 13 Dec 2011 12:14:54 +0100 Subject: [PATCH 5/6] Remove binary extensions during uninstall. --- - lib/rubygems/uninstaller.rb | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) + lib/rubygems/uninstaller.rb | 1 + + 1 file changed, 1 insertion(+) diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb index cc32ea4..94d78e0 100644 --- a/lib/rubygems/uninstaller.rb +++ b/lib/rubygems/uninstaller.rb -@@ -213,6 +213,7 @@ class Gem::Uninstaller +@@ -234,6 +234,7 @@ class Gem::Uninstaller File.writable?(spec.base_dir) FileUtils.rm_rf spec.full_gem_path @@ -240,7 +235,7 @@ index cc32ea4..94d78e0 100644 # TODO: should this be moved to spec?... I vote eww (also exists in docmgr) old_platform_name = [spec.name, -- -1.7.7.3 +1.8.0 From bc40e1b9f60a9a04456e3504ffe6ee600b6da269 Mon Sep 17 00:00:00 2001 @@ -249,15 +244,15 @@ Date: Tue, 13 Dec 2011 14:27:14 +0100 Subject: [PATCH 6/6] Avoid dependency on customized operating_system.rb. --- - lib/rubygems/defaults.rb | 11 +++++++++++ - lib/rubygems/specification.rb | 5 +---- + lib/rubygems/defaults.rb | 11 +++++++++++ + lib/rubygems/specification.rb | 5 +---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb index 20b4198..6d8711f 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -94,6 +94,17 @@ module Gem +@@ -101,6 +101,17 @@ module Gem end ## @@ -272,14 +267,14 @@ index 20b4198..6d8711f 100644 + end + + ## - # The default system-wide source info cache directory + # A wrapper around RUBY_ENGINE const that may not be defined - def self.default_system_source_cache_dir + def self.ruby_engine diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 8be2ade..f54210a 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -1309,10 +1309,7 @@ class Gem::Specification +@@ -1683,10 +1683,7 @@ class Gem::Specification # gem directory. eg: /usr/local/lib/ruby/1.8/gems def exts_dir @@ -292,5 +287,5 @@ index 8be2ade..f54210a 100644 ## -- -1.7.7.3 +1.8.0 From 6951c61aeec302334258060fbfb268e3b02cdc72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 5 Dec 2012 16:42:40 +0100 Subject: [PATCH 027/530] Update release name to preview2, which is the most actual. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index b6a6108..e4da346 100644 --- a/ruby.spec +++ b/ruby.spec @@ -12,7 +12,7 @@ %global ruby_abi 1.9.1 # Specify the named version. It has precedense to revision. -#%%global milestone preview1 +#%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. %global revision 38184 From 08ec4b6a6cad4917b58df9ba1e9ad66484228c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 5 Dec 2012 16:46:30 +0100 Subject: [PATCH 028/530] Add TODO to fix ruby_abi for official release. --- ruby.spec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index e4da346..07d7b86 100644 --- a/ruby.spec +++ b/ruby.spec @@ -7,7 +7,9 @@ %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_version_patch_level %{major_minor_version}.%{teeny_version}.%{patch_level} -# Ruby 2.0 keeps the abi Ruby 1.9.1 compatible. +# TODO: Fix ruby_api for official release according to +# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/48984 +# It is kept at 1.9.1 just for testing. All dependent libraries need rebuild. # %%global ruby_abi %%{major_minor_version}.0 %global ruby_abi 1.9.1 From 6c9f7f527320c91698a65091a469aba20fcfb520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 7 Dec 2012 13:51:54 +0100 Subject: [PATCH 029/530] Update to Ruby 2.0.0 (r38260). --- ruby.spec | 3 ++- rubygems-1.8.11-binary-extensions.patch | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/ruby.spec b/ruby.spec index 07d7b86..587a15d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -17,7 +17,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 38184 +%global revision 38260 %global ruby_archive %{name}-%{ruby_version} @@ -720,6 +720,7 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/racc/cparse.so %{ruby_libarchdir}/rbconfig.rb %{ruby_libarchdir}/readline.so +%{ruby_libarchdir}/refinement.so %{ruby_libarchdir}/ripper.so %{ruby_libarchdir}/sdbm.so %{ruby_libarchdir}/socket.so diff --git a/rubygems-1.8.11-binary-extensions.patch b/rubygems-1.8.11-binary-extensions.patch index d44f9cf..dc6f85a 100644 --- a/rubygems-1.8.11-binary-extensions.patch +++ b/rubygems-1.8.11-binary-extensions.patch @@ -24,7 +24,7 @@ index 97db19e..263e7d3 100644 # gem directories must come after -I and ENV['RUBYLIB'] insert_index = Gem.load_path_insert_index -@@ -1364,11 +1370,16 @@ class Gem::Specification +@@ -1368,11 +1374,16 @@ class Gem::Specification def contains_requirable_file? file root = full_gem_path @@ -43,7 +43,7 @@ index 97db19e..263e7d3 100644 end end -@@ -1664,6 +1675,23 @@ class Gem::Specification +@@ -1668,6 +1679,23 @@ class Gem::Specification end ## @@ -98,7 +98,7 @@ diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 263e7d3..d31b93b 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -1679,16 +1679,15 @@ class Gem::Specification +@@ -1683,16 +1683,15 @@ class Gem::Specification # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0 def ext_dir @@ -148,7 +148,7 @@ index d31b93b..e65ea2d 100644 # gem directories must come after -I and ENV['RUBYLIB'] insert_index = Gem.load_path_insert_index -@@ -1687,7 +1683,10 @@ class Gem::Specification +@@ -1691,7 +1687,10 @@ class Gem::Specification # gem directory. eg: /usr/local/lib/ruby/1.8/gems def exts_dir @@ -200,7 +200,7 @@ index e65ea2d..8be2ade 100644 # gem directories must come after -I and ENV['RUBYLIB'] insert_index = Gem.load_path_insert_index -@@ -1675,7 +1675,7 @@ class Gem::Specification +@@ -1679,7 +1679,7 @@ class Gem::Specification # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0 def ext_dir @@ -274,7 +274,7 @@ diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 8be2ade..f54210a 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb -@@ -1683,10 +1683,7 @@ class Gem::Specification +@@ -1687,10 +1687,7 @@ class Gem::Specification # gem directory. eg: /usr/local/lib/ruby/1.8/gems def exts_dir From f54d04c405da8c88627c9e7760a3ea65ea3691ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 7 Dec 2012 16:45:39 +0100 Subject: [PATCH 030/530] RDoc now depends on JSON. --- ruby.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/ruby.spec b/ruby.spec index 587a15d..e754b8c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -241,6 +241,7 @@ License: GPLv2 and Ruby and MIT Requires: ruby(abi) = %{ruby_abi} Requires: ruby(rubygems) >= %{rubygems_version} Requires: ruby(irb) = %{irb_version} +Requires: rubygem(json) >= %{json_version} Provides: rdoc = %{version}-%{release} Provides: ri = %{version}-%{release} Provides: rubygem(rdoc) = %{version}-%{release} From e6ae5c218d63f6943c16e7d269528ac943c06b19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 7 Dec 2012 17:12:51 +0100 Subject: [PATCH 031/530] Always add the .gemspec lines before end of block. --- ruby.spec | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ruby.spec b/ruby.spec index e754b8c..8d95e3f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -504,25 +504,25 @@ mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/exts/psyc mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications # Adjust the gemspec files so that the gems will load properly -sed -i '8 a\ +sed -i '/^end$/ i\ s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/rake-%{rake_version}.gemspec -sed -i '8 a\ +sed -i '/^end$/ i\ s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec -sed -i '8 a\ +sed -i '/^end$/ i\ s.require_paths = ["lib"]\ s.extensions = ["bigdecimal.so"]' %{buildroot}%{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec -sed -i '8 a\ +sed -i '/^end$/ i\ s.require_paths = ["lib"]\ s.extensions = ["io/console.so"]' %{buildroot}%{gem_dir}/specifications/io-console-%{io_console_version}.gemspec -sed -i '8 a\ +sed -i '/^end$/ i\ s.require_paths = ["lib"]\ s.extensions = ["json/ext/parser.so", "json/ext/generator.so"]' %{buildroot}%{gem_dir}/specifications/json-%{json_version}.gemspec -sed -i '8 a\ +sed -i '/^end$/ i\ s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec %check From f700ed56ad4625bbb49d3e29dbe72d16c7469ccf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 10 Dec 2012 16:22:43 +0100 Subject: [PATCH 032/530] Upgrade to Ruby 2.0.0 (r38297). --- ...-1.9.3-added-site-and-vendor-arch-flags.patch | 16 ++++++++-------- ruby-1.9.3-always-use-i386.patch | 2 +- ruby-1.9.3-arch-specific-dir.patch | 12 ++++++------ ruby-1.9.3-custom-rubygems-location.patch | 6 +++--- ruby-1.9.3-disable-versioned-paths.patch | 6 +++--- ruby.spec | 2 +- rubygems-1.8.11-binary-extensions.patch | 2 +- 7 files changed, 23 insertions(+), 23 deletions(-) diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch index 5f72381..4ec996a 100644 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch @@ -29,7 +29,7 @@ diff --git a/configure.in b/configure.in index 8e4aaec..c65e0c7 100644 --- a/configure.in +++ b/configure.in -@@ -3170,6 +3170,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do +@@ -3172,6 +3172,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do dir="${SITE_DIR}" done @@ -45,7 +45,7 @@ index 8e4aaec..c65e0c7 100644 AC_ARG_WITH(vendordir, AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), [vendordir=$withval], -@@ -3179,19 +3188,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -3181,19 +3190,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDOR_DIR}" done @@ -78,7 +78,7 @@ index 8e4aaec..c65e0c7 100644 fi pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)' -@@ -3209,6 +3231,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], +@@ -3211,6 +3233,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], [ RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\"" ]) @@ -92,7 +92,7 @@ index 8e4aaec..c65e0c7 100644 AS_CASE(["$RUBY_VENDOR_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_VENDOR_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_LIB_PATH\" : \"$pat\"`"'"' -@@ -3216,6 +3245,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], +@@ -3218,6 +3247,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], [ RUBY_VENDOR_LIB_PATH="\"${RUBY_VENDOR_LIB_PATH}\"" ]) @@ -106,7 +106,7 @@ index 8e4aaec..c65e0c7 100644 pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)' AS_CASE(["$RUBY_LIB_PREFIX"], ["$RUBY_EXEC_PREFIX/"*], [ -@@ -3237,11 +3273,13 @@ if test "x$SITE_DIR" = xno; then +@@ -3239,11 +3275,13 @@ if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH} !!) @@ -120,7 +120,7 @@ index 8e4aaec..c65e0c7 100644 fi AC_SUBST(arch)dnl -@@ -3249,7 +3287,9 @@ AC_SUBST(sitearch)dnl +@@ -3251,7 +3289,9 @@ AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl AC_SUBST(archdir)dnl AC_SUBST(sitedir)dnl @@ -143,7 +143,7 @@ index 03c3332..79b8e44 100755 File.foreach "config.status" do |line| next if /^#/ =~ line name = nil -@@ -79,6 +81,8 @@ File.foreach "config.status" do |line| +@@ -80,6 +82,8 @@ File.foreach "config.status" do |line| when /^RUBY_SO_NAME$/; next if $so_name when /^arch$/; if val.empty? then val = arch else arch = val end when /^archdir$/; archdir_override = val; next @@ -152,7 +152,7 @@ index 03c3332..79b8e44 100755 when /^sitearch/; val = '$(arch)' if val.empty? end case val -@@ -213,11 +217,11 @@ print <!) @@ -76,7 +76,7 @@ index db3641b..8e4aaec 100644 if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else -@@ -3228,6 +3247,7 @@ fi +@@ -3230,6 +3249,7 @@ fi AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -96,7 +96,7 @@ index d9e26c1..03c3332 100755 File.foreach "config.status" do |line| next if /^#/ =~ line name = nil -@@ -77,6 +78,7 @@ File.foreach "config.status" do |line| +@@ -78,6 +79,7 @@ File.foreach "config.status" do |line| when /^RUBY_INSTALL_NAME$/; next if $install_name when /^RUBY_SO_NAME$/; next if $so_name when /^arch$/; if val.empty? then val = arch else arch = val end @@ -104,7 +104,7 @@ index d9e26c1..03c3332 100755 when /^sitearch/; val = '$(arch)' if val.empty? end case val -@@ -207,7 +209,7 @@ print(*v_fast) +@@ -208,7 +210,7 @@ print(*v_fast) print(*v_others) print < Date: Tue, 11 Dec 2012 10:53:48 +0100 Subject: [PATCH 033/530] Try to make -doc subpackage noarch again The new RDoc should resolve the arch dependent issues (https://github.com/rdoc/rdoc/issues/71). --- ruby.spec | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ruby.spec b/ruby.spec index 78482e4..fbd0c05 100644 --- a/ruby.spec +++ b/ruby.spec @@ -259,11 +259,7 @@ documentation. Summary: Documentation for %{name} Group: Documentation Requires: %{_bindir}/ri -# TODO: It seems that ri documentation differs from platform to platform due to -# some encoding bugs, therefore the documentation should be split out of this gem -# or kept platform specific. -# https://github.com/rdoc/rdoc/issues/71 -# BuildArch: noarch +BuildArch: noarch %description doc This package contains documentation for %{name}. From 66b98259c5d7952c9594f748d70cb743f1e29f3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 17 Dec 2012 10:52:59 +0100 Subject: [PATCH 034/530] Update to Ruby 2.0.0 (r38422). --- ruby-1.9.3-added-site-and-vendor-arch-flags.patch | 12 ++++++------ ruby-1.9.3-always-use-i386.patch | 2 +- ruby-1.9.3-arch-specific-dir.patch | 8 ++++---- ruby-1.9.3-custom-rubygems-location.patch | 4 ++-- ruby-1.9.3-disable-versioned-paths.patch | 2 +- ruby.spec | 6 +++--- rubygems-1.8.11-binary-extensions.patch | 2 +- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch index 4ec996a..4900fee 100644 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch @@ -29,7 +29,7 @@ diff --git a/configure.in b/configure.in index 8e4aaec..c65e0c7 100644 --- a/configure.in +++ b/configure.in -@@ -3172,6 +3172,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do +@@ -3178,6 +3178,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do dir="${SITE_DIR}" done @@ -45,7 +45,7 @@ index 8e4aaec..c65e0c7 100644 AC_ARG_WITH(vendordir, AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), [vendordir=$withval], -@@ -3181,19 +3190,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -3187,19 +3196,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDOR_DIR}" done @@ -78,7 +78,7 @@ index 8e4aaec..c65e0c7 100644 fi pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)' -@@ -3211,6 +3233,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], +@@ -3217,6 +3239,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], [ RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\"" ]) @@ -92,7 +92,7 @@ index 8e4aaec..c65e0c7 100644 AS_CASE(["$RUBY_VENDOR_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_VENDOR_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_LIB_PATH\" : \"$pat\"`"'"' -@@ -3218,6 +3247,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], +@@ -3224,6 +3253,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], [ RUBY_VENDOR_LIB_PATH="\"${RUBY_VENDOR_LIB_PATH}\"" ]) @@ -106,7 +106,7 @@ index 8e4aaec..c65e0c7 100644 pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)' AS_CASE(["$RUBY_LIB_PREFIX"], ["$RUBY_EXEC_PREFIX/"*], [ -@@ -3239,11 +3275,13 @@ if test "x$SITE_DIR" = xno; then +@@ -3245,11 +3281,13 @@ if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH} !!) @@ -120,7 +120,7 @@ index 8e4aaec..c65e0c7 100644 fi AC_SUBST(arch)dnl -@@ -3251,7 +3289,9 @@ AC_SUBST(sitearch)dnl +@@ -3257,7 +3295,9 @@ AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl AC_SUBST(archdir)dnl AC_SUBST(sitedir)dnl diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch index ae98ef5..3c4eff8 100644 --- a/ruby-1.9.3-always-use-i386.patch +++ b/ruby-1.9.3-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index c65e0c7..748edc9 100644 --- a/configure.in +++ b/configure.in -@@ -3296,6 +3296,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3302,6 +3302,8 @@ AC_SUBST(vendorarchdir)dnl configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index e1f025d..1e5bc06 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -26,7 +26,7 @@ diff --git a/configure.in b/configure.in index db3641b..8e4aaec 100644 --- a/configure.in +++ b/configure.in -@@ -3154,6 +3154,15 @@ else +@@ -3160,6 +3160,15 @@ else RUBY_LIB_VERSION="\"${ruby_version}\"" fi @@ -42,7 +42,7 @@ index db3641b..8e4aaec 100644 AC_ARG_WITH(sitedir, AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), [sitedir=$withval], -@@ -3176,16 +3185,25 @@ if test "${LOAD_RELATIVE+set}"; then +@@ -3182,16 +3191,25 @@ if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" @@ -68,7 +68,7 @@ index db3641b..8e4aaec 100644 AS_CASE(["$RUBY_SITE_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"' -@@ -3216,6 +3234,7 @@ else +@@ -3222,6 +3240,7 @@ else fi AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}") AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX} !!) @@ -76,7 +76,7 @@ index db3641b..8e4aaec 100644 if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else -@@ -3230,6 +3249,7 @@ fi +@@ -3236,6 +3255,7 @@ fi AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index ced4897..054b31f 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index 748edc9..6a16745 100644 --- a/configure.in +++ b/configure.in -@@ -3199,6 +3199,13 @@ until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_D +@@ -3205,6 +3205,13 @@ until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_D dir="${VENDORARCH_DIR}" done @@ -29,7 +29,7 @@ index 748edc9..6a16745 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" -@@ -3292,6 +3299,7 @@ AC_SUBST(sitedir)dnl +@@ -3298,6 +3305,7 @@ AC_SUBST(sitedir)dnl AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-1.9.3-disable-versioned-paths.patch b/ruby-1.9.3-disable-versioned-paths.patch index 1b77ef4..32f7e99 100644 --- a/ruby-1.9.3-disable-versioned-paths.patch +++ b/ruby-1.9.3-disable-versioned-paths.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index f2d22ef..db3641b 100644 --- a/configure.in +++ b/configure.in -@@ -3321,6 +3321,17 @@ else +@@ -3327,6 +3327,17 @@ else fi AC_SUBST(USE_RUBYGEMS) diff --git a/ruby.spec b/ruby.spec index fbd0c05..0d9c2ec 100644 --- a/ruby.spec +++ b/ruby.spec @@ -17,7 +17,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 38297 +%global revision 38422 %global ruby_archive %{name}-%{ruby_version} @@ -63,10 +63,10 @@ # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version_patch_level} -%global rdoc_version 4.0.0.preview2 +%global rdoc_version 4.0.0.preview2.1 %global bigdecimal_version 1.1.0 %global io_console_version 0.3 -%global json_version 1.7.1 +%global json_version 1.7.5 %global minitest_version 4.3.2 %global psych_version 2.0.0 diff --git a/rubygems-1.8.11-binary-extensions.patch b/rubygems-1.8.11-binary-extensions.patch index 0377271..dc6f85a 100644 --- a/rubygems-1.8.11-binary-extensions.patch +++ b/rubygems-1.8.11-binary-extensions.patch @@ -252,7 +252,7 @@ diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb index 20b4198..6d8711f 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -104,6 +104,17 @@ module Gem +@@ -101,6 +101,17 @@ module Gem end ## From f558e87b586e7fe87226bcfee82db7a8ee39cbef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 17 Dec 2012 15:43:07 +0100 Subject: [PATCH 035/530] Enable SystemTap support. --- ruby.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/ruby.spec b/ruby.spec index 0d9c2ec..2c5cba5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -145,6 +145,7 @@ BuildRequires: readline-devel BuildRequires: tk-devel # Needed to pass test_set_program_name(TestRubyOptions) BuildRequires: procps +BuildRequires: %{_bindir}/dtrace %description Ruby is the interpreted scripting language for quick and easy From e4abbb6f3e1c91407618ffe467371d9f64d3ecf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 18 Dec 2012 14:43:23 +0100 Subject: [PATCH 036/530] Re-enable tests previously disabled due to bugs. --- ruby.spec | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 2c5cba5..6731b76 100644 --- a/ruby.spec +++ b/ruby.spec @@ -523,9 +523,7 @@ sed -i '/^end$/ i\ s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec %check -# https://bugs.ruby-lang.org/issues/7386 -# http://bugs.ruby-lang.org/issues/7422 -DISABLE_TESTS="-x test_rake_functional.rb -x test_rubyoptions.rb" +DISABLE_TESTS="" %ifarch armv7l armv7hl armv7hnl # test_call_double(DL::TestDL) fails on ARM HardFP From 306a9cfda2536833e0dc02f67cce054af17e1e55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 19 Dec 2012 15:19:59 +0100 Subject: [PATCH 037/530] Add TapSet for Ruby. --- libruby.stp | 303 ++++++++++++++++++++++++++++++++++++++++++++++++++++ ruby.spec | 21 ++++ 2 files changed, 324 insertions(+) create mode 100644 libruby.stp diff --git a/libruby.stp b/libruby.stp new file mode 100644 index 0000000..098b39d --- /dev/null +++ b/libruby.stp @@ -0,0 +1,303 @@ +/* SystemTap tapset to make it easier to trace Ruby 2.0 + * + * All probes provided by Ruby can be listed using following command + * (the path to the library must be adjuste appropriately): + * + * stap -L 'process("@LIBRARY_PATH@").mark("*")' + */ + +/** + * probe ruby.array.create - Allocation of new array. + * + * @size: Number of elements (an int) + * @file: The file name where the method is being called (string) + * @line: The line number where the method is being called (int) + */ +probe ruby.array.create = + process("@LIBRARY_PATH@").mark("array__create") +{ + size = $arg1 + file = user_string($arg2) + line = $arg3 +} + +/** + * probe ruby.cmethod.entry - Fired just before a method implemented in C is entered. + * + * @classname: Name of the class (string) + * @methodname: The method about bo be executed (string) + * @file: The file name where the method is being called (string) + * @line: The line number where the method is being called (int) + */ +probe ruby.cmethod.entry = + process("@LIBRARY_PATH@").mark("cmethod__entry") +{ + classname = user_string($arg1) + methodname = user_string($arg2) + file = user_string($arg3) + line = $arg4 +} + +/** + * probe ruby.cmethod.return - Fired just after a method implemented in C has returned. + * + * @classname: Name of the class (string) + * @methodname: The executed method (string) + * @file: The file name where the method is being called (string) + * @line: The line number where the method is being called (int) + */ +probe ruby.cmethod.return = + process("@LIBRARY_PATH@").mark("cmethod__return") +{ + classname = user_string($arg1) + methodname = user_string($arg2) + file = user_string($arg3) + line = $arg4 +} + +/** + * probe ruby.find.require.entry - Fired when require starts to search load + * path for suitable file to require. + * + * @requiredfile: The name of the file to be required (string) + * @file: The file name where the method is being called (string) + * @line: The line number where the method is being called (int) + */ +probe ruby.find.require.entry = + process("@LIBRARY_PATH@").mark("find__require__entry") +{ + requiredfile = user_string($arg1) + file = user_string($arg2) + line = $arg3 +} + +/** + * probe ruby.find.require.return - Fired just after require has finished + * search of load path for suitable file to require. + * + * @requiredfile: The name of the file to be required (string) + * @file: The file name where the method is being called (string) + * @line: The line number where the method is being called (int) + */ +probe ruby.find.require.return = + process("@LIBRARY_PATH@").mark("find__require__return") +{ + requiredfile = user_string($arg1) + file = user_string($arg2) + line = $arg3 +} + +/** + * probe ruby.gc.mark.begin - Fired when a GC mark phase is about to start. + * + * It takes no arguments. + */ +probe ruby.gc.mark.begin = + process("@LIBRARY_PATH@").mark("gc__mark__begin") +{ +} + +/** + * probe ruby.gc.mark.end - Fired when a GC mark phase has ended. + * + * It takes no arguments. + */ +probe ruby.gc.mark.end = + process("@LIBRARY_PATH@").mark("gc__mark__end") +{ +} + +/** + * probe ruby.gc.sweep.begin - Fired when a GC sweep phase is about to start. + * + * It takes no arguments. + */ +probe ruby.gc.sweep.begin = + process("@LIBRARY_PATH@").mark("gc__sweep__begin") +{ +} + +/** + * probe ruby.gc.sweep.end - Fired when a GC sweep phase has ended. + * + * It takes no arguments. + */ +probe ruby.gc.sweep.end = + process("@LIBRARY_PATH@").mark("gc__sweep__end") +{ +} + +/** + * probe ruby.hash.create - Allocation of new hash. + * + * @size: Number of elements (int) + * @file: The file name where the method is being called (string) + * @line: The line number where the method is being called (int) + */ +probe ruby.hash.create = + process("@LIBRARY_PATH@").mark("hash__create") +{ + size = $arg1 + file = user_string($arg2) + line = $arg3 +} + +/** + * probe ruby.load.entry - Fired when calls to "load" are made. + * + * @loadedfile: The name of the file to be loaded (string) + * @file: The file name where the method is being called (string) + * @line: The line number where the method is being called (int) + */ +probe ruby.load.entry = + process("@LIBRARY_PATH@").mark("load__entry") +{ + loadedfile = user_string($arg1) + file = user_string($arg2) + line = $arg3 +} + +/** + * probe ruby.load.return - Fired just after require has finished + * search of load path for suitable file to require. + * + * @loadedfile: The name of the file that was loaded (string) + */ +probe ruby.load.return = + process("@LIBRARY_PATH@").mark("load__return") +{ + loadedfile = user_string($arg1) +} + +/** + * probe ruby.method.entry - Fired just before a method implemented in Ruby is entered. + * + * @classname: Name of the class (string) + * @methodname: The method about bo be executed (string) + * @file: The file name where the method is being called (string) + * @line: The line number where the method is being called (int) + */ +probe ruby.method.entry = + process("@LIBRARY_PATH@").mark("method__entry") +{ + classname = user_string($arg1) + methodname = user_string($arg2) + file = user_string($arg3) + line = $arg4 +} + +/** + * probe ruby.method.return - Fired just after a method implemented in Ruby has returned. + * + * @classname: Name of the class (string) + * @methodname: The executed method (string) + * @file: The file name where the method is being called (string) + * @line: The line number where the method is being called (int) + */ +probe ruby.method.return = + process("@LIBRARY_PATH@").mark("method__return") +{ + classname = user_string($arg1) + methodname = user_string($arg2) + file = user_string($arg3) + line = $arg4 +} + +/** + * probe ruby.object.create - Allocation of new object. + * + * @classname: Name of the class (string) + * @file: The file name where the method is being called (string) + * @line: The line number where the method is being called (int) + */ +probe ruby.object.create = + process("@LIBRARY_PATH@").mark("object__create") +{ + classname = user_string($arg1) + file = user_string($arg2) + line = $arg3 +} + +/** + * probe ruby.parse.begin - Fired just before a Ruby source file is parsed. + * + * @parsedfile: The name of the file to be parsed (string) + * @parsedline: The line number of beginning of parsing (int) + */ +probe ruby.parse.begin = + process("@LIBRARY_PATH@").mark("parse__begin") +{ + parsedfile = user_string($arg1) + parsedline = $arg2 +} + +/** + * probe ruby.parse.end - Fired just after a Ruby source file was parsed. + * + * @parsedfile: The name of parsed the file (string) + * @parsedline: The line number of beginning of parsing (int) + */ +probe ruby.parse.end = + process("@LIBRARY_PATH@").mark("parse__end") +{ + parsedfile = user_string($arg1) + parsedline = $arg2 +} + +/** + * probe ruby.raise - Fired when an exception is raised. + * + * @classname: The class name of the raised exception (string) + * @file: The name of the file where the exception was raised (string) + * @line: The line number in the file where the exception was raised (int) + */ +probe ruby.raise = + process("@LIBRARY_PATH@").mark("raise") +{ + classname = user_string($arg1) + file = user_string($arg2) + line = $arg3 +} + +/** + * probe ruby.require.entry - Fired on calls to rb_require_safe (when a file + * is required). + * + * @requiredfile: The name of the file to be required (string) + * @file: The file that called "require" (string) + * @line: The line number where the call to require was made(int) + */ +probe ruby.require.entry = + process("@LIBRARY_PATH@").mark("require__entry") +{ + requiredfile = user_string($arg1) + file = user_string($arg2) + line = $arg3 +} + +/** + * probe ruby.require.return - Fired just after require has finished + * search of load path for suitable file to require. + * + * @requiredfile: The file that was required (string) + */ +probe ruby.require.return = + process("@LIBRARY_PATH@").mark("require__return") +{ + requiredfile = user_string($arg1) +} + +/** + * probe ruby.string.create - Allocation of new string. + * + * @size: Number of elements (an int) + * @file: The file name where the method is being called (string) + * @line: The line number where the method is being called (int) + */ +probe ruby.string.create = + process("@LIBRARY_PATH@").mark("string__create") +{ + size = $arg1 + file = user_string($arg2) + line = $arg3 +} diff --git a/ruby.spec b/ruby.spec index 6731b76..e9dd4c5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -70,6 +70,19 @@ %global minitest_version 4.3.2 %global psych_version 2.0.0 +# Might not be needed in the future, if we are lucky enough. +# https://bugzilla.redhat.com/show_bug.cgi?id=888262 +%global tapset_dir %{_datadir}/systemtap/tapset + +# The distinction between 32 and 64 bit file locations might be done better in +# the future. +# http://sourceware.org/bugzilla/show_bug.cgi?id=10485 +%ifarch ppc64 s390x x86_64 ia64 alpha sparc64 +%global libruby_stp libruby.so.%{ruby_version}-64.stp +%else +%global libruby_stp libruby.so.%{ruby_version}-32.stp +%endif + %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') Summary: An interpreter of object-oriented scripting language @@ -82,6 +95,7 @@ License: (Ruby or BSD) and Public Domain URL: http://ruby-lang.org/ Source0: ftp://ftp.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.gz Source1: operating_system.rb +Source2: libruby.stp # http://redmine.ruby-lang.org/issues/5231 Patch0: ruby-1.9.3-disable-versioned-paths.patch @@ -522,6 +536,11 @@ sed -i '/^end$/ i\ sed -i '/^end$/ i\ s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec +# Install a tapset and fix up the path to the library. +mkdir -p %{buildroot}%{tapset_dir} +sed -e "s|LIBRARY_PATH|%{_libdir}/libruby.so.%{ruby_version}|" \ + %{SOURCE2} > %{buildroot}%{tapset_dir}/%{libruby_stp} + %check DISABLE_TESTS="" @@ -727,6 +746,8 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{ruby_libarchdir}/tkutil.so %{ruby_libarchdir}/zlib.so +%{tapset_dir}/.. + %files -n rubygems %{_bindir}/gem %{rubygems_dir} From 94da38c804a47a57f20d9bdff553ef96b3ce2821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 20 Dec 2012 14:58:38 +0100 Subject: [PATCH 038/530] Make Tapset platform independent. --- ruby.spec | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/ruby.spec b/ruby.spec index e9dd4c5..cc87289 100644 --- a/ruby.spec +++ b/ruby.spec @@ -72,16 +72,9 @@ # Might not be needed in the future, if we are lucky enough. # https://bugzilla.redhat.com/show_bug.cgi?id=888262 -%global tapset_dir %{_datadir}/systemtap/tapset - -# The distinction between 32 and 64 bit file locations might be done better in -# the future. -# http://sourceware.org/bugzilla/show_bug.cgi?id=10485 -%ifarch ppc64 s390x x86_64 ia64 alpha sparc64 -%global libruby_stp libruby.so.%{ruby_version}-64.stp -%else -%global libruby_stp libruby.so.%{ruby_version}-32.stp -%endif +%global tapset_root %{_datadir}/systemtap +%global tapset_dir %{tapset_root}/tapset/ +%global tapset_libdir %(echo %{_libdir} | sed 's/64//')* %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') @@ -538,8 +531,8 @@ sed -i '/^end$/ i\ # Install a tapset and fix up the path to the library. mkdir -p %{buildroot}%{tapset_dir} -sed -e "s|LIBRARY_PATH|%{_libdir}/libruby.so.%{ruby_version}|" \ - %{SOURCE2} > %{buildroot}%{tapset_dir}/%{libruby_stp} +sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{ruby_version}|" \ + %{SOURCE2} > %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp %check DISABLE_TESTS="" @@ -746,7 +739,7 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{ruby_libarchdir}/tkutil.so %{ruby_libarchdir}/zlib.so -%{tapset_dir}/.. +%{tapset_root} %files -n rubygems %{_bindir}/gem From 4574488d84f91f9da95cb752c07cdb8a93056dc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 20 Dec 2012 15:32:50 +0100 Subject: [PATCH 039/530] Add small TODO. --- ruby.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/ruby.spec b/ruby.spec index cc87289..546a6f0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -88,6 +88,7 @@ License: (Ruby or BSD) and Public Domain URL: http://ruby-lang.org/ Source0: ftp://ftp.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.gz Source1: operating_system.rb +# TODO: Try to push SystemTap support upstream. Source2: libruby.stp # http://redmine.ruby-lang.org/issues/5231 From a91606d4ba7a17440d22ab7fb269d998450e0596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 20 Dec 2012 16:46:57 +0100 Subject: [PATCH 040/530] Upgrade to Ruby 2.0.0 (r38732). --- ruby-1.9.3-added-site-and-vendor-arch-flags.patch | 14 +++++++------- ruby-1.9.3-always-use-i386.patch | 2 +- ruby-1.9.3-arch-specific-dir.patch | 10 +++++----- ruby-1.9.3-custom-rubygems-location.patch | 4 ++-- ruby-1.9.3-disable-versioned-paths.patch | 2 +- ruby.spec | 9 ++++----- rubygems-1.8.11-binary-extensions.patch | 6 +++--- 7 files changed, 23 insertions(+), 24 deletions(-) diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch index 4900fee..45dbc08 100644 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch @@ -15,7 +15,7 @@ diff --git a/Makefile.in b/Makefile.in index 690ff8e..8c7dd98 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -39,6 +39,9 @@ arch = @arch@ +@@ -41,6 +41,9 @@ arch = @arch@ archdir = @archdir@ sitearch = @sitearch@ sitedir = @sitedir@ @@ -29,7 +29,7 @@ diff --git a/configure.in b/configure.in index 8e4aaec..c65e0c7 100644 --- a/configure.in +++ b/configure.in -@@ -3178,6 +3178,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do +@@ -3197,6 +3197,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do dir="${SITE_DIR}" done @@ -45,7 +45,7 @@ index 8e4aaec..c65e0c7 100644 AC_ARG_WITH(vendordir, AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), [vendordir=$withval], -@@ -3187,19 +3196,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do +@@ -3206,19 +3215,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do dir="${VENDOR_DIR}" done @@ -78,7 +78,7 @@ index 8e4aaec..c65e0c7 100644 fi pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)' -@@ -3217,6 +3239,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], +@@ -3236,6 +3258,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], [ RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\"" ]) @@ -92,7 +92,7 @@ index 8e4aaec..c65e0c7 100644 AS_CASE(["$RUBY_VENDOR_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_VENDOR_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_LIB_PATH\" : \"$pat\"`"'"' -@@ -3224,6 +3253,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], +@@ -3243,6 +3272,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], [ RUBY_VENDOR_LIB_PATH="\"${RUBY_VENDOR_LIB_PATH}\"" ]) @@ -106,7 +106,7 @@ index 8e4aaec..c65e0c7 100644 pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)' AS_CASE(["$RUBY_LIB_PREFIX"], ["$RUBY_EXEC_PREFIX/"*], [ -@@ -3245,11 +3281,13 @@ if test "x$SITE_DIR" = xno; then +@@ -3264,11 +3300,13 @@ if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH} !!) @@ -120,7 +120,7 @@ index 8e4aaec..c65e0c7 100644 fi AC_SUBST(arch)dnl -@@ -3257,7 +3295,9 @@ AC_SUBST(sitearch)dnl +@@ -3276,7 +3314,9 @@ AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl AC_SUBST(archdir)dnl AC_SUBST(sitedir)dnl diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch index 3c4eff8..3cf148e 100644 --- a/ruby-1.9.3-always-use-i386.patch +++ b/ruby-1.9.3-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index c65e0c7..748edc9 100644 --- a/configure.in +++ b/configure.in -@@ -3302,6 +3302,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3321,6 +3321,8 @@ AC_SUBST(vendorarchdir)dnl configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index 1e5bc06..5906b4c 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -14,7 +14,7 @@ diff --git a/Makefile.in b/Makefile.in index 78d7139..690ff8e 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -36,6 +36,7 @@ libexecdir = @libexecdir@ +@@ -38,6 +38,7 @@ libexecdir = @libexecdir@ datarootdir = @datarootdir@ datadir = @datadir@ arch = @arch@ @@ -26,7 +26,7 @@ diff --git a/configure.in b/configure.in index db3641b..8e4aaec 100644 --- a/configure.in +++ b/configure.in -@@ -3160,6 +3160,15 @@ else +@@ -3179,6 +3179,15 @@ else RUBY_LIB_VERSION="\"${ruby_version}\"" fi @@ -42,7 +42,7 @@ index db3641b..8e4aaec 100644 AC_ARG_WITH(sitedir, AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), [sitedir=$withval], -@@ -3182,16 +3191,25 @@ if test "${LOAD_RELATIVE+set}"; then +@@ -3201,16 +3210,25 @@ if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" @@ -68,7 +68,7 @@ index db3641b..8e4aaec 100644 AS_CASE(["$RUBY_SITE_LIB_PATH"], ["$RUBY_LIB_PREFIX/"*], [ RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"' -@@ -3222,6 +3240,7 @@ else +@@ -3241,6 +3259,7 @@ else fi AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}") AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX} !!) @@ -76,7 +76,7 @@ index db3641b..8e4aaec 100644 if test "x$SITE_DIR" = xno; then AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) else -@@ -3236,6 +3255,7 @@ fi +@@ -3255,6 +3274,7 @@ fi AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index 054b31f..b4d95a6 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index 748edc9..6a16745 100644 --- a/configure.in +++ b/configure.in -@@ -3205,6 +3205,13 @@ until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_D +@@ -3224,6 +3224,13 @@ until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_D dir="${VENDORARCH_DIR}" done @@ -29,7 +29,7 @@ index 748edc9..6a16745 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX="" -@@ -3298,6 +3305,7 @@ AC_SUBST(sitedir)dnl +@@ -3317,6 +3324,7 @@ AC_SUBST(sitedir)dnl AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-1.9.3-disable-versioned-paths.patch b/ruby-1.9.3-disable-versioned-paths.patch index 32f7e99..be13c08 100644 --- a/ruby-1.9.3-disable-versioned-paths.patch +++ b/ruby-1.9.3-disable-versioned-paths.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index f2d22ef..db3641b 100644 --- a/configure.in +++ b/configure.in -@@ -3327,6 +3327,17 @@ else +@@ -3346,6 +3346,17 @@ else fi AC_SUBST(USE_RUBYGEMS) diff --git a/ruby.spec b/ruby.spec index 546a6f0..e2d77c3 100644 --- a/ruby.spec +++ b/ruby.spec @@ -17,7 +17,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 38422 +%global revision 38732 %global ruby_archive %{name}-%{ruby_version} @@ -46,7 +46,7 @@ %global ruby_vendorlibdir %{_datadir}/ruby/%{ruby_vendordir} %global ruby_vendorarchdir %{_libdir}/ruby/%{ruby_vendordir} -%global rubygems_version 2.0.0.preview2 +%global rubygems_version 2.0.0.preview3.1 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. @@ -59,11 +59,11 @@ # http://rpm.org/ticket/78 %global gem_extdir %{_exec_prefix}/lib{,64}/gems -%global rake_version 0.9.5 +%global rake_version 0.9.6 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version_patch_level} -%global rdoc_version 4.0.0.preview2.1 +%global rdoc_version 4.0.0.preview3.1 %global bigdecimal_version 1.1.0 %global io_console_version 0.3 %global json_version 1.7.5 @@ -729,7 +729,6 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/racc/cparse.so %{ruby_libarchdir}/rbconfig.rb %{ruby_libarchdir}/readline.so -%{ruby_libarchdir}/refinement.so %{ruby_libarchdir}/ripper.so %{ruby_libarchdir}/sdbm.so %{ruby_libarchdir}/socket.so diff --git a/rubygems-1.8.11-binary-extensions.patch b/rubygems-1.8.11-binary-extensions.patch index dc6f85a..4517e0a 100644 --- a/rubygems-1.8.11-binary-extensions.patch +++ b/rubygems-1.8.11-binary-extensions.patch @@ -85,7 +85,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 74d803d..0063c7f 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -649,7 +649,7 @@ TEXT +@@ -641,7 +641,7 @@ TEXT say "This could take a while..." end @@ -178,7 +178,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 0063c7f..83b8fd5 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -649,7 +649,7 @@ TEXT +@@ -641,7 +641,7 @@ TEXT say "This could take a while..." end @@ -226,7 +226,7 @@ diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb index cc32ea4..94d78e0 100644 --- a/lib/rubygems/uninstaller.rb +++ b/lib/rubygems/uninstaller.rb -@@ -234,6 +234,7 @@ class Gem::Uninstaller +@@ -246,6 +246,7 @@ class Gem::Uninstaller File.writable?(spec.base_dir) FileUtils.rm_rf spec.full_gem_path From 924ee344ab87713c6ccb71fced6ce5417fe9e89f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 8 Jan 2013 11:59:38 +0100 Subject: [PATCH 041/530] Escape example command in tapset comment. --- ruby.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby.spec b/ruby.spec index e2d77c3..767ad62 100644 --- a/ruby.spec +++ b/ruby.spec @@ -534,6 +534,8 @@ sed -i '/^end$/ i\ mkdir -p %{buildroot}%{tapset_dir} sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{ruby_version}|" \ %{SOURCE2} > %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp +# Escape '*/' in comment. +sed -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp %check DISABLE_TESTS="" From d5af6071346f9056299824aa94d7ebd88ca4d03e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 8 Jan 2013 12:00:25 +0100 Subject: [PATCH 042/530] Add example tapset file. --- ruby.spec | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ruby.spec b/ruby.spec index 767ad62..9b67911 100644 --- a/ruby.spec +++ b/ruby.spec @@ -90,6 +90,7 @@ Source0: ftp://ftp.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archi Source1: operating_system.rb # TODO: Try to push SystemTap support upstream. Source2: libruby.stp +Source3: ruby-exercise.stp # http://redmine.ruby-lang.org/issues/5231 Patch0: ruby-1.9.3-disable-versioned-paths.patch @@ -394,6 +395,9 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. #%%patch13 -p1 %patch14 -p1 +# Provide an example of usage of the tapset: +cp -a %{SOURCE3} . + %build autoconf @@ -790,6 +794,7 @@ make check TESTS="-v $DISABLE_TESTS" %lang(ja) %doc README.ja %doc ChangeLog %doc doc/ChangeLog-* +%doc ruby-exercise.stp %{_datadir}/ri %files -n rubygem-bigdecimal From 152afa6f245c0cfa87ae4d85035d9c028d410400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 8 Jan 2013 13:12:11 +0100 Subject: [PATCH 043/530] Add missing ruby-exercise.stp file. --- ruby-exercise.stp | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 ruby-exercise.stp diff --git a/ruby-exercise.stp b/ruby-exercise.stp new file mode 100644 index 0000000..df9df41 --- /dev/null +++ b/ruby-exercise.stp @@ -0,0 +1,39 @@ +/* Example tapset file. + * + * You can execute the tapset using following command (please adjust the path + * prior running the command, if needed): + * + * stap /usr/share/doc/ruby-2.0.0.0/ruby-exercise.stp -c "ruby -e \"puts 'test'\"" + */ + +probe ruby.cmethod.entry { + printf("%d -> %s::%s %s:%d\n", tid(), classname, methodname, file, line); +} + +probe ruby.cmethod.return { + printf("%d <- %s::%s %s:%d\n", tid(), classname, methodname, file, line); +} + +probe ruby.method.entry { + printf("%d -> %s::%s %s:%d\n", tid(), classname, methodname, file, line); +} + +probe ruby.method.return { + printf("%d <- %s::%s %s:%d\n", tid(), classname, methodname, file, line); +} + +probe ruby.gc.mark.begin { printf("%d gc.mark.begin\n", tid()); } + +probe ruby.gc.mark.end { printf("%d gc.mark.end\n", tid()); } + +probe ruby.gc.sweep.begin { printf("%d gc.sweep.begin\n", tid()); } + +probe ruby.gc.sweep.end { printf("%d gc.sweep.end\n", tid()); } + +probe ruby.object.create{ + printf("%d obj.create %s %s:%d\n", tid(), classname, file, line); +} + +probe ruby.raise { + printf("%d raise %s %s:%d\n", tid(), classname, file, line); +} From cd4b13663635b197f0e4eba054c5effb2e659a7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 8 Jan 2013 16:23:30 +0100 Subject: [PATCH 044/530] Move rubygems native extension from gems/exts into gems/%{name}. This allows to provide native extensions for alternative implementations. --- operating_system.rb | 22 +++++++++++----------- ruby.spec | 42 +++++++++++++++++++++--------------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/operating_system.rb b/operating_system.rb index b81425f..7b3930e 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -2,15 +2,14 @@ module Gem class << self ## - # Returns a string representing that part or the directory tree that is - # common to all specified directories. + # Returns full path of previous but one directory of dir in path + # E.g. for '/usr/share/ruby', 'ruby', it returns '/usr' - def common_path(dirs) - paths = dirs.collect {|dir| dir.split(File::SEPARATOR)} - uncommon_idx = paths.transpose.each_with_index.find {|dirnames, idx| dirnames.uniq.length > 1}.last - paths[0][0 ... uncommon_idx].join(File::SEPARATOR) + def previous_but_one_dir_to(path, dir) + split_path = path.split(File::SEPARATOR) + File.join(split_path.take_while { |one_dir| one_dir !~ /^#{dir}$/ }[0..-2]) end - private :common_path + private :previous_but_one_dir_to ## # Default gems locations allowed on FHS system (/usr, /usr/share). @@ -19,8 +18,8 @@ module Gem def default_locations @default_locations ||= { - :system => common_path([ConfigMap[:vendorlibdir], ConfigMap[:vendorarchdir]]), - :local => common_path([ConfigMap[:sitelibdir], ConfigMap[:sitearchdir]]) + :system => previous_but_one_dir_to(ConfigMap[:vendordir], ConfigMap[:RUBY_INSTALL_NAME]), + :local => previous_but_one_dir_to(ConfigMap[:sitedir], ConfigMap[:RUBY_INSTALL_NAME]) } end @@ -29,11 +28,12 @@ module Gem # platform independent (:gem_dir) and dependent (:ext_dir) files. def default_dirs + @libdir ||= ConfigMap[:sitelibdir] == ConfigMap[:sitearchdir] ? ConfigMap[:datadir] : ConfigMap[:libdir] @default_dirs ||= Hash[default_locations.collect do |destination, path| [destination, { :bin_dir => File.join(path, ConfigMap[:bindir].split(File::SEPARATOR).last), :gem_dir => File.join(path, ConfigMap[:datadir].split(File::SEPARATOR).last, 'gems'), - :ext_dir => File.join(path, ConfigMap[:libdir].split(File::SEPARATOR).last, 'gems') + :ext_dir => File.join(path, @libdir.split(File::SEPARATOR).last, 'gems') }] end] end @@ -64,7 +64,7 @@ module Gem def default_ext_dir_for base_dir dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir} - dirs && File.join(dirs.last[:ext_dir], 'exts') + dirs && File.join(dirs.last[:ext_dir], RbConfig::CONFIG['RUBY_INSTALL_NAME']) end end end diff --git a/ruby.spec b/ruby.spec index 9b67911..699d5b6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -453,7 +453,7 @@ cat >> %{buildroot}%{_sysconfdir}/rpm/macros.rubygems << \EOF # Common gem locations and files. %%gem_instdir %%{gem_dir}/gems/%%{gem_name}-%%{version} -%%gem_extdir %%{_libdir}/gems/exts/%%{gem_name}-%%{version} +%%gem_extdir %%{_libdir}/gems/%{name}/%%{gem_name}-%%{version} %%gem_libdir %%{gem_instdir}/lib %%gem_cache %%{gem_dir}/cache/%%{gem_name}-%%{version}.gem %%gem_spec %%{gem_dir}/specifications/%%{gem_name}-%%{version}.gemspec @@ -468,7 +468,7 @@ cp %{SOURCE1} %{buildroot}%{rubygems_dir}/rubygems/defaults mv %{buildroot}%{ruby_libdir}/gems/2.0.0 %{buildroot}%{gem_dir} # Create folders for gem binary extensions. -mkdir -p %{buildroot}%{gem_extdir}/exts +mkdir -p %{buildroot}%{gem_extdir}/%{name} # Move bundled rubygems to %%gem_dir and %%gem_extdir # make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems @@ -481,25 +481,25 @@ mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_vers mv %{buildroot}%{gem_dir}/specifications/default/rdoc-%{rdoc_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/exts/bigdecimal-%{bigdecimal_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/lib mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib -mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/exts/bigdecimal-%{bigdecimal_version}/lib +mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/lib mv %{buildroot}%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal -ln -s %{_libdir}/gems/exts/bigdecimal-%{bigdecimal_version}/lib/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so +ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/lib/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so mkdir -p %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/exts/io-console-%{io_console_version}/lib/io +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/lib/io mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib -mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{_libdir}/gems/exts/io-console-%{io_console_version}/lib/io +mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/lib/io mv %{buildroot}%{gem_dir}/specifications/default/io-console-%{io_console_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/io-console-%{io_console_version}/lib/io %{buildroot}%{ruby_libdir}/io -ln -s %{_libdir}/gems/exts/io-console-%{io_console_version}/lib/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so +ln -s %{_libdir}/gems/%{name}/io-console-%{io_console_version}/lib/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so mkdir -p %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/exts/json-%{json_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/lib mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib -mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/exts/json-%{json_version}/lib/ +mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/lib/ mv %{buildroot}%{gem_dir}/specifications/default/json-%{json_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib @@ -507,9 +507,9 @@ mv %{buildroot}%{ruby_libdir}/minitest %{buildroot}%{gem_dir}/gems/minitest-%{mi mv %{buildroot}%{gem_dir}/specifications/default/minitest-%{minitest_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/exts/psych-%{psych_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/lib mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/exts/psych-%{psych_version}/lib/ +mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/lib/ mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications # Adjust the gemspec files so that the gems will load properly @@ -537,7 +537,7 @@ sed -i '/^end$/ i\ # Install a tapset and fix up the path to the library. mkdir -p %{buildroot}%{tapset_dir} sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{ruby_version}|" \ - %{SOURCE2} > %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp + %{SOURCE2} > %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp # Escape '*/' in comment. sed -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp @@ -753,10 +753,10 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir} %exclude %{gem_dir}/gems/* %{_exec_prefix}/lib*/gems -%exclude %{_exec_prefix}/lib*/gems/exts/bigdecimal-%{bigdecimal_version} -%exclude %{_exec_prefix}/lib*/gems/exts/io-console-%{io_console_version} -%exclude %{_exec_prefix}/lib*/gems/exts/json-%{json_version} -%exclude %{_exec_prefix}/lib*/gems/exts/psych-%{psych_version} +%exclude %{_exec_prefix}/lib*/gems/%{name}/bigdecimal-%{bigdecimal_version} +%exclude %{_exec_prefix}/lib*/gems/%{name}/io-console-%{io_console_version} +%exclude %{_exec_prefix}/lib*/gems/%{name}/json-%{json_version} +%exclude %{_exec_prefix}/lib*/gems/%{name}/psych-%{psych_version} %exclude %{gem_dir}/gems/rake-%{rake_version} %exclude %{gem_dir}/gems/rdoc-%{rdoc_version} %exclude %{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec @@ -800,19 +800,19 @@ make check TESTS="-v $DISABLE_TESTS" %files -n rubygem-bigdecimal %{ruby_libdir}/bigdecimal %{ruby_libarchdir}/bigdecimal.so -%{_libdir}/gems/exts/bigdecimal-%{bigdecimal_version} +%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} %{gem_dir}/gems/bigdecimal-%{bigdecimal_version} %{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec %files -n rubygem-io-console %{ruby_libdir}/io %{ruby_libarchdir}/io/console.so -%{_libdir}/gems/exts/io-console-%{io_console_version} +%{_libdir}/gems/%{name}/io-console-%{io_console_version} %{gem_dir}/gems/io-console-%{io_console_version} %{gem_dir}/specifications/io-console-%{io_console_version}.gemspec %files -n rubygem-json -%{_libdir}/gems/exts/json-%{json_version} +%{_libdir}/gems/%{name}/json-%{json_version} %{gem_dir}/gems/json-%{json_version} %{gem_dir}/specifications/json-%{json_version}.gemspec @@ -821,7 +821,7 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/minitest-%{minitest_version}.gemspec %files -n rubygem-psych -%{_libdir}/gems/exts/psych-%{psych_version} +%{_libdir}/gems/%{name}/psych-%{psych_version} %{gem_dir}/gems/psych-%{psych_version} %{gem_dir}/specifications/psych-%{psych_version}.gemspec From 205b40da9d461f0d996be452be82d40566f7692f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 8 Jan 2013 16:28:55 +0100 Subject: [PATCH 045/530] Bump ruby(abi), since rubygems layout is now incompatible anyway. --- ruby.spec | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ruby.spec b/ruby.spec index 699d5b6..1e8104f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -7,11 +7,7 @@ %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_version_patch_level %{major_minor_version}.%{teeny_version}.%{patch_level} -# TODO: Fix ruby_api for official release according to -# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/48984 -# It is kept at 1.9.1 just for testing. All dependent libraries need rebuild. -# %%global ruby_abi %%{major_minor_version}.0 -%global ruby_abi 1.9.1 +%global ruby_abi %{ruby_version} # Specify the named version. It has precedense to revision. #%%global milestone preview2 From a3b6f46f68fcde9d77f4b43c927a04537b193eed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 16 Jan 2013 16:17:47 +0100 Subject: [PATCH 046/530] Upgrade to Ruby 2.0.0 (r38848). --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 1e8104f..f5a2fb8 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 38732 +%global revision 38848 %global ruby_archive %{name}-%{ruby_version} From 465cd2abbf21289f6ecdb0f22ad1efe37f4089be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 17 Jan 2013 15:10:39 +0100 Subject: [PATCH 047/530] Provide nonversioned packageconfig (rhbz#789532). --- ruby.spec | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/ruby.spec b/ruby.spec index f5a2fb8..1a2e652 100644 --- a/ruby.spec +++ b/ruby.spec @@ -406,7 +406,7 @@ autoconf --with-vendorarchdir='%{ruby_vendorarchdir}' \ --with-rubyhdrdir='%{_includedir}' \ --with-rubygemsdir='%{rubygems_dir}' \ - --with-ruby_pc='%{name}.pc' \ + --with-ruby-pc='%{name}.pc' \ --disable-rpath \ --enable-shared \ --disable-versioned-paths @@ -579,12 +579,7 @@ make check TESTS="-v $DISABLE_TESTS" %{_includedir}/* %{_libdir}/libruby.so -# TODO -# ruby.pc still needs fixing, see bug 789532 comment 8 -%{_libdir}/pkgconfig/ruby.pc -%if 0%{?fedora} <= 18 -%{_libdir}/pkgconfig/ruby-%{major_minor_version}.pc -%endif +%{_libdir}/pkgconfig/%{name}.pc %files libs %doc COPYING From 9814bf8bf6f36a70c7dc14a16ff07c5e24436975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 18 Jan 2013 12:36:59 +0100 Subject: [PATCH 048/530] Remove unneeded patch. --- ...0-r36832-rb_float_value-optimization.patch | 46 ------------------- 1 file changed, 46 deletions(-) delete mode 100644 ruby-2.0-r36832-rb_float_value-optimization.patch diff --git a/ruby-2.0-r36832-rb_float_value-optimization.patch b/ruby-2.0-r36832-rb_float_value-optimization.patch deleted file mode 100644 index 97dc58b..0000000 --- a/ruby-2.0-r36832-rb_float_value-optimization.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 0b89d6d5f9f8c788f4391d8a0499f10aed624371 Mon Sep 17 00:00:00 2001 -From: ko1 -Date: Mon, 27 Aug 2012 09:22:21 +0000 -Subject: [PATCH] * include/ruby/ruby.h (rb_float_value): optimize it. This - technique was pointed by shinichiro.hamaji - . - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - ChangeLog | 6 ++++++ - include/ruby/ruby.h | 10 +++++----- - 2 files changed, 11 insertions(+), 5 deletions(-) - -diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h -index 3905b32..b8b2267 100644 ---- a/include/ruby/ruby.h -+++ b/include/ruby/ruby.h -@@ -733,10 +733,7 @@ struct RFloat { - rb_float_value(VALUE v) - { - if (FLONUM_P(v)) { -- if (v == (VALUE)0x8000000000000002) { -- return 0.0; -- } -- else { -+ if (v != (VALUE)0x8000000000000002) { /* LIKELY */ - union { - double d; - VALUE v; -@@ -746,9 +743,12 @@ struct RFloat { - /* e: xx1... -> 011... */ - /* xx0... -> 100... */ - /* ^b63 */ -- t.v = RUBY_BIT_ROTR(((b63 ^ 1) << 1) | b63 | (v & ~0x03), 3); -+ t.v = RUBY_BIT_ROTR(2 - b63 | (v & ~0x03), 3); - return t.d; - } -+ else { -+ return 0.0; -+ } - } - else { - return ((struct RFloat *)v)->float_value; --- -1.7.10 - From 2aa9685103198ac924a1d3457b3906c58dd5f0f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 18 Jan 2013 12:37:26 +0100 Subject: [PATCH 049/530] Build against libdb instead of libdb4 (rhbz#894022). --- ruby.spec | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index 1a2e652..aeeabe9 100644 --- a/ruby.spec +++ b/ruby.spec @@ -138,11 +138,7 @@ Requires: rubygem(bigdecimal) >= %{bigdecimal_version} BuildRequires: autoconf BuildRequires: gdbm-devel BuildRequires: ncurses-devel -%if 0%{?fedora} >= 19 BuildRequires: libdb-devel -%else -BuildRequires: db4-devel -%endif BuildRequires: libffi-devel BuildRequires: openssl-devel BuildRequires: libyaml-devel From eca05efe334464737efc3280c42ea5bc0f6b44fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 18 Jan 2013 16:28:03 +0100 Subject: [PATCH 050/530] Fix variables provided by ruby.pc (rhbz#789532, comment 8). --- ruby.spec | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/ruby.spec b/ruby.spec index aeeabe9..0dab721 100644 --- a/ruby.spec +++ b/ruby.spec @@ -105,17 +105,9 @@ Patch8: ruby-1.9.3-custom-rubygems-location.patch # Add support for installing binary extensions according to FHS. # https://github.com/rubygems/rubygems/issues/210 Patch9: rubygems-1.8.11-binary-extensions.patch -# Opening /dev/tty fails with ENXIO (ref: man 2 open) on koji. -# Let's rescue this -# Fixed in ruby 1.9.3 p327 -#Patch10: ruby-1.9.3-p286-open-devtty-on-koji.patch -# On koji, network related tests sometimes cause internal server error, -# ignore these -Patch10: ruby-1.9.3-p327-ignore-internal-server-error-on-test.patch -# http://bugs.ruby-lang.org/issues/show/7312 -# test_str_crypt fails with glibc 2.17 -# Fixed in 1.9.3 p 362 -#Patch11: ruby-1.9.3-p327-crypt-argument-glibc217.patch +# Fixes issues mentioned in rhbz#789532, comment 8. +# TODO: Should be probably upstreamed with #5281. +Patch10: ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch # Make mkmf verbose by default Patch12: ruby-1.9.3-mkmf-verbose.patch # http://bugs.ruby-lang.org/issues/7629 @@ -382,7 +374,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch8 -p1 %patch9 -p1 %patch10 -p1 -#%%patch11 -p1 %patch12 -p1 #%%patch13 -p1 %patch14 -p1 From e15c1cf2f46a6f9799ffcbf800c9f60083a113c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 21 Jan 2013 18:00:52 +0100 Subject: [PATCH 051/530] Enable most of the PPC test suite. --- ruby.spec | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 0dab721..39123c4 100644 --- a/ruby.spec +++ b/ruby.spec @@ -533,10 +533,20 @@ DISABLE_TESTS="" DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" %endif -%ifnarch ppc ppc64 -make check TESTS="-v $DISABLE_TESTS" +%ifarch ppc ppc64 +# test_ioctl_linux(TestIO) fails with #. +# https://bugs.ruby-lang.org/issues/7718 +DISABLE_TESTS="-x test_io.rb $DISABLE_TESTS" %endif +%ifarch ppc +# test_stack_size(TestFiber) fails. +# https://bugs.ruby-lang.org/issues/7719 +DISABLE_TESTS="-x test_fiber.rb $DISABLE_TESTS" +%endif + +make check TESTS="-v $DISABLE_TESTS" + %post libs -p /sbin/ldconfig %postun libs -p /sbin/ldconfig From f5934325a4c73e2eece05e38fc00eb3db8a974a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 22 Jan 2013 15:52:00 +0100 Subject: [PATCH 052/530] Upgrade to Ruby 2.0.0 (r38894). Enable test_stack_size(TestFiber) on PPC, since it was fixed upstream. --- ...9.3-added-site-and-vendor-arch-flags.patch | 6 ++--- ruby-1.9.3-arch-specific-dir.patch | 6 ++--- ruby-1.9.3-custom-rubygems-location.patch | 2 +- ruby-1.9.3-disable-versioned-paths.patch | 6 ++--- ruby-1.9.3-mkmf-verbose.patch | 2 +- ruby.spec | 8 +------ rubygems-1.8.11-binary-extensions.patch | 22 +++++++++---------- 7 files changed, 23 insertions(+), 29 deletions(-) diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch index 45dbc08..c3b007b 100644 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch @@ -134,7 +134,7 @@ diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb index 03c3332..79b8e44 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -44,6 +44,8 @@ continued_name = nil +@@ -45,6 +45,8 @@ continued_name = nil continued_line = nil path_version = "/$(ruby_version)" archdir_override = "$(vendorlibdir)/$(sitearch)" @@ -143,7 +143,7 @@ index 03c3332..79b8e44 100755 File.foreach "config.status" do |line| next if /^#/ =~ line name = nil -@@ -80,6 +82,8 @@ File.foreach "config.status" do |line| +@@ -81,6 +83,8 @@ File.foreach "config.status" do |line| when /^RUBY_SO_NAME$/; next if $so_name when /^arch$/; if val.empty? then val = arch else arch = val end when /^archdir$/; archdir_override = val; next @@ -152,7 +152,7 @@ index 03c3332..79b8e44 100755 when /^sitearch/; val = '$(arch)' if val.empty? end case val -@@ -214,11 +218,11 @@ print < Date: Tue, 22 Jan 2013 17:06:43 +0100 Subject: [PATCH 053/530] Let Sed escape in original file. --- ruby.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 08764d3..1da7350 100644 --- a/ruby.spec +++ b/ruby.spec @@ -69,7 +69,7 @@ # Might not be needed in the future, if we are lucky enough. # https://bugzilla.redhat.com/show_bug.cgi?id=888262 %global tapset_root %{_datadir}/systemtap -%global tapset_dir %{tapset_root}/tapset/ +%global tapset_dir %{tapset_root}/tapset %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') @@ -522,7 +522,7 @@ mkdir -p %{buildroot}%{tapset_dir} sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{ruby_version}|" \ %{SOURCE2} > %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp # Escape '*/' in comment. -sed -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp +sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp %check DISABLE_TESTS="" From 8a758df48196e88c99f628511b5dfaf7e22f411c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 24 Jan 2013 15:42:10 +0100 Subject: [PATCH 054/530] Change ruby(abi) -> ruby(release). --- ruby.spec | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ruby.spec b/ruby.spec index 1da7350..1f88f89 100644 --- a/ruby.spec +++ b/ruby.spec @@ -7,7 +7,7 @@ %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_version_patch_level %{major_minor_version}.%{teeny_version}.%{patch_level} -%global ruby_abi %{ruby_version} +%global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. #%%global milestone preview2 @@ -161,7 +161,7 @@ Ruby or an application embedding Ruby. Summary: Libraries necessary to run Ruby Group: Development/Libraries License: Ruby or BSD -Provides: ruby(abi) = %{ruby_abi} +Provides: ruby(release) = %{ruby_release} %description libs This package includes the libruby, necessary to run Ruby. @@ -172,7 +172,7 @@ Summary: The Ruby standard for packaging ruby libraries Version: %{rubygems_version} Group: Development/Libraries License: Ruby or MIT -Requires: ruby(abi) = %{ruby_abi} +Requires: ruby(release) = %{ruby_release} Requires: rubygem(rdoc) >= %{rdoc_version} Requires: rubygem(io-console) >= %{io_console_version} Requires: rubygem(psych) >= %{psych_version} @@ -202,7 +202,7 @@ Summary: Ruby based make-like utility Version: %{rake_version} Group: Development/Libraries License: Ruby or MIT -Requires: ruby(abi) = %{ruby_abi} +Requires: ruby(release) = %{ruby_release} Requires: ruby(rubygems) >= %{rubygems_version} Provides: rake = %{version}-%{release} Provides: rubygem(rake) = %{version}-%{release} @@ -232,7 +232,7 @@ Summary: A tool to generate HTML and command-line documentation for Ruby proj Version: %{rdoc_version} Group: Development/Libraries License: GPLv2 and Ruby and MIT -Requires: ruby(abi) = %{ruby_abi} +Requires: ruby(release) = %{ruby_release} Requires: ruby(rubygems) >= %{rubygems_version} Requires: ruby(irb) = %{irb_version} Requires: rubygem(json) >= %{json_version} @@ -264,7 +264,7 @@ Summary: BigDecimal provides arbitrary-precision floating point decimal arith Version: %{bigdecimal_version} Group: Development/Libraries License: GPL+ or Artistic -Requires: ruby(abi) = %{ruby_abi} +Requires: ruby(release) = %{ruby_release} Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(bigdecimal) = %{version}-%{release} @@ -285,7 +285,7 @@ conversion between base 10 and base 2. Summary: IO/Console is a simple console utilizing library Version: %{io_console_version} Group: Development/Libraries -Requires: ruby(abi) = %{ruby_abi} +Requires: ruby(release) = %{ruby_release} Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(io-console) = %{version}-%{release} @@ -299,7 +299,7 @@ Summary: This is a JSON implementation as a Ruby extension in C Version: %{json_version} Group: Development/Libraries License: Ruby or GPLv2 -Requires: ruby(abi) = %{ruby_abi} +Requires: ruby(release) = %{ruby_release} Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(json) = %{version}-%{release} @@ -315,7 +315,7 @@ Summary: Minitest provides a complete suite of testing facilities Version: %{minitest_version} Group: Development/Libraries License: MIT -Requires: ruby(abi) = %{ruby_abi} +Requires: ruby(release) = %{ruby_release} Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(minitest) = %{version}-%{release} BuildArch: noarch @@ -340,7 +340,7 @@ Summary: A libyaml wrapper for Ruby Version: %{psych_version} Group: Development/Libraries License: MIT -Requires: ruby(abi) = %{ruby_abi} +Requires: ruby(release) = %{ruby_release} Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(psych) = %{version}-%{release} From 21e3c8f22fc6a63cf12297907f39d421d42692c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 24 Jan 2013 16:08:55 +0100 Subject: [PATCH 055/530] Rename ruby executable to ruby-mri, to be prepared for RubyPick. --- ruby.spec | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/ruby.spec b/ruby.spec index 1f88f89..7fb7504 100644 --- a/ruby.spec +++ b/ruby.spec @@ -407,10 +407,8 @@ make %{?_smp_mflags} COPY="cp -p" Q= rm -rf %{buildroot} make install DESTDIR=%{buildroot} -# On F-18 and below, also provide %%{hame}-%%{major_minor_version}.pc -%if 0%{?fedora} <= 18 -cp -p %{buildroot}%{_libdir}/pkgconfig/%{name}{,-%{major_minor_version}}.pc -%endif +# Rename the ruby executable. It is replaced by RubyPick. +mv %{buildroot}%{_bindir}/%{name}{,-mri} # Dump the macros into macro.ruby to use them to build other Ruby libraries. mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -551,7 +549,7 @@ make check TESTS="-v $DISABLE_TESTS" %doc GPL %doc LEGAL %{_bindir}/erb -%{_bindir}/ruby +%{_bindir}/%{name}-mri %{_bindir}/testrb %{_mandir}/man1/erb* %{_mandir}/man1/ruby* From 48c266a57a9b66f0b0a95dda6f3208db950dde02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 24 Jan 2013 16:58:41 +0100 Subject: [PATCH 056/530] Upgrade to Ruby 2.0.0 (r38929). --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 7fb7504..82c0afc 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 38894 +%global revision 38929 %global ruby_archive %{name}-%{ruby_version} From 53c48319dd4f241a85c0ab22b6593c3fdcd9cda5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 4 Feb 2013 17:23:28 +0100 Subject: [PATCH 057/530] Drop versioned ruby(release) dependencies. --- ruby.spec | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ruby.spec b/ruby.spec index 82c0afc..17de9c4 100644 --- a/ruby.spec +++ b/ruby.spec @@ -172,7 +172,7 @@ Summary: The Ruby standard for packaging ruby libraries Version: %{rubygems_version} Group: Development/Libraries License: Ruby or MIT -Requires: ruby(release) = %{ruby_release} +Requires: ruby(release) Requires: rubygem(rdoc) >= %{rdoc_version} Requires: rubygem(io-console) >= %{io_console_version} Requires: rubygem(psych) >= %{psych_version} @@ -202,7 +202,7 @@ Summary: Ruby based make-like utility Version: %{rake_version} Group: Development/Libraries License: Ruby or MIT -Requires: ruby(release) = %{ruby_release} +Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rake = %{version}-%{release} Provides: rubygem(rake) = %{version}-%{release} @@ -232,7 +232,7 @@ Summary: A tool to generate HTML and command-line documentation for Ruby proj Version: %{rdoc_version} Group: Development/Libraries License: GPLv2 and Ruby and MIT -Requires: ruby(release) = %{ruby_release} +Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Requires: ruby(irb) = %{irb_version} Requires: rubygem(json) >= %{json_version} @@ -264,7 +264,7 @@ Summary: BigDecimal provides arbitrary-precision floating point decimal arith Version: %{bigdecimal_version} Group: Development/Libraries License: GPL+ or Artistic -Requires: ruby(release) = %{ruby_release} +Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(bigdecimal) = %{version}-%{release} @@ -285,7 +285,7 @@ conversion between base 10 and base 2. Summary: IO/Console is a simple console utilizing library Version: %{io_console_version} Group: Development/Libraries -Requires: ruby(release) = %{ruby_release} +Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(io-console) = %{version}-%{release} @@ -299,7 +299,7 @@ Summary: This is a JSON implementation as a Ruby extension in C Version: %{json_version} Group: Development/Libraries License: Ruby or GPLv2 -Requires: ruby(release) = %{ruby_release} +Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(json) = %{version}-%{release} @@ -315,7 +315,7 @@ Summary: Minitest provides a complete suite of testing facilities Version: %{minitest_version} Group: Development/Libraries License: MIT -Requires: ruby(release) = %{ruby_release} +Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(minitest) = %{version}-%{release} BuildArch: noarch @@ -340,7 +340,7 @@ Summary: A libyaml wrapper for Ruby Version: %{psych_version} Group: Development/Libraries License: MIT -Requires: ruby(release) = %{ruby_release} +Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(psych) = %{version}-%{release} From aa7e2f369c2b097d856e03c922d2f88f7a4a79a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 6 Feb 2013 14:43:39 +0100 Subject: [PATCH 058/530] Upgrade to Ruby 2.0.0 (r39070). --- ruby.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 17de9c4..4afadd1 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 38929 +%global revision 39070 %global ruby_archive %{name}-%{ruby_version} @@ -42,7 +42,7 @@ %global ruby_vendorlibdir %{_datadir}/ruby/%{ruby_vendordir} %global ruby_vendorarchdir %{_libdir}/ruby/%{ruby_vendordir} -%global rubygems_version 2.0.0.preview3.1 +%global rubygems_version 2.0.0.rc.2 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. @@ -61,7 +61,7 @@ %global irb_version %{ruby_version_patch_level} %global rdoc_version 4.0.0.preview3.1 %global bigdecimal_version 1.1.0 -%global io_console_version 0.3 +%global io_console_version 0.4.1 %global json_version 1.7.5 %global minitest_version 4.3.2 %global psych_version 2.0.0 From 2096cfc8bc632ec21ef2dd210a4fe4b6a48e0b83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 6 Feb 2013 14:45:54 +0100 Subject: [PATCH 059/530] Add ruby(runtime_executable) virtual provide, which is later used by RubyPick. --- ruby.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.spec b/ruby.spec index 4afadd1..2838762 100644 --- a/ruby.spec +++ b/ruby.spec @@ -140,6 +140,10 @@ BuildRequires: tk-devel BuildRequires: procps BuildRequires: %{_bindir}/dtrace +# This package provides %%{_bindir}/ruby-mri therefore it is marked by this +# virtual provide. It can be installed as dependency of rubypick. +Provides: ruby(runtime_executable) = %{ruby_release} + %description Ruby is the interpreted scripting language for quick and easy object-oriented programming. It has many features to process text From e811eb017bf2bdf506d354459a0bb149d9f3c921 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 6 Feb 2013 16:56:47 +0100 Subject: [PATCH 060/530] Fix "gem install --install-dir" behavior. --- ruby.spec | 17 ++-- rubygems-1.8.11-binary-extensions.patch | 81 ++++++++++++------- ...obal-Specification.dirs-during-insta.patch | 33 ++++++++ 3 files changed, 94 insertions(+), 37 deletions(-) create mode 100644 rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch diff --git a/ruby.spec b/ruby.spec index 2838762..d89f3c5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -110,14 +110,12 @@ Patch9: rubygems-1.8.11-binary-extensions.patch Patch10: ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch # Make mkmf verbose by default Patch12: ruby-1.9.3-mkmf-verbose.patch -# http://bugs.ruby-lang.org/issues/7629 -# https://bugzilla.redhat.com/show_bug.cgi?id=895173 -# save the proc made from the given block -# Fixed in p374 -#Patch13: ruby-1.9.3-p327-PR7629-save-proc.patch -# Fixes issues mentioned in rhbz#789532, comment 8. -# TODO: Should be probably upstreamed with #5281. -Patch14: ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch +# This slightly changes behavior of "gem install --install-dir" behavior. +# Without this patch, Specifications.dirs is modified and gems installed on +# the system cannot be required anymore. This causes later issues when RDoc +# documentation should be generated, since json gem is sudenly not accessible. +# https://github.com/rubygems/rubygems/pull/442 +Patch13: rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -379,8 +377,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch9 -p1 %patch10 -p1 %patch12 -p1 -#%%patch13 -p1 -%patch14 -p1 +%patch13 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . diff --git a/rubygems-1.8.11-binary-extensions.patch b/rubygems-1.8.11-binary-extensions.patch index e158896..43f3599 100644 --- a/rubygems-1.8.11-binary-extensions.patch +++ b/rubygems-1.8.11-binary-extensions.patch @@ -1,14 +1,14 @@ -From 5a37a3489491a33f2e7011043fbbcd9a765e1777 Mon Sep 17 00:00:00 2001 +From ec90622235ae19b28a327cb50a10e0311e8f3d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 3 Nov 2011 16:43:05 +0100 -Subject: [PATCH 1/6] Add dedicate extensions folder into $LOAD_PATH. +Subject: [PATCH 1/7] Add dedicate extensions folder into $LOAD_PATH. --- lib/rubygems/specification.rb | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index 97db19e..263e7d3 100644 +index cabdf8d..87b14d2 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -1256,6 +1256,12 @@ class Gem::Specification @@ -68,13 +68,13 @@ index 97db19e..263e7d3 100644 # # Formerly used to indicate this gem was RDoc-capable. -- -1.8.0 +1.8.1 -From 671e4285bf9db948bc5f054d7d3d931cdd7a17f8 Mon Sep 17 00:00:00 2001 +From e42819f32fc5d935f7e7189ec4be8bdab0a2cf3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 16 Nov 2011 13:26:48 +0100 -Subject: [PATCH 2/6] Use spec's ext dir for extension installation. +Subject: [PATCH 2/7] Use spec's ext dir for extension installation. --- lib/rubygems/installer.rb | 2 +- @@ -82,7 +82,7 @@ Subject: [PATCH 2/6] Use spec's ext dir for extension installation. 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index 74d803d..0063c7f 100644 +index 780a88b..854c177 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb @@ -642,7 +642,7 @@ TEXT @@ -95,7 +95,7 @@ index 74d803d..0063c7f 100644 spec.extensions.each do |extension| diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index 263e7d3..d31b93b 100644 +index 87b14d2..492ddbe 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -1689,16 +1689,15 @@ class Gem::Specification @@ -119,20 +119,20 @@ index 263e7d3..d31b93b 100644 ## -- -1.8.0 +1.8.1 -From 11b4a0cbadd8b1d3320f838881aa60feb6f848e7 Mon Sep 17 00:00:00 2001 +From 0e9dd0655111f7dda805233c79a3771459d9a66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 16 Nov 2011 14:52:16 +0100 -Subject: [PATCH 3/6] Simplify the extending of $LOAD_PATH for binary gems. +Subject: [PATCH 3/7] Simplify the extending of $LOAD_PATH for binary gems. --- lib/rubygems/specification.rb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index d31b93b..e65ea2d 100644 +index 492ddbe..c703827 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -1256,11 +1256,7 @@ class Gem::Specification @@ -161,13 +161,13 @@ index d31b93b..e65ea2d 100644 ## -- -1.8.0 +1.8.1 -From 5d46cd2b1ac9517a9cbcfa430261e62bb3a376b8 Mon Sep 17 00:00:00 2001 +From 9a8556c609e800d0dbd24af416d613f2e82f323c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 9 Dec 2011 16:31:04 +0100 -Subject: [PATCH 4/6] Fix the binary extension search path construction. +Subject: [PATCH 4/7] Fix the binary extension search path construction. --- lib/rubygems/installer.rb | 2 +- @@ -175,7 +175,7 @@ Subject: [PATCH 4/6] Fix the binary extension search path construction. 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index 0063c7f..83b8fd5 100644 +index 854c177..f1f2ad7 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb @@ -642,7 +642,7 @@ TEXT @@ -188,7 +188,7 @@ index 0063c7f..83b8fd5 100644 spec.extensions.each do |extension| diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index e65ea2d..8be2ade 100644 +index c703827..fa9ea6e 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -1256,7 +1256,7 @@ class Gem::Specification @@ -210,20 +210,20 @@ index e65ea2d..8be2ade 100644 ## -- -1.8.0 +1.8.1 -From 6229583633802b45e5a3e5689ab9077347cd9ef7 Mon Sep 17 00:00:00 2001 +From 476c2f90cc6f5f490858f253a9b23eb19d53d2fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Dec 2011 12:14:54 +0100 -Subject: [PATCH 5/6] Remove binary extensions during uninstall. +Subject: [PATCH 5/7] Remove binary extensions during uninstall. --- lib/rubygems/uninstaller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb -index cc32ea4..94d78e0 100644 +index d672b9d..5c31a0c 100644 --- a/lib/rubygems/uninstaller.rb +++ b/lib/rubygems/uninstaller.rb @@ -246,6 +246,7 @@ class Gem::Uninstaller @@ -235,13 +235,13 @@ index cc32ea4..94d78e0 100644 # TODO: should this be moved to spec?... I vote eww (also exists in docmgr) old_platform_name = [spec.name, -- -1.8.0 +1.8.1 -From bc40e1b9f60a9a04456e3504ffe6ee600b6da269 Mon Sep 17 00:00:00 2001 +From 35dc17e86f701fe1be80d98ace79735c535fd570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Dec 2011 14:27:14 +0100 -Subject: [PATCH 6/6] Avoid dependency on customized operating_system.rb. +Subject: [PATCH 6/7] Avoid dependency on customized operating_system.rb. --- lib/rubygems/defaults.rb | 11 +++++++++++ @@ -249,7 +249,7 @@ Subject: [PATCH 6/6] Avoid dependency on customized operating_system.rb. 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb -index 20b4198..6d8711f 100644 +index ea84e5c..b221954 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb @@ -101,6 +101,17 @@ module Gem @@ -271,7 +271,7 @@ index 20b4198..6d8711f 100644 def self.ruby_engine diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index 8be2ade..f54210a 100644 +index fa9ea6e..2b10499 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -1693,10 +1693,7 @@ class Gem::Specification @@ -287,5 +287,32 @@ index 8be2ade..f54210a 100644 ## -- -1.8.0 +1.8.1 + + +From 0937c0b0a3c2ed08ab5b0875f7f95e24157525c2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 7 Feb 2013 13:07:34 +0100 +Subject: [PATCH 7/7] Fix binary extensions installation when --install-dir is + specified. + +--- + lib/rubygems/installer.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb +index f1f2ad7..e1577fc 100644 +--- a/lib/rubygems/installer.rb ++++ b/lib/rubygems/installer.rb +@@ -642,7 +642,7 @@ TEXT + say "This could take a while..." + end + +- dest_path = File.join spec.ext_dir, spec.require_paths.first ++ dest_path = File.join(options[:install_dir] ? gem_dir : spec.ext_dir, spec.require_paths.first) + ran_rake = false # only run rake once + + spec.extensions.each do |extension| +-- +1.8.1 diff --git a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch new file mode 100644 index 0000000..8747b88 --- /dev/null +++ b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch @@ -0,0 +1,33 @@ +From 95ee154e3f3d324f5dcd47ed76f26194f727b5d3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Wed, 6 Feb 2013 14:07:30 +0100 +Subject: [PATCH] Do not modify global Specification.dirs during installation. + +While gems are installed into --install-dir just fine even without +modifications of Specification.dirs, change in it makes inaccessible +gems already present on the system. +--- + lib/rubygems/dependency_installer.rb | 7 +------ + 1 file changed, 1 insertion(+), 6 deletions(-) + +diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb +index ed90af0..8b6f93f 100644 +--- a/lib/rubygems/dependency_installer.rb ++++ b/lib/rubygems/dependency_installer.rb +@@ -58,12 +58,7 @@ class Gem::DependencyInstaller + + def initialize(options = {}) + if options[:install_dir] then +- @gem_home = options[:install_dir] +- +- # HACK shouldn't change the global settings +- Gem::Specification.dirs = @gem_home +- Gem.ensure_gem_subdirectories @gem_home +- options[:install_dir] = @gem_home # FIX: because we suck and reuse below ++ Gem.ensure_gem_subdirectories options[:install_dir] + end + + options = DEFAULT_OPTIONS.merge options +-- +1.8.1 + From f4e4d19314846eb56c501cd565a4cdfb6457bb9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 7 Feb 2013 13:25:20 +0100 Subject: [PATCH 061/530] Rename the rubygems patch to follow rubygems version. --- ruby.spec | 2 +- ...y-extensions.patch => rubygems-2.0.0-binary-extensions.patch | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename rubygems-1.8.11-binary-extensions.patch => rubygems-2.0.0-binary-extensions.patch (100%) diff --git a/ruby.spec b/ruby.spec index d89f3c5..55fb132 100644 --- a/ruby.spec +++ b/ruby.spec @@ -104,7 +104,7 @@ Patch4: ruby-1.9.3-fix-s390x-build.patch Patch8: ruby-1.9.3-custom-rubygems-location.patch # Add support for installing binary extensions according to FHS. # https://github.com/rubygems/rubygems/issues/210 -Patch9: rubygems-1.8.11-binary-extensions.patch +Patch9: rubygems-2.0.0-binary-extensions.patch # Fixes issues mentioned in rhbz#789532, comment 8. # TODO: Should be probably upstreamed with #5281. Patch10: ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch diff --git a/rubygems-1.8.11-binary-extensions.patch b/rubygems-2.0.0-binary-extensions.patch similarity index 100% rename from rubygems-1.8.11-binary-extensions.patch rename to rubygems-2.0.0-binary-extensions.patch From 10f5cf664baf689033e269d1f8b777ae1f6e8a95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 7 Feb 2013 14:44:59 +0100 Subject: [PATCH 062/530] Add architecture dependency on ruby-libs to ruby-irb. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 55fb132..f6d174a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -219,7 +219,7 @@ specified in standard Ruby syntax. Summary: The Interactive Ruby Version: %{irb_version} Group: Development/Libraries -Requires: %{name}-libs = %{ruby_version_patch_level} +Requires: %{name}-libs%{?_isa} = %{ruby_version_patch_level} Provides: irb = %{version}-%{release} Provides: ruby(irb) = %{version}-%{release} BuildArch: noarch From bf92566673ad56f43e2fec75ad3f02713e5f3f51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Sat, 9 Feb 2013 00:54:37 +0100 Subject: [PATCH 063/530] Upgrade to Ruby 2.0.0 (rc2). --- ...9.3-added-site-and-vendor-arch-flags.patch | 188 ------------------ ruby-1.9.3-always-use-i386.patch | 8 +- ruby-1.9.3-arch-specific-dir.patch | 133 ++----------- ruby-1.9.3-custom-rubygems-location.patch | 32 +-- ruby-1.9.3-disable-versioned-paths.patch | 149 -------------- ruby-1.9.3-fix-s390x-build.patch | 6 +- ...pc-variable-by-configuration-process.patch | 35 ---- ...ed-paths-when-empty-version-string-i.patch | 70 +++++++ ruby.spec | 28 +-- ...obal-Specification.dirs-during-insta.patch | 16 +- 10 files changed, 121 insertions(+), 544 deletions(-) delete mode 100644 ruby-1.9.3-added-site-and-vendor-arch-flags.patch delete mode 100644 ruby-1.9.3-disable-versioned-paths.patch delete mode 100644 ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch create mode 100644 ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch diff --git a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch b/ruby-1.9.3-added-site-and-vendor-arch-flags.patch deleted file mode 100644 index c3b007b..0000000 --- a/ruby-1.9.3-added-site-and-vendor-arch-flags.patch +++ /dev/null @@ -1,188 +0,0 @@ -From be687364922657501e861e9f53f8ec647a73fe00 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 5 Sep 2011 13:10:47 +0200 -Subject: [PATCH] Added configuration flags for site and vendor architecture - specific directories. - ---- - Makefile.in | 3 +++ - configure.in | 40 ++++++++++++++++++++++++++++++++++++++++ - tool/mkconfig.rb | 8 ++++++-- - version.c | 4 ++++ - 4 files changed, 53 insertions(+), 2 deletions(-) - -diff --git a/Makefile.in b/Makefile.in -index 690ff8e..8c7dd98 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -41,6 +41,9 @@ arch = @arch@ - archdir = @archdir@ - sitearch = @sitearch@ - sitedir = @sitedir@ -+sitearchdir= @sitearchdir@ -+vendordir = @vendordir@ -+vendorarchdir = @vendorarchdir@ - ruby_version = @ruby_version@ - - TESTUI = console -diff --git a/configure.in b/configure.in -index 8e4aaec..c65e0c7 100644 ---- a/configure.in -+++ b/configure.in -@@ -3197,6 +3197,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do - dir="${SITE_DIR}" - done - -+AC_ARG_WITH(sitearchdir, -+ AS_HELP_STRING([--with-sitearchdir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]]]), -+ [sitearchdir=$withval], -+ [sitearchdir='${rubylibprefix}/site_ruby/${arch}']) -+dir="${sitearchdir}" -+until SITEARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITEARCH_DIR}"; do -+ dir="${SITEARCH_DIR}" -+done -+ - AC_ARG_WITH(vendordir, - AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), - [vendordir=$withval], -@@ -3206,19 +3215,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do - dir="${VENDOR_DIR}" - done - -+AC_ARG_WITH(vendorarchdir, -+ AS_HELP_STRING([--with-vendorarchdir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]]]), -+ [vendorarchdir=$withval], -+ [vendorarchdir='${rubylibprefix}/vendor_ruby/${arch}']) -+dir="${vendorarchdir}" -+until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_DIR}"; do -+ dir="${VENDORARCH_DIR}" -+done -+ - if test "${LOAD_RELATIVE+set}"; then - AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) - RUBY_EXEC_PREFIX="" - RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" - RUBY_ARCH_LIB_PATH="`eval echo "$ARCH_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" - RUBY_SITE_LIB_PATH="`eval echo "$SITE_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" -+ RUBY_SITE_ARCHLIB_PATH="`eval echo "$SITEARCH_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" - RUBY_VENDOR_LIB_PATH="`eval echo "$VENDOR_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" -+ RUBY_VENDOR_ARCHLIB_PATH="`eval echo "$VENDORARCH_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" - else - RUBY_EXEC_PREFIX="`eval echo \\"$exec_prefix/\\" | sed 's|^NONE/|'"$prefix"'/|;s|/$||'`" - RUBY_LIB_PREFIX="`eval echo \\"$RUBY_LIB_PREFIX\\" | sed 's|^NONE/|'"$prefix"'/|'`" - RUBY_ARCH_LIB_PATH="`eval echo \\"$ARCH_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`" - RUBY_SITE_LIB_PATH="`eval echo \\"$SITE_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`" -+ RUBY_SITE_ARCHLIB_PATH="`eval echo \\"$SITEARCH_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`" - RUBY_VENDOR_LIB_PATH="`eval echo \\"$VENDOR_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`" -+ RUBY_VENDOR_ARCHLIB_PATH="`eval echo \\"$VENDORARCH_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`" - fi - - pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)' -@@ -3236,6 +3258,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"], - [ - RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\"" - ]) -+AS_CASE(["$RUBY_SITE_ARCHLIB_PATH"], -+ ["$RUBY_LIB_PREFIX/"*], [ -+ RUBY_SITE_ARCHLIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_ARCHLIB_PATH\" : \"$pat\"`"'"' -+ ], -+ [ -+ RUBY_SITE_ARCHLIB_PATH="\"${RUBY_SITE_ARCHLIB_PATH}\"" -+ ]) - AS_CASE(["$RUBY_VENDOR_LIB_PATH"], - ["$RUBY_LIB_PREFIX/"*], [ - RUBY_VENDOR_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_LIB_PATH\" : \"$pat\"`"'"' -@@ -3243,6 +3272,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"], - [ - RUBY_VENDOR_LIB_PATH="\"${RUBY_VENDOR_LIB_PATH}\"" - ]) -+AS_CASE(["$RUBY_VENDOR_ARCHLIB_PATH"], -+ ["$RUBY_LIB_PREFIX/"*], [ -+ RUBY_VENDOR_ARCHLIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_ARCHLIB_PATH\" : \"$pat\"`"'"' -+ ], -+ [ -+ RUBY_VENDOR_ARCHLIB_PATH="\"${RUBY_VENDOR_ARCHLIB_PATH}\"" -+ ]) - pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)' - AS_CASE(["$RUBY_LIB_PREFIX"], - ["$RUBY_EXEC_PREFIX/"*], [ -@@ -3264,11 +3300,13 @@ if test "x$SITE_DIR" = xno; then - AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) - else - AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH} !!) -+ AC_DEFINE_UNQUOTED(RUBY_SITE_ARCHLIB, ${RUBY_SITE_ARCHLIB_PATH} !!) - fi - if test "x$VENDOR_DIR" = xno; then - AC_DEFINE(NO_RUBY_VENDOR_LIB, [] !!) - else - AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB, ${RUBY_VENDOR_LIB_PATH} !!) -+ AC_DEFINE_UNQUOTED(RUBY_VENDOR_ARCHLIB, ${RUBY_VENDOR_ARCHLIB_PATH} !!) - fi - - AC_SUBST(arch)dnl -@@ -3276,7 +3314,9 @@ AC_SUBST(sitearch)dnl - AC_SUBST(ruby_version)dnl - AC_SUBST(archdir)dnl - AC_SUBST(sitedir)dnl -+AC_SUBST(sitearchdir)dnl - AC_SUBST(vendordir)dnl -+AC_SUBST(vendorarchdir)dnl - - configure_args=$ac_configure_args - AC_SUBST(configure_args)dnl -diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb -index 03c3332..79b8e44 100755 ---- a/tool/mkconfig.rb -+++ b/tool/mkconfig.rb -@@ -45,6 +45,8 @@ continued_name = nil - continued_line = nil - path_version = "/$(ruby_version)" - archdir_override = "$(vendorlibdir)/$(sitearch)" -+sitearchdir_override = "$(sitelibdir)/$(sitearch)" -+vendorarchdir_override = "$(vendorlibdir)/$(sitearch)" - File.foreach "config.status" do |line| - next if /^#/ =~ line - name = nil -@@ -81,6 +83,8 @@ File.foreach "config.status" do |line| - when /^RUBY_SO_NAME$/; next if $so_name - when /^arch$/; if val.empty? then val = arch else arch = val end - when /^archdir$/; archdir_override = val; next -+ when /^sitearchdir$/; sitearchdir_override = val; next -+ when /^vendorarchdir$/; vendorarchdir_override = val; next - when /^sitearch/; val = '$(arch)' if val.empty? - end - case val -@@ -217,11 +221,11 @@ print < Date: Mon, 19 Nov 2012 14:37:28 +0100 Subject: [PATCH] Always use i386. @@ -8,10 +8,10 @@ Subject: [PATCH] Always use i386. 1 file changed, 2 insertions(+) diff --git a/configure.in b/configure.in -index c65e0c7..748edc9 100644 +index 418b0cb..d26fe5b 100644 --- a/configure.in +++ b/configure.in -@@ -3321,6 +3321,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3320,6 +3320,8 @@ AC_SUBST(vendorarchdir)dnl configure_args=$ac_configure_args AC_SUBST(configure_args)dnl @@ -21,5 +21,5 @@ index c65e0c7..748edc9 100644 arch="universal-${target_os}" AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available, -- -1.8.0 +1.8.1 diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index 8bfce1f..5c24947 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -1,132 +1,27 @@ -From 50d6113cc3752d1810d58b78d9d009662e143041 Mon Sep 17 00:00:00 2001 +From 770799128d4cf0b2908f8cd15d935fc6cc24397a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 8 Sep 2011 15:30:05 +0200 +Date: Fri, 8 Feb 2013 18:20:50 +0100 Subject: [PATCH] Add configuration arch specific dir flag. --- - Makefile.in | 1 + - configure.in | 20 ++++++++++++++++++++ - tool/mkconfig.rb | 4 +++- - version.c | 2 ++ - 4 files changed, 26 insertions(+), 1 deletion(-) + configure.in | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) -diff --git a/Makefile.in b/Makefile.in -index 78d7139..690ff8e 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -38,6 +38,7 @@ libexecdir = @libexecdir@ - datarootdir = @datarootdir@ - datadir = @datadir@ - arch = @arch@ -+archdir = @archdir@ - sitearch = @sitearch@ - sitedir = @sitedir@ - ruby_version = @ruby_version@ diff --git a/configure.in b/configure.in -index db3641b..8e4aaec 100644 +index 7604bb8..418b0cb 100644 --- a/configure.in +++ b/configure.in -@@ -3179,6 +3179,15 @@ else - RUBY_LIB_VERSION="\"${ruby_version}\"" - fi +@@ -3186,6 +3191,10 @@ AC_ARG_WITH(rubylibprefix, + rubylibdir='${rubylibprefix}/${ruby_version}' + rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} +AC_ARG_WITH(archdir, -+ AS_HELP_STRING([--with-archdir=DIR], [architecture specific ruby libraries [[LIBDIR/RUBY_BASE_NAME/ARCH]]]), -+ [archdir=$withval], -+ [archdir='${rubylibprefix}/${arch}']) -+dir="${archdir}" -+until ARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${ARCH_DIR}"; do -+ dir="${ARCH_DIR}" -+done ++ AS_HELP_STRING([--with-archdir=DIR], [architecture specific ruby libraries [[LIBDIR/RUBY_BASE_NAME/ARCH]]]), ++ [rubyarchdir=$withval]) + - AC_ARG_WITH(sitedir, - AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), - [sitedir=$withval], -@@ -3201,16 +3210,25 @@ if test "${LOAD_RELATIVE+set}"; then - AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) - RUBY_EXEC_PREFIX="" - RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" -+ RUBY_ARCH_LIB_PATH="`eval echo "$ARCH_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" - RUBY_SITE_LIB_PATH="`eval echo "$SITE_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" - RUBY_VENDOR_LIB_PATH="`eval echo "$VENDOR_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`" - else - RUBY_EXEC_PREFIX="`eval echo \\"$exec_prefix/\\" | sed 's|^NONE/|'"$prefix"'/|;s|/$||'`" - RUBY_LIB_PREFIX="`eval echo \\"$RUBY_LIB_PREFIX\\" | sed 's|^NONE/|'"$prefix"'/|'`" -+ RUBY_ARCH_LIB_PATH="`eval echo \\"$ARCH_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`" - RUBY_SITE_LIB_PATH="`eval echo \\"$SITE_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`" - RUBY_VENDOR_LIB_PATH="`eval echo \\"$VENDOR_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`" - fi - - pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)' -+AS_CASE(["$RUBY_ARCH_LIB_PATH"], -+ ["$RUBY_LIB_PREFIX/"*], [ -+ RUBY_ARCH_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_ARCH_LIB_PATH\" : \"$pat\"`"'"' -+ ], -+ [ -+ RUBY_ARCH_LIB_PATH="\"${RUBY_ARCH_LIB_PATH}\"" -+ ]) - AS_CASE(["$RUBY_SITE_LIB_PATH"], - ["$RUBY_LIB_PREFIX/"*], [ - RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"' -@@ -3241,6 +3259,7 @@ else - fi - AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}") - AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX} !!) -+AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, ${RUBY_ARCH_LIB_PATH} !!) - if test "x$SITE_DIR" = xno; then - AC_DEFINE(NO_RUBY_SITE_LIB, [] !!) - else -@@ -3255,6 +3274,7 @@ fi - AC_SUBST(arch)dnl - AC_SUBST(sitearch)dnl - AC_SUBST(ruby_version)dnl -+AC_SUBST(archdir)dnl - AC_SUBST(sitedir)dnl - AC_SUBST(vendordir)dnl - -diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb -index d9e26c1..03c3332 100755 ---- a/tool/mkconfig.rb -+++ b/tool/mkconfig.rb -@@ -44,6 +44,7 @@ vars = {} - continued_name = nil - continued_line = nil - path_version = "/$(ruby_version)" -+archdir_override = "$(vendorlibdir)/$(sitearch)" - File.foreach "config.status" do |line| - next if /^#/ =~ line - name = nil -@@ -79,6 +80,7 @@ File.foreach "config.status" do |line| - when /^RUBY_INSTALL_NAME$/; next if $install_name - when /^RUBY_SO_NAME$/; next if $so_name - when /^arch$/; if val.empty? then val = arch else arch = val end -+ when /^archdir$/; archdir_override = val; next - when /^sitearch/; val = '$(arch)' if val.empty? - end - case val -@@ -211,7 +213,7 @@ print(*v_fast) - print(*v_others) - print < -Date: Thu, 25 Aug 2011 14:33:51 +0200 -Subject: [PATCH] Allow to disable versioned paths. - ---- - configure.in | 11 +++++++++++ - lib/rdoc/ri/paths.rb | 4 ++-- - tool/mkconfig.rb | 9 ++++++--- - tool/rbinstall.rb | 2 +- - version.c | 10 ++++++++++ - 5 files changed, 30 insertions(+), 6 deletions(-) - -diff --git a/configure.in b/configure.in -index f2d22ef..db3641b 100644 ---- a/configure.in -+++ b/configure.in -@@ -3346,6 +3346,17 @@ else - fi - AC_SUBST(USE_RUBYGEMS) - -+AC_ARG_ENABLE(versioned-paths, -+ AS_HELP_STRING([--disable-versioned-paths], [disable paths with version number]), -+ [enable_versioned_paths="$enableval"], [enable_versioned_paths=yes]) -+if test x"$enable_versioned_paths" = xno; then -+ AC_DEFINE(DISABLE_VERSIONED_PATHS, 1) -+ USE_VERSIONED_PATHS=NO -+else -+ USE_VERSIONED_PATHS=YES -+fi -+AC_SUBST(USE_VERSIONED_PATHS) -+ - arch_hdrdir="${EXTOUT}/include/${arch}/ruby" - AS_MKDIR_P("${arch_hdrdir}") - config_h="${arch_hdrdir}/config.h" -diff --git a/lib/rdoc/ri/paths.rb b/lib/rdoc/ri/paths.rb -index a3c65bf..a4e8559 100644 ---- a/lib/rdoc/ri/paths.rb -+++ b/lib/rdoc/ri/paths.rb -@@ -12,9 +12,9 @@ module RDoc::RI::Paths - version = RbConfig::CONFIG['ruby_version'] - - BASE = if RbConfig::CONFIG.key? 'ridir' then -- File.join RbConfig::CONFIG['ridir'], version -+ File.join [RbConfig::CONFIG['ridir'], RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil].compact - else -- File.join RbConfig::CONFIG['datadir'], 'ri', version -+ File.join [RbConfig::CONFIG['datadir'], 'ri', RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil].compact - end - - homedir = begin -diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb -index f9d97d3..d9e26c1 100755 ---- a/tool/mkconfig.rb -+++ b/tool/mkconfig.rb -@@ -43,6 +43,7 @@ v_runtime = {} - vars = {} - continued_name = nil - continued_line = nil -+path_version = "/$(ruby_version)" - File.foreach "config.status" do |line| - next if /^#/ =~ line - name = nil -@@ -142,6 +143,8 @@ File.foreach "config.status" do |line| - case name - when "ruby_version" - version = val[/\A"(.*)"\z/, 1] -+ when /^USE_VERSIONED_PATHS$/ -+ path_version = nil if /NO/ =~ val - end - end - # break if /^CEOF/ -@@ -207,15 +210,15 @@ end - print(*v_fast) - print(*v_others) - print < $data_mode) - end -diff --git a/version.c b/version.c -index 26e275a..05e5069 100644 ---- a/version.c -+++ b/version.c -@@ -39,9 +39,15 @@ - #define RUBY_VENDOR_LIB RUBY_LIB_PREFIX"/vendor_ruby" - #endif - -+#ifdef DISABLE_VERSIONED_PATHS -+#define RUBY_LIB RUBY_LIB_PREFIX -+#define RUBY_SITE_LIB2 RUBY_SITE_LIB -+#define RUBY_VENDOR_LIB2 RUBY_VENDOR_LIB -+#else - #define RUBY_LIB RUBY_LIB_PREFIX "/"RUBY_LIB_VERSION - #define RUBY_SITE_LIB2 RUBY_SITE_LIB "/"RUBY_LIB_VERSION - #define RUBY_VENDOR_LIB2 RUBY_VENDOR_LIB "/"RUBY_LIB_VERSION -+#endif - #define RUBY_ARCHLIB RUBY_LIB "/"RUBY_ARCH - #define RUBY_SITE_ARCHLIB RUBY_SITE_LIB2 "/"RUBY_SITEARCH - #define RUBY_VENDOR_ARCHLIB RUBY_VENDOR_LIB2 "/"RUBY_SITEARCH -@@ -76,8 +82,10 @@ const char ruby_initial_load_paths[] = - RUBY_SITE_THIN_ARCHLIB "\0" - #endif - RUBY_SITE_ARCHLIB "\0" -+#ifndef DISABLE_VERSIONED_PATHS - RUBY_SITE_LIB "\0" - #endif -+#endif - - #ifndef NO_RUBY_VENDOR_LIB - RUBY_VENDOR_LIB2 "\0" -@@ -85,8 +93,10 @@ const char ruby_initial_load_paths[] = - RUBY_VENDOR_THIN_ARCHLIB "\0" - #endif - RUBY_VENDOR_ARCHLIB "\0" -+#ifndef DISABLE_VERSIONED_PATHS - RUBY_VENDOR_LIB "\0" - #endif -+#endif - - RUBY_LIB "\0" - #ifdef RUBY_THIN_ARCHLIB --- -1.8.0 - diff --git a/ruby-1.9.3-fix-s390x-build.patch b/ruby-1.9.3-fix-s390x-build.patch index 5f91aae..3e7056f 100644 --- a/ruby-1.9.3-fix-s390x-build.patch +++ b/ruby-1.9.3-fix-s390x-build.patch @@ -1,4 +1,4 @@ -From d710179fcc088a201339a28fa6a5779da8e6ab62 Mon Sep 17 00:00:00 2001 +From d006c4d04aecbe80469a26a6114b776e9de4e3c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 19 Nov 2012 14:39:19 +0100 Subject: [PATCH] Fix s390x build. @@ -8,7 +8,7 @@ Subject: [PATCH] Fix s390x build. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/tk/extconf.rb b/ext/tk/extconf.rb -index 72dd6cf..5c6081e 100644 +index 8f3bff8..69e90a1 100644 --- a/ext/tk/extconf.rb +++ b/ext/tk/extconf.rb @@ -114,7 +114,7 @@ def is_macosx? @@ -21,5 +21,5 @@ index 72dd6cf..5c6081e 100644 def check_tcltk_version(version) -- -1.8.0 +1.8.1 diff --git a/ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch b/ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch deleted file mode 100644 index 20dd78d..0000000 --- a/ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch +++ /dev/null @@ -1,35 +0,0 @@ -From bf4959bc763167b2245a5f4c699fcb72afead5a5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 18 Jan 2013 15:51:49 +0100 -Subject: [PATCH] Expand ruby.pc variable by configuration process. - ---- - template/ruby.pc.in | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/template/ruby.pc.in b/template/ruby.pc.in -index 2d6716c..25e42f3 100644 ---- a/template/ruby.pc.in -+++ b/template/ruby.pc.in -@@ -25,12 +25,12 @@ LIBS=@LIBS@ - DLDFLAGS=@DLDFLAGS@ - ruby=${bindir}/${RUBY_INSTALL_NAME}@EXEEXT@ - rubylibprefix=@rubylibprefix@ --rubylibdir=${rubylibprefix}/${ruby_version} --vendordir=${rubylibprefix}/vendor_ruby --sitedir=${rubylibprefix}/site_ruby --rubyarchdir=${rubylibdir}/${arch} --vendorarchdir=${vendordir}/${sitearch} --sitearchdir=${sitedir}/${sitearch} -+rubylibdir=@rubylibprefix@ -+vendordir=@vendordir@ -+sitedir=@sitedir@ -+rubyarchdir=@archdir@ -+vendorarchdir=@vendorarchdir@ -+sitearchdir=@sitearchdir@ - rubyhdrdir=@rubyhdrdir@ - vendorhdrdir=@vendorhdrdir@ - sitehdrdir=@sitehdrdir@ --- -1.8.0.2 - diff --git a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch new file mode 100644 index 0000000..1e31179 --- /dev/null +++ b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -0,0 +1,70 @@ +From 5afb0d89ab0e6297b333f45b4bd30a20024e80c7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Fri, 8 Feb 2013 22:48:41 +0100 +Subject: [PATCH] Prevent duplicated paths when empty version string is + configured. + +--- + configure.in | 3 +++ + version.c | 10 ++++++++++ + 2 files changed, 13 insertions(+) + +diff --git a/configure.in b/configure.in +index 5850bbf..7604bb8 100644 +--- a/configure.in ++++ b/configure.in +@@ -3265,6 +3265,9 @@ shvar_to_cpp RIDIR "${ridir}" + if test ${RUBY_LIB_VERSION_STYLE+set}; then + AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION_STYLE, $RUBY_LIB_VERSION_STYLE !!) + else ++ if test "x${ruby_version}" = 'x'; then ++ AC_DEFINE(RUBY_LIB_VERSION_BLANK, 1) ++ fi + AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION, [$RUBY_LIB_VERSION] !!) + fi + AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, ${RUBY_EXEC_PREFIX}) +diff --git a/version.c b/version.c +index 282960d..54c4513 100644 +--- a/version.c ++++ b/version.c +@@ -39,9 +39,15 @@ + #define RUBY_VENDOR_LIB RUBY_LIB_PREFIX"/vendor_ruby" + #endif + ++#ifdef RUBY_LIB_VERSION_BLANK ++#define RUBY_LIB RUBY_LIB_PREFIX ++#define RUBY_SITE_LIB2 RUBY_SITE_LIB ++#define RUBY_VENDOR_LIB2 RUBY_VENDOR_LIB ++#else + #define RUBY_LIB RUBY_LIB_PREFIX "/"RUBY_LIB_VERSION + #define RUBY_SITE_LIB2 RUBY_SITE_LIB "/"RUBY_LIB_VERSION + #define RUBY_VENDOR_LIB2 RUBY_VENDOR_LIB "/"RUBY_LIB_VERSION ++#endif + #ifndef RUBY_ARCH_LIB_FOR + #define RUBY_ARCH_LIB_FOR(arch) RUBY_LIB "/"arch + #endif +@@ -77,8 +83,10 @@ const char ruby_initial_load_paths[] = + RUBY_SITE_ARCH_LIB_FOR(RUBY_THINARCH) "\0" + #endif + RUBY_SITE_ARCH_LIB_FOR(RUBY_SITEARCH) "\0" ++#ifndef RUBY_LIB_VERSION_BLANK + RUBY_SITE_LIB "\0" + #endif ++#endif + + #ifndef NO_RUBY_VENDOR_LIB + RUBY_VENDOR_LIB2 "\0" +@@ -86,8 +94,10 @@ const char ruby_initial_load_paths[] = + RUBY_VENDOR_ARCH_LIB_FOR(RUBY_THINARCH) "\0" + #endif + RUBY_VENDOR_ARCH_LIB_FOR(RUBY_SITEARCH) "\0" ++#ifndef RUBY_LIB_VERSION_BLANK + RUBY_VENDOR_LIB "\0" + #endif ++#endif + + RUBY_LIB "\0" + #ifdef RUBY_THINARCH +-- +1.8.1 + diff --git a/ruby.spec b/ruby.spec index f6d174a..53b2a90 100644 --- a/ruby.spec +++ b/ruby.spec @@ -11,6 +11,7 @@ # Specify the named version. It has precedense to revision. #%%global milestone preview2 +%global milestone rc2 # Keep the revision enabled for pre-releases from SVN. %global revision 39070 @@ -59,7 +60,7 @@ # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version_patch_level} -%global rdoc_version 4.0.0.preview3.1 +%global rdoc_version 4.0.0.rc.2.1 %global bigdecimal_version 1.1.0 %global io_console_version 0.4.1 %global json_version 1.7.5 @@ -88,12 +89,10 @@ Source1: operating_system.rb Source2: libruby.stp Source3: ruby-exercise.stp -# http://redmine.ruby-lang.org/issues/5231 -Patch0: ruby-1.9.3-disable-versioned-paths.patch -# TODO: Should be submitted upstream? +# http://bugs.ruby-lang.org/issues/7807 +Patch0: ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +# http://bugs.ruby-lang.org/issues/7808 Patch1: ruby-1.9.3-arch-specific-dir.patch -# http://redmine.ruby-lang.org/issues/5281 -Patch2: ruby-1.9.3-added-site-and-vendor-arch-flags.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. Patch3: ruby-1.9.3-always-use-i386.patch @@ -105,9 +104,6 @@ Patch8: ruby-1.9.3-custom-rubygems-location.patch # Add support for installing binary extensions according to FHS. # https://github.com/rubygems/rubygems/issues/210 Patch9: rubygems-2.0.0-binary-extensions.patch -# Fixes issues mentioned in rhbz#789532, comment 8. -# TODO: Should be probably upstreamed with #5281. -Patch10: ruby-2.0.0-Expand-ruby.pc-variable-by-configuration-process.patch # Make mkmf verbose by default Patch12: ruby-1.9.3-mkmf-verbose.patch # This slightly changes behavior of "gem install --install-dir" behavior. @@ -370,12 +366,10 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch0 -p1 %patch1 -p1 -%patch2 -p1 %patch3 -p1 %patch4 -p1 %patch8 -p1 %patch9 -p1 -%patch10 -p1 %patch12 -p1 %patch13 -p1 @@ -397,7 +391,9 @@ autoconf --with-ruby-pc='%{name}.pc' \ --disable-rpath \ --enable-shared \ - --disable-versioned-paths + --with-ruby-version='' \ + + # Q= makes the build output more verbose and allows to check Fedora # compiler options. @@ -411,6 +407,10 @@ make install DESTDIR=%{buildroot} # Rename the ruby executable. It is replaced by RubyPick. mv %{buildroot}%{_bindir}/%{name}{,-mri} +# Version is empty if --with-ruby-version is specified. +# http://bugs.ruby-lang.org/issues/7807 +sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_libdir}/pkgconfig/%{name}.pc + # Dump the macros into macro.ruby to use them to build other Ruby libraries. mkdir -p %{buildroot}%{_sysconfdir}/rpm cat >> %{buildroot}%{_sysconfdir}/rpm/macros.ruby << \EOF @@ -447,7 +447,7 @@ mkdir -p %{buildroot}%{rubygems_dir}/rubygems/defaults cp %{SOURCE1} %{buildroot}%{rubygems_dir}/rubygems/defaults # Move gems root into common direcotry, out of Ruby directory structure. -mv %{buildroot}%{ruby_libdir}/gems/2.0.0 %{buildroot}%{gem_dir} +mv %{buildroot}%{ruby_libdir}/gems %{buildroot}%{gem_dir} # Create folders for gem binary extensions. mkdir -p %{buildroot}%{gem_extdir}/%{name} @@ -538,7 +538,7 @@ DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" DISABLE_TESTS="-x test_io.rb $DISABLE_TESTS" %endif -make check TESTS="-v $DISABLE_TESTS" +#make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig diff --git a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch index 8747b88..f0585c4 100644 --- a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch +++ b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch @@ -14,20 +14,16 @@ diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_inst index ed90af0..8b6f93f 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb -@@ -58,12 +58,7 @@ class Gem::DependencyInstaller +@@ -60,9 +60,6 @@ class Gem::DependencyInstaller + @install_dir = options[:install_dir] || Gem.dir - def initialize(options = {}) if options[:install_dir] then -- @gem_home = options[:install_dir] -- -- # HACK shouldn't change the global settings -- Gem::Specification.dirs = @gem_home -- Gem.ensure_gem_subdirectories @gem_home -- options[:install_dir] = @gem_home # FIX: because we suck and reuse below -+ Gem.ensure_gem_subdirectories options[:install_dir] +- # HACK shouldn't change the global settings, needed for -i behavior +- # maybe move to the install command? See also github #442 +- Gem::Specification.dirs = @install_dir + Gem.ensure_gem_subdirectories @install_dir end - options = DEFAULT_OPTIONS.merge options -- 1.8.1 From 14d28871b54fb3d01dfb9214628a03eaaec5013c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 13 Feb 2013 16:33:54 +0100 Subject: [PATCH 064/530] Update rubygems --install-dir patch. --- ruby.spec | 2 +- ...obal-Specification.dirs-during-insta.patch | 96 +++++++++++++++++-- 2 files changed, 87 insertions(+), 11 deletions(-) diff --git a/ruby.spec b/ruby.spec index 53b2a90..df43a70 100644 --- a/ruby.spec +++ b/ruby.spec @@ -110,7 +110,7 @@ Patch12: ruby-1.9.3-mkmf-verbose.patch # Without this patch, Specifications.dirs is modified and gems installed on # the system cannot be required anymore. This causes later issues when RDoc # documentation should be generated, since json gem is sudenly not accessible. -# https://github.com/rubygems/rubygems/pull/442 +# https://github.com/rubygems/rubygems/pull/452 Patch13: rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} diff --git a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch index f0585c4..b082597 100644 --- a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch +++ b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch @@ -1,29 +1,105 @@ -From 95ee154e3f3d324f5dcd47ed76f26194f727b5d3 Mon Sep 17 00:00:00 2001 +From b95b9942361104dc5b7fd08eb4970f893d8c1a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 6 Feb 2013 14:07:30 +0100 -Subject: [PATCH] Do not modify global Specification.dirs during installation. +Date: Wed, 13 Feb 2013 13:12:30 +0100 +Subject: [PATCH 1/2] Remove duplicated check. + +The loaded specifications are rejected already in #gather_dependencies, +so this condition cannot trigger. +--- + lib/rubygems/dependency_installer.rb | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb +index d811f62..dffa8df 100644 +--- a/lib/rubygems/dependency_installer.rb ++++ b/lib/rubygems/dependency_installer.rb +@@ -319,9 +319,6 @@ class Gem::DependencyInstaller + + last = @gems_to_install.size - 1 + @gems_to_install.each_with_index do |spec, index| +- # REFACTOR more current spec set hardcoding, should be abstracted? +- next if Gem::Specification.include?(spec) and index != last +- + # TODO: make this sorta_verbose so other users can benefit from it + say "Installing gem #{spec.full_name}" if Gem.configuration.really_verbose + +-- +1.8.1.2 + + +From 2fa9087b1986db6c7945c0f997fed2bfff5ce06a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Wed, 13 Feb 2013 15:47:47 +0100 +Subject: [PATCH 2/2] Do not modify global Specification.dirs during + installation. While gems are installed into --install-dir just fine even without modifications of Specification.dirs, change in it makes inaccessible gems already present on the system. --- - lib/rubygems/dependency_installer.rb | 7 +------ - 1 file changed, 1 insertion(+), 6 deletions(-) + lib/rubygems/dependency_installer.rb | 15 ++++++--------- + 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb -index ed90af0..8b6f93f 100644 +index dffa8df..841f26a 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb -@@ -60,9 +60,6 @@ class Gem::DependencyInstaller - @install_dir = options[:install_dir] || Gem.dir +@@ -57,17 +57,14 @@ class Gem::DependencyInstaller + # :build_args:: See Gem::Installer::new + + def initialize(options = {}) +- @install_dir = options[:install_dir] || Gem.dir if options[:install_dir] then - # HACK shouldn't change the global settings, needed for -i behavior - # maybe move to the install command? See also github #442 - Gem::Specification.dirs = @install_dir - Gem.ensure_gem_subdirectories @install_dir +- Gem.ensure_gem_subdirectories @install_dir ++ Gem.ensure_gem_subdirectories options[:install_dir] end + options = DEFAULT_OPTIONS.merge options + ++ @install_dir = options[:install_dir] + @bin_dir = options[:bin_dir] + @dev_shallow = options[:dev_shallow] + @development = options[:development] +@@ -91,7 +88,7 @@ class Gem::DependencyInstaller + @installed_gems = [] + @toplevel_specs = nil + +- @cache_dir = options[:cache_dir] || @install_dir ++ @cache_dir = options[:cache_dir] || @install_dir || Gem.dir + + # Set with any errors that SpecFetcher finds while search through + # gemspecs for a dep +@@ -185,7 +182,7 @@ class Gem::DependencyInstaller + # that this isn't dependent only on the currently installed gems + dependency_list.specs.reject! { |spec| + not keep_names.include?(spec.full_name) and +- Gem::Specification.include?(spec) ++ (!@install_dir && Gem::Specification.include?(spec)) + } + + unless dependency_list.ok? or @ignore_dependencies or @force then +@@ -237,7 +234,7 @@ class Gem::DependencyInstaller + to_do.push t.spec + end + +- results.remove_installed! dep ++ results.remove_installed! dep unless @install_dir + + @available << results + results.inject_into_list dependency_list +@@ -349,7 +346,7 @@ class Gem::DependencyInstaller + :force => @force, + :format_executable => @format_executable, + :ignore_dependencies => @ignore_dependencies, +- :install_dir => @install_dir, ++ :install_dir => (@install_dir || Gem.dir), + :security_policy => @security_policy, + :user_install => @user_install, + :wrappers => @wrappers, -- -1.8.1 +1.8.1.2 From f731780a81890119d7a71ff631e1901bfeeb3187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 14 Feb 2013 15:26:28 +0100 Subject: [PATCH 065/530] Upgrade to Ruby 2.0.0 (r39217). --- ruby-1.9.3-arch-specific-dir.patch | 12 +-- ...ed-paths-when-empty-version-string-i.patch | 14 ++-- ruby.spec | 11 ++- ...s-2.0.0-Fixes-for-empty-ruby-version.patch | 81 +++++++++++++++++++ 4 files changed, 101 insertions(+), 17 deletions(-) create mode 100644 rubygems-2.0.0-Fixes-for-empty-ruby-version.patch diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index 5c24947..2546128 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -1,17 +1,17 @@ -From 770799128d4cf0b2908f8cd15d935fc6cc24397a Mon Sep 17 00:00:00 2001 +From 2e15c6bdac1c145cce0c21677477ced8df26718b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 8 Feb 2013 18:20:50 +0100 Subject: [PATCH] Add configuration arch specific dir flag. --- - configure.in | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) + configure.in | 4 ++++ + 1 file changed, 4 insertions(+) diff --git a/configure.in b/configure.in -index 7604bb8..418b0cb 100644 +index d6af000..1c094a3 100644 --- a/configure.in +++ b/configure.in -@@ -3186,6 +3191,10 @@ AC_ARG_WITH(rubylibprefix, +@@ -3221,6 +3221,10 @@ AC_SUBST(rubylibprefix) rubylibdir='${rubylibprefix}/${ruby_version}' rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} @@ -23,5 +23,5 @@ index 7604bb8..418b0cb 100644 AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -- -1.8.1 +1.8.1.2 diff --git a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 1e31179..5a6c79a 100644 --- a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -1,4 +1,4 @@ -From 5afb0d89ab0e6297b333f45b4bd30a20024e80c7 Mon Sep 17 00:00:00 2001 +From 1e109d1a0265dfdde2324a6a97e4225eb4343efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 8 Feb 2013 22:48:41 +0100 Subject: [PATCH] Prevent duplicated paths when empty version string is @@ -10,10 +10,10 @@ Subject: [PATCH] Prevent duplicated paths when empty version string is 2 files changed, 13 insertions(+) diff --git a/configure.in b/configure.in -index 5850bbf..7604bb8 100644 +index e83cfb4..d6af000 100644 --- a/configure.in +++ b/configure.in -@@ -3265,6 +3265,9 @@ shvar_to_cpp RIDIR "${ridir}" +@@ -3308,6 +3308,9 @@ shvar_to_cpp RIDIR "${ridir}" if test ${RUBY_LIB_VERSION_STYLE+set}; then AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION_STYLE, $RUBY_LIB_VERSION_STYLE !!) else @@ -24,7 +24,7 @@ index 5850bbf..7604bb8 100644 fi AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, ${RUBY_EXEC_PREFIX}) diff --git a/version.c b/version.c -index 282960d..54c4513 100644 +index 6ba6453..c78f609 100644 --- a/version.c +++ b/version.c @@ -39,9 +39,15 @@ @@ -43,7 +43,7 @@ index 282960d..54c4513 100644 #ifndef RUBY_ARCH_LIB_FOR #define RUBY_ARCH_LIB_FOR(arch) RUBY_LIB "/"arch #endif -@@ -77,8 +83,10 @@ const char ruby_initial_load_paths[] = +@@ -79,8 +85,10 @@ const char ruby_initial_load_paths[] = RUBY_SITE_ARCH_LIB_FOR(RUBY_THINARCH) "\0" #endif RUBY_SITE_ARCH_LIB_FOR(RUBY_SITEARCH) "\0" @@ -54,7 +54,7 @@ index 282960d..54c4513 100644 #ifndef NO_RUBY_VENDOR_LIB RUBY_VENDOR_LIB2 "\0" -@@ -86,8 +94,10 @@ const char ruby_initial_load_paths[] = +@@ -88,8 +96,10 @@ const char ruby_initial_load_paths[] = RUBY_VENDOR_ARCH_LIB_FOR(RUBY_THINARCH) "\0" #endif RUBY_VENDOR_ARCH_LIB_FOR(RUBY_SITEARCH) "\0" @@ -66,5 +66,5 @@ index 282960d..54c4513 100644 RUBY_LIB "\0" #ifdef RUBY_THINARCH -- -1.8.1 +1.8.1.2 diff --git a/ruby.spec b/ruby.spec index df43a70..3c0dd2c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -11,10 +11,9 @@ # Specify the named version. It has precedense to revision. #%%global milestone preview2 -%global milestone rc2 # Keep the revision enabled for pre-releases from SVN. -%global revision 39070 +%global revision 39217 %global ruby_archive %{name}-%{ruby_version} @@ -63,7 +62,7 @@ %global rdoc_version 4.0.0.rc.2.1 %global bigdecimal_version 1.1.0 %global io_console_version 0.4.1 -%global json_version 1.7.5 +%global json_version 1.7.7 %global minitest_version 4.3.2 %global psych_version 2.0.0 @@ -112,6 +111,9 @@ Patch12: ruby-1.9.3-mkmf-verbose.patch # documentation should be generated, since json gem is sudenly not accessible. # https://github.com/rubygems/rubygems/pull/452 Patch13: rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch +# This prevents issues, when ruby configuration specifies --with-ruby-version=''. +# https://github.com/rubygems/rubygems/pull/455 +Patch14: rubygems-2.0.0-Fixes-for-empty-ruby-version.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -372,6 +374,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch9 -p1 %patch12 -p1 %patch13 -p1 +%patch14 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -538,7 +541,7 @@ DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" DISABLE_TESTS="-x test_io.rb $DISABLE_TESTS" %endif -#make check TESTS="-v $DISABLE_TESTS" +make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig diff --git a/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch b/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch new file mode 100644 index 0000000..9b275a9 --- /dev/null +++ b/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch @@ -0,0 +1,81 @@ +From c9b2eff36728266052ccfff54d3ac0a0624fd0f1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 14 Feb 2013 11:50:41 +0100 +Subject: [PATCH 1/2] Use File.join insteado of manual path creation. + +This prevents issues, when File.join in #new_default_spec removes +superfluous slashes while they are kept in expected paths. E.g. the test +would fail if ruby configuration specifies --with-ruby-version=''. +--- + test/rubygems/test_gem_commands_contents_command.rb | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/test/rubygems/test_gem_commands_contents_command.rb b/test/rubygems/test_gem_commands_contents_command.rb +index 60df53f..35c9631 100644 +--- a/test/rubygems/test_gem_commands_contents_command.rb ++++ b/test/rubygems/test_gem_commands_contents_command.rb +@@ -140,10 +140,10 @@ lib/foo.rb + @cmd.execute + end + +- expected = %W[ +- #{Gem::ConfigMap[:bindir]}/default_command +- #{Gem::ConfigMap[:rubylibdir]}/default/gem.rb +- #{Gem::ConfigMap[:archdir]}/default_gem.so ++ expected = [ ++ File.join(Gem::ConfigMap[:bindir], 'default_command'), ++ File.join(Gem::ConfigMap[:rubylibdir], 'default/gem.rb'), ++ File.join(Gem::ConfigMap[:archdir], 'default_gem.so') + ].sort.join "\n" + + assert_equal expected, @ui.output.chomp +-- +1.8.1.2 + + +From b022cef7b2e6c2d138388a6c2db02cca8c408cc6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 14 Feb 2013 13:35:20 +0100 +Subject: [PATCH 2/2] Do not add last slash to Gem.user_dir if ruby_version + string is empty. + +--- + lib/rubygems/defaults.rb | 4 +++- + test/rubygems/test_gem.rb | 6 ++++-- + 2 files changed, 7 insertions(+), 3 deletions(-) + +diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb +index ea84e5c..05c35bb 100644 +--- a/lib/rubygems/defaults.rb ++++ b/lib/rubygems/defaults.rb +@@ -54,7 +54,9 @@ module Gem + # Path for gems in the user's home directory + + def self.user_dir +- File.join Gem.user_home, '.gem', ruby_engine, ConfigMap[:ruby_version] ++ parts = [Gem.user_home, '.gem', ruby_engine] ++ parts << ConfigMap[:ruby_version] unless ConfigMap[:ruby_version].empty? ++ File.join parts + end + + ## +diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb +index bf77009..9ee78f7 100644 +--- a/test/rubygems/test_gem.rb ++++ b/test/rubygems/test_gem.rb +@@ -1186,8 +1186,10 @@ class TestGem < Gem::TestCase + end + + def test_self_user_dir +- assert_equal File.join(@userhome, '.gem', Gem.ruby_engine, +- Gem::ConfigMap[:ruby_version]), Gem.user_dir ++ parts = [@userhome, '.gem', Gem.ruby_engine] ++ parts << Gem::ConfigMap[:ruby_version] unless Gem::ConfigMap[:ruby_version].empty? ++ ++ assert_equal File.join(parts), Gem.user_dir + end + + def test_self_user_home +-- +1.8.1.2 + From 9c188645b496d9bfbc480870b1a9a71c0bf6fdfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 14 Feb 2013 17:13:24 +0100 Subject: [PATCH 066/530] Upgrade to Ruby 2.0.0 (r39237). --- ruby-1.9.3-arch-specific-dir.patch | 2 +- ruby-1.9.3-custom-rubygems-location.patch | 19 +++++++++---------- ruby-1.9.3-mkmf-verbose.patch | 8 ++++---- ...ed-paths-when-empty-version-string-i.patch | 12 ++++++------ ruby.spec | 2 +- 5 files changed, 21 insertions(+), 22 deletions(-) diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index 2546128..7a79c18 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index d6af000..1c094a3 100644 --- a/configure.in +++ b/configure.in -@@ -3221,6 +3221,10 @@ AC_SUBST(rubylibprefix) +@@ -3188,6 +3188,10 @@ AC_SUBST(rubylibprefix) rubylibdir='${rubylibprefix}/${ruby_version}' rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index 368d39b..c0b507a 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -1,4 +1,4 @@ -From 643a3d3af2a3847e730c79515bc586768053119a Mon Sep 17 00:00:00 2001 +From b5e9dc3683cb085aa57e7b12c35a4f21b2cc1482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 11 Nov 2011 13:14:45 +0100 Subject: [PATCH] Allow to install RubyGems into custom location, outside of @@ -6,16 +6,15 @@ Subject: [PATCH] Allow to install RubyGems into custom location, outside of --- configure.in | 8 ++++++++ - tool/mkconfig.rb | 1 + tool/rbinstall.rb | 9 +++++++++ version.c | 4 ++++ - 4 files changed, 22 insertions(+) + 3 files changed, 21 insertions(+) diff --git a/configure.in b/configure.in -index 748edc9..6a16745 100644 +index 1627d12..e064b2b 100644 --- a/configure.in +++ b/configure.in -@@ -3256,6 +3256,13 @@ until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_D +@@ -3256,6 +3256,13 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubyarchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -29,7 +28,7 @@ index 748edc9..6a16745 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='""' -@@ -3316,6 +3323,7 @@ @@ AC_SUBST(sitedir)dnl +@@ -3316,6 +3323,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -38,7 +37,7 @@ index 748edc9..6a16745 100644 configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 17294a2..2757a73 100755 +index 92e54c6..c72dfb6 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb @@ -313,6 +313,7 @@ sitelibdir = CONFIG["sitelibdir"] @@ -66,7 +65,7 @@ index 17294a2..2757a73 100755 install?(:local, :arch, :lib) do diff --git a/version.c b/version.c -index 962f39f..979701d 100644 +index 54c4513..d76100b 100644 --- a/version.c +++ b/version.c @@ -99,6 +99,10 @@ const char ruby_initial_load_paths[] = @@ -80,6 +79,6 @@ index 962f39f..979701d 100644 RUBY_LIB "\0" #ifdef RUBY_THINARCH RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0" ---- -1.8.0 +-- +1.8.1.2 diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index 30ffea8..de78ad8 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -1,4 +1,4 @@ -From b6f6f0b8cd750e97c15f1b739b1c95d6c1989294 Mon Sep 17 00:00:00 2001 +From ec16398159a161fc77436b4855d489f193b2515b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 19 Nov 2012 15:14:51 +0100 Subject: [PATCH] Verbose mkmf. @@ -8,10 +8,10 @@ Subject: [PATCH] Verbose mkmf. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mkmf.rb b/lib/mkmf.rb -index ded4e89..0870f22 100644 +index 4b6c52e..67a15ee 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1752,7 +1752,7 @@ SRC +@@ -1777,7 +1777,7 @@ SRC SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. @@ -21,5 +21,5 @@ index ded4e89..0870f22 100644 Q = $(Q1:0=@) ECHO1 = $(V:1=@#{CONFIG['NULLCMD']}) -- -1.8.0 +1.8.1.2 diff --git a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 5a6c79a..1727e4c 100644 --- a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -1,4 +1,4 @@ -From 1e109d1a0265dfdde2324a6a97e4225eb4343efc Mon Sep 17 00:00:00 2001 +From e943a89efd63dcfb80a0ab8d9a4db37f523f508e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 8 Feb 2013 22:48:41 +0100 Subject: [PATCH] Prevent duplicated paths when empty version string is @@ -10,10 +10,10 @@ Subject: [PATCH] Prevent duplicated paths when empty version string is 2 files changed, 13 insertions(+) diff --git a/configure.in b/configure.in -index e83cfb4..d6af000 100644 +index 5850bbf..7604bb8 100644 --- a/configure.in +++ b/configure.in -@@ -3308,6 +3308,9 @@ shvar_to_cpp RIDIR "${ridir}" +@@ -3265,6 +3265,9 @@ shvar_to_cpp RIDIR "${ridir}" if test ${RUBY_LIB_VERSION_STYLE+set}; then AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION_STYLE, $RUBY_LIB_VERSION_STYLE !!) else @@ -24,7 +24,7 @@ index e83cfb4..d6af000 100644 fi AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, ${RUBY_EXEC_PREFIX}) diff --git a/version.c b/version.c -index 6ba6453..c78f609 100644 +index 282960d..54c4513 100644 --- a/version.c +++ b/version.c @@ -39,9 +39,15 @@ @@ -43,7 +43,7 @@ index 6ba6453..c78f609 100644 #ifndef RUBY_ARCH_LIB_FOR #define RUBY_ARCH_LIB_FOR(arch) RUBY_LIB "/"arch #endif -@@ -79,8 +85,10 @@ const char ruby_initial_load_paths[] = +@@ -77,8 +83,10 @@ const char ruby_initial_load_paths[] = RUBY_SITE_ARCH_LIB_FOR(RUBY_THINARCH) "\0" #endif RUBY_SITE_ARCH_LIB_FOR(RUBY_SITEARCH) "\0" @@ -54,7 +54,7 @@ index 6ba6453..c78f609 100644 #ifndef NO_RUBY_VENDOR_LIB RUBY_VENDOR_LIB2 "\0" -@@ -88,8 +96,10 @@ const char ruby_initial_load_paths[] = +@@ -86,8 +94,10 @@ const char ruby_initial_load_paths[] = RUBY_VENDOR_ARCH_LIB_FOR(RUBY_THINARCH) "\0" #endif RUBY_VENDOR_ARCH_LIB_FOR(RUBY_SITEARCH) "\0" diff --git a/ruby.spec b/ruby.spec index 3c0dd2c..706493b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 39217 +%global revision 39237 %global ruby_archive %{name}-%{ruby_version} From 929678a63d1d43dd7a74b8acc9e47ec1b650625f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 15 Feb 2013 18:06:40 +0100 Subject: [PATCH 067/530] Fix installation of binary gems. --- ...obal-Specification.dirs-during-insta.patch | 51 ++++++++++- rubygems-2.0.0-binary-extensions.patch | 84 +++++++++++++++---- 2 files changed, 119 insertions(+), 16 deletions(-) diff --git a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch index b082597..c7c4ef7 100644 --- a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch +++ b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch @@ -1,7 +1,7 @@ From b95b9942361104dc5b7fd08eb4970f893d8c1a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 13 Feb 2013 13:12:30 +0100 -Subject: [PATCH 1/2] Remove duplicated check. +Subject: [PATCH 1/3] Remove duplicated check. The loaded specifications are rejected already in #gather_dependencies, so this condition cannot trigger. @@ -30,7 +30,7 @@ index d811f62..dffa8df 100644 From 2fa9087b1986db6c7945c0f997fed2bfff5ce06a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 13 Feb 2013 15:47:47 +0100 -Subject: [PATCH 2/2] Do not modify global Specification.dirs during +Subject: [PATCH 2/3] Do not modify global Specification.dirs during installation. While gems are installed into --install-dir just fine even without @@ -103,3 +103,50 @@ index dffa8df..841f26a 100644 -- 1.8.1.2 + +From d473204ce920702dd87257db49355929f31530d4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Fri, 15 Feb 2013 17:02:44 +0100 +Subject: [PATCH 3/3] Default to Gem.dir as late as possible. + +--- + lib/rubygems/dependency_installer.rb | 2 +- + lib/rubygems/installer.rb | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb +index 841f26a..abcfa0f 100644 +--- a/lib/rubygems/dependency_installer.rb ++++ b/lib/rubygems/dependency_installer.rb +@@ -346,7 +346,7 @@ class Gem::DependencyInstaller + :force => @force, + :format_executable => @format_executable, + :ignore_dependencies => @ignore_dependencies, +- :install_dir => (@install_dir || Gem.dir), ++ :install_dir => @install_dir, + :security_policy => @security_policy, + :user_install => @user_install, + :wrappers => @wrappers, +diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb +index 780a88b..6543130 100644 +--- a/lib/rubygems/installer.rb ++++ b/lib/rubygems/installer.rb +@@ -535,13 +535,13 @@ class Gem::Installer + :bin_dir => nil, + :env_shebang => false, + :force => false, +- :install_dir => Gem.dir, + :only_install_dir => false + }.merge options + + @env_shebang = options[:env_shebang] + @force = options[:force] +- @gem_home = options[:install_dir] ++ @install_dir = options[:install_dir] ++ @gem_home = options[:install_dir] || Gem.dir + @ignore_dependencies = options[:ignore_dependencies] + @format_executable = options[:format_executable] + @security_policy = options[:security_policy] +-- +1.8.1.2 + diff --git a/rubygems-2.0.0-binary-extensions.patch b/rubygems-2.0.0-binary-extensions.patch index 43f3599..359b578 100644 --- a/rubygems-2.0.0-binary-extensions.patch +++ b/rubygems-2.0.0-binary-extensions.patch @@ -1,7 +1,7 @@ From ec90622235ae19b28a327cb50a10e0311e8f3d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 3 Nov 2011 16:43:05 +0100 -Subject: [PATCH 1/7] Add dedicate extensions folder into $LOAD_PATH. +Subject: [PATCH 1/9] Add dedicate extensions folder into $LOAD_PATH. --- lib/rubygems/specification.rb | 32 ++++++++++++++++++++++++++++++-- @@ -68,13 +68,13 @@ index cabdf8d..87b14d2 100644 # # Formerly used to indicate this gem was RDoc-capable. -- -1.8.1 +1.8.1.2 From e42819f32fc5d935f7e7189ec4be8bdab0a2cf3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 16 Nov 2011 13:26:48 +0100 -Subject: [PATCH 2/7] Use spec's ext dir for extension installation. +Subject: [PATCH 2/9] Use spec's ext dir for extension installation. --- lib/rubygems/installer.rb | 2 +- @@ -119,13 +119,13 @@ index 87b14d2..492ddbe 100644 ## -- -1.8.1 +1.8.1.2 From 0e9dd0655111f7dda805233c79a3771459d9a66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 16 Nov 2011 14:52:16 +0100 -Subject: [PATCH 3/7] Simplify the extending of $LOAD_PATH for binary gems. +Subject: [PATCH 3/9] Simplify the extending of $LOAD_PATH for binary gems. --- lib/rubygems/specification.rb | 11 +++++------ @@ -161,13 +161,13 @@ index 492ddbe..c703827 100644 ## -- -1.8.1 +1.8.1.2 From 9a8556c609e800d0dbd24af416d613f2e82f323c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 9 Dec 2011 16:31:04 +0100 -Subject: [PATCH 4/7] Fix the binary extension search path construction. +Subject: [PATCH 4/9] Fix the binary extension search path construction. --- lib/rubygems/installer.rb | 2 +- @@ -210,13 +210,13 @@ index c703827..fa9ea6e 100644 ## -- -1.8.1 +1.8.1.2 From 476c2f90cc6f5f490858f253a9b23eb19d53d2fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Dec 2011 12:14:54 +0100 -Subject: [PATCH 5/7] Remove binary extensions during uninstall. +Subject: [PATCH 5/9] Remove binary extensions during uninstall. --- lib/rubygems/uninstaller.rb | 1 + @@ -235,13 +235,13 @@ index d672b9d..5c31a0c 100644 # TODO: should this be moved to spec?... I vote eww (also exists in docmgr) old_platform_name = [spec.name, -- -1.8.1 +1.8.1.2 From 35dc17e86f701fe1be80d98ace79735c535fd570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Dec 2011 14:27:14 +0100 -Subject: [PATCH 6/7] Avoid dependency on customized operating_system.rb. +Subject: [PATCH 6/9] Avoid dependency on customized operating_system.rb. --- lib/rubygems/defaults.rb | 11 +++++++++++ @@ -287,13 +287,13 @@ index fa9ea6e..2b10499 100644 ## -- -1.8.1 +1.8.1.2 From 0937c0b0a3c2ed08ab5b0875f7f95e24157525c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 7 Feb 2013 13:07:34 +0100 -Subject: [PATCH 7/7] Fix binary extensions installation when --install-dir is +Subject: [PATCH 7/9] Fix binary extensions installation when --install-dir is specified. --- @@ -314,5 +314,61 @@ index f1f2ad7..e1577fc 100644 spec.extensions.each do |extension| -- -1.8.1 +1.8.1.2 + + +From 4d9675cab5decaef3c9f7f91b2f9c9abd2a19cea Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Fri, 15 Feb 2013 16:24:29 +0100 +Subject: [PATCH 8/9] mkmf does not create folder for binary extensions + anymore. + +This was dropped in Ruby r37016 for some reasons :/ +--- + lib/rubygems/ext/builder.rb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/lib/rubygems/ext/builder.rb b/lib/rubygems/ext/builder.rb +index d7d953f..812c20c 100644 +--- a/lib/rubygems/ext/builder.rb ++++ b/lib/rubygems/ext/builder.rb +@@ -21,6 +21,10 @@ class Gem::Ext::Builder + mf = mf.gsub(/^RUBYLIBDIR\s*=\s*\$[^$]*/, "RUBYLIBDIR = #{dest_path}") + mf = mf.gsub(/\s*\S+\.time$/, "") + ++ # Folder creation was dropped in r37016 for some reasons :/ ++ target_prefix = mf[/^target_prefix\s*=\s*(.*)/, 1] ++ FileUtils.mkdir_p File.join(dest_path, target_prefix) rescue nil # in case of perms issues -- lame ++ + File.open('Makefile', 'wb') {|f| f.print mf} + + # try to find make program from Ruby configure arguments first +-- +1.8.1.2 + + +From 062a11c59731f5875d5a8821a212c8a41cb84577 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Fri, 15 Feb 2013 17:07:07 +0100 +Subject: [PATCH 9/9] Use correct option. + +--- + lib/rubygems/installer.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb +index e1577fc..1492c68 100644 +--- a/lib/rubygems/installer.rb ++++ b/lib/rubygems/installer.rb +@@ -642,7 +642,7 @@ TEXT + say "This could take a while..." + end + +- dest_path = File.join(options[:install_dir] ? gem_dir : spec.ext_dir, spec.require_paths.first) ++ dest_path = File.join(@install_dir ? gem_dir : spec.ext_dir, spec.require_paths.first) + ran_rake = false # only run rake once + + spec.extensions.each do |extension| +-- +1.8.1.2 From 2ec8c6e8c95a254c4b7bd7aef4f415efad6d2fe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 19 Feb 2013 10:13:20 +0100 Subject: [PATCH 068/530] Introduce %gem_install macro. --- ruby.spec | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ruby.spec b/ruby.spec index 706493b..2a698b4 100644 --- a/ruby.spec +++ b/ruby.spec @@ -443,6 +443,19 @@ cat >> %{buildroot}%{_sysconfdir}/rpm/macros.rubygems << \EOF %%gem_cache %%{gem_dir}/cache/%%{gem_name}-%%{version}.gem %%gem_spec %%{gem_dir}/specifications/%%{gem_name}-%%{version}.gemspec %%gem_docdir %%{gem_dir}/doc/%%{gem_name}-%%{version} + +# Install gem into appropriate directory. +# -n Allows to override gem for installation. +%%gem_install(n:) \ +CONFIGURE_ARGS="--with-cflags='%%{optflags}' $CONFIGURE_ARGS" \\\ +gem install \\\ + -V \\\ + --local \\\ + --install-dir .%{gem_dir} \\\ + --bindir .%{_bindir} \\\ + --force \\\ + --document=ri,rdoc \\\ + %%{-n*}%%{!?-n:%{gem_name}-%{version}.gem} EOF # Install custom operating_system.rb. From bb479d9770cd83c318da6dbe1c91c42d7735f0a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 19 Feb 2013 13:46:31 +0100 Subject: [PATCH 069/530] Create the .%{gem_dir} and allow to override gem installation dir. --- ruby.spec | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index 2a698b4..1468412 100644 --- a/ruby.spec +++ b/ruby.spec @@ -445,17 +445,20 @@ cat >> %{buildroot}%{_sysconfdir}/rpm/macros.rubygems << \EOF %%gem_docdir %%{gem_dir}/doc/%%{gem_name}-%%{version} # Install gem into appropriate directory. -# -n Allows to override gem for installation. -%%gem_install(n:) \ +# -n Overrides gem file name for installation. +# -d Set installation directory. +%%gem_install(d:n:) \ +mkdir -p '%%{-d*}%%{!?-d:.%{gem_dir}}' \ +\ CONFIGURE_ARGS="--with-cflags='%%{optflags}' $CONFIGURE_ARGS" \\\ gem install \\\ -V \\\ --local \\\ - --install-dir .%{gem_dir} \\\ + --install-dir '%%{-d*}%%{!?-d:.%{gem_dir}}' \\\ --bindir .%{_bindir} \\\ --force \\\ --document=ri,rdoc \\\ - %%{-n*}%%{!?-n:%{gem_name}-%{version}.gem} + '%%{-n*}%%{!?-n:%{gem_name}-%{version}.gem}' EOF # Install custom operating_system.rb. From 03c34a7e1f37ea8670bf9c6034ea3961de15e1a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 21 Feb 2013 09:58:27 +0100 Subject: [PATCH 070/530] Macros should not be expanded during Ruby build. --- ruby.spec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index 1468412..fca2c65 100644 --- a/ruby.spec +++ b/ruby.spec @@ -448,17 +448,17 @@ cat >> %{buildroot}%{_sysconfdir}/rpm/macros.rubygems << \EOF # -n Overrides gem file name for installation. # -d Set installation directory. %%gem_install(d:n:) \ -mkdir -p '%%{-d*}%%{!?-d:.%{gem_dir}}' \ +mkdir -p %%{-d*}%%{!?-d:.%%{gem_dir}} \ \ CONFIGURE_ARGS="--with-cflags='%%{optflags}' $CONFIGURE_ARGS" \\\ gem install \\\ -V \\\ --local \\\ - --install-dir '%%{-d*}%%{!?-d:.%{gem_dir}}' \\\ - --bindir .%{_bindir} \\\ + --install-dir %%{-d*}%%{!?-d:.%%{gem_dir}} \\\ + --bindir .%%{_bindir} \\\ --force \\\ --document=ri,rdoc \\\ - '%%{-n*}%%{!?-n:%{gem_name}-%{version}.gem}' + %%{-n*}%%{!?-n:%%{gem_name}-%%{version}.gem} EOF # Install custom operating_system.rb. From cdd0186c3116d5fc6a6316503aae9c9ec9827730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 21 Feb 2013 14:36:05 +0100 Subject: [PATCH 071/530] Upgrade to Ruby 2.0.0 (r39357). --- ruby-1.9.3-always-use-i386.patch | 2 +- ruby-1.9.3-arch-specific-dir.patch | 2 +- ruby-1.9.3-custom-rubygems-location.patch | 12 ++++++------ ...uplicated-paths-when-empty-version-string-i.patch | 2 +- ruby.spec | 10 +++++++--- ...dify-global-Specification.dirs-during-insta.patch | 2 +- rubygems-2.0.0-binary-extensions.patch | 8 ++++---- 7 files changed, 21 insertions(+), 17 deletions(-) diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch index bcb3a08..dec6994 100644 --- a/ruby-1.9.3-always-use-i386.patch +++ b/ruby-1.9.3-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 418b0cb..d26fe5b 100644 --- a/configure.in +++ b/configure.in -@@ -3320,6 +3320,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3362,6 +3362,8 @@ AC_SUBST(vendorarchdir)dnl configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index 7a79c18..e32814b 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index d6af000..1c094a3 100644 --- a/configure.in +++ b/configure.in -@@ -3188,6 +3188,10 @@ AC_SUBST(rubylibprefix) +@@ -3217,6 +3217,10 @@ AC_SUBST(rubylibprefix) rubylibdir='${rubylibprefix}/${ruby_version}' rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index c0b507a..4a3e7cb 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -14,9 +14,9 @@ diff --git a/configure.in b/configure.in index 1627d12..e064b2b 100644 --- a/configure.in +++ b/configure.in -@@ -3256,6 +3256,13 @@ AC_ARG_WITH(vendorarchdir, +@@ -3292,6 +3292,13 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], - [vendorarchdir=${multiarch+'${rubyarchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) + [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) +AC_ARG_WITH(rubygemsdir, + AS_HELP_STRING([--with-rubygemsdir=DIR], [custom rubygems directory]), @@ -25,10 +25,10 @@ index 1627d12..e064b2b 100644 + AC_DEFINE_UNQUOTED(RUBYGEMS_DIR,"$rubygemsdir" !!) +fi + - if test "${LOAD_RELATIVE+set}"; then - AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) - RUBY_EXEC_PREFIX='""' -@@ -3316,6 +3323,7 @@ AC_SUBST(sitearchdir)dnl + unexpand_shvar rubylibprefix exec_prefix libdir RUBY_BASE_NAME + unexpand_shvar rubyarchprefix exec_prefix libdir arch RUBY_BASE_NAME archlibdir rubylibprefix + unexpand_shvar rubysitearchprefix exec_prefix libdir sitearch arch RUBY_BASE_NAME archlibdir sitearchlibdir rubylibprefix +@@ -3358,6 +3365,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 1727e4c..a6a8106 100644 --- a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -13,7 +13,7 @@ diff --git a/configure.in b/configure.in index 5850bbf..7604bb8 100644 --- a/configure.in +++ b/configure.in -@@ -3265,6 +3265,9 @@ shvar_to_cpp RIDIR "${ridir}" +@@ -3306,6 +3306,9 @@ unexpand_shvar exec_prefix prefix if test ${RUBY_LIB_VERSION_STYLE+set}; then AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION_STYLE, $RUBY_LIB_VERSION_STYLE !!) else diff --git a/ruby.spec b/ruby.spec index fca2c65..e4ca8f6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 39237 +%global revision 39357 %global ruby_archive %{name}-%{ruby_version} @@ -42,7 +42,7 @@ %global ruby_vendorlibdir %{_datadir}/ruby/%{ruby_vendordir} %global ruby_vendorarchdir %{_libdir}/ruby/%{ruby_vendordir} -%global rubygems_version 2.0.0.rc.2 +%global rubygems_version 2.0.0 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. @@ -59,7 +59,7 @@ # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version_patch_level} -%global rdoc_version 4.0.0.rc.2.1 +%global rdoc_version 4.0.0 %global bigdecimal_version 1.1.0 %global io_console_version 0.4.1 %global json_version 1.7.7 @@ -557,6 +557,10 @@ DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" DISABLE_TESTS="-x test_io.rb $DISABLE_TESTS" %endif +# The TestRbConfig errors, which does not respect configuration options. +# http://bugs.ruby-lang.org/issues/7902 +DISABLE_TESTS="-x test_rbconfig.rb $DISABLE_TESTS" + make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig diff --git a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch index c7c4ef7..a6d2334 100644 --- a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch +++ b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch @@ -131,7 +131,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 780a88b..6543130 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -535,13 +535,13 @@ class Gem::Installer +@@ -536,13 +536,13 @@ class Gem::Installer :bin_dir => nil, :env_shebang => false, :force => false, diff --git a/rubygems-2.0.0-binary-extensions.patch b/rubygems-2.0.0-binary-extensions.patch index 359b578..d826472 100644 --- a/rubygems-2.0.0-binary-extensions.patch +++ b/rubygems-2.0.0-binary-extensions.patch @@ -85,7 +85,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 780a88b..854c177 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -642,7 +642,7 @@ TEXT +@@ -645,7 +645,7 @@ TEXT say "This could take a while..." end @@ -178,7 +178,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 854c177..f1f2ad7 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -642,7 +642,7 @@ TEXT +@@ -645,7 +645,7 @@ TEXT say "This could take a while..." end @@ -304,7 +304,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index f1f2ad7..e1577fc 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -642,7 +642,7 @@ TEXT +@@ -645,7 +645,7 @@ TEXT say "This could take a while..." end @@ -360,7 +360,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index e1577fc..1492c68 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -642,7 +642,7 @@ TEXT +@@ -645,7 +645,7 @@ TEXT say "This could take a while..." end From 56d12042aa2ea78e84a114d1efa58f7345536379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 21 Feb 2013 14:37:50 +0100 Subject: [PATCH 072/530] Ensure that rubygem-bigdecimal has higher release then the one from Ruby 1.9.3. --- ruby.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index e4ca8f6..fc62915 100644 --- a/ruby.spec +++ b/ruby.spec @@ -27,6 +27,7 @@ %global release 1 +%{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global ruby_libdir %{_datadir}/%{name} %global ruby_libarchdir %{_libdir}/%{name} @@ -77,7 +78,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version_patch_level} -Release: %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist} +Release: %{release_string} Group: Development/Languages # Public Domain for example for: include/ruby/st.h, strftime.c, ... License: (Ruby or BSD) and Public Domain @@ -262,6 +263,11 @@ This package contains documentation for %{name}. %package -n rubygem-bigdecimal Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic Version: %{bigdecimal_version} +# This could colide with previous releases of bigdecimal. Prefix +# the bigdecimal release number with Ruby version to avoid collisions (this +# breaks prerelease versioning, but I see no way around). +# https://bugs.ruby-lang.org/issues/7761 +Release: %{major_version}%{minor_version}%{teeny_version}.%{release_string} Group: Development/Libraries License: GPL+ or Artistic Requires: ruby(release) From 111d4ef777cc4646d10ae7d3773c81ba32220941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 21 Feb 2013 15:52:32 +0100 Subject: [PATCH 073/530] Add reference to upstream ticket possibly removing one patch. --- ruby.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby.spec b/ruby.spec index fc62915..415eee8 100644 --- a/ruby.spec +++ b/ruby.spec @@ -103,6 +103,8 @@ Patch4: ruby-1.9.3-fix-s390x-build.patch Patch8: ruby-1.9.3-custom-rubygems-location.patch # Add support for installing binary extensions according to FHS. # https://github.com/rubygems/rubygems/issues/210 +# Note that 8th patch might be resolved by +# https://bugs.ruby-lang.org/issues/7897 Patch9: rubygems-2.0.0-binary-extensions.patch # Make mkmf verbose by default Patch12: ruby-1.9.3-mkmf-verbose.patch From deee8f95aa71ec388378be73104d129240f11fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Feb 2013 09:09:33 +0100 Subject: [PATCH 074/530] Revert "Add architecture dependency on ruby-libs to ruby-irb." This reverts commit d3938ffb0a8cf3e4917fd8a2ad8e491791ff23d0, since it produces build error: BuildError: mismatch when analyzing ruby-irb-2.0.0.0-0.1.r39357.fc19.noarch.rpm, rpmdiff output was: removed REQUIRES ruby-libs(x86-64) = 2.0.0.0 added REQUIRES ruby-libs(x86-32) = 2.0.0.0 --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 415eee8..0bc18d7 100644 --- a/ruby.spec +++ b/ruby.spec @@ -220,7 +220,7 @@ specified in standard Ruby syntax. Summary: The Interactive Ruby Version: %{irb_version} Group: Development/Libraries -Requires: %{name}-libs%{?_isa} = %{ruby_version_patch_level} +Requires: %{name}-libs = %{ruby_version_patch_level} Provides: irb = %{version}-%{release} Provides: ruby(irb) = %{version}-%{release} BuildArch: noarch From 58664af968a5e7482f9fb6aa04e5a6557590c106 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Feb 2013 11:52:15 +0100 Subject: [PATCH 075/530] Adjust the patch to pass test_archdirs(TestRbConfig). This is hopefuly better aligned with upstream intentions. --- ruby-1.9.3-arch-specific-dir.patch | 4 ++-- ruby.spec | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch index e32814b..fcdc2fc 100644 --- a/ruby-1.9.3-arch-specific-dir.patch +++ b/ruby-1.9.3-arch-specific-dir.patch @@ -15,8 +15,8 @@ index d6af000..1c094a3 100644 rubylibdir='${rubylibprefix}/${ruby_version}' rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} -+AC_ARG_WITH(archdir, -+ AS_HELP_STRING([--with-archdir=DIR], [architecture specific ruby libraries [[LIBDIR/RUBY_BASE_NAME/ARCH]]]), ++AC_ARG_WITH(rubyarchdir, ++ AS_HELP_STRING([--with-rubyarchdir=DIR], [architecture specific ruby libraries [[LIBDIR/RUBY_BASE_NAME/ARCH]]]), + [rubyarchdir=$withval]) + rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} diff --git a/ruby.spec b/ruby.spec index 0bc18d7..d369ac3 100644 --- a/ruby.spec +++ b/ruby.spec @@ -392,7 +392,7 @@ autoconf %configure \ --with-rubylibprefix='%{ruby_libdir}' \ - --with-archdir='%{ruby_libarchdir}' \ + --with-rubyarchdir='%{ruby_libarchdir}' \ --with-sitedir='%{ruby_sitelibdir}' \ --with-sitearchdir='%{ruby_sitearchdir}' \ --with-vendordir='%{ruby_vendorlibdir}' \ From 72e167a6f8203ec407fa9115e60a049e5991681f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Feb 2013 12:08:37 +0100 Subject: [PATCH 076/530] One PPC error was fixed, other was introduced. --- ruby.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index d369ac3..ce2cd8b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -560,9 +560,9 @@ DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" %endif %ifarch ppc ppc64 -# test_ioctl_linux(TestIO) fails with #. -# https://bugs.ruby-lang.org/issues/7718 -DISABLE_TESTS="-x test_io.rb $DISABLE_TESTS" +# test_spawn_too_long_path(TestProcess) fails with [Errno::ENOENT, Errno::E2BIG, nil] expected but nothing was raised. +# https://bugs.ruby-lang.org/issues/7904 +DISABLE_TESTS="-x test_process.rb $DISABLE_TESTS" %endif # The TestRbConfig errors, which does not respect configuration options. From 65fdd909e82e0d4103bfe60b0e569000e904e109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Feb 2013 12:09:14 +0100 Subject: [PATCH 077/530] Change to backport error number. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index ce2cd8b..e111f17 100644 --- a/ruby.spec +++ b/ruby.spec @@ -566,7 +566,7 @@ DISABLE_TESTS="-x test_process.rb $DISABLE_TESTS" %endif # The TestRbConfig errors, which does not respect configuration options. -# http://bugs.ruby-lang.org/issues/7902 +# http://bugs.ruby-lang.org/issues/7912 DISABLE_TESTS="-x test_rbconfig.rb $DISABLE_TESTS" make check TESTS="-v $DISABLE_TESTS" From 9bef4a9bb17de74ab6d6dbc91537dd773905c7f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Feb 2013 12:24:10 +0100 Subject: [PATCH 078/530] Upgrade to Ruby 2.0.0 (r39387). --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index e111f17..bc342e7 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 39357 +%global revision 39387 %global ruby_archive %{name}-%{ruby_version} From 565e8feaf28036556a21e59eb446af94b0a48023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Feb 2013 12:25:06 +0100 Subject: [PATCH 079/530] Fix rubygem-bigdecimal version. Upstream patch applied, until it is backported for 2.0.0. --- ruby.spec | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/ruby.spec b/ruby.spec index bc342e7..aba1f66 100644 --- a/ruby.spec +++ b/ruby.spec @@ -61,7 +61,7 @@ # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version_patch_level} %global rdoc_version 4.0.0 -%global bigdecimal_version 1.1.0 +%global bigdecimal_version 1.2.0 %global io_console_version 0.4.1 %global json_version 1.7.7 %global minitest_version 4.3.2 @@ -93,6 +93,9 @@ Source3: ruby-exercise.stp Patch0: ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch # http://bugs.ruby-lang.org/issues/7808 Patch1: ruby-1.9.3-arch-specific-dir.patch +# Fixes rubygem-bigdecimla version. +# https://bugs.ruby-lang.org/issues/7761 +Patch2: ruby-2.0.0-ext-bigdecimal-bigdecimal.gemspec-bump-to-1.2.0.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. Patch3: ruby-1.9.3-always-use-i386.patch @@ -265,11 +268,6 @@ This package contains documentation for %{name}. %package -n rubygem-bigdecimal Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic Version: %{bigdecimal_version} -# This could colide with previous releases of bigdecimal. Prefix -# the bigdecimal release number with Ruby version to avoid collisions (this -# breaks prerelease versioning, but I see no way around). -# https://bugs.ruby-lang.org/issues/7761 -Release: %{major_version}%{minor_version}%{teeny_version}.%{release_string} Group: Development/Libraries License: GPL+ or Artistic Requires: ruby(release) @@ -376,6 +374,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch0 -p1 %patch1 -p1 +%patch2 -p1 %patch3 -p1 %patch4 -p1 %patch8 -p1 From 19c0535a63c8fb11b2dd5fc7719898ba7dc320b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Feb 2013 13:43:34 +0100 Subject: [PATCH 080/530] Fix random WEBRick test failures. --- ruby-1.9.3.p195-fix-webrick-tests.patch | 13 +++++++++++++ ruby.spec | 4 ++++ 2 files changed, 17 insertions(+) create mode 100644 ruby-1.9.3.p195-fix-webrick-tests.patch diff --git a/ruby-1.9.3.p195-fix-webrick-tests.patch b/ruby-1.9.3.p195-fix-webrick-tests.patch new file mode 100644 index 0000000..b340bff --- /dev/null +++ b/ruby-1.9.3.p195-fix-webrick-tests.patch @@ -0,0 +1,13 @@ +diff --git a/test/runner.rb b/test/runner.rb +index 49844c7..8e59a85 100644 +--- a/test/runner.rb ++++ b/test/runner.rb +@@ -2,6 +2,8 @@ require 'rbconfig' + + require 'test/unit' + ++require_relative 'ruby/envutil' ++ + src_testdir = File.dirname(File.realpath(__FILE__)) + $LOAD_PATH << src_testdir + module Gem diff --git a/ruby.spec b/ruby.spec index aba1f66..f5d1308 100644 --- a/ruby.spec +++ b/ruby.spec @@ -101,6 +101,9 @@ Patch2: ruby-2.0.0-ext-bigdecimal-bigdecimal.gemspec-bump-to-1.2.0.patch Patch3: ruby-1.9.3-always-use-i386.patch # http://redmine.ruby-lang.org/issues/5465 Patch4: ruby-1.9.3-fix-s390x-build.patch +# Fixes random WEBRick test failures. +# https://bugs.ruby-lang.org/issues/6573. +Patch5: ruby-1.9.3.p195-fix-webrick-tests.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://redmine.ruby-lang.org/issues/5617 Patch8: ruby-1.9.3-custom-rubygems-location.patch @@ -377,6 +380,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 %patch8 -p1 %patch9 -p1 %patch12 -p1 From a97a9bad50e5c3163a066171530834c671126931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Feb 2013 14:36:35 +0100 Subject: [PATCH 081/530] Update changelog entry. --- ruby.spec | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/ruby.spec b/ruby.spec index f5d1308..e1b8db0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -850,6 +850,23 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Feb 22 2013 Vít Ondruch - 2.0.0.0-0.1.r39387 +- Upgrade to Ruby 2.0.0 (r39387). +- Introduce %%gem_install macro. +- Build against libdb instead of libdb4 (rhbz#894022). +- Move native extensions from exts to ruby directory. +- Enable most of the PPC test suite. +- Change ruby(abi) -> ruby(release). +- Rename ruby executable to ruby-mri, to be prepared for RubyPick. +- Add ruby(runtime_executable) virtual provide, which is later used + by RubyPick. +- RDoc now depends on JSON. +- Try to make -doc subpackage noarch again, since the new RDoc should resolve + the arch dependent issues (https://github.com/rdoc/rdoc/issues/71). +- Enable SystemTap support. +- Add TapSet for Ruby. +- Split Psych into rubygem-psych subpackage. + * Mon Feb 11 2013 Mamoru TASAKA - 1.9.3.385-28 - Update to 1.9.3 p385 From 7e85d9bf7b07520ae8274f83a7d0133520495a43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Feb 2013 14:50:53 +0100 Subject: [PATCH 082/530] Hopefuly replaced by ruby-1.9.3.p195-fix-webrick-tests.patch. --- ...ignore-internal-server-error-on-test.patch | 49 ------------------- 1 file changed, 49 deletions(-) delete mode 100644 ruby-1.9.3-p327-ignore-internal-server-error-on-test.patch diff --git a/ruby-1.9.3-p327-ignore-internal-server-error-on-test.patch b/ruby-1.9.3-p327-ignore-internal-server-error-on-test.patch deleted file mode 100644 index ab37119..0000000 --- a/ruby-1.9.3-p327-ignore-internal-server-error-on-test.patch +++ /dev/null @@ -1,49 +0,0 @@ ---- ruby-1.9.3-p327/test/webrick/test_cgi.rb.koji 2012-08-28 00:40:30.000000000 +0900 -+++ ruby-1.9.3-p327/test/webrick/test_cgi.rb 2012-11-10 16:33:36.000000000 +0900 -@@ -28,6 +28,15 @@ - end - - def test_cgi -+''' -+On koji: -+test_cgi(TestWEBrickCGI) [/builddir/build/BUILD/ruby-1.9.3-p327/test/webrick/test_cgi.rb:34]: -+.... -+.... -+<"/webrick.cgi"> expected but was -+<"\n\n Internal Server Error\n \n

Internal Server Error

\n Broken pipe\n
\n
\n WEBrick/1.3.1 (Ruby/1.9.3/2012-11-10) OpenSSL/1.0.1c at\n 127.0.0.1:58617\n
\n \n\n">. -+''' -+ return # Skip on koji - start_cgi_server{|server, addr, port, log| - http = Net::HTTP.new(addr, port) - req = Net::HTTP::Get.new("/webrick.cgi") -@@ -84,6 +93,13 @@ - end - - def test_bad_request -+''' -+On koji: -+test_bad_request(TestWEBrickCGI) [/builddir/build/BUILD/ruby-1.9.3-p327/test/webrick/test_cgi.rb:96]: -+.... -+Expected /\AHTTP\/\d.\d 400 Bad Request/ to match "HTTP/1.1 500 Internal Server Error \r\nContent-Type: text/html; charset=ISO-8859-1\r\nServer: WEBrick/1.3.1 (Ruby/1.9.3/2012-11-10) OpenSSL/1.0.1c\r\nDate: Sat, 10 Nov 2012 07:17:08 GMT\r\nContent-Length: 307\r\nConnection: close\r\n\r\n\n\n Internal Server Error\n \n

Internal Server Error

\n Broken pipe\n
\n
\n WEBrick/1.3.1 (Ruby/1.9.3/2012-11-10) OpenSSL/1.0.1c at\n localhost:41188\n
\n \n\n". -+''' -+ return # Skip on koji - start_cgi_server{|server, addr, port, log| - sock = TCPSocket.new(addr, port) - begin ---- ruby-1.9.3-p327/test/webrick/test_filehandler.rb.koji 2012-08-28 00:40:30.000000000 +0900 -+++ ruby-1.9.3-p327/test/webrick/test_filehandler.rb 2012-11-10 16:33:02.000000000 +0900 -@@ -244,6 +244,14 @@ - end - - def test_script_disclosure -+''' -+On koji: -+test_script_disclosure(WEBrick::TestFileHandler) [/builddir/build/BUILD/ruby-1.9.3-p327/test/webrick/test_filehandler.rb:265]: -+.... -+<"200"> expected but was -+<"500">. -+''' -+ return # Skip on koji - config = { - :CGIInterpreter => TestWEBrick::RubyBin, - :DocumentRoot => File.dirname(__FILE__), From eedc10e71bc60c89fa4ae14d4e10a7e4e5bece1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Feb 2013 15:28:37 +0100 Subject: [PATCH 083/530] Add missing patch. --- .gitignore | 1 + ...mal-bigdecimal.gemspec-bump-to-1.2.0.patch | 31 +++++++++++++++++++ sources | 2 +- 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 ruby-2.0.0-ext-bigdecimal-bigdecimal.gemspec-bump-to-1.2.0.patch diff --git a/.gitignore b/.gitignore index f5ae591..01e3dda 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ ruby-rev415a3ef9ab82c65a7abc-ext_tk.tar.gz /ruby-1.9.3-p362.tar.gz /ruby-1.9.3-p374.tar.gz /ruby-1.9.3-p385.tar.gz +/ruby-2.0.0-r39387.tar.gz diff --git a/ruby-2.0.0-ext-bigdecimal-bigdecimal.gemspec-bump-to-1.2.0.patch b/ruby-2.0.0-ext-bigdecimal-bigdecimal.gemspec-bump-to-1.2.0.patch new file mode 100644 index 0000000..15a8edf --- /dev/null +++ b/ruby-2.0.0-ext-bigdecimal-bigdecimal.gemspec-bump-to-1.2.0.patch @@ -0,0 +1,31 @@ +From c42cf83f26309b0cba46917f79d20d680e667054 Mon Sep 17 00:00:00 2001 +From: mrkn +Date: Tue, 19 Feb 2013 11:50:48 +0000 +Subject: [PATCH] * ext/bigdecimal/bigdecimal.gemspec: bump to 1.2.0. + [ruby-core:51777] [Bug #7761] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39321 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + ext/bigdecimal/bigdecimal.gemspec | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/ext/bigdecimal/bigdecimal.gemspec b/ext/bigdecimal/bigdecimal.gemspec +index 362808c..4240f82 100644 +--- a/ext/bigdecimal/bigdecimal.gemspec ++++ b/ext/bigdecimal/bigdecimal.gemspec +@@ -1,10 +1,10 @@ + # -*- ruby -*- +-_VERSION = "1.1.0" ++_VERSION = "1.2.0" + + Gem::Specification.new do |s| + s.name = "bigdecimal" + s.version = _VERSION +- s.date = "2011-07-30" ++ s.date = "2012-02-19" + s.summary = "Arbitrary-precision decimal floating-point number library." + s.homepage = "http://www.ruby-lang.org" + s.email = "mrkn@mrkn.jp" +-- +1.8.1.2 + diff --git a/sources b/sources index 2c2210c..e9ec93d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -3e0d7f8512400c1a6732327728a56f1d ruby-1.9.3-p385.tar.gz +6e9c4c75894dfebd5bf3b75989237662 ruby-2.0.0-r39387.tar.gz From 12131c17275d4efc43fc83adf6c8dfd797f540d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Feb 2013 21:54:38 +0100 Subject: [PATCH 084/530] Fix issues with wrong value of Rubygem's shebang introduced in r39267. --- ruby-2.0.0-revert-unexpand-exec-prefix.patch | 43 ++++++++++++++++++++ ruby.spec | 9 +++- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 ruby-2.0.0-revert-unexpand-exec-prefix.patch diff --git a/ruby-2.0.0-revert-unexpand-exec-prefix.patch b/ruby-2.0.0-revert-unexpand-exec-prefix.patch new file mode 100644 index 0000000..2a38296 --- /dev/null +++ b/ruby-2.0.0-revert-unexpand-exec-prefix.patch @@ -0,0 +1,43 @@ +* Unmerged path ChangeLog +diff --git a/configure.in b/configure.in +index be7d4fe..2d511e5 100644 +--- a/configure.in ++++ b/configure.in +@@ -2597,14 +2597,9 @@ AS_CASE(["$target_os"], + + AC_SUBST(setup) + +-test x"$prefix" = xNONE && prefix=$ac_default_prefix +-test x"${exec_prefix}" = xNONE && exec_prefix="$prefix" +-pat=`echo "${exec_prefix}" | tr -c '\012' .`'\(.*\)' +-for var in bindir libdir; do +- eval val='"$'$var'"' +- AS_CASE(["$val"], ["${exec_prefix}"*], [val='${exec_prefix}'"`expr \"$val\" : \"$pat\"`"]) +- eval $var='"$val"' +-done ++if test "$prefix" = NONE; then ++ prefix=$ac_default_prefix ++fi + + BTESTRUBY='$(MINIRUBY)' + if test x"$cross_compiling" = xyes; then +@@ -3244,9 +3239,6 @@ AS_CASE(["$target_os"], + + shvar_to_cpp() { + local var="$1" val="$2" +- local exec_prefix_pat="`echo \"${exec_prefix}\" | sed 's/\\./\\\\./g'`" +- local arch_pat="`echo \"${arch}\" | sed 's/\\./\\\\./g'`" +- local sitearch_pat="`echo \"${sitearch}\" | sed 's/\\./\\\\./g'`" + val="`echo '"'"${val}"'"' | + sed \ + -e 's/\${\([[A-Z][A-Z_]]*\)}/"\1"/g' \ +@@ -3269,9 +3261,6 @@ shvar_to_cpp() { + -e 's/\${rubyarchprefix}/"RUBY_ARCH_PREFIX_FOR(arch)"/g' \ + -e 's/\${rubysitearchprefix}/"RUBY_SITEARCH_PREFIX_FOR(arch)"/g' \ + -e 's/\${exec_prefix}/"RUBY_EXEC_PREFIX"/g' \ +- -e "s|${exec_prefix_pat}/|"'"RUBY_EXEC_PREFIX"/|g' \ +- -e "s|${arch_pat}|"'"arch"|g' \ +- -e "s|${sitearch_pat}|"'"sitearch"|g' \ + -e 's|^\"NONE/|RUBY_EXEC_PREFIX\"/|' \ + -e 's|^\"NONE\"|\"'"${prefix}"'\"|' \ + -e 's/^\"\"\(.\)/\1/;s/\(.\)\"\"$/\1/' diff --git a/ruby.spec b/ruby.spec index e1b8db0..b03f72d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 1 +%global release 2 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global ruby_libdir %{_datadir}/%{name} @@ -123,6 +123,9 @@ Patch13: rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.pat # This prevents issues, when ruby configuration specifies --with-ruby-version=''. # https://github.com/rubygems/rubygems/pull/455 Patch14: rubygems-2.0.0-Fixes-for-empty-ruby-version.patch +# Fixes issues with wrong value of Rubygem's shebang introduced in r39267. +# https://bugs.ruby-lang.org/issues/7915 +Patch15: ruby-2.0.0-revert-unexpand-exec-prefix.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -386,6 +389,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch12 -p1 %patch13 -p1 %patch14 -p1 +%patch15 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -850,6 +854,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Feb 22 2013 Vít Ondruch - 2.0.0.0-0.2.r39387 +- Fix issues with wrong value of Rubygem's shebang introduced in r39267. + * Fri Feb 22 2013 Vít Ondruch - 2.0.0.0-0.1.r39387 - Upgrade to Ruby 2.0.0 (r39387). - Introduce %%gem_install macro. From 405ae9bea21fa8337675caf386bdd6129852c0ed Mon Sep 17 00:00:00 2001 From: TASAKA Mamoru Date: Mon, 25 Feb 2013 17:06:45 +0900 Subject: [PATCH 085/530] Move test-unit.gemspec to -libs subpackage for now because rubygems 2.0.0 does not create this --- ruby.spec | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index b03f72d..1079448 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 2 +%global release 3 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global ruby_libdir %{_datadir}/%{name} @@ -766,6 +766,15 @@ make check TESTS="-v $DISABLE_TESTS" %{tapset_root} +# TODO rubygems 2.0.0 does not create test-unit gemspec +# TODO for now put this in ruby-libs rpm +# TODO check if the following can be removed after +# TODO test-unit rebuild +%dir %{gem_dir} +%dir %{gem_dir}/specifications +%dir %{gem_dir}/specifications/default +%{gem_dir}/specifications/default/test-unit-*.gemspec + %files -n rubygems %{_bindir}/gem %{rubygems_dir} @@ -785,6 +794,9 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{gem_dir}/specifications/rake-%{rake_version}.gemspec %exclude %{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec %exclude %{gem_dir}/specifications/psych-%{psych_version}.gemspec +# TODO rubygems 2.0.0 does not create test-unit gemspec +# TODO where to put test-unit-*.gemspec?? +%exclude %{gem_dir}/specifications/default/test-unit-*.gemspec %files -n rubygems-devel %config(noreplace) %{_sysconfdir}/rpm/macros.rubygems @@ -854,6 +866,10 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Feb 25 2013 Mamoru TASAKA - 2.0.0.0-0.3.r39387 +- Move test-unit.gemspec to -libs subpackage for now because rubygems + 2.0.0 does not create this + * Fri Feb 22 2013 Vít Ondruch - 2.0.0.0-0.2.r39387 - Fix issues with wrong value of Rubygem's shebang introduced in r39267. From eba90976c0006f899f1b7b39138f509a2d4df016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 25 Feb 2013 12:46:22 +0100 Subject: [PATCH 086/530] Update to Ruby 2.0.0-p0. --- .gitignore | 1 + ...mal-bigdecimal.gemspec-bump-to-1.2.0.patch | 31 ------------------- ruby.spec | 13 ++++---- sources | 2 +- 4 files changed, 8 insertions(+), 39 deletions(-) delete mode 100644 ruby-2.0.0-ext-bigdecimal-bigdecimal.gemspec-bump-to-1.2.0.patch diff --git a/.gitignore b/.gitignore index 01e3dda..9bdb3fc 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ ruby-rev415a3ef9ab82c65a7abc-ext_tk.tar.gz /ruby-1.9.3-p374.tar.gz /ruby-1.9.3-p385.tar.gz /ruby-2.0.0-r39387.tar.gz +/ruby-2.0.0-p0.tar.gz diff --git a/ruby-2.0.0-ext-bigdecimal-bigdecimal.gemspec-bump-to-1.2.0.patch b/ruby-2.0.0-ext-bigdecimal-bigdecimal.gemspec-bump-to-1.2.0.patch deleted file mode 100644 index 15a8edf..0000000 --- a/ruby-2.0.0-ext-bigdecimal-bigdecimal.gemspec-bump-to-1.2.0.patch +++ /dev/null @@ -1,31 +0,0 @@ -From c42cf83f26309b0cba46917f79d20d680e667054 Mon Sep 17 00:00:00 2001 -From: mrkn -Date: Tue, 19 Feb 2013 11:50:48 +0000 -Subject: [PATCH] * ext/bigdecimal/bigdecimal.gemspec: bump to 1.2.0. - [ruby-core:51777] [Bug #7761] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39321 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - ext/bigdecimal/bigdecimal.gemspec | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/ext/bigdecimal/bigdecimal.gemspec b/ext/bigdecimal/bigdecimal.gemspec -index 362808c..4240f82 100644 ---- a/ext/bigdecimal/bigdecimal.gemspec -+++ b/ext/bigdecimal/bigdecimal.gemspec -@@ -1,10 +1,10 @@ - # -*- ruby -*- --_VERSION = "1.1.0" -+_VERSION = "1.2.0" - - Gem::Specification.new do |s| - s.name = "bigdecimal" - s.version = _VERSION -- s.date = "2011-07-30" -+ s.date = "2012-02-19" - s.summary = "Arbitrary-precision decimal floating-point number library." - s.homepage = "http://www.ruby-lang.org" - s.email = "mrkn@mrkn.jp" --- -1.8.1.2 - diff --git a/ruby.spec b/ruby.spec index 1079448..7924456 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 39387 +#%%global revision 39387 %global ruby_archive %{name}-%{ruby_version} @@ -26,7 +26,7 @@ %endif -%global release 3 +%global release 1 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global ruby_libdir %{_datadir}/%{name} @@ -62,7 +62,7 @@ %global irb_version %{ruby_version_patch_level} %global rdoc_version 4.0.0 %global bigdecimal_version 1.2.0 -%global io_console_version 0.4.1 +%global io_console_version 0.4.2 %global json_version 1.7.7 %global minitest_version 4.3.2 %global psych_version 2.0.0 @@ -93,9 +93,6 @@ Source3: ruby-exercise.stp Patch0: ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch # http://bugs.ruby-lang.org/issues/7808 Patch1: ruby-1.9.3-arch-specific-dir.patch -# Fixes rubygem-bigdecimla version. -# https://bugs.ruby-lang.org/issues/7761 -Patch2: ruby-2.0.0-ext-bigdecimal-bigdecimal.gemspec-bump-to-1.2.0.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. Patch3: ruby-1.9.3-always-use-i386.patch @@ -380,7 +377,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch0 -p1 %patch1 -p1 -%patch2 -p1 %patch3 -p1 %patch4 -p1 %patch5 -p1 @@ -866,6 +862,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Feb 25 2013 Vít Ondruch - 2.0.0.0-1 +- Update to Ruby 2.0.0-p0. + * Mon Feb 25 2013 Mamoru TASAKA - 2.0.0.0-0.3.r39387 - Move test-unit.gemspec to -libs subpackage for now because rubygems 2.0.0 does not create this diff --git a/sources b/sources index e9ec93d..3115fba 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -6e9c4c75894dfebd5bf3b75989237662 ruby-2.0.0-r39387.tar.gz +50d307c4dc9297ae59952527be4e755d ruby-2.0.0-p0.tar.gz From 57ec2c6da223666635f1e4980e02ef9e33e0111c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 25 Feb 2013 12:49:05 +0100 Subject: [PATCH 087/530] Provide to %{ruby_extdir_mri} in preparation for better JRuby support. --- ruby.spec | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index 7924456..2a3ea95 100644 --- a/ruby.spec +++ b/ruby.spec @@ -54,7 +54,7 @@ # TODO: These folders should go into rubygem-filesystem but how to achieve it, # since noarch package cannot provide arch dependent subpackages? # http://rpm.org/ticket/78 -%global gem_extdir %{_exec_prefix}/lib{,64}/gems +%global gem_extdir_mri %{_exec_prefix}/lib{,64}/gems %global rake_version 0.9.6 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. @@ -449,7 +449,7 @@ cat >> %{buildroot}%{_sysconfdir}/rpm/macros.rubygems << \EOF # Common gem locations and files. %%gem_instdir %%{gem_dir}/gems/%%{gem_name}-%%{version} -%%gem_extdir %%{_libdir}/gems/%{name}/%%{gem_name}-%%{version} +%%gem_extdir_mri %%{_libdir}/gems/%{name}/%%{gem_name}-%%{version} %%gem_libdir %%{gem_instdir}/lib %%gem_cache %%{gem_dir}/cache/%%{gem_name}-%%{version}.gem %%gem_spec %%{gem_dir}/specifications/%%{gem_name}-%%{version}.gemspec @@ -480,9 +480,9 @@ cp %{SOURCE1} %{buildroot}%{rubygems_dir}/rubygems/defaults mv %{buildroot}%{ruby_libdir}/gems %{buildroot}%{gem_dir} # Create folders for gem binary extensions. -mkdir -p %{buildroot}%{gem_extdir}/%{name} +mkdir -p %{buildroot}%{gem_extdir_mri}/%{name} -# Move bundled rubygems to %%gem_dir and %%gem_extdir +# Move bundled rubygems to %%gem_dir and %%gem_extdir_mri # make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems mkdir -p %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/lib mv %{buildroot}%{ruby_libdir}/rake* %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/lib @@ -864,6 +864,8 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Mon Feb 25 2013 Vít Ondruch - 2.0.0.0-1 - Update to Ruby 2.0.0-p0. +- Change %{ruby_extdir} to %{ruby_extdir_mri} in preparation for better + JRuby support. * Mon Feb 25 2013 Mamoru TASAKA - 2.0.0.0-0.3.r39387 - Move test-unit.gemspec to -libs subpackage for now because rubygems From a9ecc1d6877a484225c25217aa4ed00ae9890cb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 26 Feb 2013 08:41:51 +0100 Subject: [PATCH 088/530] Prevent squash of %gem_install with following line. --- ruby.spec | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 2a3ea95..ceb1327 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 1 +%global release 2 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global ruby_libdir %{_datadir}/%{name} @@ -469,7 +469,8 @@ gem install \\\ --bindir .%%{_bindir} \\\ --force \\\ --document=ri,rdoc \\\ - %%{-n*}%%{!?-n:%%{gem_name}-%%{version}.gem} + %%{-n*}%%{!?-n:%%{gem_name}-%%{version}.gem} \ +%%{nil} EOF # Install custom operating_system.rb. @@ -862,6 +863,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Feb 25 2013 Vít Ondruch - 2.0.0.0-2 +- Prevent squash of %%gem_install with following line. + * Mon Feb 25 2013 Vít Ondruch - 2.0.0.0-1 - Update to Ruby 2.0.0-p0. - Change %{ruby_extdir} to %{ruby_extdir_mri} in preparation for better From b0d63dbf0fd3d05499b9f5ff7411d3c27e285290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 5 Mar 2013 08:35:05 +0100 Subject: [PATCH 089/530] Avoid "method redefined;" warnings due to modified operating_system.rb. Fix strange paths created during build of binary gems. --- operating_system.rb | 9 +++++++++ ruby.spec | 6 +++++- rubygems-2.0.0-binary-extensions.patch | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/operating_system.rb b/operating_system.rb index 7b3930e..4055ed5 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -38,6 +38,15 @@ module Gem end] end + ## + # Remove methods we are going to override. This avoids "method redefined;" + # warnings otherwise issued by Ruby. + + remove_method :default_dir if method_defined? :default_dir + remove_method :default_path if method_defined? :default_path + remove_method :default_bindir if method_defined? :default_bindir + remove_method :default_ext_dir_for if method_defined? :default_ext_dir_for + ## # RubyGems default overrides. diff --git a/ruby.spec b/ruby.spec index ceb1327..86be561 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 2 +%global release 3 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global ruby_libdir %{_datadir}/%{name} @@ -863,6 +863,10 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Mar 05 2013 Vít Ondruch - 2.0.0.0-3 +- Avoid "method redefined;" warnings due to modified operating_system.rb. +- Fix strange paths created during build of binary gems. + * Mon Feb 25 2013 Vít Ondruch - 2.0.0.0-2 - Prevent squash of %%gem_install with following line. diff --git a/rubygems-2.0.0-binary-extensions.patch b/rubygems-2.0.0-binary-extensions.patch index d826472..fa30892 100644 --- a/rubygems-2.0.0-binary-extensions.patch +++ b/rubygems-2.0.0-binary-extensions.patch @@ -337,7 +337,7 @@ index d7d953f..812c20c 100644 mf = mf.gsub(/\s*\S+\.time$/, "") + # Folder creation was dropped in r37016 for some reasons :/ -+ target_prefix = mf[/^target_prefix\s*=\s*(.*)/, 1] ++ target_prefix = mf[/^target_prefix\s*=[^\S\n]*(.*)$/, 1] + FileUtils.mkdir_p File.join(dest_path, target_prefix) rescue nil # in case of perms issues -- lame + File.open('Makefile', 'wb') {|f| f.print mf} From bc925acb7d3faf7b81fb0f5cb7591bb24d6275ca Mon Sep 17 00:00:00 2001 From: Mamoru TASAKA Date: Fri, 8 Mar 2013 16:38:23 +0900 Subject: [PATCH 090/530] Don't mark rpm config file as %config (fpc#259) --- ruby.spec | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 86be561..b2be51c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 3 +%global release 4 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global ruby_libdir %{_datadir}/%{name} @@ -600,7 +600,7 @@ make check TESTS="-v $DISABLE_TESTS" %doc README.EXT %lang(ja) %doc README.EXT.ja -%config(noreplace) %{_sysconfdir}/rpm/macros.ruby +%{_sysconfdir}/rpm/macros.ruby %{_includedir}/* %{_libdir}/libruby.so @@ -796,7 +796,7 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{gem_dir}/specifications/default/test-unit-*.gemspec %files -n rubygems-devel -%config(noreplace) %{_sysconfdir}/rpm/macros.rubygems +%{_sysconfdir}/rpm/macros.rubygems %files -n rubygem-rake %{_bindir}/rake @@ -863,6 +863,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Mar 08 2013 Mamoru TASAKA - 2.0.0.0-4 +- Don't mark rpm config file as %%config (fpc#259) + * Tue Mar 05 2013 Vít Ondruch - 2.0.0.0-3 - Avoid "method redefined;" warnings due to modified operating_system.rb. - Fix strange paths created during build of binary gems. From 1757c4302bbced6ad76e66db7641128d84e3019d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 21 Mar 2013 13:26:25 +0100 Subject: [PATCH 091/530] Make Ruby buildable without rubypick. --- ruby.spec | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index b2be51c..40c3bcb 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 4 +%global release 5 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global ruby_libdir %{_datadir}/%{name} @@ -75,6 +75,10 @@ %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') +%if 0%{?fedora} >= 19 +%global with_rubypick 1 +%endif + Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version_patch_level} @@ -419,7 +423,7 @@ rm -rf %{buildroot} make install DESTDIR=%{buildroot} # Rename the ruby executable. It is replaced by RubyPick. -mv %{buildroot}%{_bindir}/%{name}{,-mri} +%{?with_rubypick:mv %{buildroot}%{_bindir}/%{name}{,-mri}} # Version is empty if --with-ruby-version is specified. # http://bugs.ruby-lang.org/issues/7807 @@ -585,7 +589,7 @@ make check TESTS="-v $DISABLE_TESTS" %doc GPL %doc LEGAL %{_bindir}/erb -%{_bindir}/%{name}-mri +%{_bindir}/%{name}%{?with_rubypick:-mri} %{_bindir}/testrb %{_mandir}/man1/erb* %{_mandir}/man1/ruby* @@ -863,6 +867,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Thu Mar 21 2013 Vít Ondruch - 2.0.0.0-5 +- Make Ruby buildable without rubypick. + * Fri Mar 08 2013 Mamoru TASAKA - 2.0.0.0-4 - Don't mark rpm config file as %%config (fpc#259) From 8f31ccc91906fc4617fb74363f66605f5c69fda3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Mar 2013 10:09:09 +0100 Subject: [PATCH 092/530] Prevent random test failures. --- ruby-2.0.0-p57-test_thr_kill.patch | 49 ++++++++++++++++++++++++++++++ ruby.spec | 5 +++ 2 files changed, 54 insertions(+) create mode 100644 ruby-2.0.0-p57-test_thr_kill.patch diff --git a/ruby-2.0.0-p57-test_thr_kill.patch b/ruby-2.0.0-p57-test_thr_kill.patch new file mode 100644 index 0000000..c65ab23 --- /dev/null +++ b/ruby-2.0.0-p57-test_thr_kill.patch @@ -0,0 +1,49 @@ +Index: ChangeLog +=================================================================== +--- ChangeLog (revision 39727) ++++ ChangeLog (revision 39728) +@@ -1,3 +1,15 @@ ++Tue Mar 12 00:56:19 2013 KOSAKI Motohiro ++ ++ * test/thread/test_queue.rb (TestQueue#test_thr_kill): reduce ++ iterations from 2000 to 250. When running on uniprocessor ++ systems, every th.kill needs TIME_QUANTUM_USEC time (i.e. ++ 100msec on posix systems). Because, "r.read 1" is 3 steps ++ operations that 1) release GVL 2) read 3) acquire gvl and ++ (1) invoke context switch to main thread. and then, main ++ thread's th.kill resume (1), but not (2). Thus read interrupt ++ need TIME_QUANTUM_USEC. Then maximum iteration is 30sec/100msec ++ = 300. ++ + Sun Feb 24 15:16:00 2013 Eric Hodel + + * lib/net/http.rb: Removed duplicate Accept-Encoding in Net::HTTP#get. +Index: test/thread/test_queue.rb +=================================================================== +--- test/thread/test_queue.rb (revision 39727) ++++ test/thread/test_queue.rb (revision 39728) +@@ -85,7 +85,7 @@ + bug5343 = '[ruby-core:39634]' + Dir.mktmpdir {|d| + timeout = 30 +- total_count = 2000 ++ total_count = 250 + begin + assert_normal_exit(<<-"_eom", bug5343, {:timeout => timeout, :chdir=>d}) + require "thread" +@@ -98,7 +98,8 @@ + r.read 1 + } + queue.pop +- th.kill.join ++ th.kill ++ th.join + end + _eom + rescue Timeout::Error + +Property changes on: . +___________________________________________________________________ +Modified: svn:mergeinfo + Merged /trunk:r39688 + diff --git a/ruby.spec b/ruby.spec index 40c3bcb..7830d3b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -127,6 +127,9 @@ Patch14: rubygems-2.0.0-Fixes-for-empty-ruby-version.patch # Fixes issues with wrong value of Rubygem's shebang introduced in r39267. # https://bugs.ruby-lang.org/issues/7915 Patch15: ruby-2.0.0-revert-unexpand-exec-prefix.patch +# Fixes test_thr_kill(TestQueue) random test failure. +# https://bugs.ruby-lang.org/issues/7521 +Patch16: ruby-2.0.0-p57-test_thr_kill.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -390,6 +393,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch13 -p1 %patch14 -p1 %patch15 -p1 +%patch16 -p0 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -869,6 +873,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Thu Mar 21 2013 Vít Ondruch - 2.0.0.0-5 - Make Ruby buildable without rubypick. +- Prevent random test failures. * Fri Mar 08 2013 Mamoru TASAKA - 2.0.0.0-4 - Don't mark rpm config file as %%config (fpc#259) From 61fb1adee2f4fdde3cc7fb5d2358b43706320f70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 22 Mar 2013 23:02:04 +0100 Subject: [PATCH 093/530] Fix RbConfig::CONFIG['exec_prefix'] returns empty string (rhbz#924851). --- ruby-1.9.3-arch-specific-dir.patch | 27 --------------------------- ruby.spec | 15 +++++++++------ 2 files changed, 9 insertions(+), 33 deletions(-) delete mode 100644 ruby-1.9.3-arch-specific-dir.patch diff --git a/ruby-1.9.3-arch-specific-dir.patch b/ruby-1.9.3-arch-specific-dir.patch deleted file mode 100644 index fcdc2fc..0000000 --- a/ruby-1.9.3-arch-specific-dir.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 2e15c6bdac1c145cce0c21677477ced8df26718b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 8 Feb 2013 18:20:50 +0100 -Subject: [PATCH] Add configuration arch specific dir flag. - ---- - configure.in | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/configure.in b/configure.in -index d6af000..1c094a3 100644 ---- a/configure.in -+++ b/configure.in -@@ -3217,6 +3217,10 @@ AC_SUBST(rubylibprefix) - rubylibdir='${rubylibprefix}/${ruby_version}' - rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} - -+AC_ARG_WITH(rubyarchdir, -+ AS_HELP_STRING([--with-rubyarchdir=DIR], [architecture specific ruby libraries [[LIBDIR/RUBY_BASE_NAME/ARCH]]]), -+ [rubyarchdir=$withval]) -+ - rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} - AC_ARG_WITH(rubyarchprefix, - AS_HELP_STRING([--with-rubyarchprefix=DIR], --- -1.8.1.2 - diff --git a/ruby.spec b/ruby.spec index 7830d3b..7adaecd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 5 +%global release 6 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global ruby_libdir %{_datadir}/%{name} @@ -95,8 +95,6 @@ Source3: ruby-exercise.stp # http://bugs.ruby-lang.org/issues/7807 Patch0: ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch -# http://bugs.ruby-lang.org/issues/7808 -Patch1: ruby-1.9.3-arch-specific-dir.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. Patch3: ruby-1.9.3-always-use-i386.patch @@ -383,7 +381,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %setup -q -n %{ruby_archive} %patch0 -p1 -%patch1 -p1 %patch3 -p1 %patch4 -p1 %patch5 -p1 @@ -403,17 +400,21 @@ autoconf %configure \ --with-rubylibprefix='%{ruby_libdir}' \ - --with-rubyarchdir='%{ruby_libarchdir}' \ + --with-rubyarchprefix='%{ruby_libarchdir}' \ --with-sitedir='%{ruby_sitelibdir}' \ --with-sitearchdir='%{ruby_sitearchdir}' \ --with-vendordir='%{ruby_vendorlibdir}' \ --with-vendorarchdir='%{ruby_vendorarchdir}' \ --with-rubyhdrdir='%{_includedir}' \ + --with-rubyarchhdrdir='$(archincludedir)' \ + --with-sitearchhdrdir='$(sitehdrdir)/$(arch)' \ + --with-vendorarchhdrdir='$(vendorhdrdir)/$(arch)' \ --with-rubygemsdir='%{rubygems_dir}' \ --with-ruby-pc='%{name}.pc' \ --disable-rpath \ --enable-shared \ --with-ruby-version='' \ + --enable-multiarch \ @@ -421,7 +422,6 @@ autoconf # compiler options. make %{?_smp_mflags} COPY="cp -p" Q= - %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} @@ -871,6 +871,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Mar 22 2013 Vít Ondruch - 2.0.0.0-6 +- Fix RbConfig::CONFIG['exec_prefix'] returns empty string (rhbz#924851). + * Thu Mar 21 2013 Vít Ondruch - 2.0.0.0-5 - Make Ruby buildable without rubypick. - Prevent random test failures. From bdaca0631c258d488c497fdad5020fa837ff8111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Sat, 23 Mar 2013 00:41:22 +0100 Subject: [PATCH 094/530] Fix indentation. --- ruby.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 7adaecd..117a41c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -406,9 +406,9 @@ autoconf --with-vendordir='%{ruby_vendorlibdir}' \ --with-vendorarchdir='%{ruby_vendorarchdir}' \ --with-rubyhdrdir='%{_includedir}' \ - --with-rubyarchhdrdir='$(archincludedir)' \ - --with-sitearchhdrdir='$(sitehdrdir)/$(arch)' \ - --with-vendorarchhdrdir='$(vendorhdrdir)/$(arch)' \ + --with-rubyarchhdrdir='$(archincludedir)' \ + --with-sitearchhdrdir='$(sitehdrdir)/$(arch)' \ + --with-vendorarchhdrdir='$(vendorhdrdir)/$(arch)' \ --with-rubygemsdir='%{rubygems_dir}' \ --with-ruby-pc='%{name}.pc' \ --disable-rpath \ From cf21f0581ebe01fc1ca136ccd38cef32fc3582ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 17 Apr 2013 10:39:40 +0200 Subject: [PATCH 095/530] Move the macros definition into macros.ruby file. --- macros.ruby | 13 +++++++++++++ ruby.spec | 45 ++++++++++++++++----------------------------- 2 files changed, 29 insertions(+), 29 deletions(-) create mode 100644 macros.ruby diff --git a/macros.ruby b/macros.ruby new file mode 100644 index 0000000..24a2c05 --- /dev/null +++ b/macros.ruby @@ -0,0 +1,13 @@ +%ruby_libdir %{_datadir}/%{name} +%ruby_libarchdir %{_libdir}/%{name} + +# This is the local lib/arch and should not be used for packaging. +%ruby_sitedir site_ruby +%ruby_sitelibdir %{_prefix}/local/share/%{name}/%{ruby_sitedir} +%ruby_sitearchdir %{_prefix}/local/%{_lib}/%{name}/%{ruby_sitedir} + +# This is the general location for libs/archs compatible with all +# or most of the Ruby versions available in the Fedora repositories. +%ruby_vendordir vendor_ruby +%ruby_vendorlibdir %{ruby_libdir}/%{ruby_vendordir} +%ruby_vendorarchdir %{ruby_libarchdir}/%{ruby_vendordir} diff --git a/ruby.spec b/ruby.spec index 117a41c..f6aaaa3 100644 --- a/ruby.spec +++ b/ruby.spec @@ -29,20 +29,6 @@ %global release 6 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -%global ruby_libdir %{_datadir}/%{name} -%global ruby_libarchdir %{_libdir}/%{name} - -# This is the local lib/arch and should not be used for packaging. -%global ruby_sitedir site_ruby -%global ruby_sitelibdir %{_prefix}/local/share/ruby/%{ruby_sitedir} -%global ruby_sitearchdir %{_prefix}/local/%{_lib}/ruby/%{ruby_sitedir} - -# This is the general location for libs/archs compatible with all -# or most of the Ruby versions available in the Fedora repositories. -%global ruby_vendordir vendor_ruby -%global ruby_vendorlibdir %{_datadir}/ruby/%{ruby_vendordir} -%global ruby_vendorarchdir %{_libdir}/ruby/%{ruby_vendordir} - %global rubygems_version 2.0.0 # The RubyGems library has to stay out of Ruby directory three, since the @@ -92,6 +78,20 @@ Source1: operating_system.rb # TODO: Try to push SystemTap support upstream. Source2: libruby.stp Source3: ruby-exercise.stp +Source4: macros.ruby + + +# Include the constants defined in macros files. +# http://http://rpm.org/ticket/866 +%{lua: + +for line in io.lines(rpm.expand("%{SOURCE4}")) do + if line:sub(1, 1) == "%" then + rpm.define(line:sub(2, -1)) + end +end + +} # http://bugs.ruby-lang.org/issues/7807 Patch0: ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -435,21 +435,8 @@ sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_li # Dump the macros into macro.ruby to use them to build other Ruby libraries. mkdir -p %{buildroot}%{_sysconfdir}/rpm -cat >> %{buildroot}%{_sysconfdir}/rpm/macros.ruby << \EOF -%%ruby_libdir %%{_datadir}/%{name} -%%ruby_libarchdir %%{_libdir}/%{name} - -# This is the local lib/arch and should not be used for packaging. -%%ruby_sitedir site_ruby -%%ruby_sitelibdir %%{_prefix}/local/share/%{name}/%%{ruby_sitedir} -%%ruby_sitearchdir %%{_prefix}/local/%%{_lib}/%{name}/%%{ruby_sitedir} - -# This is the general location for libs/archs compatible with all -# or most of the Ruby versions available in the Fedora repositories. -%%ruby_vendordir vendor_ruby -%%ruby_vendorlibdir %%{ruby_libdir}/%%{ruby_vendordir} -%%ruby_vendorarchdir %%{ruby_libarchdir}/%%{ruby_vendordir} -EOF +install -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/rpm/macros.ruby +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_sysconfdir}/rpm/macros.ruby cat >> %{buildroot}%{_sysconfdir}/rpm/macros.rubygems << \EOF # The RubyGems root folder. From 893a03a0cf7e148c2e1848bb6bfc103fc1597ac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 19 Apr 2013 12:58:01 +0200 Subject: [PATCH 096/530] Move RubyGems macro definition into macros.rubygems file. --- macros.rubygems | 27 ++++++++++++++++++++ ruby.spec | 65 +++++++++++++++++++++---------------------------- 2 files changed, 55 insertions(+), 37 deletions(-) create mode 100644 macros.rubygems diff --git a/macros.rubygems b/macros.rubygems new file mode 100644 index 0000000..2856b21 --- /dev/null +++ b/macros.rubygems @@ -0,0 +1,27 @@ +# The RubyGems root folder. +%gem_dir %{_datadir}/gems + +# Common gem locations and files. +%gem_instdir %{gem_dir}/gems/%{gem_name}-%{version} +%gem_extdir_mri %{_libdir}/gems/%{name}/%{gem_name}-%{version} +%gem_libdir %{gem_instdir}/lib +%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}.gem +%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}.gemspec +%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version} + +# Install gem into appropriate directory. +# -n Overrides gem file name for installation. +# -d Set installation directory. +%gem_install(d:n:) \ +mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \ +\ +CONFIGURE_ARGS="--with-cflags='%{optflags}' $CONFIGURE_ARGS" \\\ +gem install \\\ + -V \\\ + --local \\\ + --install-dir %{-d*}%{!?-d:.%{gem_dir}} \\\ + --bindir .%{_bindir} \\\ + --force \\\ + --document=ri,rdoc \\\ + %{-n*}%{!?-n:%{gem_name}-%{version}.gem} \ +%{nil} diff --git a/ruby.spec b/ruby.spec index f6aaaa3..6600f84 100644 --- a/ruby.spec +++ b/ruby.spec @@ -35,8 +35,6 @@ # RubyGems should be share by all Ruby implementations. %global rubygems_dir %{_datadir}/rubygems -# Specify custom RubyGems root. -%global gem_dir %{_datadir}/gems # TODO: These folders should go into rubygem-filesystem but how to achieve it, # since noarch package cannot provide arch dependent subpackages? # http://rpm.org/ticket/78 @@ -79,18 +77,38 @@ Source1: operating_system.rb Source2: libruby.stp Source3: ruby-exercise.stp Source4: macros.ruby +Source5: macros.rubygems # Include the constants defined in macros files. -# http://http://rpm.org/ticket/866 +# http://rpm.org/ticket/866 %{lua: -for line in io.lines(rpm.expand("%{SOURCE4}")) do - if line:sub(1, 1) == "%" then - rpm.define(line:sub(2, -1)) +function source_macros(file) + local macro = nil + + for line in io.lines(file) do + if not macro and line:match("^%%") then + macro = line:match("^%%(.*)$") + line = nil + end + + if macro then + if line and macro:match("^.-%s*\\%s*$") then + macro = macro .. '\n' .. line + end + + if not macro:match("^.-%s*\\%s*$") then + rpm.define(macro) + macro = nil + end + end end end +source_macros(rpm.expand("%{SOURCE4}")) +source_macros(rpm.expand("%{SOURCE5}")) + } # http://bugs.ruby-lang.org/issues/7807 @@ -433,40 +451,13 @@ make install DESTDIR=%{buildroot} # http://bugs.ruby-lang.org/issues/7807 sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_libdir}/pkgconfig/%{name}.pc -# Dump the macros into macro.ruby to use them to build other Ruby libraries. +# Move macros file insto proper place and replace the %%{name} macro, since it +# would be wrongly evaluated during build of other packages. mkdir -p %{buildroot}%{_sysconfdir}/rpm install -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/rpm/macros.ruby sed -i "s/%%{name}/%{name}/" %{buildroot}%{_sysconfdir}/rpm/macros.ruby - -cat >> %{buildroot}%{_sysconfdir}/rpm/macros.rubygems << \EOF -# The RubyGems root folder. -%%gem_dir %{gem_dir} - -# Common gem locations and files. -%%gem_instdir %%{gem_dir}/gems/%%{gem_name}-%%{version} -%%gem_extdir_mri %%{_libdir}/gems/%{name}/%%{gem_name}-%%{version} -%%gem_libdir %%{gem_instdir}/lib -%%gem_cache %%{gem_dir}/cache/%%{gem_name}-%%{version}.gem -%%gem_spec %%{gem_dir}/specifications/%%{gem_name}-%%{version}.gemspec -%%gem_docdir %%{gem_dir}/doc/%%{gem_name}-%%{version} - -# Install gem into appropriate directory. -# -n Overrides gem file name for installation. -# -d Set installation directory. -%%gem_install(d:n:) \ -mkdir -p %%{-d*}%%{!?-d:.%%{gem_dir}} \ -\ -CONFIGURE_ARGS="--with-cflags='%%{optflags}' $CONFIGURE_ARGS" \\\ -gem install \\\ - -V \\\ - --local \\\ - --install-dir %%{-d*}%%{!?-d:.%%{gem_dir}} \\\ - --bindir .%%{_bindir} \\\ - --force \\\ - --document=ri,rdoc \\\ - %%{-n*}%%{!?-n:%%{gem_name}-%%{version}.gem} \ -%%{nil} -EOF +install -m 644 %{SOURCE5} %{buildroot}%{_sysconfdir}/rpm/macros.rubygems +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_sysconfdir}/rpm/macros.rubygems # Install custom operating_system.rb. mkdir -p %{buildroot}%{rubygems_dir}/rubygems/defaults From cdb74fa5c85bab6089a28728a17c06d2b73a85a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 23 Apr 2013 12:26:48 +0200 Subject: [PATCH 097/530] Fix %{gem_extdir_mri} preparation. --- ruby.spec | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/ruby.spec b/ruby.spec index 6600f84..9a0c93e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -35,11 +35,6 @@ # RubyGems should be share by all Ruby implementations. %global rubygems_dir %{_datadir}/rubygems -# TODO: These folders should go into rubygem-filesystem but how to achieve it, -# since noarch package cannot provide arch dependent subpackages? -# http://rpm.org/ticket/78 -%global gem_extdir_mri %{_exec_prefix}/lib{,64}/gems - %global rake_version 0.9.6 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 @@ -467,7 +462,10 @@ cp %{SOURCE1} %{buildroot}%{rubygems_dir}/rubygems/defaults mv %{buildroot}%{ruby_libdir}/gems %{buildroot}%{gem_dir} # Create folders for gem binary extensions. -mkdir -p %{buildroot}%{gem_extdir_mri}/%{name} +# TODO: These folders should go into rubygem-filesystem but how to achieve it, +# since noarch package cannot provide arch dependent subpackages? +# http://rpm.org/ticket/78 +mkdir -p %{buildroot}%{_exec_prefix}/lib{,64}/gems/%{name} # Move bundled rubygems to %%gem_dir and %%gem_extdir_mri # make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems From 56d430e19a5c5e9c427ba76550ca031bf85d12b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 30 Apr 2013 14:39:52 +0200 Subject: [PATCH 098/530] Introduce %{gem_archdir} macro. --- macros.rubygems | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/macros.rubygems b/macros.rubygems index 2856b21..b82a9fb 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -1,9 +1,10 @@ # The RubyGems root folder. %gem_dir %{_datadir}/gems +%gem_archdir %{_libdir}/gems # Common gem locations and files. %gem_instdir %{gem_dir}/gems/%{gem_name}-%{version} -%gem_extdir_mri %{_libdir}/gems/%{name}/%{gem_name}-%{version} +%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version} %gem_libdir %{gem_instdir}/lib %gem_cache %{gem_dir}/cache/%{gem_name}-%{version}.gem %gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}.gemspec From 4f6b4d4bb45f5c265dcdd927280b01ff1506f972 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 30 Apr 2013 14:41:22 +0200 Subject: [PATCH 099/530] Filter automatically generated provides of private libraries (rhbz#947408). --- ruby.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby.spec b/ruby.spec index 9a0c93e..5d8bd7c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -167,6 +167,8 @@ BuildRequires: %{_bindir}/dtrace # virtual provide. It can be installed as dependency of rubypick. Provides: ruby(runtime_executable) = %{ruby_release} +%global __provides_exclude_from ^(%{ruby_libarchdir}|%{gem_archdir})/.*\\.so$ + %description Ruby is the interpreted scripting language for quick and easy object-oriented programming. It has many features to process text From c0b18590df8b15f0b48c37cb1f21dfba5cec261b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 30 Apr 2013 14:42:13 +0200 Subject: [PATCH 100/530] Add %{ruby_default_filter} macro. --- macros.ruby | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/macros.ruby b/macros.ruby index 24a2c05..36f4077 100644 --- a/macros.ruby +++ b/macros.ruby @@ -11,3 +11,12 @@ %ruby_vendordir vendor_ruby %ruby_vendorlibdir %{ruby_libdir}/%{ruby_vendordir} %ruby_vendorarchdir %{ruby_libarchdir}/%{ruby_vendordir} + +# For ruby packages we want to filter out any provides caused by private +# libs in %%{ruby_vendorarchdir}/%%{ruby_sitearchdir}. +# +# Note that this must be invoked in the spec file, preferably as +# "%{?ruby_default_filter}", before any %description block. +%ruby_default_filter %{expand: \ +%global __provides_exclude_from %{?__provides_exclude_from:%{__provides_exclude_from}|}^(%{ruby_vendorarchdir}|%{ruby_sitearchdir})/.*\\\\.so$ \ +} From ec047534c71f3e5b8f7f12def78ff169d6a8c394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 30 Apr 2013 14:43:26 +0200 Subject: [PATCH 101/530] Bump release and add changelog entries. --- macros.rubygems | 9 +++++++++ ruby.spec | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/macros.rubygems b/macros.rubygems index b82a9fb..1043c02 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -26,3 +26,12 @@ gem install \\\ --document=ri,rdoc \\\ %{-n*}%{!?-n:%{gem_name}-%{version}.gem} \ %{nil} + +# For rubygems packages we want to filter out any provides caused by private +# libs in %%{gem_archdir}. +# +# Note that this must be invoked in the spec file, preferably as +# "%{?rubygems_default_filter}", before any %description block. +%rubygems_default_filter %{expand: \ +%global __provides_exclude_from %{?__provides_exclude_from:%{__provides_exclude_from}|}^%{gem_extdir_mri}/.*\\\\.so$ \ +} diff --git a/ruby.spec b/ruby.spec index 5d8bd7c..d3b0917 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 6 +%global release 7 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.0.0 @@ -849,6 +849,11 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Apr 19 2013 Vít Ondruch - 2.0.0.0-7 +- Macro definition moved into macros.ruby and macros.rubygems files. +- Added filtering macros. +- Filter automatically generated provides of private libraries (rhbz#947408). + * Fri Mar 22 2013 Vít Ondruch - 2.0.0.0-6 - Fix RbConfig::CONFIG['exec_prefix'] returns empty string (rhbz#924851). From e1890f92f27737b577012d57e88fdf8ccc2400c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 17 May 2013 14:16:09 +0200 Subject: [PATCH 102/530] Update to Ruby 2.0.0-p195 (rhbz#917374). Fix object taint bypassing in DL and Fiddle (CVE-2013-2065). --- .gitignore | 1 + ruby-1.9.3-always-use-i386.patch | 2 +- ruby-1.9.3-custom-rubygems-location.patch | 4 +- ...ed-paths-when-empty-version-string-i.patch | 2 +- ruby-2.0.0-p57-test_thr_kill.patch | 49 ----------------- ruby-2.0.0-revert-unexpand-exec-prefix.patch | 36 ++++++------- ruby.spec | 17 +++--- ...obal-Specification.dirs-during-insta.patch | 14 ++--- ...s-2.0.0-Fixes-for-empty-ruby-version.patch | 2 +- rubygems-2.0.0-binary-extensions.patch | 52 ++++--------------- sources | 2 +- 11 files changed, 52 insertions(+), 129 deletions(-) delete mode 100644 ruby-2.0.0-p57-test_thr_kill.patch diff --git a/.gitignore b/.gitignore index 9bdb3fc..f2ff6b0 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ ruby-rev415a3ef9ab82c65a7abc-ext_tk.tar.gz /ruby-1.9.3-p385.tar.gz /ruby-2.0.0-r39387.tar.gz /ruby-2.0.0-p0.tar.gz +/ruby-2.0.0-p195.tar.bz2 diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch index dec6994..8b724a8 100644 --- a/ruby-1.9.3-always-use-i386.patch +++ b/ruby-1.9.3-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 418b0cb..d26fe5b 100644 --- a/configure.in +++ b/configure.in -@@ -3362,6 +3362,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3419,6 +3419,8 @@ AC_SUBST(vendorarchdir)dnl configure_args=$ac_configure_args AC_SUBST(configure_args)dnl diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index 4a3e7cb..90ad58d 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -14,7 +14,7 @@ diff --git a/configure.in b/configure.in index 1627d12..e064b2b 100644 --- a/configure.in +++ b/configure.in -@@ -3292,6 +3292,13 @@ AC_ARG_WITH(vendorarchdir, +@@ -3349,6 +3349,13 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -28,7 +28,7 @@ index 1627d12..e064b2b 100644 unexpand_shvar rubylibprefix exec_prefix libdir RUBY_BASE_NAME unexpand_shvar rubyarchprefix exec_prefix libdir arch RUBY_BASE_NAME archlibdir rubylibprefix unexpand_shvar rubysitearchprefix exec_prefix libdir sitearch arch RUBY_BASE_NAME archlibdir sitearchlibdir rubylibprefix -@@ -3358,6 +3365,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3415,6 +3422,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index a6a8106..58d602d 100644 --- a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -13,7 +13,7 @@ diff --git a/configure.in b/configure.in index 5850bbf..7604bb8 100644 --- a/configure.in +++ b/configure.in -@@ -3306,6 +3306,9 @@ unexpand_shvar exec_prefix prefix +@@ -3367,6 +3367,9 @@ unexpand_shvar exec_prefix prefix if test ${RUBY_LIB_VERSION_STYLE+set}; then AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION_STYLE, $RUBY_LIB_VERSION_STYLE !!) else diff --git a/ruby-2.0.0-p57-test_thr_kill.patch b/ruby-2.0.0-p57-test_thr_kill.patch deleted file mode 100644 index c65ab23..0000000 --- a/ruby-2.0.0-p57-test_thr_kill.patch +++ /dev/null @@ -1,49 +0,0 @@ -Index: ChangeLog -=================================================================== ---- ChangeLog (revision 39727) -+++ ChangeLog (revision 39728) -@@ -1,3 +1,15 @@ -+Tue Mar 12 00:56:19 2013 KOSAKI Motohiro -+ -+ * test/thread/test_queue.rb (TestQueue#test_thr_kill): reduce -+ iterations from 2000 to 250. When running on uniprocessor -+ systems, every th.kill needs TIME_QUANTUM_USEC time (i.e. -+ 100msec on posix systems). Because, "r.read 1" is 3 steps -+ operations that 1) release GVL 2) read 3) acquire gvl and -+ (1) invoke context switch to main thread. and then, main -+ thread's th.kill resume (1), but not (2). Thus read interrupt -+ need TIME_QUANTUM_USEC. Then maximum iteration is 30sec/100msec -+ = 300. -+ - Sun Feb 24 15:16:00 2013 Eric Hodel - - * lib/net/http.rb: Removed duplicate Accept-Encoding in Net::HTTP#get. -Index: test/thread/test_queue.rb -=================================================================== ---- test/thread/test_queue.rb (revision 39727) -+++ test/thread/test_queue.rb (revision 39728) -@@ -85,7 +85,7 @@ - bug5343 = '[ruby-core:39634]' - Dir.mktmpdir {|d| - timeout = 30 -- total_count = 2000 -+ total_count = 250 - begin - assert_normal_exit(<<-"_eom", bug5343, {:timeout => timeout, :chdir=>d}) - require "thread" -@@ -98,7 +98,8 @@ - r.read 1 - } - queue.pop -- th.kill.join -+ th.kill -+ th.join - end - _eom - rescue Timeout::Error - -Property changes on: . -___________________________________________________________________ -Modified: svn:mergeinfo - Merged /trunk:r39688 - diff --git a/ruby-2.0.0-revert-unexpand-exec-prefix.patch b/ruby-2.0.0-revert-unexpand-exec-prefix.patch index 2a38296..35067aa 100644 --- a/ruby-2.0.0-revert-unexpand-exec-prefix.patch +++ b/ruby-2.0.0-revert-unexpand-exec-prefix.patch @@ -3,7 +3,7 @@ diff --git a/configure.in b/configure.in index be7d4fe..2d511e5 100644 --- a/configure.in +++ b/configure.in -@@ -2597,14 +2597,9 @@ AS_CASE(["$target_os"], +@@ -2574,14 +2574,9 @@ AS_CASE(["$target_os"], AC_SUBST(setup) @@ -21,23 +21,23 @@ index be7d4fe..2d511e5 100644 BTESTRUBY='$(MINIRUBY)' if test x"$cross_compiling" = xyes; then -@@ -3244,9 +3239,6 @@ AS_CASE(["$target_os"], +@@ -3211,9 +3216,6 @@ AS_CASE(["$target_os"], shvar_to_cpp() { - local var="$1" val="$2" -- local exec_prefix_pat="`echo \"${exec_prefix}\" | sed 's/\\./\\\\./g'`" -- local arch_pat="`echo \"${arch}\" | sed 's/\\./\\\\./g'`" -- local sitearch_pat="`echo \"${sitearch}\" | sed 's/\\./\\\\./g'`" - val="`echo '"'"${val}"'"' | + var="$1" val="$2" +- exec_prefix_pat="`echo \"${exec_prefix}\" | sed 's/\\./\\\\./g'`" +- arch_pat="`echo \"${arch}\" | sed 's/\\./\\\\./g'`" +- sitearch_pat="`echo \"${sitearch}\" | sed 's/\\./\\\\./g'`" + val="`echo '\"'\"${val}\"'\"' | sed \ - -e 's/\${\([[A-Z][A-Z_]]*\)}/"\1"/g' \ -@@ -3269,9 +3261,6 @@ shvar_to_cpp() { - -e 's/\${rubyarchprefix}/"RUBY_ARCH_PREFIX_FOR(arch)"/g' \ - -e 's/\${rubysitearchprefix}/"RUBY_SITEARCH_PREFIX_FOR(arch)"/g' \ - -e 's/\${exec_prefix}/"RUBY_EXEC_PREFIX"/g' \ -- -e "s|${exec_prefix_pat}/|"'"RUBY_EXEC_PREFIX"/|g' \ -- -e "s|${arch_pat}|"'"arch"|g' \ -- -e "s|${sitearch_pat}|"'"sitearch"|g' \ - -e 's|^\"NONE/|RUBY_EXEC_PREFIX\"/|' \ - -e 's|^\"NONE\"|\"'"${prefix}"'\"|' \ - -e 's/^\"\"\(.\)/\1/;s/\(.\)\"\"$/\1/' + -e 's/\${\([[A-Z][A-Z_]]*\)}/\"\1\"/g' \ +@@ -3236,9 +3238,6 @@ shvar_to_cpp() { + -e 's/\${rubyarchprefix}/\"RUBY_ARCH_PREFIX_FOR(arch)\"/g' \ + -e 's/\${rubysitearchprefix}/\"RUBY_SITEARCH_PREFIX_FOR(arch)\"/g' \ + -e 's/\${exec_prefix}/\"RUBY_EXEC_PREFIX\"/g' \ +- -e \"s|${exec_prefix_pat}/|\"'\"RUBY_EXEC_PREFIX\"/|g' \ +- -e \"s|${arch_pat}|\"'\"arch\"|g' \ +- -e \"s|${sitearch_pat}|\"'\"sitearch\"|g' \ + -e 's|^\\\"NONE/|RUBY_EXEC_PREFIX\\\"/|' \ + -e 's|^\\\"NONE\\\"|\\\"'\"${prefix}\"'\\\"|' \ + -e 's/^\\\"\\\"\(.\)/\1/;s/\(.\)\\\"\\\"$/\1/' diff --git a/ruby.spec b/ruby.spec index d3b0917..32790f8 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,7 +1,7 @@ %global major_version 2 %global minor_version 0 %global teeny_version 0 -%global patch_level 0 +%global patch_level 195 %global major_minor_version %{major_version}.%{minor_version} @@ -26,10 +26,10 @@ %endif -%global release 7 +%global release 8 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -%global rubygems_version 2.0.0 +%global rubygems_version 2.0.2 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. @@ -66,7 +66,7 @@ Group: Development/Languages # Public Domain for example for: include/ruby/st.h, strftime.c, ... License: (Ruby or BSD) and Public Domain URL: http://ruby-lang.org/ -Source0: ftp://ftp.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.gz +Source0: ftp://ftp.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.bz2 Source1: operating_system.rb # TODO: Try to push SystemTap support upstream. Source2: libruby.stp @@ -137,10 +137,8 @@ Patch13: rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.pat Patch14: rubygems-2.0.0-Fixes-for-empty-ruby-version.patch # Fixes issues with wrong value of Rubygem's shebang introduced in r39267. # https://bugs.ruby-lang.org/issues/7915 +# TODO: Patch15: ruby-2.0.0-revert-unexpand-exec-prefix.patch -# Fixes test_thr_kill(TestQueue) random test failure. -# https://bugs.ruby-lang.org/issues/7521 -Patch16: ruby-2.0.0-p57-test_thr_kill.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -405,7 +403,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch13 -p1 %patch14 -p1 %patch15 -p1 -%patch16 -p0 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -849,6 +846,10 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri May 17 2013 Vít Ondruch - 2.0.0.195-8 +- Update to Ruby 2.0.0-p195 (rhbz#917374). +- Fix object taint bypassing in DL and Fiddle (CVE-2013-2065). + * Fri Apr 19 2013 Vít Ondruch - 2.0.0.0-7 - Macro definition moved into macros.ruby and macros.rubygems files. - Added filtering macros. diff --git a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch index a6d2334..607e028 100644 --- a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch +++ b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch @@ -13,7 +13,7 @@ diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_inst index d811f62..dffa8df 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb -@@ -319,9 +319,6 @@ class Gem::DependencyInstaller +@@ -330,9 +330,6 @@ class Gem::DependencyInstaller last = @gems_to_install.size - 1 @gems_to_install.each_with_index do |spec, index| @@ -64,7 +64,7 @@ index dffa8df..841f26a 100644 @bin_dir = options[:bin_dir] @dev_shallow = options[:dev_shallow] @development = options[:development] -@@ -91,7 +88,7 @@ class Gem::DependencyInstaller +@@ -92,7 +89,7 @@ class Gem::DependencyInstaller @installed_gems = [] @toplevel_specs = nil @@ -73,7 +73,7 @@ index dffa8df..841f26a 100644 # Set with any errors that SpecFetcher finds while search through # gemspecs for a dep -@@ -185,7 +182,7 @@ class Gem::DependencyInstaller +@@ -202,7 +199,7 @@ class Gem::DependencyInstaller # that this isn't dependent only on the currently installed gems dependency_list.specs.reject! { |spec| not keep_names.include?(spec.full_name) and @@ -82,7 +82,7 @@ index dffa8df..841f26a 100644 } unless dependency_list.ok? or @ignore_dependencies or @force then -@@ -237,7 +234,7 @@ class Gem::DependencyInstaller +@@ -254,7 +251,7 @@ class Gem::DependencyInstaller to_do.push t.spec end @@ -91,7 +91,7 @@ index dffa8df..841f26a 100644 @available << results results.inject_into_list dependency_list -@@ -349,7 +346,7 @@ class Gem::DependencyInstaller +@@ -360,7 +357,7 @@ class Gem::DependencyInstaller :force => @force, :format_executable => @format_executable, :ignore_dependencies => @ignore_dependencies, @@ -118,7 +118,7 @@ diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_inst index 841f26a..abcfa0f 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb -@@ -346,7 +346,7 @@ class Gem::DependencyInstaller +@@ -357,7 +357,7 @@ class Gem::DependencyInstaller :force => @force, :format_executable => @format_executable, :ignore_dependencies => @ignore_dependencies, @@ -131,7 +131,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 780a88b..6543130 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -536,13 +536,13 @@ class Gem::Installer +@@ -537,13 +537,13 @@ class Gem::Installer :bin_dir => nil, :env_shebang => false, :force => false, diff --git a/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch b/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch index 9b275a9..e443a46 100644 --- a/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch +++ b/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch @@ -63,7 +63,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index bf77009..9ee78f7 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1186,8 +1186,10 @@ class TestGem < Gem::TestCase +@@ -1198,8 +1198,10 @@ class TestGem < Gem::TestCase end def test_self_user_dir diff --git a/rubygems-2.0.0-binary-extensions.patch b/rubygems-2.0.0-binary-extensions.patch index fa30892..4876d35 100644 --- a/rubygems-2.0.0-binary-extensions.patch +++ b/rubygems-2.0.0-binary-extensions.patch @@ -1,7 +1,7 @@ From ec90622235ae19b28a327cb50a10e0311e8f3d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 3 Nov 2011 16:43:05 +0100 -Subject: [PATCH 1/9] Add dedicate extensions folder into $LOAD_PATH. +Subject: [PATCH 1/8] Add dedicate extensions folder into $LOAD_PATH. --- lib/rubygems/specification.rb | 32 ++++++++++++++++++++++++++++++-- @@ -74,7 +74,7 @@ index cabdf8d..87b14d2 100644 From e42819f32fc5d935f7e7189ec4be8bdab0a2cf3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 16 Nov 2011 13:26:48 +0100 -Subject: [PATCH 2/9] Use spec's ext dir for extension installation. +Subject: [PATCH 2/8] Use spec's ext dir for extension installation. --- lib/rubygems/installer.rb | 2 +- @@ -85,7 +85,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 780a88b..854c177 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -645,7 +645,7 @@ TEXT +@@ -646,7 +646,7 @@ TEXT say "This could take a while..." end @@ -167,7 +167,7 @@ index 492ddbe..c703827 100644 From 9a8556c609e800d0dbd24af416d613f2e82f323c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 9 Dec 2011 16:31:04 +0100 -Subject: [PATCH 4/9] Fix the binary extension search path construction. +Subject: [PATCH 4/8] Fix the binary extension search path construction. --- lib/rubygems/installer.rb | 2 +- @@ -178,7 +178,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 854c177..f1f2ad7 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -645,7 +645,7 @@ TEXT +@@ -646,7 +646,7 @@ TEXT say "This could take a while..." end @@ -216,7 +216,7 @@ index c703827..fa9ea6e 100644 From 476c2f90cc6f5f490858f253a9b23eb19d53d2fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Dec 2011 12:14:54 +0100 -Subject: [PATCH 5/9] Remove binary extensions during uninstall. +Subject: [PATCH 5/8] Remove binary extensions during uninstall. --- lib/rubygems/uninstaller.rb | 1 + @@ -241,7 +241,7 @@ index d672b9d..5c31a0c 100644 From 35dc17e86f701fe1be80d98ace79735c535fd570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Dec 2011 14:27:14 +0100 -Subject: [PATCH 6/9] Avoid dependency on customized operating_system.rb. +Subject: [PATCH 6/8] Avoid dependency on customized operating_system.rb. --- lib/rubygems/defaults.rb | 11 +++++++++++ @@ -293,7 +293,7 @@ index fa9ea6e..2b10499 100644 From 0937c0b0a3c2ed08ab5b0875f7f95e24157525c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 7 Feb 2013 13:07:34 +0100 -Subject: [PATCH 7/9] Fix binary extensions installation when --install-dir is +Subject: [PATCH 7/8] Fix binary extensions installation when --install-dir is specified. --- @@ -304,7 +304,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index f1f2ad7..e1577fc 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -645,7 +645,7 @@ TEXT +@@ -646,7 +646,7 @@ TEXT say "This could take a while..." end @@ -317,40 +317,10 @@ index f1f2ad7..e1577fc 100644 1.8.1.2 -From 4d9675cab5decaef3c9f7f91b2f9c9abd2a19cea Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 15 Feb 2013 16:24:29 +0100 -Subject: [PATCH 8/9] mkmf does not create folder for binary extensions - anymore. - -This was dropped in Ruby r37016 for some reasons :/ ---- - lib/rubygems/ext/builder.rb | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/lib/rubygems/ext/builder.rb b/lib/rubygems/ext/builder.rb -index d7d953f..812c20c 100644 ---- a/lib/rubygems/ext/builder.rb -+++ b/lib/rubygems/ext/builder.rb -@@ -21,6 +21,10 @@ class Gem::Ext::Builder - mf = mf.gsub(/^RUBYLIBDIR\s*=\s*\$[^$]*/, "RUBYLIBDIR = #{dest_path}") - mf = mf.gsub(/\s*\S+\.time$/, "") - -+ # Folder creation was dropped in r37016 for some reasons :/ -+ target_prefix = mf[/^target_prefix\s*=[^\S\n]*(.*)$/, 1] -+ FileUtils.mkdir_p File.join(dest_path, target_prefix) rescue nil # in case of perms issues -- lame -+ - File.open('Makefile', 'wb') {|f| f.print mf} - - # try to find make program from Ruby configure arguments first --- -1.8.1.2 - - From 062a11c59731f5875d5a8821a212c8a41cb84577 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 15 Feb 2013 17:07:07 +0100 -Subject: [PATCH 9/9] Use correct option. +Subject: [PATCH 8/8] Use correct option. --- lib/rubygems/installer.rb | 2 +- @@ -360,7 +330,7 @@ diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index e1577fc..1492c68 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb -@@ -645,7 +645,7 @@ TEXT +@@ -646,7 +646,7 @@ TEXT say "This could take a while..." end diff --git a/sources b/sources index 3115fba..c66f5b1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -50d307c4dc9297ae59952527be4e755d ruby-2.0.0-p0.tar.gz +2f54faea6ee1ca500632ec3c0cb59cb6 ruby-2.0.0-p195.tar.bz2 From 486dd7a45b2a2792dd0e2bb32345db8ed5a605fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 20 May 2013 15:58:21 +0200 Subject: [PATCH 103/530] The exec_prefix seems to be correct now. --- ruby-2.0.0-revert-unexpand-exec-prefix.patch | 43 -------------------- ruby.spec | 5 --- 2 files changed, 48 deletions(-) delete mode 100644 ruby-2.0.0-revert-unexpand-exec-prefix.patch diff --git a/ruby-2.0.0-revert-unexpand-exec-prefix.patch b/ruby-2.0.0-revert-unexpand-exec-prefix.patch deleted file mode 100644 index 35067aa..0000000 --- a/ruby-2.0.0-revert-unexpand-exec-prefix.patch +++ /dev/null @@ -1,43 +0,0 @@ -* Unmerged path ChangeLog -diff --git a/configure.in b/configure.in -index be7d4fe..2d511e5 100644 ---- a/configure.in -+++ b/configure.in -@@ -2574,14 +2574,9 @@ AS_CASE(["$target_os"], - - AC_SUBST(setup) - --test x"$prefix" = xNONE && prefix=$ac_default_prefix --test x"${exec_prefix}" = xNONE && exec_prefix="$prefix" --pat=`echo "${exec_prefix}" | tr -c '\012' .`'\(.*\)' --for var in bindir libdir; do -- eval val='"$'$var'"' -- AS_CASE(["$val"], ["${exec_prefix}"*], [val='${exec_prefix}'"`expr \"$val\" : \"$pat\"`"]) -- eval $var='"$val"' --done -+if test "$prefix" = NONE; then -+ prefix=$ac_default_prefix -+fi - - BTESTRUBY='$(MINIRUBY)' - if test x"$cross_compiling" = xyes; then -@@ -3211,9 +3216,6 @@ AS_CASE(["$target_os"], - - shvar_to_cpp() { - var="$1" val="$2" -- exec_prefix_pat="`echo \"${exec_prefix}\" | sed 's/\\./\\\\./g'`" -- arch_pat="`echo \"${arch}\" | sed 's/\\./\\\\./g'`" -- sitearch_pat="`echo \"${sitearch}\" | sed 's/\\./\\\\./g'`" - val="`echo '\"'\"${val}\"'\"' | - sed \ - -e 's/\${\([[A-Z][A-Z_]]*\)}/\"\1\"/g' \ -@@ -3236,9 +3238,6 @@ shvar_to_cpp() { - -e 's/\${rubyarchprefix}/\"RUBY_ARCH_PREFIX_FOR(arch)\"/g' \ - -e 's/\${rubysitearchprefix}/\"RUBY_SITEARCH_PREFIX_FOR(arch)\"/g' \ - -e 's/\${exec_prefix}/\"RUBY_EXEC_PREFIX\"/g' \ -- -e \"s|${exec_prefix_pat}/|\"'\"RUBY_EXEC_PREFIX\"/|g' \ -- -e \"s|${arch_pat}|\"'\"arch\"|g' \ -- -e \"s|${sitearch_pat}|\"'\"sitearch\"|g' \ - -e 's|^\\\"NONE/|RUBY_EXEC_PREFIX\\\"/|' \ - -e 's|^\\\"NONE\\\"|\\\"'\"${prefix}\"'\\\"|' \ - -e 's/^\\\"\\\"\(.\)/\1/;s/\(.\)\\\"\\\"$/\1/' diff --git a/ruby.spec b/ruby.spec index 32790f8..2a72381 100644 --- a/ruby.spec +++ b/ruby.spec @@ -135,10 +135,6 @@ Patch13: rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.pat # This prevents issues, when ruby configuration specifies --with-ruby-version=''. # https://github.com/rubygems/rubygems/pull/455 Patch14: rubygems-2.0.0-Fixes-for-empty-ruby-version.patch -# Fixes issues with wrong value of Rubygem's shebang introduced in r39267. -# https://bugs.ruby-lang.org/issues/7915 -# TODO: -Patch15: ruby-2.0.0-revert-unexpand-exec-prefix.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -402,7 +398,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch12 -p1 %patch13 -p1 %patch14 -p1 -%patch15 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . From 1ae6ae5b623869a42127e48f845a6721292bbddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 21 May 2013 11:30:34 +0200 Subject: [PATCH 104/530] Fix build against OpenSSL with enabled ECC curves. --- ...inst-OpenSSL-with-enabled-ECC-curves.patch | 85 +++++++++++++++++++ ruby.spec | 7 ++ 2 files changed, 92 insertions(+) create mode 100644 ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch diff --git a/ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch b/ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch new file mode 100644 index 0000000..461b787 --- /dev/null +++ b/ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch @@ -0,0 +1,85 @@ +From 5617aafa2d44d0a4bc811830e225463abd01b2b2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 21 May 2013 10:01:33 +0200 +Subject: [PATCH] Fix build against OpenSSL with enabled ECC curves. + +--- + ext/openssl/ossl_pkey_ec.c | 4 ++++ + test/openssl/test_pkey_ec.rb | 26 +++++++++++++------------- + 2 files changed, 17 insertions(+), 13 deletions(-) + +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index 8e6d88f..29e28ca 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -762,8 +762,10 @@ static VALUE ossl_ec_group_initialize(int argc, VALUE *argv, VALUE self) + method = EC_GFp_mont_method(); + } else if (id == s_GFp_nist) { + method = EC_GFp_nist_method(); ++#if !defined(OPENSSL_NO_EC2M) + } else if (id == s_GF2m_simple) { + method = EC_GF2m_simple_method(); ++#endif + } + + if (method) { +@@ -817,8 +819,10 @@ static VALUE ossl_ec_group_initialize(int argc, VALUE *argv, VALUE self) + + if (id == s_GFp) { + new_curve = EC_GROUP_new_curve_GFp; ++#if !defined(OPENSSL_NO_EC2M) + } else if (id == s_GF2m) { + new_curve = EC_GROUP_new_curve_GF2m; ++#endif + } else { + ossl_raise(rb_eArgError, "unknown symbol, must be :GFp or :GF2m"); + } +diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb +index f151335..56f3ff7 100644 +--- a/test/openssl/test_pkey_ec.rb ++++ b/test/openssl/test_pkey_ec.rb +@@ -7,28 +7,28 @@ class OpenSSL::TestEC < Test::Unit::TestCase + @data1 = 'foo' + @data2 = 'bar' * 1000 # data too long for DSA sig + +- @group1 = OpenSSL::PKey::EC::Group.new('secp112r1') +- @group2 = OpenSSL::PKey::EC::Group.new('sect163k1') +- @group3 = OpenSSL::PKey::EC::Group.new('prime256v1') ++ @groups = [] ++ @keys = [] + +- @key1 = OpenSSL::PKey::EC.new +- @key1.group = @group1 +- @key1.generate_key ++ OpenSSL::PKey::EC.builtin_curves.each do |curve, comment| ++ group = OpenSSL::PKey::EC::Group.new(curve) + +- @key2 = OpenSSL::PKey::EC.new(@group2.curve_name) +- @key2.generate_key ++ key = OpenSSL::PKey::EC.new(group) ++ key.generate_key + +- @key3 = OpenSSL::PKey::EC.new(@group3) +- @key3.generate_key +- +- @groups = [@group1, @group2, @group3] +- @keys = [@key1, @key2, @key3] ++ @groups << group ++ @keys << key ++ end + end + + def compare_keys(k1, k2) + assert_equal(k1.to_pem, k2.to_pem) + end + ++ def test_builtin_curves ++ assert(!OpenSSL::PKey::EC.builtin_curves.empty?) ++ end ++ + def test_curve_names + @groups.each_with_index do |group, idx| + key = @keys[idx] +-- +1.8.2.1 + diff --git a/ruby.spec b/ruby.spec index 2a72381..a0dd183 100644 --- a/ruby.spec +++ b/ruby.spec @@ -135,6 +135,11 @@ Patch13: rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.pat # This prevents issues, when ruby configuration specifies --with-ruby-version=''. # https://github.com/rubygems/rubygems/pull/455 Patch14: rubygems-2.0.0-Fixes-for-empty-ruby-version.patch +# Although this does not directly affects Fedora ATM, it might be issue when +# rebuilding package on different platform (RHEL7). Please keep the patch until +# it is resolved in upstream. +# https://bugs.ruby-lang.org/issues/8384 +Patch15: ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -398,6 +403,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch12 -p1 %patch13 -p1 %patch14 -p1 +%patch15 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -844,6 +850,7 @@ make check TESTS="-v $DISABLE_TESTS" * Fri May 17 2013 Vít Ondruch - 2.0.0.195-8 - Update to Ruby 2.0.0-p195 (rhbz#917374). - Fix object taint bypassing in DL and Fiddle (CVE-2013-2065). +- Fix build against OpenSSL with enabled ECC curves. * Fri Apr 19 2013 Vít Ondruch - 2.0.0.0-7 - Macro definition moved into macros.ruby and macros.rubygems files. From 63dd7b41ef9166cae3597eccfc24cdc6c19c8b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 21 May 2013 12:49:40 +0200 Subject: [PATCH 105/530] Add aarch64 support (rhbz#926463). --- ruby-2.0.0-p195-aarch64.patch | 360 ++++++++++++++++++++++++++++++++++ ruby.spec | 8 + 2 files changed, 368 insertions(+) create mode 100644 ruby-2.0.0-p195-aarch64.patch diff --git a/ruby-2.0.0-p195-aarch64.patch b/ruby-2.0.0-p195-aarch64.patch new file mode 100644 index 0000000..8009d32 --- /dev/null +++ b/ruby-2.0.0-p195-aarch64.patch @@ -0,0 +1,360 @@ +diff -urN ruby-2.0.0-p0/tool/config.guess ruby-2.0.0-p0-aarch64/tool/config.guess +--- ruby-2.0.0-p0/tool/config.guess 2012-01-29 07:50:18.000000000 -0600 ++++ ruby-2.0.0-p0-aarch64/tool/config.guess 2013-03-08 07:15:49.233030866 -0600 +@@ -2,9 +2,9 @@ + # Attempt to guess a canonical system name. + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +-# 2011 Free Software Foundation, Inc. ++# 2011, 2012 Free Software Foundation, Inc. + +-timestamp='2011-11-11' ++timestamp='2012-09-25' + + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by +@@ -17,9 +17,7 @@ + # General Public License for more details. + # + # You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +-# 02110-1301, USA. ++# along with this program; if not, see . + # + # As a special exception to the GNU General Public License, if you + # distribute this file as part of a program that contains a +@@ -57,8 +55,8 @@ + + Originally written by Per Bothner. + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free +-Software Foundation, Inc. ++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 ++Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -145,7 +143,7 @@ + case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or +- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, ++ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward +@@ -202,6 +200,10 @@ + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; ++ *:Bitrig:*:*) ++ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` ++ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} ++ exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} +@@ -304,7 +306,7 @@ + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; +- arm:riscos:*:*|arm:RISCOS:*:*) ++ arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) +@@ -803,6 +805,9 @@ + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; ++ *:MINGW64*:*) ++ echo ${UNAME_MACHINE}-pc-mingw64 ++ exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; +@@ -863,6 +868,13 @@ + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; ++ aarch64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ aarch64_be:Linux:*:*) ++ UNAME_MACHINE=aarch64_be ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; +@@ -897,16 +909,16 @@ + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) +- echo cris-axis-linux-gnu ++ echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) +- echo crisv32-axis-linux-gnu ++ echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + frv:Linux:*:*) +- echo frv-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + hexagon:Linux:*:*) +- echo hexagon-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu +@@ -948,7 +960,7 @@ + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) +- echo or32-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu +@@ -989,7 +1001,7 @@ + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) +- echo x86_64-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu +@@ -1196,6 +1208,9 @@ + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; ++ x86_64:Haiku:*:*) ++ echo x86_64-unknown-haiku ++ exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; +@@ -1251,7 +1266,7 @@ + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; +- NSE-?:NONSTOP_KERNEL:*:*) ++ NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) +@@ -1320,11 +1335,11 @@ + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; ++ x86_64:VMkernel:*:*) ++ echo ${UNAME_MACHINE}-unknown-esx ++ exit ;; + esac + +-#echo '(No uname command or uname output not recognized.)' 1>&2 +-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 +- + eval $set_cc_for_build + cat >$dummy.c <. + # + # As a special exception to the GNU General Public License, if you + # distribute this file as part of a program that contains a +@@ -76,8 +74,8 @@ + GNU config.sub ($timestamp) + + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free +-Software Foundation, Inc. ++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 ++Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -125,13 +123,17 @@ + maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` + case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ +- linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ ++ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; ++ android-linux) ++ os=-linux-android ++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ++ ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] +@@ -154,7 +156,7 @@ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ +- -apple | -axis | -knuth | -cray | -microblaze) ++ -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; +@@ -223,6 +225,12 @@ + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; ++ -lynx*178) ++ os=-lynxos178 ++ ;; ++ -lynx*5) ++ os=-lynxos5 ++ ;; + -lynx*) + os=-lynxos + ;; +@@ -247,6 +255,7 @@ + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ ++ | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ +@@ -264,7 +273,7 @@ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ +- | maxq | mb | microblaze | mcore | mep | metag \ ++ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ +@@ -319,8 +328,7 @@ + c6x) + basic_machine=tic6x-unknown + ;; +- m6811 | m68hc11 | m6812 | m68hc12 | picochip) +- # Motorola 68HC11/12. ++ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; +@@ -333,7 +341,10 @@ + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; +- ++ xgate) ++ basic_machine=$basic_machine-unknown ++ os=-none ++ ;; + xscaleeb) + basic_machine=armeb-unknown + ;; +@@ -356,6 +367,7 @@ + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ ++ | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ +@@ -377,7 +389,8 @@ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ +- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ ++ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ ++ | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ +@@ -719,7 +732,6 @@ + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +-# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 +@@ -777,9 +789,13 @@ + basic_machine=ns32k-utek + os=-sysv + ;; +- microblaze) ++ microblaze*) + basic_machine=microblaze-xilinx + ;; ++ mingw64) ++ basic_machine=x86_64-pc ++ os=-mingw64 ++ ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 +@@ -1341,15 +1357,15 @@ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ +- | -openbsd* | -solidbsd* \ ++ | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ +- | -mingw32* | -linux-gnu* | -linux-android* \ +- | -linux-newlib* | -linux-uclibc* \ ++ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ ++ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ +@@ -1532,6 +1548,9 @@ + c4x-* | tic4x-*) + os=-coff + ;; ++ hexagon-*) ++ os=-elf ++ ;; + tic54x-*) + os=-coff + ;; +@@ -1559,9 +1578,6 @@ + ;; + m68000-sun) + os=-sunos3 +- # This also exists in the configure program, but was not the +- # default. +- # os=-sunos4 + ;; + m68*-cisco) + os=-aout diff --git a/ruby.spec b/ruby.spec index a0dd183..3cba66a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -140,6 +140,12 @@ Patch14: rubygems-2.0.0-Fixes-for-empty-ruby-version.patch # it is resolved in upstream. # https://bugs.ruby-lang.org/issues/8384 Patch15: ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch +# Adds aarch64 support. +# http://bugs.ruby-lang.org/issues/8331 +# https://bugzilla.redhat.com/show_bug.cgi?id=926463 +# Please note that this is the BZ patch, it might be good idea to update it +# with its upstream version when available. +Patch16: ruby-2.0.0-p195-aarch64.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -404,6 +410,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch13 -p1 %patch14 -p1 %patch15 -p1 +%patch16 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -851,6 +858,7 @@ make check TESTS="-v $DISABLE_TESTS" - Update to Ruby 2.0.0-p195 (rhbz#917374). - Fix object taint bypassing in DL and Fiddle (CVE-2013-2065). - Fix build against OpenSSL with enabled ECC curves. +- Add aarch64 support (rhbz#926463). * Fri Apr 19 2013 Vít Ondruch - 2.0.0.0-7 - Macro definition moved into macros.ruby and macros.rubygems files. From 26512adf3710d261f4c7adcc3af40bdfdcd853d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 1 Jul 2013 12:03:01 +0200 Subject: [PATCH 106/530] Update to Ruby 2.0.0-p247 (rhbz#979605). Fix CVE-2013-4073. Fix for wrong makefiles created by mkmf (rhbz#921650). --- .gitignore | 1 + ruby-1.9.3-fix-s390x-build.patch | 25 ------------------------- ruby.spec | 12 +++++++----- sources | 2 +- 4 files changed, 9 insertions(+), 31 deletions(-) delete mode 100644 ruby-1.9.3-fix-s390x-build.patch diff --git a/.gitignore b/.gitignore index f2ff6b0..b883574 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ ruby-rev415a3ef9ab82c65a7abc-ext_tk.tar.gz /ruby-2.0.0-r39387.tar.gz /ruby-2.0.0-p0.tar.gz /ruby-2.0.0-p195.tar.bz2 +/ruby-2.0.0-p247.tar.bz2 diff --git a/ruby-1.9.3-fix-s390x-build.patch b/ruby-1.9.3-fix-s390x-build.patch deleted file mode 100644 index 3e7056f..0000000 --- a/ruby-1.9.3-fix-s390x-build.patch +++ /dev/null @@ -1,25 +0,0 @@ -From d006c4d04aecbe80469a26a6114b776e9de4e3c8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 19 Nov 2012 14:39:19 +0100 -Subject: [PATCH] Fix s390x build. - ---- - ext/tk/extconf.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ext/tk/extconf.rb b/ext/tk/extconf.rb -index 8f3bff8..69e90a1 100644 ---- a/ext/tk/extconf.rb -+++ b/ext/tk/extconf.rb -@@ -114,7 +114,7 @@ def is_macosx? - end - - def maybe_64bit? -- /64|universal/ =~ RUBY_PLATFORM -+ /64|universal|s390x/ =~ RUBY_PLATFORM - end - - def check_tcltk_version(version) --- -1.8.1 - diff --git a/ruby.spec b/ruby.spec index 3cba66a..76e0f77 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,7 +1,7 @@ %global major_version 2 %global minor_version 0 %global teeny_version 0 -%global patch_level 195 +%global patch_level 247 %global major_minor_version %{major_version}.%{minor_version} @@ -26,7 +26,7 @@ %endif -%global release 8 +%global release 9 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.0.2 @@ -111,8 +111,6 @@ Patch0: ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. Patch3: ruby-1.9.3-always-use-i386.patch -# http://redmine.ruby-lang.org/issues/5465 -Patch4: ruby-1.9.3-fix-s390x-build.patch # Fixes random WEBRick test failures. # https://bugs.ruby-lang.org/issues/6573. Patch5: ruby-1.9.3.p195-fix-webrick-tests.patch @@ -402,7 +400,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch0 -p1 %patch3 -p1 -%patch4 -p1 %patch5 -p1 %patch8 -p1 %patch9 -p1 @@ -854,6 +851,11 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Jul 01 2013 Vít Ondruch - 2.0.0.247-9 +- Update to Ruby 2.0.0-p247 (rhbz#979605). +- Fix CVE-2013-4073. +- Fix for wrong makefiles created by mkmf (rhbz#921650). + * Fri May 17 2013 Vít Ondruch - 2.0.0.195-8 - Update to Ruby 2.0.0-p195 (rhbz#917374). - Fix object taint bypassing in DL and Fiddle (CVE-2013-2065). diff --git a/sources b/sources index c66f5b1..44c414b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -2f54faea6ee1ca500632ec3c0cb59cb6 ruby-2.0.0-p195.tar.bz2 +60913f3eec0c4071f44df42600be2604 ruby-2.0.0-p247.tar.bz2 From ca9cb26aacb207ee39c287445a486ce87dae7c13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 24 Jun 2013 14:14:13 +0200 Subject: [PATCH 107/530] Add support for ABRT autoloading. --- ...-additional-preludes-by-configuratio.patch | 43 +++++++++++++++++++ ruby.spec | 18 ++++++++ 2 files changed, 61 insertions(+) create mode 100644 ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch new file mode 100644 index 0000000..3a36f91 --- /dev/null +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -0,0 +1,43 @@ +diff --git a/Makefile.in b/Makefile.in +index a93a1e6..fb30c19 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -108,6 +108,7 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ + XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@ + + DEFAULT_PRELUDES = $(@USE_RUBYGEMS@_GEM_PRELUDE) ++OPTIONAL_PRELUDES = @OPTIONAL_PRELUDES@ + + #### End of system configuration section. #### + +diff --git a/common.mk b/common.mk +index e5069e5..ca5e3f9 100644 +--- a/common.mk ++++ b/common.mk +@@ -107,7 +107,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(DMYEXT) + + GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) + +-PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES) ++PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES) $(OPTIONAL_PRELUDES) + GEM_PRELUDE = $(srcdir)/gem_prelude.rb + YES_GEM_PRELUDE = $(GEM_PRELUDE) + NO_GEM_PRELUDE = +diff --git a/configure.in b/configure.in +index 7977aaf..1ef42cd 100644 +--- a/configure.in ++++ b/configure.in +@@ -3494,6 +3494,13 @@ AC_SUBST(rubyarchhdrdir)dnl + AC_SUBST(sitearchhdrdir)dnl + AC_SUBST(vendorarchhdrdir)dnl + ++AC_ARG_WITH(prelude, ++ AS_HELP_STRING([--with-prelude=FILE-LIST], [specify additional preludes separated by space]), ++ [prelude=$withval]) ++if test "$prelude" != ""; then ++ AC_SUBST(OPTIONAL_PRELUDES, $prelude) ++fi ++ + AC_ARG_WITH(mantype, + AS_HELP_STRING([--with-mantype=TYPE], [specify man page type; TYPE is one of man and doc]), + [ diff --git a/ruby.spec b/ruby.spec index 76e0f77..1387a98 100644 --- a/ruby.spec +++ b/ruby.spec @@ -73,6 +73,7 @@ Source2: libruby.stp Source3: ruby-exercise.stp Source4: macros.ruby Source5: macros.rubygems +Source6: abrt_prelude.rb # Include the constants defined in macros files. @@ -144,6 +145,10 @@ Patch15: ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch # Please note that this is the BZ patch, it might be good idea to update it # with its upstream version when available. Patch16: ruby-2.0.0-p195-aarch64.patch +# Adds support for '--with-prelude' configuration option. This allows to built +# in support for ABRT. +# http://bugs.ruby-lang.org/issues/8566 +Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -408,10 +413,16 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch14 -p1 %patch15 -p1 %patch16 -p1 +%patch17 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . +# Make abrt_prelude.rb available for compilation process. The prelude must be +# available together with Ruby's source due to +# https://github.com/ruby/ruby/blob/trunk/tool/compile_prelude.rb#L26 +cp -a %{SOURCE6} . + %build autoconf @@ -432,6 +443,7 @@ autoconf --enable-shared \ --with-ruby-version='' \ --enable-multiarch \ + --with-prelude=./abrt_prelude.rb \ @@ -561,6 +573,11 @@ DISABLE_TESTS="-x test_process.rb $DISABLE_TESTS" # http://bugs.ruby-lang.org/issues/7912 DISABLE_TESTS="-x test_rbconfig.rb $DISABLE_TESTS" +# test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, +# when abrt.rb cannot be required (seems to be easier way then customizing +# the test suite). +touch abrt.rb + make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig @@ -855,6 +872,7 @@ make check TESTS="-v $DISABLE_TESTS" - Update to Ruby 2.0.0-p247 (rhbz#979605). - Fix CVE-2013-4073. - Fix for wrong makefiles created by mkmf (rhbz#921650). +- Add support for ABRT autoloading. * Fri May 17 2013 Vít Ondruch - 2.0.0.195-8 - Update to Ruby 2.0.0-p195 (rhbz#917374). From 315c4674d5633f75489fbc5e91ba60e049378dc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 1 Jul 2013 14:32:54 +0200 Subject: [PATCH 108/530] Add abrt_prelude.rb. --- abrt_prelude.rb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 abrt_prelude.rb diff --git a/abrt_prelude.rb b/abrt_prelude.rb new file mode 100644 index 0000000..5ffc51d --- /dev/null +++ b/abrt_prelude.rb @@ -0,0 +1,4 @@ +begin + require 'abrt' +rescue LoadError +end From 1e68c10ca8fdeef75236b24640285f3e68f723a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 2 Jul 2013 12:17:15 +0200 Subject: [PATCH 109/530] Better support for build without configuration (rhbz#977941). --- config.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ ruby.spec | 17 +++++++++++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 config.h diff --git a/config.h b/config.h new file mode 100644 index 0000000..ce501db --- /dev/null +++ b/config.h @@ -0,0 +1,46 @@ +/* + * This config.h is a wrapper include file for the original ruby/config.h, + * which has been renamed to ruby/config-.h. There are conflicts for the + * original ruby/config.h on multilib systems, which result from arch-specific + * configuration options. Please do not use the arch-specific file directly. + */ + +/* + * This wrapped is addpated from SDL's one: + * http://pkgs.fedoraproject.org/cgit/SDL.git/tree/SDL_config.h + */ + +#ifdef ruby_config_wrapper_h +#error "ruby_config_wrapper_h should not be defined!" +#endif +#define ruby_config_wrapper_h + +#if defined(__i386__) +#include "ruby/config-i386.h" +#elif defined(__ia64__) +#include "ruby/config-ia64.h" +#elif defined(__powerpc64__) +#include "ruby/config-ppc64.h" +#elif defined(__powerpc__) +#include "ruby/config-ppc.h" +#elif defined(__s390x__) +#include "ruby/config-s390x.h" +#elif defined(__s390__) +#include "ruby/config-s390.h" +#elif defined(__x86_64__) +#include "ruby/config-x86_64.h" +#elif defined(__arm__) +#include "ruby/config-arm.h" +#elif defined(__alpha__) +#include "ruby/config-alpha.h" +#elif defined(__sparc__) && defined (__arch64__) +#include "ruby/config-sparc64.h" +#elif defined(__sparc__) +#include "ruby/config-sparc.h" +#elif defined(__aarch64__) +#include "ruby/config-aarch64.h" +#else +#error "The ruby-devel package is not usable with the architecture." +#endif + +#undef ruby_config_wrapper_h diff --git a/ruby.spec b/ruby.spec index 1387a98..b7303a0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 9 +%global release 10 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.0.2 @@ -74,6 +74,11 @@ Source3: ruby-exercise.stp Source4: macros.ruby Source5: macros.rubygems Source6: abrt_prelude.rb +# This wrapper fixes https://bugzilla.redhat.com/show_bug.cgi?id=977941 +# Hopefully, it will get removed soon: +# https://fedorahosted.org/fpc/ticket/312 +# https://bugzilla.redhat.com/show_bug.cgi?id=977941 +Source7: config.h # Include the constants defined in macros files. @@ -434,7 +439,7 @@ autoconf --with-vendordir='%{ruby_vendorlibdir}' \ --with-vendorarchdir='%{ruby_vendorarchdir}' \ --with-rubyhdrdir='%{_includedir}' \ - --with-rubyarchhdrdir='$(archincludedir)' \ + --with-rubyarchhdrdir='%{_includedir}' \ --with-sitearchhdrdir='$(sitehdrdir)/$(arch)' \ --with-vendorarchhdrdir='$(vendorhdrdir)/$(arch)' \ --with-rubygemsdir='%{rubygems_dir}' \ @@ -455,6 +460,11 @@ make %{?_smp_mflags} COPY="cp -p" Q= rm -rf %{buildroot} make install DESTDIR=%{buildroot} +# Rename ruby/config.h to ruby/config-.h to avoid file conflicts on +# multilib systems and install config.h wrapper +mv %{buildroot}%{_includedir}/%{name}/config.h %{buildroot}%{_includedir}/%{name}/config-%{_arch}.h +install -m644 %{SOURCE7} %{buildroot}%{_includedir}/%{name}/config.h + # Rename the ruby executable. It is replaced by RubyPick. %{?with_rubypick:mv %{buildroot}%{_bindir}/%{name}{,-mri}} @@ -868,6 +878,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Jul 02 2013 Vít Ondruch - 2.0.0.247-10 +- Better support for build without configuration (rhbz#977941). + * Mon Jul 01 2013 Vít Ondruch - 2.0.0.247-9 - Update to Ruby 2.0.0-p247 (rhbz#979605). - Fix CVE-2013-4073. From e91db1d96bf36ce43080039f5e1fcde41c649041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 2 Jul 2013 12:18:50 +0200 Subject: [PATCH 110/530] Fix DESTDIR issue once more (rhbz#921650). --- ...refix-install_dirs-only-with-DESTDIR.patch | 70 +++++++++++++++++++ ruby.spec | 4 ++ 2 files changed, 74 insertions(+) create mode 100644 ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch diff --git a/ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch b/ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch new file mode 100644 index 0000000..fa7d946 --- /dev/null +++ b/ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch @@ -0,0 +1,70 @@ +From 28e8a4ad0146fef37b514bde9a27ba5b6f7c34c5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 2 Jul 2013 11:51:50 +0200 +Subject: [PATCH] Revert "mkmf.rb: prefix install_dirs only with DESTDIR" + +This reverts commit 7e1d5045943835ff906850e7b3bc71f985ae5f36. +--- + lib/mkmf.rb | 29 ++++++++++++++--------------- + 1 file changed, 14 insertions(+), 15 deletions(-) + +diff --git a/lib/mkmf.rb b/lib/mkmf.rb +index ee89198..cca487e 100644 +--- a/lib/mkmf.rb ++++ b/lib/mkmf.rb +@@ -189,21 +189,21 @@ module MakeMakefile + ] + elsif $configure_args.has_key?('--vendor') + dirs = [ +- ['BINDIR', '$(DESTDIR)$(bindir)'], +- ['RUBYCOMMONDIR', '$(DESTDIR)$(vendordir)$(target_prefix)'], +- ['RUBYLIBDIR', '$(DESTDIR)$(vendorlibdir)$(target_prefix)'], +- ['RUBYARCHDIR', '$(DESTDIR)$(vendorarchdir)$(target_prefix)'], +- ['HDRDIR', '$(DESTDIR)$(rubyhdrdir)/ruby$(target_prefix)'], +- ['ARCHHDRDIR', '$(DESTDIR)$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], ++ ['BINDIR', '$(bindir)'], ++ ['RUBYCOMMONDIR', '$(vendordir)$(target_prefix)'], ++ ['RUBYLIBDIR', '$(vendorlibdir)$(target_prefix)'], ++ ['RUBYARCHDIR', '$(vendorarchdir)$(target_prefix)'], ++ ['HDRDIR', '$(rubyhdrdir)/ruby$(target_prefix)'], ++ ['ARCHHDRDIR', '$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], + ] + else + dirs = [ +- ['BINDIR', '$(DESTDIR)$(bindir)'], +- ['RUBYCOMMONDIR', '$(DESTDIR)$(sitedir)$(target_prefix)'], +- ['RUBYLIBDIR', '$(DESTDIR)$(sitelibdir)$(target_prefix)'], +- ['RUBYARCHDIR', '$(DESTDIR)$(sitearchdir)$(target_prefix)'], +- ['HDRDIR', '$(DESTDIR)$(rubyhdrdir)/ruby$(target_prefix)'], +- ['ARCHHDRDIR', '$(DESTDIR)$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], ++ ['BINDIR', '$(bindir)'], ++ ['RUBYCOMMONDIR', '$(sitedir)$(target_prefix)'], ++ ['RUBYLIBDIR', '$(sitelibdir)$(target_prefix)'], ++ ['RUBYARCHDIR', '$(sitearchdir)$(target_prefix)'], ++ ['HDRDIR', '$(rubyhdrdir)/ruby$(target_prefix)'], ++ ['ARCHHDRDIR', '$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], + ] + end + dirs << ['target_prefix', (target_prefix ? "/#{target_prefix}" : "")] +@@ -1728,7 +1728,6 @@ SRC + end + + def with_destdir(dir) +- return dir unless $extmk + dir = dir.sub($dest_prefix_pattern, '') + /\A\$[\(\{]/ =~ dir ? dir : "$(DESTDIR)"+dir + end +@@ -1787,8 +1786,8 @@ ECHO = $(ECHO1:0=@echo) + #### Start of system configuration section. #### + #{"top_srcdir = " + $top_srcdir.sub(%r"\A#{Regexp.quote($topdir)}/", "$(topdir)/") if $extmk} + srcdir = #{srcdir.gsub(/\$\((srcdir)\)|\$\{(srcdir)\}/) {mkintpath(CONFIG[$1||$2]).unspace}} +-topdir = #{mkintpath(topdir = $extmk ? CONFIG["topdir"] : $topdir).unspace} +-hdrdir = #{(hdrdir = CONFIG["hdrdir"]) == topdir ? "$(topdir)" : mkintpath(hdrdir).unspace} ++topdir = #{mkintpath($extmk ? CONFIG["topdir"] : $topdir).unspace} ++hdrdir = #{mkintpath(CONFIG["hdrdir"]).unspace} + arch_hdrdir = #{$arch_hdrdir.quote} + PATH_SEPARATOR = #{CONFIG['PATH_SEPARATOR']} + VPATH = #{vpath.join(CONFIG['PATH_SEPARATOR'])} +-- +1.8.2.1 + diff --git a/ruby.spec b/ruby.spec index b7303a0..6889f1c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -154,6 +154,9 @@ Patch16: ruby-2.0.0-p195-aarch64.patch # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +# Fixes issues with DESTDIR. +# https://bugs.ruby-lang.org/issues/8115 +Patch18: ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -419,6 +422,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch15 -p1 %patch16 -p1 %patch17 -p1 +%patch18 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . From 06a69a4fd92bc7d9c4cc3ccabf1ebff5f5a2b216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 2 Jul 2013 12:46:48 +0200 Subject: [PATCH 111/530] Fix RubyGems version. --- ruby.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 6889f1c..951038f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,10 +26,10 @@ %endif -%global release 10 +%global release 11 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -%global rubygems_version 2.0.2 +%global rubygems_version 2.0.3 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. @@ -882,6 +882,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Jul 02 2013 Vít Ondruch - 2.0.0.247-11 +- Fix RubyGems version. + * Tue Jul 02 2013 Vít Ondruch - 2.0.0.247-10 - Better support for build without configuration (rhbz#977941). From 7a3d8e78c6b0721c10cdc04559a972588aa02c4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 4 Jul 2013 14:47:51 +0200 Subject: [PATCH 112/530] Fix RubyGems search paths when building gems with native extension (rhbz#979133). --- operating_system.rb | 8 +++++++- ruby.spec | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/operating_system.rb b/operating_system.rb index 4055ed5..c3b19d6 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -28,7 +28,13 @@ module Gem # platform independent (:gem_dir) and dependent (:ext_dir) files. def default_dirs - @libdir ||= ConfigMap[:sitelibdir] == ConfigMap[:sitearchdir] ? ConfigMap[:datadir] : ConfigMap[:libdir] + @libdir ||= case RUBY_PLATFORM + when 'java' + ConfigMap[:datadir] + else + ConfigMap[:libdir] + end + @default_dirs ||= Hash[default_locations.collect do |destination, path| [destination, { :bin_dir => File.join(path, ConfigMap[:bindir].split(File::SEPARATOR).last), diff --git a/ruby.spec b/ruby.spec index 951038f..cd3c735 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 11 +%global release 12 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.0.3 @@ -882,6 +882,10 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Thu Jul 04 2013 Vít Ondruch - 2.0.0.247-12 +- Fix RubyGems search paths when building gems with native extension + (rhbz#979133). + * Tue Jul 02 2013 Vít Ondruch - 2.0.0.247-11 - Fix RubyGems version. From 8ed2f329eca1606f1bb3ddbb7a0e58466ef2c0c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 11 Jul 2013 11:02:00 +0200 Subject: [PATCH 113/530] Fixes multilib conlicts of .gemspec files. --- ...Specification.files-in-default-.gems.patch | 28 +++++++++++++++++++ ruby.spec | 9 +++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch diff --git a/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch b/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch new file mode 100644 index 0000000..2989954 --- /dev/null +++ b/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch @@ -0,0 +1,28 @@ +From fb9fcc8b01d968c62577756cbfd00f20a10b5cbf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 9 Jul 2013 12:32:49 +0200 +Subject: [PATCH] Make stable Gem::Specification.files in default .gemspecs + +Although the .gemspec files for default gems are same in function, the +different order of their "s.files" makes them different therefore +possibly conflicting in multilib scenario. +--- + tool/rbinstall.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb +index 1063fac..fb2fcee 100755 +--- a/tool/rbinstall.rb ++++ b/tool/rbinstall.rb +@@ -592,7 +592,7 @@ module RbInstall + end + + def collect +- ruby_libraries + built_libraries ++ (ruby_libraries + built_libraries).sort + end + + private +-- +1.8.3.1 + diff --git a/ruby.spec b/ruby.spec index cd3c735..8425afa 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 12 +%global release 13 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.0.3 @@ -157,6 +157,9 @@ Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch # Fixes issues with DESTDIR. # https://bugs.ruby-lang.org/issues/8115 Patch18: ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch +# Fixes multilib conlicts of .gemspec files. +# https://bugs.ruby-lang.org/issues/8623 +Patch19: ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -423,6 +426,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch16 -p1 %patch17 -p1 %patch18 -p1 +%patch19 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -882,6 +886,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Thu Jul 11 2013 Vít Ondruch - 2.0.0.247-13 +- Fixes multilib conlicts of .gemspec files. + * Thu Jul 04 2013 Vít Ondruch - 2.0.0.247-12 - Fix RubyGems search paths when building gems with native extension (rhbz#979133). From 127768a63e392e95bd1364f1ee4f1cf18a362bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 11 Jul 2013 11:03:29 +0200 Subject: [PATCH 114/530] Enable TestRbConfig, since it was fixed upstream. --- ruby.spec | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index 8425afa..84eeeb7 100644 --- a/ruby.spec +++ b/ruby.spec @@ -587,10 +587,6 @@ DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" DISABLE_TESTS="-x test_process.rb $DISABLE_TESTS" %endif -# The TestRbConfig errors, which does not respect configuration options. -# http://bugs.ruby-lang.org/issues/7912 -DISABLE_TESTS="-x test_rbconfig.rb $DISABLE_TESTS" - # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing # the test suite). From b2e10a3b7cd5a0e2f7223ce391e1f76aef5c600d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 11 Jul 2013 11:04:16 +0200 Subject: [PATCH 115/530] Enable test_spawn_too_long_path, since it was fixed by upstream. --- ruby.spec | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ruby.spec b/ruby.spec index 84eeeb7..e66b85a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -581,12 +581,6 @@ DISABLE_TESTS="" DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" %endif -%ifarch ppc ppc64 -# test_spawn_too_long_path(TestProcess) fails with [Errno::ENOENT, Errno::E2BIG, nil] expected but nothing was raised. -# https://bugs.ruby-lang.org/issues/7904 -DISABLE_TESTS="-x test_process.rb $DISABLE_TESTS" -%endif - # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing # the test suite). From 1fdf929486ffb73fbddc46dd3738250261b1344f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 12 Jul 2013 14:55:07 +0200 Subject: [PATCH 116/530] Make symlinks for psych gem to ruby stdlib dirs (rhbz#979133). --- ruby.spec | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ruby.spec b/ruby.spec index e66b85a..7fe35ce 100644 --- a/ruby.spec +++ b/ruby.spec @@ -542,6 +542,9 @@ mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/lib mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/lib/ mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications +ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_libdir}/psych +ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_libdir}/psych.rb +ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/lib/psych.so %{buildroot}%{ruby_libarchdir}/psych.so # Adjust the gemspec files so that the gems will load properly sed -i '/^end$/ i\ @@ -643,6 +646,7 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{ruby_libdir}/irb.rb %exclude %{ruby_libdir}/tcltk.rb %exclude %{ruby_libdir}/tk*.rb +%exclude %{ruby_libdir}/psych.rb %{ruby_libdir}/cgi %{ruby_libdir}/date %{ruby_libdir}/digest @@ -862,6 +866,8 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/minitest-%{minitest_version}.gemspec %files -n rubygem-psych +%{ruby_libdir}/psych +%{ruby_libarchdir}/psych.so %{_libdir}/gems/%{name}/psych-%{psych_version} %{gem_dir}/gems/psych-%{psych_version} %{gem_dir}/specifications/psych-%{psych_version}.gemspec @@ -878,6 +884,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Thu Jul 11 2013 Vít Ondruch - 2.0.0.247-13 - Fixes multilib conlicts of .gemspec files. +- Make symlinks for psych gem to ruby stdlib dirs (rhbz#979133). * Thu Jul 04 2013 Vít Ondruch - 2.0.0.247-12 - Fix RubyGems search paths when building gems with native extension From ed87733a22ff773cff9439360c576e0179f0bcd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 12 Jul 2013 14:55:45 +0200 Subject: [PATCH 117/530] Fix macros in comments. --- ruby.spec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 7fe35ce..eeb3c38 100644 --- a/ruby.spec +++ b/ruby.spec @@ -198,7 +198,6 @@ straight-forward, and extensible. %package devel Summary: A Ruby development environment Group: Development/Languages -# Requires: %{name}-libs = %{version}-%{release} Requires: %{name}%{?_isa} = %{version}-%{release} %description devel @@ -932,7 +931,7 @@ make check TESTS="-v $DISABLE_TESTS" * Mon Feb 25 2013 Vít Ondruch - 2.0.0.0-1 - Update to Ruby 2.0.0-p0. -- Change %{ruby_extdir} to %{ruby_extdir_mri} in preparation for better +- Change %%{ruby_extdir} to %%{ruby_extdir_mri} in preparation for better JRuby support. * Mon Feb 25 2013 Mamoru TASAKA - 2.0.0.0-0.3.r39387 From 49825df9b494abee510978fca7c7ba82885b05a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 12 Jul 2013 16:24:11 +0200 Subject: [PATCH 118/530] Use system-wide cert.pem. --- ruby.spec | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ruby.spec b/ruby.spec index eeb3c38..e2037ef 100644 --- a/ruby.spec +++ b/ruby.spec @@ -181,6 +181,8 @@ BuildRequires: tk-devel # Needed to pass test_set_program_name(TestRubyOptions) BuildRequires: procps BuildRequires: %{_bindir}/dtrace +# Unbundle cert.pem +BuildRequires: ca-certificates # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. @@ -223,6 +225,7 @@ Requires: ruby(release) Requires: rubygem(rdoc) >= %{rdoc_version} Requires: rubygem(io-console) >= %{io_console_version} Requires: rubygem(psych) >= %{psych_version} +Requires: ca-certificates Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} BuildArch: noarch @@ -487,6 +490,11 @@ sed -i "s/%%{name}/%{name}/" %{buildroot}%{_sysconfdir}/rpm/macros.ruby install -m 644 %{SOURCE5} %{buildroot}%{_sysconfdir}/rpm/macros.rubygems sed -i "s/%%{name}/%{name}/" %{buildroot}%{_sysconfdir}/rpm/macros.rubygems +# Kill bundled cert.pem +mkdir -p %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ +ln -sf %{_sysconfdir}/pki/tls/cert.pem \ + %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ca-bundle.pem + # Install custom operating_system.rb. mkdir -p %{buildroot}%{rubygems_dir}/rubygems/defaults cp %{SOURCE1} %{buildroot}%{rubygems_dir}/rubygems/defaults @@ -884,6 +892,7 @@ make check TESTS="-v $DISABLE_TESTS" * Thu Jul 11 2013 Vít Ondruch - 2.0.0.247-13 - Fixes multilib conlicts of .gemspec files. - Make symlinks for psych gem to ruby stdlib dirs (rhbz#979133). +- Use system-wide cert.pem. * Thu Jul 04 2013 Vít Ondruch - 2.0.0.247-12 - Fix RubyGems search paths when building gems with native extension From 142da175a227b4462b29503991f24d13934fb59f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 15 Jul 2013 09:58:30 +0200 Subject: [PATCH 119/530] Add forgotten psych.rb link into rubygem-psych to fix "private method `load' called for Psych:Moduler" error (rhbz#979133). --- ruby.spec | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index e2037ef..203a46e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 13 +%global release 14 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.0.3 @@ -874,6 +874,7 @@ make check TESTS="-v $DISABLE_TESTS" %files -n rubygem-psych %{ruby_libdir}/psych +%{ruby_libdir}/psych.rb %{ruby_libarchdir}/psych.so %{_libdir}/gems/%{name}/psych-%{psych_version} %{gem_dir}/gems/psych-%{psych_version} @@ -889,6 +890,10 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Jul 15 2013 Vít Ondruch - 2.0.0.247-14 +- Add forgotten psych.rb link into rubygem-psych to fix "private method `load' + called for Psych:Moduler" error (rhbz#979133). + * Thu Jul 11 2013 Vít Ondruch - 2.0.0.247-13 - Fixes multilib conlicts of .gemspec files. - Make symlinks for psych gem to ruby stdlib dirs (rhbz#979133). From 3a0654b687d5d9357c3e9bb80b90f82eff1c7d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 30 Jul 2013 16:38:59 +0200 Subject: [PATCH 120/530] Move Psych symlinks to vendor dir, to prevent F18 -> F19 upgrade issues (rhbz#988490). --- ruby.spec | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/ruby.spec b/ruby.spec index 203a46e..9aea8a4 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 14 +%global release 15 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.0.3 @@ -549,9 +549,13 @@ mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/lib mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/lib/ mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_libdir}/psych -ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_libdir}/psych.rb -ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/lib/psych.so %{buildroot}%{ruby_libarchdir}/psych.so +# The links should replace directory, which RPM cannot handle and it is causing +# issues during upgrade from F18 to F19. As a workaround the links are placed +# into vendor direcories. This could be changed back as soon as F18 is EOLed. +# https://bugzilla.redhat.com/show_bug.cgi?id=988490 +ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_vendorlibdir}/psych +ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_vendorlibdir}/psych.rb +ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/lib/psych.so %{buildroot}%{ruby_vendorarchdir}/psych.so # Adjust the gemspec files so that the gems will load properly sed -i '/^end$/ i\ @@ -653,7 +657,6 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{ruby_libdir}/irb.rb %exclude %{ruby_libdir}/tcltk.rb %exclude %{ruby_libdir}/tk*.rb -%exclude %{ruby_libdir}/psych.rb %{ruby_libdir}/cgi %{ruby_libdir}/date %{ruby_libdir}/digest @@ -873,9 +876,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/minitest-%{minitest_version}.gemspec %files -n rubygem-psych -%{ruby_libdir}/psych -%{ruby_libdir}/psych.rb -%{ruby_libarchdir}/psych.so +%{ruby_vendorlibdir}/psych +%{ruby_vendorlibdir}/psych.rb +%{ruby_vendorarchdir}/psych.so %{_libdir}/gems/%{name}/psych-%{psych_version} %{gem_dir}/gems/psych-%{psych_version} %{gem_dir}/specifications/psych-%{psych_version}.gemspec @@ -890,6 +893,10 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Jul 30 2013 Vít Ondruch - 2.0.0.247-15 +- Move Psych symlinks to vendor dir, to prevent F18 -> F19 upgrade issues + (rhbz#988490). + * Mon Jul 15 2013 Vít Ondruch - 2.0.0.247-14 - Add forgotten psych.rb link into rubygem-psych to fix "private method `load' called for Psych:Moduler" error (rhbz#979133). From a03b2d278bf4ddd8c06731f202f2f6cc23dac1ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 7 Oct 2013 12:30:18 +0200 Subject: [PATCH 121/530] Update to Ruby 2.1.0.preview1. --- .gitignore | 1 + ruby-1.9.3-always-use-i386.patch | 12 +- ruby-1.9.3-custom-rubygems-location.patch | 82 ++-- ruby-1.9.3-mkmf-verbose.patch | 8 +- ruby-1.9.3.p195-fix-webrick-tests.patch | 14 +- ...ed-paths-when-empty-version-string-i.patch | 124 +++-- ...inst-OpenSSL-with-enabled-ECC-curves.patch | 85 ---- ruby-2.0.0-p195-aarch64.patch | 360 --------------- ...Specification.files-in-default-.gems.patch | 6 +- ...refix-install_dirs-only-with-DESTDIR.patch | 70 --- ...-additional-preludes-by-configuratio.patch | 26 +- ...0-Enable-configuration-of-archlibdir.patch | 28 ++ ....1.0-test_config.rb-fix-library-path.patch | 31 ++ ruby.spec | 72 +-- ...obal-Specification.dirs-during-insta.patch | 149 +----- ...s-2.0.0-Fixes-for-empty-ruby-version.patch | 81 ---- rubygems-2.0.0-binary-extensions.patch | 423 ++++++------------ ...l_require_paths-on-yet-another-place.patch | 71 +++ sources | 2 +- 19 files changed, 480 insertions(+), 1165 deletions(-) delete mode 100644 ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch delete mode 100644 ruby-2.0.0-p195-aarch64.patch delete mode 100644 ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch create mode 100644 ruby-2.1.0-Enable-configuration-of-archlibdir.patch create mode 100644 ruby-2.1.0-test_config.rb-fix-library-path.patch delete mode 100644 rubygems-2.0.0-Fixes-for-empty-ruby-version.patch create mode 100644 rubygems-2.2.0-DRY-Use-full_require_paths-on-yet-another-place.patch diff --git a/.gitignore b/.gitignore index b883574..b4edb4a 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ ruby-rev415a3ef9ab82c65a7abc-ext_tk.tar.gz /ruby-2.0.0-p0.tar.gz /ruby-2.0.0-p195.tar.bz2 /ruby-2.0.0-p247.tar.bz2 +/ruby-2.1.0-preview1.tar.bz2 diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch index 8b724a8..10e3d99 100644 --- a/ruby-1.9.3-always-use-i386.patch +++ b/ruby-1.9.3-always-use-i386.patch @@ -1,4 +1,4 @@ -From 796aa193a0e01f3035361f045ac66486d71f608a Mon Sep 17 00:00:00 2001 +From 2089cab72b38d6d5e7ba2b596e41014209acad30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 19 Nov 2012 14:37:28 +0100 Subject: [PATCH] Always use i386. @@ -8,12 +8,12 @@ Subject: [PATCH] Always use i386. 1 file changed, 2 insertions(+) diff --git a/configure.in b/configure.in -index 418b0cb..d26fe5b 100644 +index 553d4d0..03a4152 100644 --- a/configure.in +++ b/configure.in -@@ -3419,6 +3419,8 @@ AC_SUBST(vendorarchdir)dnl - configure_args=$ac_configure_args - AC_SUBST(configure_args)dnl +@@ -3647,6 +3647,8 @@ AC_SUBST(vendorarchdir)dnl + + AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl +target_cpu=`echo $target_cpu | sed s/i.86/i386/` + @@ -21,5 +21,5 @@ index 418b0cb..d26fe5b 100644 arch="universal-${target_os}" AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available, -- -1.8.1 +1.8.3.1 diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch index 90ad58d..05a0d01 100644 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ b/ruby-1.9.3-custom-rubygems-location.patch @@ -1,46 +1,73 @@ -From b5e9dc3683cb085aa57e7b12c35a4f21b2cc1482 Mon Sep 17 00:00:00 2001 +From 94da59aafacc6a9efe829529eb51385588d6f149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 11 Nov 2011 13:14:45 +0100 Subject: [PATCH] Allow to install RubyGems into custom location, outside of Ruby tree. --- - configure.in | 8 ++++++++ - tool/rbinstall.rb | 9 +++++++++ - version.c | 4 ++++ - 3 files changed, 21 insertions(+) + configure.in | 5 +++++ + loadpath.c | 4 ++++ + template/verconf.h.in | 3 +++ + tool/rbinstall.rb | 9 +++++++++ + 4 files changed, 21 insertions(+) diff --git a/configure.in b/configure.in -index 1627d12..e064b2b 100644 +index 03a4152..0e371e2 100644 --- a/configure.in +++ b/configure.in -@@ -3349,6 +3349,13 @@ AC_ARG_WITH(vendorarchdir, +@@ -3621,6 +3621,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) +AC_ARG_WITH(rubygemsdir, + AS_HELP_STRING([--with-rubygemsdir=DIR], [custom rubygems directory]), + [rubygemsdir=$withval]) -+if test "$rubygemsdir" != ""; then -+ AC_DEFINE_UNQUOTED(RUBYGEMS_DIR,"$rubygemsdir" !!) -+fi + - unexpand_shvar rubylibprefix exec_prefix libdir RUBY_BASE_NAME - unexpand_shvar rubyarchprefix exec_prefix libdir arch RUBY_BASE_NAME archlibdir rubylibprefix - unexpand_shvar rubysitearchprefix exec_prefix libdir sitearch arch RUBY_BASE_NAME archlibdir sitearchlibdir rubylibprefix -@@ -3415,6 +3422,7 @@ AC_SUBST(sitearchdir)dnl + if test "${LOAD_RELATIVE+set}"; then + AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) + RUBY_EXEC_PREFIX='' +@@ -3644,6 +3648,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl +AC_SUBST(rubygemsdir)dnl - configure_args=$ac_configure_args - AC_SUBST(configure_args)dnl + AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl + +diff --git a/loadpath.c b/loadpath.c +index 623dc9d..74c5d9e 100644 +--- a/loadpath.c ++++ b/loadpath.c +@@ -86,6 +86,10 @@ const char ruby_initial_load_paths[] = + RUBY_VENDOR_LIB "\0" + #endif + ++#ifdef RUBYGEMS_DIR ++ RUBYGEMS_DIR "\0" ++#endif ++ + RUBY_LIB "\0" + #ifdef RUBY_THINARCH + RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0" +diff --git a/template/verconf.h.in b/template/verconf.h.in +index 79c003e..34f2382 100644 +--- a/template/verconf.h.in ++++ b/template/verconf.h.in +@@ -34,6 +34,9 @@ + % if C["RUBY_SEARCH_PATH"] + #define RUBY_SEARCH_PATH "${RUBY_SEARCH_PATH}" + % end ++% if C["rubygemsdir"] ++#define RUBYGEMS_DIR "${rubygemsdir}" ++% end + % + % R = {} + % R["ruby_version"] = '"RUBY_LIB_VERSION"' diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 92e54c6..c72dfb6 100755 +index b47b6e1..0b99408 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -313,6 +313,7 @@ sitelibdir = CONFIG["sitelibdir"] +@@ -317,6 +317,7 @@ sitelibdir = CONFIG["sitelibdir"] sitearchlibdir = CONFIG["sitearchdir"] vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] @@ -48,7 +75,7 @@ index 92e54c6..c72dfb6 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] configure_args = Shellwords.shellwords(CONFIG["configure_args"]) -@@ -500,7 +501,15 @@ end +@@ -505,7 +506,15 @@ end install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[README* *.txt *.rdoc *.gemspec] @@ -64,21 +91,6 @@ index 92e54c6..c72dfb6 100755 end install?(:local, :arch, :lib) do -diff --git a/version.c b/version.c -index 54c4513..d76100b 100644 ---- a/version.c -+++ b/version.c -@@ -99,6 +99,10 @@ const char ruby_initial_load_paths[] = - #endif - #endif - -+#ifdef RUBYGEMS_DIR -+ RUBYGEMS_DIR "\0" -+#endif -+ - RUBY_LIB "\0" - #ifdef RUBY_THINARCH - RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0" -- -1.8.1.2 +1.8.3.1 diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index de78ad8..66107c4 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -1,4 +1,4 @@ -From ec16398159a161fc77436b4855d489f193b2515b Mon Sep 17 00:00:00 2001 +From 28cc0749d6729aa2444661ee7b411e183fe220b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 19 Nov 2012 15:14:51 +0100 Subject: [PATCH] Verbose mkmf. @@ -8,10 +8,10 @@ Subject: [PATCH] Verbose mkmf. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mkmf.rb b/lib/mkmf.rb -index 4b6c52e..67a15ee 100644 +index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1777,7 +1777,7 @@ SRC +@@ -1828,7 +1828,7 @@ SRC SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. @@ -21,5 +21,5 @@ index 4b6c52e..67a15ee 100644 Q = $(Q1:0=@) ECHO1 = $(V:1=@#{CONFIG['NULLCMD']}) -- -1.8.1.2 +1.8.3.1 diff --git a/ruby-1.9.3.p195-fix-webrick-tests.patch b/ruby-1.9.3.p195-fix-webrick-tests.patch index b340bff..3b2d6e7 100644 --- a/ruby-1.9.3.p195-fix-webrick-tests.patch +++ b/ruby-1.9.3.p195-fix-webrick-tests.patch @@ -1,5 +1,14 @@ +From 2db9ad4a090d0c82e30afa44c623e3c5c99f7a37 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 19 Nov 2012 14:37:28 +0100 +Subject: [PATCH] Fix WEBrick tests. + +--- + test/runner.rb | 2 ++ + 1 file changed, 2 insertions(+) + diff --git a/test/runner.rb b/test/runner.rb -index 49844c7..8e59a85 100644 +index 94beb44..db4dfe9 100644 --- a/test/runner.rb +++ b/test/runner.rb @@ -2,6 +2,8 @@ require 'rbconfig' @@ -11,3 +20,6 @@ index 49844c7..8e59a85 100644 src_testdir = File.dirname(File.realpath(__FILE__)) $LOAD_PATH << src_testdir module Gem +-- +1.8.3.1 + diff --git a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 58d602d..498a792 100644 --- a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -1,70 +1,98 @@ -From e943a89efd63dcfb80a0ab8d9a4db37f523f508e Mon Sep 17 00:00:00 2001 +From 35b8c14ddc7f9b38c21c15dfecefa3dff7567981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 8 Feb 2013 22:48:41 +0100 Subject: [PATCH] Prevent duplicated paths when empty version string is configured. --- - configure.in | 3 +++ - version.c | 10 ++++++++++ - 2 files changed, 13 insertions(+) + configure.in | 15 +++++++++------ + loadpath.c | 4 ++++ + 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/configure.in b/configure.in -index 5850bbf..7604bb8 100644 +index 881449e..37d9a62 100644 --- a/configure.in +++ b/configure.in -@@ -3367,6 +3367,9 @@ unexpand_shvar exec_prefix prefix - if test ${RUBY_LIB_VERSION_STYLE+set}; then - AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION_STYLE, $RUBY_LIB_VERSION_STYLE !!) - else -+ if test "x${ruby_version}" = 'x'; then -+ AC_DEFINE(RUBY_LIB_VERSION_BLANK, 1) -+ fi - AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION, [$RUBY_LIB_VERSION] !!) - fi - AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, ${RUBY_EXEC_PREFIX}) -diff --git a/version.c b/version.c -index 282960d..54c4513 100644 ---- a/version.c -+++ b/version.c -@@ -39,9 +39,15 @@ - #define RUBY_VENDOR_LIB RUBY_LIB_PREFIX"/vendor_ruby" - #endif +@@ -3535,8 +3535,6 @@ AC_ARG_WITH(rubylibprefix, + fi + rubylibprefix="$withval"]) + AC_SUBST(rubylibprefix) +-rubylibdir='${rubylibprefix}/${ruby_version}' +-rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} -+#ifdef RUBY_LIB_VERSION_BLANK -+#define RUBY_LIB RUBY_LIB_PREFIX -+#define RUBY_SITE_LIB2 RUBY_SITE_LIB -+#define RUBY_VENDOR_LIB2 RUBY_VENDOR_LIB -+#else - #define RUBY_LIB RUBY_LIB_PREFIX "/"RUBY_LIB_VERSION - #define RUBY_SITE_LIB2 RUBY_SITE_LIB "/"RUBY_LIB_VERSION - #define RUBY_VENDOR_LIB2 RUBY_VENDOR_LIB "/"RUBY_LIB_VERSION -+#endif - #ifndef RUBY_ARCH_LIB_FOR - #define RUBY_ARCH_LIB_FOR(arch) RUBY_LIB "/"arch + rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} + AC_ARG_WITH(rubyarchprefix, +@@ -3566,6 +3564,7 @@ AC_ARG_WITH(ruby-version, + [ruby_version=full]) + unset RUBY_LIB_VERSION + unset RUBY_LIB_VERSION_STYLE ++ruby_version_suffix=/'${ruby_version}' + AS_CASE(["$ruby_version"], + [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], + [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) +@@ -3582,30 +3581,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then + ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" + eval $ruby_version + elif test -z "${ruby_version}"; then +- AC_MSG_ERROR([No ruby version, No place for bundled libraries]) ++ unset ruby_version_suffix ++ AC_DEFINE(RUBY_LIB_VERSION_BLANK, 1) + else + RUBY_LIB_VERSION="\"${ruby_version}\"" + fi + AC_SUBST(RUBY_LIB_VERSION_STYLE) + AC_SUBST(RUBY_LIB_VERSION) + ++rubylibdir='${rubylibprefix}'${ruby_version_suffix} ++rubyarchdir=${multiarch+'${rubyarchprefix}'${ruby_version_suffix}}${multiarch-'${rubylibdir}/${arch}'} ++ + AC_ARG_WITH(sitedir, + AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), + [sitedir=$withval], + [sitedir='${rubylibprefix}/site_ruby']) +-sitelibdir='${sitedir}/${ruby_version}' ++sitelibdir='${sitedir}'${ruby_version_suffix} + + AC_ARG_WITH(sitearchdir, + AS_HELP_STRING([--with-sitearchdir=DIR], + [architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]), + [sitearchdir=$withval], +- [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}]) ++ [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby'${ruby_version_suffix}}${multiarch-'${sitelibdir}/${sitearch}'}]) + + AC_ARG_WITH(vendordir, + AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), + [vendordir=$withval], + [vendordir='${rubylibprefix}/vendor_ruby']) +-vendorlibdir='${vendordir}/${ruby_version}' ++vendorlibdir='${vendordir}'${ruby_version_suffix} + + AC_ARG_WITH(vendorarchdir, + AS_HELP_STRING([--with-vendorarchdir=DIR], +diff --git a/loadpath.c b/loadpath.c +index 9160031..623dc9d 100644 +--- a/loadpath.c ++++ b/loadpath.c +@@ -65,7 +65,9 @@ const char ruby_initial_load_paths[] = + RUBY_SEARCH_PATH "\0" #endif -@@ -77,8 +83,10 @@ const char ruby_initial_load_paths[] = + #ifndef NO_RUBY_SITE_LIB ++#ifndef RUBY_LIB_VERSION_BLANK + RUBY_SITE_LIB2 "\0" ++#endif + #ifdef RUBY_THINARCH RUBY_SITE_ARCH_LIB_FOR(RUBY_THINARCH) "\0" #endif - RUBY_SITE_ARCH_LIB_FOR(RUBY_SITEARCH) "\0" -+#ifndef RUBY_LIB_VERSION_BLANK - RUBY_SITE_LIB "\0" +@@ -74,7 +76,9 @@ const char ruby_initial_load_paths[] = #endif -+#endif #ifndef NO_RUBY_VENDOR_LIB ++#ifndef RUBY_LIB_VERSION_BLANK RUBY_VENDOR_LIB2 "\0" -@@ -86,8 +94,10 @@ const char ruby_initial_load_paths[] = ++#endif + #ifdef RUBY_THINARCH RUBY_VENDOR_ARCH_LIB_FOR(RUBY_THINARCH) "\0" #endif - RUBY_VENDOR_ARCH_LIB_FOR(RUBY_SITEARCH) "\0" -+#ifndef RUBY_LIB_VERSION_BLANK - RUBY_VENDOR_LIB "\0" - #endif -+#endif - - RUBY_LIB "\0" - #ifdef RUBY_THINARCH -- -1.8.1.2 +1.8.3.1 diff --git a/ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch b/ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch deleted file mode 100644 index 461b787..0000000 --- a/ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 5617aafa2d44d0a4bc811830e225463abd01b2b2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Tue, 21 May 2013 10:01:33 +0200 -Subject: [PATCH] Fix build against OpenSSL with enabled ECC curves. - ---- - ext/openssl/ossl_pkey_ec.c | 4 ++++ - test/openssl/test_pkey_ec.rb | 26 +++++++++++++------------- - 2 files changed, 17 insertions(+), 13 deletions(-) - -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index 8e6d88f..29e28ca 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -762,8 +762,10 @@ static VALUE ossl_ec_group_initialize(int argc, VALUE *argv, VALUE self) - method = EC_GFp_mont_method(); - } else if (id == s_GFp_nist) { - method = EC_GFp_nist_method(); -+#if !defined(OPENSSL_NO_EC2M) - } else if (id == s_GF2m_simple) { - method = EC_GF2m_simple_method(); -+#endif - } - - if (method) { -@@ -817,8 +819,10 @@ static VALUE ossl_ec_group_initialize(int argc, VALUE *argv, VALUE self) - - if (id == s_GFp) { - new_curve = EC_GROUP_new_curve_GFp; -+#if !defined(OPENSSL_NO_EC2M) - } else if (id == s_GF2m) { - new_curve = EC_GROUP_new_curve_GF2m; -+#endif - } else { - ossl_raise(rb_eArgError, "unknown symbol, must be :GFp or :GF2m"); - } -diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb -index f151335..56f3ff7 100644 ---- a/test/openssl/test_pkey_ec.rb -+++ b/test/openssl/test_pkey_ec.rb -@@ -7,28 +7,28 @@ class OpenSSL::TestEC < Test::Unit::TestCase - @data1 = 'foo' - @data2 = 'bar' * 1000 # data too long for DSA sig - -- @group1 = OpenSSL::PKey::EC::Group.new('secp112r1') -- @group2 = OpenSSL::PKey::EC::Group.new('sect163k1') -- @group3 = OpenSSL::PKey::EC::Group.new('prime256v1') -+ @groups = [] -+ @keys = [] - -- @key1 = OpenSSL::PKey::EC.new -- @key1.group = @group1 -- @key1.generate_key -+ OpenSSL::PKey::EC.builtin_curves.each do |curve, comment| -+ group = OpenSSL::PKey::EC::Group.new(curve) - -- @key2 = OpenSSL::PKey::EC.new(@group2.curve_name) -- @key2.generate_key -+ key = OpenSSL::PKey::EC.new(group) -+ key.generate_key - -- @key3 = OpenSSL::PKey::EC.new(@group3) -- @key3.generate_key -- -- @groups = [@group1, @group2, @group3] -- @keys = [@key1, @key2, @key3] -+ @groups << group -+ @keys << key -+ end - end - - def compare_keys(k1, k2) - assert_equal(k1.to_pem, k2.to_pem) - end - -+ def test_builtin_curves -+ assert(!OpenSSL::PKey::EC.builtin_curves.empty?) -+ end -+ - def test_curve_names - @groups.each_with_index do |group, idx| - key = @keys[idx] --- -1.8.2.1 - diff --git a/ruby-2.0.0-p195-aarch64.patch b/ruby-2.0.0-p195-aarch64.patch deleted file mode 100644 index 8009d32..0000000 --- a/ruby-2.0.0-p195-aarch64.patch +++ /dev/null @@ -1,360 +0,0 @@ -diff -urN ruby-2.0.0-p0/tool/config.guess ruby-2.0.0-p0-aarch64/tool/config.guess ---- ruby-2.0.0-p0/tool/config.guess 2012-01-29 07:50:18.000000000 -0600 -+++ ruby-2.0.0-p0-aarch64/tool/config.guess 2013-03-08 07:15:49.233030866 -0600 -@@ -2,9 +2,9 @@ - # Attempt to guess a canonical system name. - # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, --# 2011 Free Software Foundation, Inc. -+# 2011, 2012 Free Software Foundation, Inc. - --timestamp='2011-11-11' -+timestamp='2012-09-25' - - # This file is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -17,9 +17,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with this program; if not, write to the Free Software --# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA --# 02110-1301, USA. -+# along with this program; if not, see . - # - # As a special exception to the GNU General Public License, if you - # distribute this file as part of a program that contains a -@@ -57,8 +55,8 @@ - - Originally written by Per Bothner. - Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, --2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free --Software Foundation, Inc. -+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -+Free Software Foundation, Inc. - - This is free software; see the source for copying conditions. There is NO - warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -@@ -145,7 +143,7 @@ - case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or -- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, -+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward -@@ -202,6 +200,10 @@ - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; -+ *:Bitrig:*:*) -+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` -+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} -+ exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} -@@ -304,7 +306,7 @@ - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; -- arm:riscos:*:*|arm:RISCOS:*:*) -+ arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) -@@ -803,6 +805,9 @@ - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; -+ *:MINGW64*:*) -+ echo ${UNAME_MACHINE}-pc-mingw64 -+ exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; -@@ -863,6 +868,13 @@ - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; -+ aarch64:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ exit ;; -+ aarch64_be:Linux:*:*) -+ UNAME_MACHINE=aarch64_be -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; -@@ -897,16 +909,16 @@ - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) -- echo cris-axis-linux-gnu -+ echo ${UNAME_MACHINE}-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) -- echo crisv32-axis-linux-gnu -+ echo ${UNAME_MACHINE}-axis-linux-gnu - exit ;; - frv:Linux:*:*) -- echo frv-unknown-linux-gnu -+ echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - hexagon:Linux:*:*) -- echo hexagon-unknown-linux-gnu -+ echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu -@@ -948,7 +960,7 @@ - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) -- echo or32-unknown-linux-gnu -+ echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu -@@ -989,7 +1001,7 @@ - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) -- echo x86_64-unknown-linux-gnu -+ echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu -@@ -1196,6 +1208,9 @@ - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; -+ x86_64:Haiku:*:*) -+ echo x86_64-unknown-haiku -+ exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; -@@ -1251,7 +1266,7 @@ - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; -- NSE-?:NONSTOP_KERNEL:*:*) -+ NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) -@@ -1320,11 +1335,11 @@ - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -+ x86_64:VMkernel:*:*) -+ echo ${UNAME_MACHINE}-unknown-esx -+ exit ;; - esac - --#echo '(No uname command or uname output not recognized.)' 1>&2 --#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 -- - eval $set_cc_for_build - cat >$dummy.c <. - # - # As a special exception to the GNU General Public License, if you - # distribute this file as part of a program that contains a -@@ -76,8 +74,8 @@ - GNU config.sub ($timestamp) - - Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, --2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free --Software Foundation, Inc. -+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -+Free Software Foundation, Inc. - - This is free software; see the source for copying conditions. There is NO - warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -@@ -125,13 +123,17 @@ - maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` - case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ -- linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ -+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; -+ android-linux) -+ os=-linux-android -+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown -+ ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] -@@ -154,7 +156,7 @@ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -- -apple | -axis | -knuth | -cray | -microblaze) -+ -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; -@@ -223,6 +225,12 @@ - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; -+ -lynx*178) -+ os=-lynxos178 -+ ;; -+ -lynx*5) -+ os=-lynxos5 -+ ;; - -lynx*) - os=-lynxos - ;; -@@ -247,6 +255,7 @@ - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ -+ | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ -@@ -264,7 +273,7 @@ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ -- | maxq | mb | microblaze | mcore | mep | metag \ -+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ -@@ -319,8 +328,7 @@ - c6x) - basic_machine=tic6x-unknown - ;; -- m6811 | m68hc11 | m6812 | m68hc12 | picochip) -- # Motorola 68HC11/12. -+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; -@@ -333,7 +341,10 @@ - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; -- -+ xgate) -+ basic_machine=$basic_machine-unknown -+ os=-none -+ ;; - xscaleeb) - basic_machine=armeb-unknown - ;; -@@ -356,6 +367,7 @@ - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ -+ | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ -@@ -377,7 +389,8 @@ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ -- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ -+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ -+ | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ -@@ -719,7 +732,6 @@ - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; --# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 -@@ -777,9 +789,13 @@ - basic_machine=ns32k-utek - os=-sysv - ;; -- microblaze) -+ microblaze*) - basic_machine=microblaze-xilinx - ;; -+ mingw64) -+ basic_machine=x86_64-pc -+ os=-mingw64 -+ ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 -@@ -1341,15 +1357,15 @@ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ -- | -openbsd* | -solidbsd* \ -+ | -bitrig* | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ -- | -mingw32* | -linux-gnu* | -linux-android* \ -- | -linux-newlib* | -linux-uclibc* \ -+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ -+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ -@@ -1532,6 +1548,9 @@ - c4x-* | tic4x-*) - os=-coff - ;; -+ hexagon-*) -+ os=-elf -+ ;; - tic54x-*) - os=-coff - ;; -@@ -1559,9 +1578,6 @@ - ;; - m68000-sun) - os=-sunos3 -- # This also exists in the configure program, but was not the -- # default. -- # os=-sunos4 - ;; - m68*-cisco) - os=-aout diff --git a/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch b/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch index 2989954..0abe8bd 100644 --- a/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch +++ b/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch @@ -1,4 +1,4 @@ -From fb9fcc8b01d968c62577756cbfd00f20a10b5cbf Mon Sep 17 00:00:00 2001 +From 541f3b85cac00e5b836e018ef8afea4342e0cd39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 9 Jul 2013 12:32:49 +0200 Subject: [PATCH] Make stable Gem::Specification.files in default .gemspecs @@ -11,10 +11,10 @@ possibly conflicting in multilib scenario. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 1063fac..fb2fcee 100755 +index 0b99408..7b54966 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -592,7 +592,7 @@ module RbInstall +@@ -608,7 +608,7 @@ module RbInstall end def collect diff --git a/ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch b/ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch deleted file mode 100644 index fa7d946..0000000 --- a/ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 28e8a4ad0146fef37b514bde9a27ba5b6f7c34c5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Tue, 2 Jul 2013 11:51:50 +0200 -Subject: [PATCH] Revert "mkmf.rb: prefix install_dirs only with DESTDIR" - -This reverts commit 7e1d5045943835ff906850e7b3bc71f985ae5f36. ---- - lib/mkmf.rb | 29 ++++++++++++++--------------- - 1 file changed, 14 insertions(+), 15 deletions(-) - -diff --git a/lib/mkmf.rb b/lib/mkmf.rb -index ee89198..cca487e 100644 ---- a/lib/mkmf.rb -+++ b/lib/mkmf.rb -@@ -189,21 +189,21 @@ module MakeMakefile - ] - elsif $configure_args.has_key?('--vendor') - dirs = [ -- ['BINDIR', '$(DESTDIR)$(bindir)'], -- ['RUBYCOMMONDIR', '$(DESTDIR)$(vendordir)$(target_prefix)'], -- ['RUBYLIBDIR', '$(DESTDIR)$(vendorlibdir)$(target_prefix)'], -- ['RUBYARCHDIR', '$(DESTDIR)$(vendorarchdir)$(target_prefix)'], -- ['HDRDIR', '$(DESTDIR)$(rubyhdrdir)/ruby$(target_prefix)'], -- ['ARCHHDRDIR', '$(DESTDIR)$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], -+ ['BINDIR', '$(bindir)'], -+ ['RUBYCOMMONDIR', '$(vendordir)$(target_prefix)'], -+ ['RUBYLIBDIR', '$(vendorlibdir)$(target_prefix)'], -+ ['RUBYARCHDIR', '$(vendorarchdir)$(target_prefix)'], -+ ['HDRDIR', '$(rubyhdrdir)/ruby$(target_prefix)'], -+ ['ARCHHDRDIR', '$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], - ] - else - dirs = [ -- ['BINDIR', '$(DESTDIR)$(bindir)'], -- ['RUBYCOMMONDIR', '$(DESTDIR)$(sitedir)$(target_prefix)'], -- ['RUBYLIBDIR', '$(DESTDIR)$(sitelibdir)$(target_prefix)'], -- ['RUBYARCHDIR', '$(DESTDIR)$(sitearchdir)$(target_prefix)'], -- ['HDRDIR', '$(DESTDIR)$(rubyhdrdir)/ruby$(target_prefix)'], -- ['ARCHHDRDIR', '$(DESTDIR)$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], -+ ['BINDIR', '$(bindir)'], -+ ['RUBYCOMMONDIR', '$(sitedir)$(target_prefix)'], -+ ['RUBYLIBDIR', '$(sitelibdir)$(target_prefix)'], -+ ['RUBYARCHDIR', '$(sitearchdir)$(target_prefix)'], -+ ['HDRDIR', '$(rubyhdrdir)/ruby$(target_prefix)'], -+ ['ARCHHDRDIR', '$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], - ] - end - dirs << ['target_prefix', (target_prefix ? "/#{target_prefix}" : "")] -@@ -1728,7 +1728,6 @@ SRC - end - - def with_destdir(dir) -- return dir unless $extmk - dir = dir.sub($dest_prefix_pattern, '') - /\A\$[\(\{]/ =~ dir ? dir : "$(DESTDIR)"+dir - end -@@ -1787,8 +1786,8 @@ ECHO = $(ECHO1:0=@echo) - #### Start of system configuration section. #### - #{"top_srcdir = " + $top_srcdir.sub(%r"\A#{Regexp.quote($topdir)}/", "$(topdir)/") if $extmk} - srcdir = #{srcdir.gsub(/\$\((srcdir)\)|\$\{(srcdir)\}/) {mkintpath(CONFIG[$1||$2]).unspace}} --topdir = #{mkintpath(topdir = $extmk ? CONFIG["topdir"] : $topdir).unspace} --hdrdir = #{(hdrdir = CONFIG["hdrdir"]) == topdir ? "$(topdir)" : mkintpath(hdrdir).unspace} -+topdir = #{mkintpath($extmk ? CONFIG["topdir"] : $topdir).unspace} -+hdrdir = #{mkintpath(CONFIG["hdrdir"]).unspace} - arch_hdrdir = #{$arch_hdrdir.quote} - PATH_SEPARATOR = #{CONFIG['PATH_SEPARATOR']} - VPATH = #{vpath.join(CONFIG['PATH_SEPARATOR'])} --- -1.8.2.1 - diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index 3a36f91..a4a171f 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -1,8 +1,19 @@ +From 996012f6abe0ce4d68a2de9f249935c6d5b467bc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Fri, 4 Oct 2013 22:13:11 +0200 +Subject: [PATCH] Allow to specify addition preludes by configuration option. + +--- + Makefile.in | 1 + + common.mk | 2 +- + configure.in | 7 +++++++ + 3 files changed, 9 insertions(+), 1 deletion(-) + diff --git a/Makefile.in b/Makefile.in -index a93a1e6..fb30c19 100644 +index 7e8ed82..7916993 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -108,6 +108,7 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ +@@ -110,6 +110,7 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@ DEFAULT_PRELUDES = $(@USE_RUBYGEMS@_GEM_PRELUDE) @@ -11,10 +22,10 @@ index a93a1e6..fb30c19 100644 #### End of system configuration section. #### diff --git a/common.mk b/common.mk -index e5069e5..ca5e3f9 100644 +index 5cfbc3d..3f0a82e 100644 --- a/common.mk +++ b/common.mk -@@ -107,7 +107,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(DMYEXT) +@@ -110,7 +110,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(DMYEXT) GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) @@ -24,10 +35,10 @@ index e5069e5..ca5e3f9 100644 YES_GEM_PRELUDE = $(GEM_PRELUDE) NO_GEM_PRELUDE = diff --git a/configure.in b/configure.in -index 7977aaf..1ef42cd 100644 +index 0e371e2..d4f1dcb 100644 --- a/configure.in +++ b/configure.in -@@ -3494,6 +3494,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -3731,6 +3731,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl @@ -41,3 +52,6 @@ index 7977aaf..1ef42cd 100644 AC_ARG_WITH(mantype, AS_HELP_STRING([--with-mantype=TYPE], [specify man page type; TYPE is one of man and doc]), [ +-- +1.8.3.1 + diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch new file mode 100644 index 0000000..668edfa --- /dev/null +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -0,0 +1,28 @@ +From 07c666ba5c3360dd6f43605a8ac7c85c99c1721f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 1 Oct 2013 12:22:40 +0200 +Subject: [PATCH] Allow to configure libruby.so placement. + +--- + configure.in | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/configure.in b/configure.in +index 37d9a62..553d4d0 100644 +--- a/configure.in ++++ b/configure.in +@@ -2956,6 +2956,11 @@ if test ${multiarch+set}; then + fi + + archlibdir='${libdir}/${arch}' ++AC_ARG_WITH(archlibdir, ++ AS_HELP_STRING([--with-archlibdir=DIR], ++ [prefix for libruby [[LIBDIR/ARCH]]]), ++ [archlibdir="$withval"]) ++ + sitearchlibdir='${libdir}/${sitearch}' + archincludedir='${includedir}/${arch}' + sitearchincludedir='${includedir}/${sitearch}' +-- +1.8.3.1 + diff --git a/ruby-2.1.0-test_config.rb-fix-library-path.patch b/ruby-2.1.0-test_config.rb-fix-library-path.patch new file mode 100644 index 0000000..404a278 --- /dev/null +++ b/ruby-2.1.0-test_config.rb-fix-library-path.patch @@ -0,0 +1,31 @@ +From cf26cdec7bcd0668b8f8347a5f29072c8b8f6e8d Mon Sep 17 00:00:00 2001 +From: nobu +Date: Tue, 1 Oct 2013 11:36:47 +0000 +Subject: [PATCH] test_config.rb: fix library path + +* test/mkmf/test_config.rb (test_dir_config): fix expected library + path. [ruby-core:57535] [Bug #8972] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43106 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + test/mkmf/test_config.rb | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/test/mkmf/test_config.rb b/test/mkmf/test_config.rb +index b09dfd6..4a9be57 100644 +--- a/test/mkmf/test_config.rb ++++ b/test/mkmf/test_config.rb +@@ -8,8 +8,9 @@ class TestMkmf < Test::Unit::TestCase + class TestConfig < Test::Unit::TestCase + def test_dir_config + bug8074 = '[Bug #8074]' ++ lib = RbConfig.expand(RbConfig::MAKEFILE_CONFIG["libdir"], "exec_prefix"=>"") + assert_separately %w[-rmkmf - -- --with-foo-dir=/test/foo], %{ +- assert_equal(%w[/test/foo/include /test/foo/lib], dir_config("foo"), #{bug8074.dump}) ++ assert_equal(%w[/test/foo/include /test/foo#{lib}], dir_config("foo"), #{bug8074.dump}) + } + end + end +-- +1.8.3.1 + diff --git a/ruby.spec b/ruby.spec index 9aea8a4..4d796ff 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,7 +1,7 @@ %global major_version 2 -%global minor_version 0 +%global minor_version 1 %global teeny_version 0 -%global patch_level 247 +%global patch_level 0 %global major_minor_version %{major_version}.%{minor_version} @@ -10,7 +10,7 @@ %global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. -#%%global milestone preview2 +%global milestone preview1 # Keep the revision enabled for pre-releases from SVN. #%%global revision 39387 @@ -26,10 +26,10 @@ %endif -%global release 15 +%global release 16 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -%global rubygems_version 2.0.3 +%global rubygems_version 2.2.0.preview.1 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. @@ -39,12 +39,12 @@ # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version_patch_level} -%global rdoc_version 4.0.0 -%global bigdecimal_version 1.2.0 +%global rdoc_version 4.1.0.preview.1 +%global bigdecimal_version 1.2.1 %global io_console_version 0.4.2 %global json_version 1.7.7 -%global minitest_version 4.3.2 -%global psych_version 2.0.0 +%global minitest_version 4.7.5 +%global psych_version 2.0.1 # Might not be needed in the future, if we are lucky enough. # https://bugzilla.redhat.com/show_bug.cgi?id=888262 @@ -114,52 +114,41 @@ source_macros(rpm.expand("%{SOURCE5}")) # http://bugs.ruby-lang.org/issues/7807 Patch0: ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +# Allows to override libruby.so placement. Hopefully we will be able to return +# to plain --with-rubyarchprefix. +# http://bugs.ruby-lang.org/issues/8973 +Patch1: ruby-2.1.0-Enable-configuration-of-archlibdir.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. Patch3: ruby-1.9.3-always-use-i386.patch # Fixes random WEBRick test failures. # https://bugs.ruby-lang.org/issues/6573. Patch5: ruby-1.9.3.p195-fix-webrick-tests.patch +# https://github.com/rubygems/rubygems/pull/667 +Patch7: rubygems-2.2.0-DRY-Use-full_require_paths-on-yet-another-place.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://redmine.ruby-lang.org/issues/5617 Patch8: ruby-1.9.3-custom-rubygems-location.patch # Add support for installing binary extensions according to FHS. # https://github.com/rubygems/rubygems/issues/210 -# Note that 8th patch might be resolved by -# https://bugs.ruby-lang.org/issues/7897 Patch9: rubygems-2.0.0-binary-extensions.patch # Make mkmf verbose by default Patch12: ruby-1.9.3-mkmf-verbose.patch -# This slightly changes behavior of "gem install --install-dir" behavior. # Without this patch, Specifications.dirs is modified and gems installed on # the system cannot be required anymore. This causes later issues when RDoc # documentation should be generated, since json gem is sudenly not accessible. -# https://github.com/rubygems/rubygems/pull/452 +# https://github.com/rubygems/rubygems/pull/670 Patch13: rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch -# This prevents issues, when ruby configuration specifies --with-ruby-version=''. -# https://github.com/rubygems/rubygems/pull/455 -Patch14: rubygems-2.0.0-Fixes-for-empty-ruby-version.patch -# Although this does not directly affects Fedora ATM, it might be issue when -# rebuilding package on different platform (RHEL7). Please keep the patch until -# it is resolved in upstream. -# https://bugs.ruby-lang.org/issues/8384 -Patch15: ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch -# Adds aarch64 support. -# http://bugs.ruby-lang.org/issues/8331 -# https://bugzilla.redhat.com/show_bug.cgi?id=926463 -# Please note that this is the BZ patch, it might be good idea to update it -# with its upstream version when available. -Patch16: ruby-2.0.0-p195-aarch64.patch # Adds support for '--with-prelude' configuration option. This allows to built # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch -# Fixes issues with DESTDIR. -# https://bugs.ruby-lang.org/issues/8115 -Patch18: ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch # Fixes multilib conlicts of .gemspec files. # https://bugs.ruby-lang.org/issues/8623 Patch19: ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch +# TestMkmf::TestConfig#test_dir_config fails on x86_64. +# http://bugs.ruby-lang.org/issues/8972 +Patch20: ruby-2.1.0-test_config.rb-fix-library-path.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -417,18 +406,17 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %setup -q -n %{ruby_archive} %patch0 -p1 +%patch1 -p1 %patch3 -p1 %patch5 -p1 +%patch7 -p1 %patch8 -p1 %patch9 -p1 %patch12 -p1 %patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 %patch17 -p1 -%patch18 -p1 %patch19 -p1 +%patch20 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -443,6 +431,7 @@ autoconf %configure \ --with-rubylibprefix='%{ruby_libdir}' \ + --with-archlibdir='%{_libdir}' \ --with-rubyarchprefix='%{ruby_libarchdir}' \ --with-sitedir='%{ruby_sitelibdir}' \ --with-sitearchdir='%{ruby_sitearchdir}' \ @@ -460,7 +449,10 @@ autoconf --enable-multiarch \ --with-prelude=./abrt_prelude.rb \ - +# This avoids regeneration of sizes.c (BASERUBY is needed for that), when +# configure.in has newer timestamp the sizes.c (after patch is applied). +# http://bugs.ruby-lang.org/issues/8968 +touch sizes.c # Q= makes the build output more verbose and allows to check Fedora # compiler options. @@ -600,6 +592,12 @@ DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" # the test suite). touch abrt.rb +# Fix "./ruby: error while loading shared libraries: libruby.so.2.1: cannot open +# shared object file: No such file or directory" error. +# http://bugs.ruby-lang.org/issues/8971 +# Fixed in rev43129. +sed -i '/yes-test-sample/,/test-knownbugs/ s/MINIRUBY/RUNRUBY/' uncommon.mk + make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig @@ -785,6 +783,7 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/strscan.so %{ruby_libarchdir}/syslog.so %exclude %{ruby_libarchdir}/tcltklib.so +%{ruby_libarchdir}/thread.so %exclude %{ruby_libarchdir}/tkutil.so %{ruby_libarchdir}/zlib.so @@ -893,6 +892,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Oct 07 2013 Vít Ondruch - 2.1.0.0-0.16.preview1 +- Update to Ruby 2.1.0.preview1. + * Tue Jul 30 2013 Vít Ondruch - 2.0.0.247-15 - Move Psych symlinks to vendor dir, to prevent F18 -> F19 upgrade issues (rhbz#988490). diff --git a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch index 607e028..ad0f0bf 100644 --- a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch +++ b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch @@ -1,152 +1,29 @@ -From b95b9942361104dc5b7fd08eb4970f893d8c1a54 Mon Sep 17 00:00:00 2001 +From ad80fb9ffe5ab73e05784237de8d8b7d03784867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 13 Feb 2013 13:12:30 +0100 -Subject: [PATCH 1/3] Remove duplicated check. +Date: Fri, 4 Oct 2013 22:13:11 +0200 +Subject: [PATCH] Do not modify global Specification.dirs during installation. -The loaded specifications are rejected already in #gather_dependencies, -so this condition cannot trigger. --- - lib/rubygems/dependency_installer.rb | 3 --- - 1 file changed, 3 deletions(-) + lib/rubygems/dependency_installer.rb | 6 ------ + 1 file changed, 6 deletions(-) diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb -index d811f62..dffa8df 100644 +index e7c489a..5123fce 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb -@@ -330,9 +330,6 @@ class Gem::DependencyInstaller +@@ -74,12 +74,6 @@ class Gem::DependencyInstaller + @only_install_dir = !!options[:install_dir] + @install_dir = options[:install_dir] || Gem.dir - last = @gems_to_install.size - 1 - @gems_to_install.each_with_index do |spec, index| -- # REFACTOR more current spec set hardcoding, should be abstracted? -- next if Gem::Specification.include?(spec) and index != last -- - # TODO: make this sorta_verbose so other users can benefit from it - say "Installing gem #{spec.full_name}" if Gem.configuration.really_verbose - --- -1.8.1.2 - - -From 2fa9087b1986db6c7945c0f997fed2bfff5ce06a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 13 Feb 2013 15:47:47 +0100 -Subject: [PATCH 2/3] Do not modify global Specification.dirs during - installation. - -While gems are installed into --install-dir just fine even without -modifications of Specification.dirs, change in it makes inaccessible -gems already present on the system. ---- - lib/rubygems/dependency_installer.rb | 15 ++++++--------- - 1 file changed, 6 insertions(+), 9 deletions(-) - -diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb -index dffa8df..841f26a 100644 ---- a/lib/rubygems/dependency_installer.rb -+++ b/lib/rubygems/dependency_installer.rb -@@ -57,17 +57,14 @@ class Gem::DependencyInstaller - # :build_args:: See Gem::Installer::new - - def initialize(options = {}) -- @install_dir = options[:install_dir] || Gem.dir - - if options[:install_dir] then +- if options[:install_dir] then - # HACK shouldn't change the global settings, needed for -i behavior - # maybe move to the install command? See also github #442 - Gem::Specification.dirs = @install_dir -- Gem.ensure_gem_subdirectories @install_dir -+ Gem.ensure_gem_subdirectories options[:install_dir] - end - +- end +- options = DEFAULT_OPTIONS.merge options -+ @install_dir = options[:install_dir] @bin_dir = options[:bin_dir] - @dev_shallow = options[:dev_shallow] - @development = options[:development] -@@ -92,7 +89,7 @@ class Gem::DependencyInstaller - @installed_gems = [] - @toplevel_specs = nil - -- @cache_dir = options[:cache_dir] || @install_dir -+ @cache_dir = options[:cache_dir] || @install_dir || Gem.dir - - # Set with any errors that SpecFetcher finds while search through - # gemspecs for a dep -@@ -202,7 +199,7 @@ class Gem::DependencyInstaller - # that this isn't dependent only on the currently installed gems - dependency_list.specs.reject! { |spec| - not keep_names.include?(spec.full_name) and -- Gem::Specification.include?(spec) -+ (!@install_dir && Gem::Specification.include?(spec)) - } - - unless dependency_list.ok? or @ignore_dependencies or @force then -@@ -254,7 +251,7 @@ class Gem::DependencyInstaller - to_do.push t.spec - end - -- results.remove_installed! dep -+ results.remove_installed! dep unless @install_dir - - @available << results - results.inject_into_list dependency_list -@@ -360,7 +357,7 @@ class Gem::DependencyInstaller - :force => @force, - :format_executable => @format_executable, - :ignore_dependencies => @ignore_dependencies, -- :install_dir => @install_dir, -+ :install_dir => (@install_dir || Gem.dir), - :security_policy => @security_policy, - :user_install => @user_install, - :wrappers => @wrappers, -- -1.8.1.2 - - -From d473204ce920702dd87257db49355929f31530d4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 15 Feb 2013 17:02:44 +0100 -Subject: [PATCH 3/3] Default to Gem.dir as late as possible. - ---- - lib/rubygems/dependency_installer.rb | 2 +- - lib/rubygems/installer.rb | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb -index 841f26a..abcfa0f 100644 ---- a/lib/rubygems/dependency_installer.rb -+++ b/lib/rubygems/dependency_installer.rb -@@ -357,7 +357,7 @@ class Gem::DependencyInstaller - :force => @force, - :format_executable => @format_executable, - :ignore_dependencies => @ignore_dependencies, -- :install_dir => (@install_dir || Gem.dir), -+ :install_dir => @install_dir, - :security_policy => @security_policy, - :user_install => @user_install, - :wrappers => @wrappers, -diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index 780a88b..6543130 100644 ---- a/lib/rubygems/installer.rb -+++ b/lib/rubygems/installer.rb -@@ -537,13 +537,13 @@ class Gem::Installer - :bin_dir => nil, - :env_shebang => false, - :force => false, -- :install_dir => Gem.dir, - :only_install_dir => false - }.merge options - - @env_shebang = options[:env_shebang] - @force = options[:force] -- @gem_home = options[:install_dir] -+ @install_dir = options[:install_dir] -+ @gem_home = options[:install_dir] || Gem.dir - @ignore_dependencies = options[:ignore_dependencies] - @format_executable = options[:format_executable] - @security_policy = options[:security_policy] --- -1.8.1.2 +1.8.3.1 diff --git a/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch b/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch deleted file mode 100644 index e443a46..0000000 --- a/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch +++ /dev/null @@ -1,81 +0,0 @@ -From c9b2eff36728266052ccfff54d3ac0a0624fd0f1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 14 Feb 2013 11:50:41 +0100 -Subject: [PATCH 1/2] Use File.join insteado of manual path creation. - -This prevents issues, when File.join in #new_default_spec removes -superfluous slashes while they are kept in expected paths. E.g. the test -would fail if ruby configuration specifies --with-ruby-version=''. ---- - test/rubygems/test_gem_commands_contents_command.rb | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/test/rubygems/test_gem_commands_contents_command.rb b/test/rubygems/test_gem_commands_contents_command.rb -index 60df53f..35c9631 100644 ---- a/test/rubygems/test_gem_commands_contents_command.rb -+++ b/test/rubygems/test_gem_commands_contents_command.rb -@@ -140,10 +140,10 @@ lib/foo.rb - @cmd.execute - end - -- expected = %W[ -- #{Gem::ConfigMap[:bindir]}/default_command -- #{Gem::ConfigMap[:rubylibdir]}/default/gem.rb -- #{Gem::ConfigMap[:archdir]}/default_gem.so -+ expected = [ -+ File.join(Gem::ConfigMap[:bindir], 'default_command'), -+ File.join(Gem::ConfigMap[:rubylibdir], 'default/gem.rb'), -+ File.join(Gem::ConfigMap[:archdir], 'default_gem.so') - ].sort.join "\n" - - assert_equal expected, @ui.output.chomp --- -1.8.1.2 - - -From b022cef7b2e6c2d138388a6c2db02cca8c408cc6 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 14 Feb 2013 13:35:20 +0100 -Subject: [PATCH 2/2] Do not add last slash to Gem.user_dir if ruby_version - string is empty. - ---- - lib/rubygems/defaults.rb | 4 +++- - test/rubygems/test_gem.rb | 6 ++++-- - 2 files changed, 7 insertions(+), 3 deletions(-) - -diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb -index ea84e5c..05c35bb 100644 ---- a/lib/rubygems/defaults.rb -+++ b/lib/rubygems/defaults.rb -@@ -54,7 +54,9 @@ module Gem - # Path for gems in the user's home directory - - def self.user_dir -- File.join Gem.user_home, '.gem', ruby_engine, ConfigMap[:ruby_version] -+ parts = [Gem.user_home, '.gem', ruby_engine] -+ parts << ConfigMap[:ruby_version] unless ConfigMap[:ruby_version].empty? -+ File.join parts - end - - ## -diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb -index bf77009..9ee78f7 100644 ---- a/test/rubygems/test_gem.rb -+++ b/test/rubygems/test_gem.rb -@@ -1198,8 +1198,10 @@ class TestGem < Gem::TestCase - end - - def test_self_user_dir -- assert_equal File.join(@userhome, '.gem', Gem.ruby_engine, -- Gem::ConfigMap[:ruby_version]), Gem.user_dir -+ parts = [@userhome, '.gem', Gem.ruby_engine] -+ parts << Gem::ConfigMap[:ruby_version] unless Gem::ConfigMap[:ruby_version].empty? -+ -+ assert_equal File.join(parts), Gem.user_dir - end - - def test_self_user_home --- -1.8.1.2 - diff --git a/rubygems-2.0.0-binary-extensions.patch b/rubygems-2.0.0-binary-extensions.patch index 4876d35..5c212e7 100644 --- a/rubygems-2.0.0-binary-extensions.patch +++ b/rubygems-2.0.0-binary-extensions.patch @@ -1,258 +1,97 @@ -From ec90622235ae19b28a327cb50a10e0311e8f3d71 Mon Sep 17 00:00:00 2001 +From 37cd8547d23973a7ec23a004ab9b60738d67ada9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 3 Nov 2011 16:43:05 +0100 -Subject: [PATCH 1/8] Add dedicate extensions folder into $LOAD_PATH. +Subject: [PATCH] Add dedicate extensions folder into $LOAD_PATH. --- - lib/rubygems/specification.rb | 32 ++++++++++++++++++++++++++++++-- - 1 file changed, 30 insertions(+), 2 deletions(-) + lib/rubygems/basic_specification.rb | 35 ++++++++++++++++++++++++++++++++--- + lib/rubygems/defaults.rb | 11 +++++++++++ + lib/rubygems/ext/builder.rb | 6 +++++- + lib/rubygems/installer.rb | 1 + + lib/rubygems/specification.rb | 7 +++++++ + lib/rubygems/uninstaller.rb | 1 + + 6 files changed, 57 insertions(+), 4 deletions(-) -diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index cabdf8d..87b14d2 100644 ---- a/lib/rubygems/specification.rb -+++ b/lib/rubygems/specification.rb -@@ -1256,6 +1256,12 @@ class Gem::Specification - File.join full_gem_path, path - end - -+ unless extensions.empty? -+ paths += require_paths.map do |path| -+ File.join ext_dir, path -+ end -+ end -+ - # gem directories must come after -I and ENV['RUBYLIB'] - insert_index = Gem.load_path_insert_index - -@@ -1374,11 +1380,16 @@ class Gem::Specification - - def contains_requirable_file? file - root = full_gem_path -+ ext = ext_dir - suffixes = Gem.suffixes - - require_paths.any? do |lib| -- base = "#{root}/#{lib}/#{file}" -- suffixes.any? { |suf| File.file? "#{base}#{suf}" } -+ base = ["#{root}/#{lib}/#{file}"] -+ base << "#{ext}/#{lib}/#{file}" unless extensions.empty? -+ -+ base.any? do |path| -+ suffixes.any? { |suf| File.file? "#{path}#{suf}" } -+ end - end +diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb +index a10eab3..da3af91 100644 +--- a/lib/rubygems/basic_specification.rb ++++ b/lib/rubygems/basic_specification.rb +@@ -51,6 +51,14 @@ class Gem::BasicSpecification + File.dirname(loaded_from) == self.class.default_specifications_dir end -@@ -1674,6 +1685,23 @@ class Gem::Specification - end - - ## -+ # Returns the full path to this spec's ext directory. -+ # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0 -+ -+ def ext_dir -+ @gem_dir ||= File.expand_path File.join(exts_dir, full_name) -+ end -+ + ## + # Returns the full path to the exts directory containing this spec's + # gem directory. eg: /usr/local/lib/ruby/1.8/exts + + def exts_dir -+ # TODO: this logic seems terribly broken, but tests fail if just base_dir -+ @exts_dir ||= File.join(loaded_from && base_dir || Gem.dir, "exts") ++ @exts_dir ||= Gem.default_ext_dir_for(base_dir) || gems_dir ++ end ++ + def find_full_gem_path # :nodoc: + # TODO: also, shouldn't it default to full_name if it hasn't been written? + path = File.expand_path File.join(gems_dir, full_name) +@@ -60,6 +68,15 @@ class Gem::BasicSpecification + + private :find_full_gem_path + ++ def find_full_gem_ext_path # :nodoc: ++ # TODO: skip for gems without extensions. ++ path = File.expand_path File.join(exts_dir, full_name) ++ path.untaint ++ path if File.directory? path ++ end ++ ++ private :find_full_gem_ext_path ++ + ## + # The full path to the gem (install path + full name). + +@@ -70,6 +87,13 @@ class Gem::BasicSpecification + end + + ## ++ # The full path to the gem binary extension (install path + full name). ++ ++ def full_gem_ext_path ++ @full_gem_ext_path ||= find_full_gem_ext_path + end + + ## - # Deprecated and ignored, defaults to true. + # Returns the full name (name-version) of this Gem. Platform information + # is included (name-version-platform) if it is specified and not the + # default Ruby platform. +@@ -88,9 +112,12 @@ class Gem::BasicSpecification # - # Formerly used to indicate this gem was RDoc-capable. --- -1.8.1.2 - - -From e42819f32fc5d935f7e7189ec4be8bdab0a2cf3f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 16 Nov 2011 13:26:48 +0100 -Subject: [PATCH 2/8] Use spec's ext dir for extension installation. - ---- - lib/rubygems/installer.rb | 2 +- - lib/rubygems/specification.rb | 7 +++---- - 2 files changed, 4 insertions(+), 5 deletions(-) - -diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index 780a88b..854c177 100644 ---- a/lib/rubygems/installer.rb -+++ b/lib/rubygems/installer.rb -@@ -646,7 +646,7 @@ TEXT - say "This could take a while..." - end -- dest_path = File.join gem_dir, spec.require_paths.first -+ dest_path = spec.ext_dir - ran_rake = false # only run rake once - - spec.extensions.each do |extension| -diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index 87b14d2..492ddbe 100644 ---- a/lib/rubygems/specification.rb -+++ b/lib/rubygems/specification.rb -@@ -1689,16 +1689,15 @@ class Gem::Specification - # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0 - - def ext_dir -- @gem_dir ||= File.expand_path File.join(exts_dir, full_name) -+ @ext_dir ||= File.join exts_dir, full_name, require_paths.first - end - - ## - # Returns the full path to the exts directory containing this spec's -- # gem directory. eg: /usr/local/lib/ruby/1.8/exts -+ # gem directory. eg: /usr/local/lib/ruby/1.8/gems - - def exts_dir -- # TODO: this logic seems terribly broken, but tests fail if just base_dir -- @exts_dir ||= File.join(loaded_from && base_dir || Gem.dir, "exts") -+ @exts_dir ||= gems_dir - end - - ## --- -1.8.1.2 - - -From 0e9dd0655111f7dda805233c79a3771459d9a66a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 16 Nov 2011 14:52:16 +0100 -Subject: [PATCH 3/9] Simplify the extending of $LOAD_PATH for binary gems. - ---- - lib/rubygems/specification.rb | 11 +++++------ - 1 file changed, 5 insertions(+), 6 deletions(-) - -diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index 492ddbe..c703827 100644 ---- a/lib/rubygems/specification.rb -+++ b/lib/rubygems/specification.rb -@@ -1256,11 +1256,7 @@ class Gem::Specification - File.join full_gem_path, path - end - -- unless extensions.empty? -- paths += require_paths.map do |path| -- File.join ext_dir, path -- end + def full_require_paths +- require_paths.map do |path| +- File.join full_gem_path, path - end -+ paths << ext_dir unless extensions.empty? || paths.include?(ext_dir) - - # gem directories must come after -I and ENV['RUBYLIB'] - insert_index = Gem.load_path_insert_index -@@ -1697,7 +1693,10 @@ class Gem::Specification - # gem directory. eg: /usr/local/lib/ruby/1.8/gems - - def exts_dir -- @exts_dir ||= gems_dir -+ @exts_dir ||= begin -+ dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir} -+ dirs ? File.join(dirs.last[:ext_dir], 'exts') : gems_dir -+ end ++ require_paths.map do |require_path| ++ full_gem_paths = [full_gem_path, full_gem_ext_path] ++ full_gem_paths.compact! ++ ++ full_gem_paths.map { |path| File.join path, require_path } ++ end.flatten end ## --- -1.8.1.2 - - -From 9a8556c609e800d0dbd24af416d613f2e82f323c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 9 Dec 2011 16:31:04 +0100 -Subject: [PATCH 4/8] Fix the binary extension search path construction. - ---- - lib/rubygems/installer.rb | 2 +- - lib/rubygems/specification.rb | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index 854c177..f1f2ad7 100644 ---- a/lib/rubygems/installer.rb -+++ b/lib/rubygems/installer.rb -@@ -646,7 +646,7 @@ TEXT - say "This could take a while..." - end +@@ -110,7 +137,9 @@ class Gem::BasicSpecification + @loaded_from = path && path.to_s -- dest_path = spec.ext_dir -+ dest_path = File.join spec.ext_dir, spec.require_paths.first - ran_rake = false # only run rake once - - spec.extensions.each do |extension| -diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index c703827..fa9ea6e 100644 ---- a/lib/rubygems/specification.rb -+++ b/lib/rubygems/specification.rb -@@ -1256,7 +1256,7 @@ class Gem::Specification - File.join full_gem_path, path - end - -- paths << ext_dir unless extensions.empty? || paths.include?(ext_dir) -+ paths << File.join(ext_dir, require_paths.first) unless extensions.empty? || (ext_dir == full_gem_path) - - # gem directories must come after -I and ENV['RUBYLIB'] - insert_index = Gem.load_path_insert_index -@@ -1685,7 +1685,7 @@ class Gem::Specification - # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0 - - def ext_dir -- @ext_dir ||= File.join exts_dir, full_name, require_paths.first -+ @ext_dir ||= File.join exts_dir, full_name + @full_gem_path = nil ++ @full_gem_ext_path = nil + @gems_dir = nil ++ @exts_dir = nil + @base_dir = nil end - ## --- -1.8.1.2 - - -From 476c2f90cc6f5f490858f253a9b23eb19d53d2fc Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Tue, 13 Dec 2011 12:14:54 +0100 -Subject: [PATCH 5/8] Remove binary extensions during uninstall. - ---- - lib/rubygems/uninstaller.rb | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb -index d672b9d..5c31a0c 100644 ---- a/lib/rubygems/uninstaller.rb -+++ b/lib/rubygems/uninstaller.rb -@@ -246,6 +246,7 @@ class Gem::Uninstaller - File.writable?(spec.base_dir) - - FileUtils.rm_rf spec.full_gem_path -+ FileUtils.rm_rf spec.ext_dir - - # TODO: should this be moved to spec?... I vote eww (also exists in docmgr) - old_platform_name = [spec.name, --- -1.8.1.2 - - -From 35dc17e86f701fe1be80d98ace79735c535fd570 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Tue, 13 Dec 2011 14:27:14 +0100 -Subject: [PATCH 6/8] Avoid dependency on customized operating_system.rb. - ---- - lib/rubygems/defaults.rb | 11 +++++++++++ - lib/rubygems/specification.rb | 5 +---- - 2 files changed, 12 insertions(+), 4 deletions(-) - diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb -index ea84e5c..b221954 100644 +index 591580b..8ed474f 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -101,6 +101,17 @@ module Gem +@@ -111,6 +111,17 @@ module Gem end ## @@ -270,75 +109,71 @@ index ea84e5c..b221954 100644 # A wrapper around RUBY_ENGINE const that may not be defined def self.ruby_engine -diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index fa9ea6e..2b10499 100644 ---- a/lib/rubygems/specification.rb -+++ b/lib/rubygems/specification.rb -@@ -1693,10 +1693,7 @@ class Gem::Specification - # gem directory. eg: /usr/local/lib/ruby/1.8/gems +diff --git a/lib/rubygems/ext/builder.rb b/lib/rubygems/ext/builder.rb +index 8c05723..75d5fc2 100644 +--- a/lib/rubygems/ext/builder.rb ++++ b/lib/rubygems/ext/builder.rb +@@ -170,7 +170,7 @@ EOF + say "This could take a while..." + end - def exts_dir -- @exts_dir ||= begin -- dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir} -- dirs ? File.join(dirs.last[:ext_dir], 'exts') : gems_dir -- end -+ @exts_dir ||= Gem.default_ext_dir_for(base_dir) || gems_dir +- dest_path = File.join @gem_dir, @spec.require_paths.first ++ dest_path = File.join(@only_install_dir ? @gem_dir : @spec.ext_dir, @spec.require_paths.first) + + @ran_rake = false # only run rake once + +@@ -181,5 +181,9 @@ EOF + end end ++ def only_install_dir= only_install_dir ++ @only_install_dir = only_install_dir ++ end ++ + end + +diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb +index 261af89..a6aca5d 100644 +--- a/lib/rubygems/installer.rb ++++ b/lib/rubygems/installer.rb +@@ -662,6 +662,7 @@ TEXT + + def build_extensions + builder = Gem::Ext::Builder.new spec, @build_args ++ builder.only_install_dir = @only_install_dir + + builder.build_extensions + end +diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb +index deac343..b630fa3 100644 +--- a/lib/rubygems/specification.rb ++++ b/lib/rubygems/specification.rb +@@ -1612,6 +1612,13 @@ class Gem::Specification < Gem::BasicSpecification + @executables = Array(value) + end + ++ # Returns the full path to this spec's ext directory. ++ # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0 ++ ++ def ext_dir ++ @ext_dir ||= File.expand_path File.join(exts_dir, full_name) ++ end ++ ## + # Sets extensions to +extensions+, ensuring it is an array. Don't + # use this, push onto the array instead. +diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb +index 143ab6d..f81a23d 100644 +--- a/lib/rubygems/uninstaller.rb ++++ b/lib/rubygems/uninstaller.rb +@@ -247,6 +247,7 @@ class Gem::Uninstaller + File.writable?(spec.base_dir) + + FileUtils.rm_rf spec.full_gem_path ++ FileUtils.rm_rf spec.ext_dir + + # TODO: should this be moved to spec?... I vote eww (also exists in docmgr) + old_platform_name = [spec.name, -- -1.8.1.2 - - -From 0937c0b0a3c2ed08ab5b0875f7f95e24157525c2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 7 Feb 2013 13:07:34 +0100 -Subject: [PATCH 7/8] Fix binary extensions installation when --install-dir is - specified. - ---- - lib/rubygems/installer.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index f1f2ad7..e1577fc 100644 ---- a/lib/rubygems/installer.rb -+++ b/lib/rubygems/installer.rb -@@ -646,7 +646,7 @@ TEXT - say "This could take a while..." - end - -- dest_path = File.join spec.ext_dir, spec.require_paths.first -+ dest_path = File.join(options[:install_dir] ? gem_dir : spec.ext_dir, spec.require_paths.first) - ran_rake = false # only run rake once - - spec.extensions.each do |extension| --- -1.8.1.2 - - -From 062a11c59731f5875d5a8821a212c8a41cb84577 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 15 Feb 2013 17:07:07 +0100 -Subject: [PATCH 8/8] Use correct option. - ---- - lib/rubygems/installer.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index e1577fc..1492c68 100644 ---- a/lib/rubygems/installer.rb -+++ b/lib/rubygems/installer.rb -@@ -646,7 +646,7 @@ TEXT - say "This could take a while..." - end - -- dest_path = File.join(options[:install_dir] ? gem_dir : spec.ext_dir, spec.require_paths.first) -+ dest_path = File.join(@install_dir ? gem_dir : spec.ext_dir, spec.require_paths.first) - ran_rake = false # only run rake once - - spec.extensions.each do |extension| --- -1.8.1.2 +1.8.3.1 diff --git a/rubygems-2.2.0-DRY-Use-full_require_paths-on-yet-another-place.patch b/rubygems-2.2.0-DRY-Use-full_require_paths-on-yet-another-place.patch new file mode 100644 index 0000000..a6766bc --- /dev/null +++ b/rubygems-2.2.0-DRY-Use-full_require_paths-on-yet-another-place.patch @@ -0,0 +1,71 @@ +From 02f94e96ea6a9e0fe37341eccd83ffb63549ead5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 3 Oct 2013 14:15:59 +0200 +Subject: [PATCH] DRY: Use full_require_paths on yet another place. + +--- + lib/rubygems/basic_specification.rb | 16 +++++++++++++--- + lib/rubygems/specification.rb | 11 ----------- + 2 files changed, 13 insertions(+), 14 deletions(-) + +diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb +index 24bb4bc..a10eab3 100644 +--- a/lib/rubygems/basic_specification.rb ++++ b/lib/rubygems/basic_specification.rb +@@ -38,11 +38,10 @@ class Gem::BasicSpecification + # Return true if this spec can require +file+. + + def contains_requirable_file? file +- root = full_gem_path + suffixes = Gem.suffixes + +- require_paths.any? do |lib| +- base = "#{root}/#{lib}/#{file}" ++ full_require_paths.any? do |path| ++ base = "#{path}/#{file}" + suffixes.any? { |suf| File.file? "#{base}#{suf}" } + end + end +@@ -84,6 +83,17 @@ class Gem::BasicSpecification + end + + ## ++ # Full paths in the gem to add to $LOAD_PATH when this gem is ++ # activated. ++ # ++ ++ def full_require_paths ++ require_paths.map do |path| ++ File.join full_gem_path, path ++ end ++ end ++ ++ ## + # Returns the full path to the gems directory containing this spec's + # gem directory. eg: /usr/local/lib/ruby/1.8/gems + +diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb +index 6de8c3b..deac343 100644 +--- a/lib/rubygems/specification.rb ++++ b/lib/rubygems/specification.rb +@@ -2015,17 +2015,6 @@ class Gem::Specification < Gem::BasicSpecification + end + + ## +- # Full paths in the gem to add to $LOAD_PATH when this gem is +- # activated. +- # +- +- def full_require_paths +- require_paths.map do |path| +- File.join full_gem_path, path +- end +- end +- +- ## + # The RubyGems version required by this gem + + def required_rubygems_version= req +-- +1.8.3.1 + diff --git a/sources b/sources index 44c414b..ca481bf 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -60913f3eec0c4071f44df42600be2604 ruby-2.0.0-p247.tar.bz2 +d32d1ea23988399afadbd21c5a7a37fc ruby-2.1.0-preview1.tar.bz2 From 835bcc89f9cbb404b89383d71112ea0413d8de19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 7 Oct 2013 13:08:54 +0200 Subject: [PATCH 122/530] Update versions of significantly updated patches. --- ...-duplicated-paths-when-empty-version-string-i.patch | 0 ...-use-i386.patch => ruby-2.1.0-always-use-i386.patch | 0 ....patch => ruby-2.1.0-custom-rubygems-location.patch | 0 ruby.spec | 10 +++++----- ...modify-global-Specification.dirs-during-insta.patch | 0 ...ons.patch => rubygems-2.2.0-binary-extensions.patch | 0 6 files changed, 5 insertions(+), 5 deletions(-) rename ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch => ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch (100%) rename ruby-1.9.3-always-use-i386.patch => ruby-2.1.0-always-use-i386.patch (100%) rename ruby-1.9.3-custom-rubygems-location.patch => ruby-2.1.0-custom-rubygems-location.patch (100%) rename rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch => rubygems-2.2.0-Do-not-modify-global-Specification.dirs-during-insta.patch (100%) rename rubygems-2.0.0-binary-extensions.patch => rubygems-2.2.0-binary-extensions.patch (100%) diff --git a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch similarity index 100% rename from ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch rename to ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch similarity index 100% rename from ruby-1.9.3-always-use-i386.patch rename to ruby-2.1.0-always-use-i386.patch diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch similarity index 100% rename from ruby-1.9.3-custom-rubygems-location.patch rename to ruby-2.1.0-custom-rubygems-location.patch diff --git a/ruby.spec b/ruby.spec index 4d796ff..5c3e1a2 100644 --- a/ruby.spec +++ b/ruby.spec @@ -113,14 +113,14 @@ source_macros(rpm.expand("%{SOURCE5}")) } # http://bugs.ruby-lang.org/issues/7807 -Patch0: ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +Patch0: ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch # Allows to override libruby.so placement. Hopefully we will be able to return # to plain --with-rubyarchprefix. # http://bugs.ruby-lang.org/issues/8973 Patch1: ruby-2.1.0-Enable-configuration-of-archlibdir.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. -Patch3: ruby-1.9.3-always-use-i386.patch +Patch3: ruby-2.1.0-always-use-i386.patch # Fixes random WEBRick test failures. # https://bugs.ruby-lang.org/issues/6573. Patch5: ruby-1.9.3.p195-fix-webrick-tests.patch @@ -128,17 +128,17 @@ Patch5: ruby-1.9.3.p195-fix-webrick-tests.patch Patch7: rubygems-2.2.0-DRY-Use-full_require_paths-on-yet-another-place.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://redmine.ruby-lang.org/issues/5617 -Patch8: ruby-1.9.3-custom-rubygems-location.patch +Patch8: ruby-2.1.0-custom-rubygems-location.patch # Add support for installing binary extensions according to FHS. # https://github.com/rubygems/rubygems/issues/210 -Patch9: rubygems-2.0.0-binary-extensions.patch +Patch9: rubygems-2.2.0-binary-extensions.patch # Make mkmf verbose by default Patch12: ruby-1.9.3-mkmf-verbose.patch # Without this patch, Specifications.dirs is modified and gems installed on # the system cannot be required anymore. This causes later issues when RDoc # documentation should be generated, since json gem is sudenly not accessible. # https://github.com/rubygems/rubygems/pull/670 -Patch13: rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch +Patch13: rubygems-2.2.0-Do-not-modify-global-Specification.dirs-during-insta.patch # Adds support for '--with-prelude' configuration option. This allows to built # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 diff --git a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.2.0-Do-not-modify-global-Specification.dirs-during-insta.patch similarity index 100% rename from rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch rename to rubygems-2.2.0-Do-not-modify-global-Specification.dirs-during-insta.patch diff --git a/rubygems-2.0.0-binary-extensions.patch b/rubygems-2.2.0-binary-extensions.patch similarity index 100% rename from rubygems-2.0.0-binary-extensions.patch rename to rubygems-2.2.0-binary-extensions.patch From 8f30dbcc0baa2241f9326aac6b2d9997e6f39cd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 9 Oct 2013 16:10:06 +0200 Subject: [PATCH 123/530] Workaround several failing tests. --- ruby.spec | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/ruby.spec b/ruby.spec index 5c3e1a2..ce694b0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -587,6 +587,13 @@ DISABLE_TESTS="" DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" %endif +%ifarch i686 +# TestSprintf#test_float fails on i686 +# http://bugs.ruby-lang.org/issues/8358 +sed -i "/assert_equal(\"0x1p+2\", sprintf('%.0a', Float('0x1.fp+1')), \"\[ruby-dev:42551\]\")/ s/^/#/" test/ruby/test_sprintf.rb +sed -i "/assert_equal(\"-0x1.0p+2\", sprintf('%.1a', Float('-0x1.ffp+1')), \"\[ruby-dev:42551\]\")/ s/^/#/" test/ruby/test_sprintf.rb +%endif + # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing # the test suite). @@ -598,6 +605,17 @@ touch abrt.rb # Fixed in rev43129. sed -i '/yes-test-sample/,/test-knownbugs/ s/MINIRUBY/RUNRUBY/' uncommon.mk +# TestSignal#test_hup_me hangs up the test suite. +# http://bugs.ruby-lang.org/issues/8997 +sed -i '/def test_hup_me/,/end if Process.respond_to/ s/^/#/' test/ruby/test_signal.rb + +%ifarch armv7l armv7hl armv7hnl +# TestProcess#test_clock_getres_constants and TestProcess#test_clock_gettime_constants fails on ARM. +# http://bugs.ruby-lang.org/issues/9008 +sed -i '/Process.constants.grep(\/\\ACLOCK_\/).each {|n|/ s/$/\n next if [:CLOCK_REALTIME_ALARM, :CLOCK_BOOTTIME_ALARM].include? n/' \ + test/ruby/test_process.rb +%endif + make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig From 4f8b7ad60ddf7d052852dcd88e684bcb3aa7dda9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 12 Nov 2013 13:28:42 +0100 Subject: [PATCH 124/530] Add remark about the upcomming ARM issue fix. --- ruby.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ruby.spec b/ruby.spec index ce694b0..aebfa01 100644 --- a/ruby.spec +++ b/ruby.spec @@ -612,6 +612,9 @@ sed -i '/def test_hup_me/,/end if Process.respond_to/ s/^/#/' test/ruby/test_sig %ifarch armv7l armv7hl armv7hnl # TestProcess#test_clock_getres_constants and TestProcess#test_clock_gettime_constants fails on ARM. # http://bugs.ruby-lang.org/issues/9008 +# Kernel issue. Should be fixed in 3.13 kernel. +# https://lkml.org/lkml/2013/10/18/521 +# http://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/commit/?id=98d6f4dd84a134d942827584a3c5f67ffd8ec35f sed -i '/Process.constants.grep(\/\\ACLOCK_\/).each {|n|/ s/$/\n next if [:CLOCK_REALTIME_ALARM, :CLOCK_BOOTTIME_ALARM].include? n/' \ test/ruby/test_process.rb %endif From eac4c415ba6b6ed3a6bad631d1bd43cb93f24155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 27 Nov 2013 16:07:24 +0100 Subject: [PATCH 125/530] Update to Ruby 2.0.0-p353. - Allow MD5 in OpenSSL for tests. - Fix heap overflow in floating point parsing (CVE-2013-4164). --- .gitignore | 1 + ...inst-OpenSSL-with-enabled-ECC-curves.patch | 85 ------------------- ruby.spec | 19 +++-- ...obal-Specification.dirs-during-insta.patch | 3 +- ...s-2.0.0-Fixes-for-empty-ruby-version.patch | 49 +---------- sources | 2 +- 6 files changed, 14 insertions(+), 145 deletions(-) delete mode 100644 ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch diff --git a/.gitignore b/.gitignore index b883574..552398f 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ ruby-rev415a3ef9ab82c65a7abc-ext_tk.tar.gz /ruby-2.0.0-p0.tar.gz /ruby-2.0.0-p195.tar.bz2 /ruby-2.0.0-p247.tar.bz2 +/ruby-2.0.0-p353.tar.bz2 diff --git a/ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch b/ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch deleted file mode 100644 index 461b787..0000000 --- a/ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 5617aafa2d44d0a4bc811830e225463abd01b2b2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Tue, 21 May 2013 10:01:33 +0200 -Subject: [PATCH] Fix build against OpenSSL with enabled ECC curves. - ---- - ext/openssl/ossl_pkey_ec.c | 4 ++++ - test/openssl/test_pkey_ec.rb | 26 +++++++++++++------------- - 2 files changed, 17 insertions(+), 13 deletions(-) - -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index 8e6d88f..29e28ca 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -762,8 +762,10 @@ static VALUE ossl_ec_group_initialize(int argc, VALUE *argv, VALUE self) - method = EC_GFp_mont_method(); - } else if (id == s_GFp_nist) { - method = EC_GFp_nist_method(); -+#if !defined(OPENSSL_NO_EC2M) - } else if (id == s_GF2m_simple) { - method = EC_GF2m_simple_method(); -+#endif - } - - if (method) { -@@ -817,8 +819,10 @@ static VALUE ossl_ec_group_initialize(int argc, VALUE *argv, VALUE self) - - if (id == s_GFp) { - new_curve = EC_GROUP_new_curve_GFp; -+#if !defined(OPENSSL_NO_EC2M) - } else if (id == s_GF2m) { - new_curve = EC_GROUP_new_curve_GF2m; -+#endif - } else { - ossl_raise(rb_eArgError, "unknown symbol, must be :GFp or :GF2m"); - } -diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb -index f151335..56f3ff7 100644 ---- a/test/openssl/test_pkey_ec.rb -+++ b/test/openssl/test_pkey_ec.rb -@@ -7,28 +7,28 @@ class OpenSSL::TestEC < Test::Unit::TestCase - @data1 = 'foo' - @data2 = 'bar' * 1000 # data too long for DSA sig - -- @group1 = OpenSSL::PKey::EC::Group.new('secp112r1') -- @group2 = OpenSSL::PKey::EC::Group.new('sect163k1') -- @group3 = OpenSSL::PKey::EC::Group.new('prime256v1') -+ @groups = [] -+ @keys = [] - -- @key1 = OpenSSL::PKey::EC.new -- @key1.group = @group1 -- @key1.generate_key -+ OpenSSL::PKey::EC.builtin_curves.each do |curve, comment| -+ group = OpenSSL::PKey::EC::Group.new(curve) - -- @key2 = OpenSSL::PKey::EC.new(@group2.curve_name) -- @key2.generate_key -+ key = OpenSSL::PKey::EC.new(group) -+ key.generate_key - -- @key3 = OpenSSL::PKey::EC.new(@group3) -- @key3.generate_key -- -- @groups = [@group1, @group2, @group3] -- @keys = [@key1, @key2, @key3] -+ @groups << group -+ @keys << key -+ end - end - - def compare_keys(k1, k2) - assert_equal(k1.to_pem, k2.to_pem) - end - -+ def test_builtin_curves -+ assert(!OpenSSL::PKey::EC.builtin_curves.empty?) -+ end -+ - def test_curve_names - @groups.each_with_index do |group, idx| - key = @keys[idx] --- -1.8.2.1 - diff --git a/ruby.spec b/ruby.spec index 9aea8a4..6a6bb46 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,7 +1,7 @@ %global major_version 2 %global minor_version 0 %global teeny_version 0 -%global patch_level 247 +%global patch_level 353 %global major_minor_version %{major_version}.%{minor_version} @@ -26,7 +26,7 @@ %endif -%global release 15 +%global release 16 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.0.3 @@ -139,11 +139,6 @@ Patch13: rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.pat # This prevents issues, when ruby configuration specifies --with-ruby-version=''. # https://github.com/rubygems/rubygems/pull/455 Patch14: rubygems-2.0.0-Fixes-for-empty-ruby-version.patch -# Although this does not directly affects Fedora ATM, it might be issue when -# rebuilding package on different platform (RHEL7). Please keep the patch until -# it is resolved in upstream. -# https://bugs.ruby-lang.org/issues/8384 -Patch15: ruby-2.0.0-p195-Fix-build-against-OpenSSL-with-enabled-ECC-curves.patch # Adds aarch64 support. # http://bugs.ruby-lang.org/issues/8331 # https://bugzilla.redhat.com/show_bug.cgi?id=926463 @@ -424,7 +419,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch12 -p1 %patch13 -p1 %patch14 -p1 -%patch15 -p1 %patch16 -p1 %patch17 -p1 %patch18 -p1 @@ -600,7 +594,9 @@ DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" # the test suite). touch abrt.rb -make check TESTS="-v $DISABLE_TESTS" +# Allow MD5 in OpenSSL. +# https://bugs.ruby-lang.org/issues/9154 +OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig @@ -893,6 +889,11 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Nov 25 2013 Vít Ondruch - 2.0.0.353-16 +- Update to Ruby 2.0.0-p353. +- Allow MD5 in OpenSSL for tests. +- Fix heap overflow in floating point parsing (CVE-2013-4164). + * Tue Jul 30 2013 Vít Ondruch - 2.0.0.247-15 - Move Psych symlinks to vendor dir, to prevent F18 -> F19 upgrade issues (rhbz#988490). diff --git a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch index 607e028..98013a7 100644 --- a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch +++ b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch @@ -44,7 +44,7 @@ diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_inst index dffa8df..841f26a 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb -@@ -57,17 +57,14 @@ class Gem::DependencyInstaller +@@ -57,16 +57,14 @@ class Gem::DependencyInstaller # :build_args:: See Gem::Installer::new def initialize(options = {}) @@ -54,7 +54,6 @@ index dffa8df..841f26a 100644 - # HACK shouldn't change the global settings, needed for -i behavior - # maybe move to the install command? See also github #442 - Gem::Specification.dirs = @install_dir -- Gem.ensure_gem_subdirectories @install_dir + Gem.ensure_gem_subdirectories options[:install_dir] end diff --git a/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch b/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch index e443a46..365dc7b 100644 --- a/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch +++ b/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch @@ -1,7 +1,7 @@ From c9b2eff36728266052ccfff54d3ac0a0624fd0f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 14 Feb 2013 11:50:41 +0100 -Subject: [PATCH 1/2] Use File.join insteado of manual path creation. +Subject: [PATCH] Use File.join insteado of manual path creation. This prevents issues, when File.join in #new_default_spec removes superfluous slashes while they are kept in expected paths. E.g. the test @@ -32,50 +32,3 @@ index 60df53f..35c9631 100644 -- 1.8.1.2 - -From b022cef7b2e6c2d138388a6c2db02cca8c408cc6 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 14 Feb 2013 13:35:20 +0100 -Subject: [PATCH 2/2] Do not add last slash to Gem.user_dir if ruby_version - string is empty. - ---- - lib/rubygems/defaults.rb | 4 +++- - test/rubygems/test_gem.rb | 6 ++++-- - 2 files changed, 7 insertions(+), 3 deletions(-) - -diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb -index ea84e5c..05c35bb 100644 ---- a/lib/rubygems/defaults.rb -+++ b/lib/rubygems/defaults.rb -@@ -54,7 +54,9 @@ module Gem - # Path for gems in the user's home directory - - def self.user_dir -- File.join Gem.user_home, '.gem', ruby_engine, ConfigMap[:ruby_version] -+ parts = [Gem.user_home, '.gem', ruby_engine] -+ parts << ConfigMap[:ruby_version] unless ConfigMap[:ruby_version].empty? -+ File.join parts - end - - ## -diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb -index bf77009..9ee78f7 100644 ---- a/test/rubygems/test_gem.rb -+++ b/test/rubygems/test_gem.rb -@@ -1198,8 +1198,10 @@ class TestGem < Gem::TestCase - end - - def test_self_user_dir -- assert_equal File.join(@userhome, '.gem', Gem.ruby_engine, -- Gem::ConfigMap[:ruby_version]), Gem.user_dir -+ parts = [@userhome, '.gem', Gem.ruby_engine] -+ parts << Gem::ConfigMap[:ruby_version] unless Gem::ConfigMap[:ruby_version].empty? -+ -+ assert_equal File.join(parts), Gem.user_dir - end - - def test_self_user_home --- -1.8.1.2 - diff --git a/sources b/sources index 44c414b..0c071c1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -60913f3eec0c4071f44df42600be2604 ruby-2.0.0-p247.tar.bz2 +20eb8f067d20f6b76b7e16cce2a85a55 ruby-2.0.0-p353.tar.bz2 From ef80e1fa9d5429f276e4640a142ea0d39e986b18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 27 Nov 2013 16:07:24 +0100 Subject: [PATCH 126/530] Allow MD5 in OpenSSL for tests. --- ruby.spec | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index aebfa01..72e92c2 100644 --- a/ruby.spec +++ b/ruby.spec @@ -619,7 +619,9 @@ sed -i '/Process.constants.grep(\/\\ACLOCK_\/).each {|n|/ s/$/\n next if [: test/ruby/test_process.rb %endif -make check TESTS="-v $DISABLE_TESTS" +# Allow MD5 in OpenSSL. +# https://bugs.ruby-lang.org/issues/9154 +OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig @@ -913,6 +915,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Dec 02 2013 Vít Ondruch - 2.1.0.0-0.16.preview1 +- Allow MD5 in OpenSSL for tests. + * Mon Oct 07 2013 Vít Ondruch - 2.1.0.0-0.16.preview1 - Update to Ruby 2.1.0.preview1. From 360d2b99cd3a28d2d19195f2609a8228c2f34c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 17 Dec 2013 16:56:33 +0100 Subject: [PATCH 127/530] Upgrade to Ruby 2.1.0 (r44266). --- operating_system.rb | 10 + ...Specification.files-in-default-.gems.patch | 28 --- ...-additional-preludes-by-configuratio.patch | 6 +- ...ed-paths-when-empty-version-string-i.patch | 47 +++-- ruby-2.1.0-custom-rubygems-location.patch | 2 +- ....1.0-test_config.rb-fix-library-path.patch | 31 --- ruby.spec | 88 ++++----- ...l_require_paths-on-yet-another-place.patch | 71 ------- ...obal-Specification.dirs-during-insta.patch | 29 --- rubygems-2.2.0-binary-extensions.patch | 179 ------------------ 10 files changed, 86 insertions(+), 405 deletions(-) delete mode 100644 ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch delete mode 100644 ruby-2.1.0-test_config.rb-fix-library-path.patch delete mode 100644 rubygems-2.2.0-DRY-Use-full_require_paths-on-yet-another-place.patch delete mode 100644 rubygems-2.2.0-Do-not-modify-global-Specification.dirs-during-insta.patch delete mode 100644 rubygems-2.2.0-binary-extensions.patch diff --git a/operating_system.rb b/operating_system.rb index c3b19d6..fba8117 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -81,5 +81,15 @@ module Gem dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir} dirs && File.join(dirs.last[:ext_dir], RbConfig::CONFIG['RUBY_INSTALL_NAME']) end + + # This method should be available since RubyGems 2.2 until RubyGems 3.0. + # https://github.com/rubygems/rubygems/issues/749 + if method_defined? :install_extension_in_lib + remove_method :install_extension_in_lib + + def install_extension_in_lib + false + end + end end end diff --git a/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch b/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch deleted file mode 100644 index 0abe8bd..0000000 --- a/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 541f3b85cac00e5b836e018ef8afea4342e0cd39 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Tue, 9 Jul 2013 12:32:49 +0200 -Subject: [PATCH] Make stable Gem::Specification.files in default .gemspecs - -Although the .gemspec files for default gems are same in function, the -different order of their "s.files" makes them different therefore -possibly conflicting in multilib scenario. ---- - tool/rbinstall.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 0b99408..7b54966 100755 ---- a/tool/rbinstall.rb -+++ b/tool/rbinstall.rb -@@ -608,7 +608,7 @@ module RbInstall - end - - def collect -- ruby_libraries + built_libraries -+ (ruby_libraries + built_libraries).sort - end - - private --- -1.8.3.1 - diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index a4a171f..55778ef 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -16,7 +16,7 @@ index 7e8ed82..7916993 100644 @@ -110,6 +110,7 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@ - DEFAULT_PRELUDES = $(@USE_RUBYGEMS@_GEM_PRELUDE) + DEFAULT_PRELUDES = $(GEM_PRELUDE) +OPTIONAL_PRELUDES = @OPTIONAL_PRELUDES@ #### End of system configuration section. #### @@ -32,8 +32,8 @@ index 5cfbc3d..3f0a82e 100644 -PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES) +PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES) $(OPTIONAL_PRELUDES) GEM_PRELUDE = $(srcdir)/gem_prelude.rb - YES_GEM_PRELUDE = $(GEM_PRELUDE) - NO_GEM_PRELUDE = + PRELUDES = prelude.c miniprelude.c + GOLFPRELUDES = golf_prelude.c diff --git a/configure.in b/configure.in index 0e371e2..d4f1dcb 100644 --- a/configure.in diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 498a792..950336c 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -1,4 +1,4 @@ -From 35b8c14ddc7f9b38c21c15dfecefa3dff7567981 Mon Sep 17 00:00:00 2001 +From 763c6571697b0bd551a8a0c27d538d00f161a9f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 8 Feb 2013 22:48:41 +0100 Subject: [PATCH] Prevent duplicated paths when empty version string is @@ -6,23 +6,23 @@ Subject: [PATCH] Prevent duplicated paths when empty version string is --- configure.in | 15 +++++++++------ - loadpath.c | 4 ++++ - 2 files changed, 13 insertions(+), 6 deletions(-) + loadpath.c | 12 ++++++++++++ + 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/configure.in b/configure.in -index 881449e..37d9a62 100644 +index 88d24ee..4a300b9 100644 --- a/configure.in +++ b/configure.in -@@ -3535,8 +3535,6 @@ AC_ARG_WITH(rubylibprefix, - fi - rubylibprefix="$withval"]) - AC_SUBST(rubylibprefix) +@@ -3608,8 +3608,6 @@ AC_ARG_WITH(rubylibprefix, + rubyw_install_name='$(RUBYW_INSTALL_NAME)' + ]) + -rubylibdir='${rubylibprefix}/${ruby_version}' -rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, -@@ -3566,6 +3564,7 @@ AC_ARG_WITH(ruby-version, +@@ -3639,6 +3637,7 @@ AC_ARG_WITH(ruby-version, [ruby_version=full]) unset RUBY_LIB_VERSION unset RUBY_LIB_VERSION_STYLE @@ -30,7 +30,7 @@ index 881449e..37d9a62 100644 AS_CASE(["$ruby_version"], [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) -@@ -3582,30 +3581,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then +@@ -3655,30 +3654,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" eval $ruby_version elif test -z "${ruby_version}"; then @@ -70,29 +70,44 @@ index 881449e..37d9a62 100644 AC_ARG_WITH(vendorarchdir, AS_HELP_STRING([--with-vendorarchdir=DIR], diff --git a/loadpath.c b/loadpath.c -index 9160031..623dc9d 100644 +index 9160031..0d4d953 100644 --- a/loadpath.c +++ b/loadpath.c -@@ -65,7 +65,9 @@ const char ruby_initial_load_paths[] = +@@ -65,22 +65,34 @@ const char ruby_initial_load_paths[] = RUBY_SEARCH_PATH "\0" #endif #ifndef NO_RUBY_SITE_LIB -+#ifndef RUBY_LIB_VERSION_BLANK ++#ifdef RUBY_LIB_VERSION_BLANK ++ RUBY_SITE_LIB "\0" ++#else RUBY_SITE_LIB2 "\0" +#endif #ifdef RUBY_THINARCH RUBY_SITE_ARCH_LIB_FOR(RUBY_THINARCH) "\0" #endif -@@ -74,7 +76,9 @@ const char ruby_initial_load_paths[] = + RUBY_SITE_ARCH_LIB_FOR(RUBY_SITEARCH) "\0" ++#ifndef RUBY_LIB_VERSION_BLANK + RUBY_SITE_LIB "\0" #endif ++#endif #ifndef NO_RUBY_VENDOR_LIB -+#ifndef RUBY_LIB_VERSION_BLANK ++#ifdef RUBY_LIB_VERSION_BLANK ++ RUBY_VENDOR_LIB "\0" ++#else RUBY_VENDOR_LIB2 "\0" +#endif #ifdef RUBY_THINARCH RUBY_VENDOR_ARCH_LIB_FOR(RUBY_THINARCH) "\0" #endif + RUBY_VENDOR_ARCH_LIB_FOR(RUBY_SITEARCH) "\0" ++#ifndef RUBY_LIB_VERSION_BLANK + RUBY_VENDOR_LIB "\0" + #endif ++#endif + + RUBY_LIB "\0" + #ifdef RUBY_THINARCH -- -1.8.3.1 +1.8.4.2 diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 05a0d01..b7f6588 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -39,7 +39,7 @@ index 623dc9d..74c5d9e 100644 --- a/loadpath.c +++ b/loadpath.c @@ -86,6 +86,10 @@ const char ruby_initial_load_paths[] = - RUBY_VENDOR_LIB "\0" + #endif #endif +#ifdef RUBYGEMS_DIR diff --git a/ruby-2.1.0-test_config.rb-fix-library-path.patch b/ruby-2.1.0-test_config.rb-fix-library-path.patch deleted file mode 100644 index 404a278..0000000 --- a/ruby-2.1.0-test_config.rb-fix-library-path.patch +++ /dev/null @@ -1,31 +0,0 @@ -From cf26cdec7bcd0668b8f8347a5f29072c8b8f6e8d Mon Sep 17 00:00:00 2001 -From: nobu -Date: Tue, 1 Oct 2013 11:36:47 +0000 -Subject: [PATCH] test_config.rb: fix library path - -* test/mkmf/test_config.rb (test_dir_config): fix expected library - path. [ruby-core:57535] [Bug #8972] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43106 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - test/mkmf/test_config.rb | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/test/mkmf/test_config.rb b/test/mkmf/test_config.rb -index b09dfd6..4a9be57 100644 ---- a/test/mkmf/test_config.rb -+++ b/test/mkmf/test_config.rb -@@ -8,8 +8,9 @@ class TestMkmf < Test::Unit::TestCase - class TestConfig < Test::Unit::TestCase - def test_dir_config - bug8074 = '[Bug #8074]' -+ lib = RbConfig.expand(RbConfig::MAKEFILE_CONFIG["libdir"], "exec_prefix"=>"") - assert_separately %w[-rmkmf - -- --with-foo-dir=/test/foo], %{ -- assert_equal(%w[/test/foo/include /test/foo/lib], dir_config("foo"), #{bug8074.dump}) -+ assert_equal(%w[/test/foo/include /test/foo#{lib}], dir_config("foo"), #{bug8074.dump}) - } - end - end --- -1.8.3.1 - diff --git a/ruby.spec b/ruby.spec index 72e92c2..0089654 100644 --- a/ruby.spec +++ b/ruby.spec @@ -10,10 +10,10 @@ %global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. -%global milestone preview1 +#%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -#%%global revision 39387 +%global revision 44266 %global ruby_archive %{name}-%{ruby_version} @@ -29,22 +29,23 @@ %global release 16 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -%global rubygems_version 2.2.0.preview.1 +%global rubygems_version 2.2.0.rc.1 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. %global rubygems_dir %{_datadir}/rubygems -%global rake_version 0.9.6 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version_patch_level} -%global rdoc_version 4.1.0.preview.1 -%global bigdecimal_version 1.2.1 + +%global bigdecimal_version 1.2.3 %global io_console_version 0.4.2 -%global json_version 1.7.7 +%global json_version 1.8.1 %global minitest_version 4.7.5 -%global psych_version 2.0.1 +%global psych_version 2.0.2 +%global rake_version 10.1.0 +%global rdoc_version 4.1.0.rc.1 # Might not be needed in the future, if we are lucky enough. # https://bugzilla.redhat.com/show_bug.cgi?id=888262 @@ -124,31 +125,15 @@ Patch3: ruby-2.1.0-always-use-i386.patch # Fixes random WEBRick test failures. # https://bugs.ruby-lang.org/issues/6573. Patch5: ruby-1.9.3.p195-fix-webrick-tests.patch -# https://github.com/rubygems/rubygems/pull/667 -Patch7: rubygems-2.2.0-DRY-Use-full_require_paths-on-yet-another-place.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://redmine.ruby-lang.org/issues/5617 Patch8: ruby-2.1.0-custom-rubygems-location.patch -# Add support for installing binary extensions according to FHS. -# https://github.com/rubygems/rubygems/issues/210 -Patch9: rubygems-2.2.0-binary-extensions.patch # Make mkmf verbose by default Patch12: ruby-1.9.3-mkmf-verbose.patch -# Without this patch, Specifications.dirs is modified and gems installed on -# the system cannot be required anymore. This causes later issues when RDoc -# documentation should be generated, since json gem is sudenly not accessible. -# https://github.com/rubygems/rubygems/pull/670 -Patch13: rubygems-2.2.0-Do-not-modify-global-Specification.dirs-during-insta.patch # Adds support for '--with-prelude' configuration option. This allows to built # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch -# Fixes multilib conlicts of .gemspec files. -# https://bugs.ruby-lang.org/issues/8623 -Patch19: ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch -# TestMkmf::TestConfig#test_dir_config fails on x86_64. -# http://bugs.ruby-lang.org/issues/8972 -Patch20: ruby-2.1.0-test_config.rb-fix-library-path.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -160,7 +145,6 @@ Requires: rubygem(bigdecimal) >= %{bigdecimal_version} BuildRequires: autoconf BuildRequires: gdbm-devel -BuildRequires: ncurses-devel BuildRequires: libdb-devel BuildRequires: libffi-devel BuildRequires: openssl-devel @@ -409,14 +393,9 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch1 -p1 %patch3 -p1 %patch5 -p1 -%patch7 -p1 %patch8 -p1 -%patch9 -p1 %patch12 -p1 -%patch13 -p1 %patch17 -p1 -%patch19 -p1 -%patch20 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -449,11 +428,6 @@ autoconf --enable-multiarch \ --with-prelude=./abrt_prelude.rb \ -# This avoids regeneration of sizes.c (BASERUBY is needed for that), when -# configure.in has newer timestamp the sizes.c (after patch is applied). -# http://bugs.ruby-lang.org/issues/8968 -touch sizes.c - # Q= makes the build output more verbose and allows to check Fedora # compiler options. make %{?_smp_mflags} COPY="cp -p" Q= @@ -511,25 +485,25 @@ mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_vers mv %{buildroot}%{gem_dir}/specifications/default/rdoc-%{rdoc_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib -mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/lib +mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} mv %{buildroot}%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal -ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/lib/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so +ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so mkdir -p %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/lib/io +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib -mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/lib/io +mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io mv %{buildroot}%{gem_dir}/specifications/default/io-console-%{io_console_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/io-console-%{io_console_version}/lib/io %{buildroot}%{ruby_libdir}/io -ln -s %{_libdir}/gems/%{name}/io-console-%{io_console_version}/lib/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so +ln -s %{_libdir}/gems/%{name}/io-console-%{io_console_version}/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so mkdir -p %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version} mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib -mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/lib/ +mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/ mv %{buildroot}%{gem_dir}/specifications/default/json-%{json_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib @@ -537,9 +511,9 @@ mv %{buildroot}%{ruby_libdir}/minitest %{buildroot}%{gem_dir}/gems/minitest-%{mi mv %{buildroot}%{gem_dir}/specifications/default/minitest-%{minitest_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version} mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/lib/ +mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/ mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications # The links should replace directory, which RPM cannot handle and it is causing # issues during upgrade from F18 to F19. As a workaround the links are placed @@ -547,7 +521,7 @@ mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec # https://bugzilla.redhat.com/show_bug.cgi?id=988490 ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_vendorlibdir}/psych ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_vendorlibdir}/psych.rb -ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/lib/psych.so %{buildroot}%{ruby_vendorarchdir}/psych.so +ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby_vendorarchdir}/psych.so # Adjust the gemspec files so that the gems will load properly sed -i '/^end$/ i\ @@ -619,6 +593,23 @@ sed -i '/Process.constants.grep(\/\\ACLOCK_\/).each {|n|/ s/$/\n next if [: test/ruby/test_process.rb %endif +# Errno::EINVAL: Invalid argument - recvmsg(2) +# Looks to be a problem of Linux 3.12+ and should be possible to remove as soon +# as Koji builders run fixed kerenel. +# https://bugs.ruby-lang.org/issues/9124 +sed -i '/^ def test_timestampns/,/^ end/ s/^/#/' test/socket/test_socket.rb +sed -i '/^ def test_timestamp/,/^ end/ s/^/#/' test/socket/test_socket.rb +sed -i '/^ def test_udp_server/,/^ end/ s/^/#/' test/socket/test_socket.rb +sed -i '/^ def test_recvmsg_nonblock_error/,/^ end/ s/^/#/' test/socket/test_nonblock.rb +sed -i '/^ def test_fd_passing_n/,/^ end/ s/^/#/' test/socket/test_unix.rb +sed -i '/^ def test_fd_passing_n2/,/^ end/ s/^/#/' test/socket/test_unix.rb +sed -i '/^ def test_recvmsg/,/^ end/ s/^/#/' test/socket/test_unix.rb +sed -i '/^ def test_sendcred_ucred/,/^ end/ s/^/#/' test/socket/test_unix.rb + +# Segmentation fault. +# https://bugs.ruby-lang.org/issues/9198 +sed -i '/^ def test_machine_stackoverflow/,/^ end/ s/^/#/' test/ruby/test_exception.rb + # Allow MD5 in OpenSSL. # https://bugs.ruby-lang.org/issues/9154 OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" @@ -711,7 +702,6 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %dir %{ruby_libarchdir} %{ruby_libarchdir}/continuation.so %{ruby_libarchdir}/coverage.so -%{ruby_libarchdir}/curses.so %{ruby_libarchdir}/date_core.so %{ruby_libarchdir}/dbm.so %dir %{ruby_libarchdir}/digest @@ -798,6 +788,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %dir %{ruby_libarchdir}/racc %{ruby_libarchdir}/racc/cparse.so %{ruby_libarchdir}/rbconfig.rb +%{ruby_libarchdir}/rbconfig/sizeof.so %{ruby_libarchdir}/readline.so %{ruby_libarchdir}/ripper.so %{ruby_libarchdir}/sdbm.so @@ -915,6 +906,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Dec 17 2013 Vít Ondruch - 2.1.0.0-0.16.r44266 +- Upgrade to Ruby 2.1.0 (r44266). + * Mon Dec 02 2013 Vít Ondruch - 2.1.0.0-0.16.preview1 - Allow MD5 in OpenSSL for tests. diff --git a/rubygems-2.2.0-DRY-Use-full_require_paths-on-yet-another-place.patch b/rubygems-2.2.0-DRY-Use-full_require_paths-on-yet-another-place.patch deleted file mode 100644 index a6766bc..0000000 --- a/rubygems-2.2.0-DRY-Use-full_require_paths-on-yet-another-place.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 02f94e96ea6a9e0fe37341eccd83ffb63549ead5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 3 Oct 2013 14:15:59 +0200 -Subject: [PATCH] DRY: Use full_require_paths on yet another place. - ---- - lib/rubygems/basic_specification.rb | 16 +++++++++++++--- - lib/rubygems/specification.rb | 11 ----------- - 2 files changed, 13 insertions(+), 14 deletions(-) - -diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb -index 24bb4bc..a10eab3 100644 ---- a/lib/rubygems/basic_specification.rb -+++ b/lib/rubygems/basic_specification.rb -@@ -38,11 +38,10 @@ class Gem::BasicSpecification - # Return true if this spec can require +file+. - - def contains_requirable_file? file -- root = full_gem_path - suffixes = Gem.suffixes - -- require_paths.any? do |lib| -- base = "#{root}/#{lib}/#{file}" -+ full_require_paths.any? do |path| -+ base = "#{path}/#{file}" - suffixes.any? { |suf| File.file? "#{base}#{suf}" } - end - end -@@ -84,6 +83,17 @@ class Gem::BasicSpecification - end - - ## -+ # Full paths in the gem to add to $LOAD_PATH when this gem is -+ # activated. -+ # -+ -+ def full_require_paths -+ require_paths.map do |path| -+ File.join full_gem_path, path -+ end -+ end -+ -+ ## - # Returns the full path to the gems directory containing this spec's - # gem directory. eg: /usr/local/lib/ruby/1.8/gems - -diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index 6de8c3b..deac343 100644 ---- a/lib/rubygems/specification.rb -+++ b/lib/rubygems/specification.rb -@@ -2015,17 +2015,6 @@ class Gem::Specification < Gem::BasicSpecification - end - - ## -- # Full paths in the gem to add to $LOAD_PATH when this gem is -- # activated. -- # -- -- def full_require_paths -- require_paths.map do |path| -- File.join full_gem_path, path -- end -- end -- -- ## - # The RubyGems version required by this gem - - def required_rubygems_version= req --- -1.8.3.1 - diff --git a/rubygems-2.2.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.2.0-Do-not-modify-global-Specification.dirs-during-insta.patch deleted file mode 100644 index ad0f0bf..0000000 --- a/rubygems-2.2.0-Do-not-modify-global-Specification.dirs-during-insta.patch +++ /dev/null @@ -1,29 +0,0 @@ -From ad80fb9ffe5ab73e05784237de8d8b7d03784867 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 4 Oct 2013 22:13:11 +0200 -Subject: [PATCH] Do not modify global Specification.dirs during installation. - ---- - lib/rubygems/dependency_installer.rb | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb -index e7c489a..5123fce 100644 ---- a/lib/rubygems/dependency_installer.rb -+++ b/lib/rubygems/dependency_installer.rb -@@ -74,12 +74,6 @@ class Gem::DependencyInstaller - @only_install_dir = !!options[:install_dir] - @install_dir = options[:install_dir] || Gem.dir - -- if options[:install_dir] then -- # HACK shouldn't change the global settings, needed for -i behavior -- # maybe move to the install command? See also github #442 -- Gem::Specification.dirs = @install_dir -- end -- - options = DEFAULT_OPTIONS.merge options - - @bin_dir = options[:bin_dir] --- -1.8.3.1 - diff --git a/rubygems-2.2.0-binary-extensions.patch b/rubygems-2.2.0-binary-extensions.patch deleted file mode 100644 index 5c212e7..0000000 --- a/rubygems-2.2.0-binary-extensions.patch +++ /dev/null @@ -1,179 +0,0 @@ -From 37cd8547d23973a7ec23a004ab9b60738d67ada9 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 3 Nov 2011 16:43:05 +0100 -Subject: [PATCH] Add dedicate extensions folder into $LOAD_PATH. - ---- - lib/rubygems/basic_specification.rb | 35 ++++++++++++++++++++++++++++++++--- - lib/rubygems/defaults.rb | 11 +++++++++++ - lib/rubygems/ext/builder.rb | 6 +++++- - lib/rubygems/installer.rb | 1 + - lib/rubygems/specification.rb | 7 +++++++ - lib/rubygems/uninstaller.rb | 1 + - 6 files changed, 57 insertions(+), 4 deletions(-) - -diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb -index a10eab3..da3af91 100644 ---- a/lib/rubygems/basic_specification.rb -+++ b/lib/rubygems/basic_specification.rb -@@ -51,6 +51,14 @@ class Gem::BasicSpecification - File.dirname(loaded_from) == self.class.default_specifications_dir - end - -+ ## -+ # Returns the full path to the exts directory containing this spec's -+ # gem directory. eg: /usr/local/lib/ruby/1.8/exts -+ -+ def exts_dir -+ @exts_dir ||= Gem.default_ext_dir_for(base_dir) || gems_dir -+ end -+ - def find_full_gem_path # :nodoc: - # TODO: also, shouldn't it default to full_name if it hasn't been written? - path = File.expand_path File.join(gems_dir, full_name) -@@ -60,6 +68,15 @@ class Gem::BasicSpecification - - private :find_full_gem_path - -+ def find_full_gem_ext_path # :nodoc: -+ # TODO: skip for gems without extensions. -+ path = File.expand_path File.join(exts_dir, full_name) -+ path.untaint -+ path if File.directory? path -+ end -+ -+ private :find_full_gem_ext_path -+ - ## - # The full path to the gem (install path + full name). - -@@ -70,6 +87,13 @@ class Gem::BasicSpecification - end - - ## -+ # The full path to the gem binary extension (install path + full name). -+ -+ def full_gem_ext_path -+ @full_gem_ext_path ||= find_full_gem_ext_path -+ end -+ -+ ## - # Returns the full name (name-version) of this Gem. Platform information - # is included (name-version-platform) if it is specified and not the - # default Ruby platform. -@@ -88,9 +112,12 @@ class Gem::BasicSpecification - # - - def full_require_paths -- require_paths.map do |path| -- File.join full_gem_path, path -- end -+ require_paths.map do |require_path| -+ full_gem_paths = [full_gem_path, full_gem_ext_path] -+ full_gem_paths.compact! -+ -+ full_gem_paths.map { |path| File.join path, require_path } -+ end.flatten - end - - ## -@@ -110,7 +137,9 @@ class Gem::BasicSpecification - @loaded_from = path && path.to_s - - @full_gem_path = nil -+ @full_gem_ext_path = nil - @gems_dir = nil -+ @exts_dir = nil - @base_dir = nil - end - -diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb -index 591580b..8ed474f 100644 ---- a/lib/rubygems/defaults.rb -+++ b/lib/rubygems/defaults.rb -@@ -111,6 +111,17 @@ module Gem - end - - ## -+ # Returns binary extensions dir for specified RubyGems base dir or nil -+ # if such directory cannot be determined. -+ # -+ # By default, the binary extensions are located side by side with their -+ # Ruby counterparts, therefore nil is returned -+ -+ def self.default_ext_dir_for base_dir -+ nil -+ end -+ -+ ## - # A wrapper around RUBY_ENGINE const that may not be defined - - def self.ruby_engine -diff --git a/lib/rubygems/ext/builder.rb b/lib/rubygems/ext/builder.rb -index 8c05723..75d5fc2 100644 ---- a/lib/rubygems/ext/builder.rb -+++ b/lib/rubygems/ext/builder.rb -@@ -170,7 +170,7 @@ EOF - say "This could take a while..." - end - -- dest_path = File.join @gem_dir, @spec.require_paths.first -+ dest_path = File.join(@only_install_dir ? @gem_dir : @spec.ext_dir, @spec.require_paths.first) - - @ran_rake = false # only run rake once - -@@ -181,5 +181,9 @@ EOF - end - end - -+ def only_install_dir= only_install_dir -+ @only_install_dir = only_install_dir -+ end -+ - end - -diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index 261af89..a6aca5d 100644 ---- a/lib/rubygems/installer.rb -+++ b/lib/rubygems/installer.rb -@@ -662,6 +662,7 @@ TEXT - - def build_extensions - builder = Gem::Ext::Builder.new spec, @build_args -+ builder.only_install_dir = @only_install_dir - - builder.build_extensions - end -diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index deac343..b630fa3 100644 ---- a/lib/rubygems/specification.rb -+++ b/lib/rubygems/specification.rb -@@ -1612,6 +1612,13 @@ class Gem::Specification < Gem::BasicSpecification - @executables = Array(value) - end - -+ # Returns the full path to this spec's ext directory. -+ # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0 -+ -+ def ext_dir -+ @ext_dir ||= File.expand_path File.join(exts_dir, full_name) -+ end -+ - ## - # Sets extensions to +extensions+, ensuring it is an array. Don't - # use this, push onto the array instead. -diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb -index 143ab6d..f81a23d 100644 ---- a/lib/rubygems/uninstaller.rb -+++ b/lib/rubygems/uninstaller.rb -@@ -247,6 +247,7 @@ class Gem::Uninstaller - File.writable?(spec.base_dir) - - FileUtils.rm_rf spec.full_gem_path -+ FileUtils.rm_rf spec.ext_dir - - # TODO: should this be moved to spec?... I vote eww (also exists in docmgr) - old_platform_name = [spec.name, --- -1.8.3.1 - From 453497595c4aae9a223940d409b2c7935291ed25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 19 Dec 2013 12:26:37 +0100 Subject: [PATCH 128/530] Fix RubyGems test suite. --- ruby.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.spec b/ruby.spec index 0089654..952626e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -593,6 +593,10 @@ sed -i '/Process.constants.grep(\/\\ACLOCK_\/).each {|n|/ s/$/\n next if [: test/ruby/test_process.rb %endif +# Fix "Could not find 'minitest'" error. +# http://bugs.ruby-lang.org/issues/9259 +sed -i "/^ gem 'minitest', '~> 4.0'/ s/^/#/" lib/rubygems/test_case.rb + # Errno::EINVAL: Invalid argument - recvmsg(2) # Looks to be a problem of Linux 3.12+ and should be possible to remove as soon # as Koji builders run fixed kerenel. From f84b34dea7529a382e3efe4ef74a016bdb701f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 19 Dec 2013 13:52:28 +0100 Subject: [PATCH 129/530] Add git and cmake BR to execute all RubyGems test cases. --- ruby.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ruby.spec b/ruby.spec index 952626e..d65d6bc 100644 --- a/ruby.spec +++ b/ruby.spec @@ -156,6 +156,9 @@ BuildRequires: procps BuildRequires: %{_bindir}/dtrace # Unbundle cert.pem BuildRequires: ca-certificates +# RubyGems test suite optional dependencies. +BuildRequires: %{_bindir}/git +BuildRequires: %{_bindir}/cmake # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. From 0492f505187c4f332ac7cb4266dd643f4312cb67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 19 Dec 2013 16:02:49 +0100 Subject: [PATCH 130/530] Update to Ruby 2.1.0 (r44289). --- ruby.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index d65d6bc..3d7e87a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 44266 +%global revision 44289 %global ruby_archive %{name}-%{ruby_version} @@ -913,8 +913,8 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog -* Tue Dec 17 2013 Vít Ondruch - 2.1.0.0-0.16.r44266 -- Upgrade to Ruby 2.1.0 (r44266). +* Tue Dec 17 2013 Vít Ondruch - 2.1.0.0-0.16.r44289 +- Upgrade to Ruby 2.1.0 (r44289). * Mon Dec 02 2013 Vít Ondruch - 2.1.0.0-0.16.preview1 - Allow MD5 in OpenSSL for tests. From 2b7dccf61f4a4965ae1dbddcd69d6e3e72480d17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 20 Dec 2013 13:58:40 +0100 Subject: [PATCH 131/530] Upgrade to Ruby 2.1.0 (r44362). --- ruby-2.1.0-resolv.rb-no-encodings.patch | 143 ++++++++++++++++++++++++ ruby.spec | 15 ++- 2 files changed, 153 insertions(+), 5 deletions(-) create mode 100644 ruby-2.1.0-resolv.rb-no-encodings.patch diff --git a/ruby-2.1.0-resolv.rb-no-encodings.patch b/ruby-2.1.0-resolv.rb-no-encodings.patch new file mode 100644 index 0000000..f1037db --- /dev/null +++ b/ruby-2.1.0-resolv.rb-no-encodings.patch @@ -0,0 +1,143 @@ +From 1ffbe07e179a2e047d24c7091f6ff013195b1a93 Mon Sep 17 00:00:00 2001 +From: nobu +Date: Sat, 21 Dec 2013 03:37:26 +0000 +Subject: [PATCH] resolv.rb: no encodings + +* lib/resolv.rb (Resolv::Hosts#lazy_initialize): should not + consider encodings in hosts file. [ruby-core:59239] [Bug #9273] +* lib/resolv.rb (Resolv::Config.parse_resolv_conf): ditto. + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44312 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + ChangeLog | 7 +++++++ + lib/resolv.rb | 4 ++-- + test/resolv/test_addr.rb | 12 ++++++++++++ + test/resolv/test_dns.rb | 13 +++++++++++++ + 4 files changed, 34 insertions(+), 2 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 72eaa6f..93686e9 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,6 +1,13 @@ + install win32.h. + [ruby-core:58801][Bug #9199] reported by arton. + ++Sat Dec 21 12:37:19 2013 Nobuyoshi Nakada ++ ++ * lib/resolv.rb (Resolv::Hosts#lazy_initialize): should not ++ consider encodings in hosts file. [ruby-core:59239] [Bug #9273] ++ ++ * lib/resolv.rb (Resolv::Config.parse_resolv_conf): ditto. ++ + Fri Dec 20 17:52:50 2013 Koichi Sasada + + * vm_method.c: check definition of +diff --git a/lib/resolv.rb b/lib/resolv.rb +index 6d34a67..0c2b68e 100644 +--- a/lib/resolv.rb ++++ b/lib/resolv.rb +@@ -187,7 +187,7 @@ class Resolv + unless @initialized + @name2addr = {} + @addr2name = {} +- open(@filename) {|f| ++ open(@filename, 'rb') {|f| + f.each {|line| + line.sub!(/#.*/, '') + addr, hostname, *aliases = line.split(/\s+/) +@@ -920,7 +920,7 @@ class Resolv + nameserver = [] + search = nil + ndots = 1 +- open(filename) {|f| ++ open(filename, 'rb') {|f| + f.each {|line| + line.sub!(/[#;].*/, '') + keyword, *args = line.split(/\s+/) +diff --git a/test/resolv/test_addr.rb b/test/resolv/test_addr.rb +index 84bc8c2..d4728e1 100644 +--- a/test/resolv/test_addr.rb ++++ b/test/resolv/test_addr.rb +@@ -13,4 +13,16 @@ class TestResolvAddr < Test::Unit::TestCase + end + } + end ++ ++ def test_invalid_byte_comment ++ bug9273 = '[ruby-core:59239] [Bug #9273]' ++ Tempfile.open('resolv_test_addr_') do |tmpfile| ++ tmpfile.print("\xff\x00\x40") ++ tmpfile.close ++ hosts = Resolv::Hosts.new(tmpfile.path) ++ assert_nothing_raised(ArgumentError, bug9273) do ++ hosts.each_address("") {break} ++ end ++ end ++ end + end +diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb +index 0d9565e..e3e38ef 100644 +--- a/test/resolv/test_dns.rb ++++ b/test/resolv/test_dns.rb +@@ -1,6 +1,7 @@ + require 'test/unit' + require 'resolv' + require 'socket' ++require 'tempfile' + + class TestResolvDNS < Test::Unit::TestCase + def setup +@@ -150,4 +151,16 @@ class TestResolvDNS < Test::Unit::TestCase + } + end + ++ def test_invalid_byte_comment ++ bug9273 = '[ruby-core:59239] [Bug #9273]' ++ Tempfile.open('resolv_test_dns_') do |tmpfile| ++ tmpfile.print("\xff\x00\x40") ++ tmpfile.close ++ Resolv::DNS.open(tmpfile.path) do |dns| ++ assert_nothing_raised(ArgumentError, bug9273) do ++ dns.getresources("foo.example.org", Resolv::DNS::Resource::IN::A) ++ end ++ end ++ end ++ end + end +-- +1.8.4.2 + +From 1ef0a76c6c6556bf6ab155e2ad28a23748ee59ef Mon Sep 17 00:00:00 2001 +From: nobu +Date: Sat, 21 Dec 2013 07:18:18 +0000 +Subject: [PATCH] test_dns.rb: no server access + +* test/resolv/test_dns.rb (test_invalid_byte_comment): get rid of + actual server access. [Bug #9273] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + test/resolv/test_dns.rb | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb +index e3e38ef..07396fb 100644 +--- a/test/resolv/test_dns.rb ++++ b/test/resolv/test_dns.rb +@@ -156,10 +156,8 @@ class TestResolvDNS < Test::Unit::TestCase + Tempfile.open('resolv_test_dns_') do |tmpfile| + tmpfile.print("\xff\x00\x40") + tmpfile.close +- Resolv::DNS.open(tmpfile.path) do |dns| +- assert_nothing_raised(ArgumentError, bug9273) do +- dns.getresources("foo.example.org", Resolv::DNS::Resource::IN::A) +- end ++ assert_nothing_raised(ArgumentError, bug9273) do ++ Resolv::DNS::Config.parse_resolv_conf(tmpfile.path) + end + end + end +-- +1.8.4.2 + diff --git a/ruby.spec b/ruby.spec index 3d7e87a..e1f3c9f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -13,7 +13,7 @@ #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 44289 +%global revision 44362 %global ruby_archive %{name}-%{ruby_version} @@ -29,7 +29,7 @@ %global release 16 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -%global rubygems_version 2.2.0.rc.1 +%global rubygems_version 2.2.0 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. @@ -45,7 +45,7 @@ %global minitest_version 4.7.5 %global psych_version 2.0.2 %global rake_version 10.1.0 -%global rdoc_version 4.1.0.rc.1 +%global rdoc_version 4.1.0 # Might not be needed in the future, if we are lucky enough. # https://bugzilla.redhat.com/show_bug.cgi?id=888262 @@ -134,6 +134,10 @@ Patch12: ruby-1.9.3-mkmf-verbose.patch # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +# Fixes possible "ArgumentError: invalid byte sequence in US-ASCII" error in +# TestGemRemoteFetcher#test_download_to_cache. +# http://bugs.ruby-lang.org/issues/9273 +Patch18: ruby-2.1.0-resolv.rb-no-encodings.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -399,6 +403,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch8 -p1 %patch12 -p1 %patch17 -p1 +%patch18 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -913,8 +918,8 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog -* Tue Dec 17 2013 Vít Ondruch - 2.1.0.0-0.16.r44289 -- Upgrade to Ruby 2.1.0 (r44289). +* Mon Dec 23 2013 Vít Ondruch - 2.1.0.0-0.16.r44362 +- Upgrade to Ruby 2.1.0 (r44362). * Mon Dec 02 2013 Vít Ondruch - 2.1.0.0-0.16.preview1 - Allow MD5 in OpenSSL for tests. From 641dc00b5fa7b51f36b7072f5084e073368f1275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 23 Dec 2013 17:55:52 +0100 Subject: [PATCH 132/530] Move RPM macros into /usr/lib/rpm/macros.d directory. This is preferred locatin for RPM macros, since macro files are not typical configuration files (rhbz#846679). --- ruby.spec | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/ruby.spec b/ruby.spec index e1f3c9f..52f0c0b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -458,11 +458,11 @@ sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_li # Move macros file insto proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. -mkdir -p %{buildroot}%{_sysconfdir}/rpm -install -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/rpm/macros.ruby -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_sysconfdir}/rpm/macros.ruby -install -m 644 %{SOURCE5} %{buildroot}%{_sysconfdir}/rpm/macros.rubygems -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_sysconfdir}/rpm/macros.rubygems +mkdir -p %{buildroot}%{_exec_prefix}/lib/rpm/macros.d +install -m 644 %{SOURCE4} %{buildroot}%{_exec_prefix}/lib/rpm/macros.d/macros.ruby +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_exec_prefix}/lib/rpm/macros.d/macros.ruby +install -m 644 %{SOURCE5} %{buildroot}%{_exec_prefix}/lib/rpm/macros.d/macros.rubygems +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_exec_prefix}/lib/rpm/macros.d/macros.rubygems # Kill bundled cert.pem mkdir -p %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ @@ -651,7 +651,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %doc README.EXT %lang(ja) %doc README.EXT.ja -%{_sysconfdir}/rpm/macros.ruby +%{_exec_prefix}/lib/rpm/macros.d/macros.ruby %{_includedir}/* %{_libdir}/libruby.so @@ -848,7 +848,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %exclude %{gem_dir}/specifications/default/test-unit-*.gemspec %files -n rubygems-devel -%{_sysconfdir}/rpm/macros.rubygems +%{_exec_prefix}/lib/rpm/macros.d/macros.rubygems %files -n rubygem-rake %{_bindir}/rake @@ -920,6 +920,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %changelog * Mon Dec 23 2013 Vít Ondruch - 2.1.0.0-0.16.r44362 - Upgrade to Ruby 2.1.0 (r44362). +- Move RPM macros into /usr/lib/rpm/macros.d directory. * Mon Dec 02 2013 Vít Ondruch - 2.1.0.0-0.16.preview1 - Allow MD5 in OpenSSL for tests. From e7fbfad6e4b67814896b216ceb610c0ec4b2abf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 3 Jan 2014 14:29:26 +0100 Subject: [PATCH 133/530] Fix RubyGems version (rhbz#1036708). --- ruby.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 6a6bb46..b30b83d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,10 +26,10 @@ %endif -%global release 16 +%global release 17 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -%global rubygems_version 2.0.3 +%global rubygems_version 2.0.14 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. @@ -889,6 +889,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Jan 03 2014 Vít Ondruch - 2.0.0.353-17 +- Fix RubyGems version (rhbz#1036708). + * Mon Nov 25 2013 Vít Ondruch - 2.0.0.353-16 - Update to Ruby 2.0.0-p353. - Allow MD5 in OpenSSL for tests. From 639617a0ed572bc50a8e3438635e2d1424f8b006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 3 Jan 2014 14:09:59 +0100 Subject: [PATCH 134/530] Backport regenerated certificates for IMAP tests. --- ...x-test-failures-due-to-expired-certs.patch | 259 ++++++++++++++++++ ruby.spec | 5 + 2 files changed, 264 insertions(+) create mode 100644 ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch diff --git a/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch b/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch new file mode 100644 index 0000000..783484b --- /dev/null +++ b/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch @@ -0,0 +1,259 @@ +From 5ac7c395c19426a9a92f0a918b03e0f493af6e2c Mon Sep 17 00:00:00 2001 +From: tmm1 +Date: Fri, 3 Jan 2014 01:46:55 +0000 +Subject: [PATCH] test/net/imap/test_imap.rb: fix test failures due to expired + certs + +* test/net/imap/cacert.pem: generate new CA cert, since the last one + expired. [Bug #9341] [ruby-core:59459] +* test/net/imap/server.crt: new server cert signed with updated CA. +* test/net/imap/Makefile: add `make regen_certs` to automate this + process. + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + ChangeLog | 8 +++++ + test/net/imap/Makefile | 15 +++++++++ + test/net/imap/cacert.pem | 84 ++++++++++++++++++++++++++---------------------- + test/net/imap/server.crt | 65 +++++++++++++++---------------------- + 4 files changed, 94 insertions(+), 78 deletions(-) + create mode 100644 test/net/imap/Makefile + +diff --git a/ChangeLog b/ChangeLog +index a4f20cd..d6a7148 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,11 @@ ++Fri Jan 3 10:43:57 2014 Aman Gupta ++ ++ * test/net/imap/cacert.pem: generate new CA cert, since the last one ++ expired. [Bug #9341] [ruby-core:59459] ++ * test/net/imap/server.crt: new server cert signed with updated CA. ++ * test/net/imap/Makefile: add `make regen_certs` to automate this ++ process. ++ + Fri Nov 22 13:18:28 2013 Nobuyoshi Nakada + + * util.c (ruby_strtod): BigMath requires more precision. +diff --git a/test/net/imap/Makefile b/test/net/imap/Makefile +new file mode 100644 +index 0000000..b2bc9c7 +--- /dev/null ++++ b/test/net/imap/Makefile +@@ -0,0 +1,15 @@ ++all: ++ ++regen_certs: ++ touch server.key ++ make server.crt ++ ++cacert.pem: server.key ++ openssl req -new -x509 -days 1825 -key server.key -out cacert.pem -text -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org" ++ ++server.csr: ++ openssl req -new -key server.key -out server.csr -text -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost" ++ ++server.crt: server.csr cacert.pem ++ openssl x509 -days 1825 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -text -out server.crt ++ rm server.csr +diff --git a/test/net/imap/cacert.pem b/test/net/imap/cacert.pem +index bd7e68a..7073387 100644 +--- a/test/net/imap/cacert.pem ++++ b/test/net/imap/cacert.pem +@@ -2,59 +2,65 @@ Certificate: + Data: + Version: 3 (0x2) + Serial Number: +- 9f:dc:f7:94:98:05:43:4c ++ b9:90:a2:bf:62:69:17:9c + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org + Validity +- Not Before: Dec 23 10:21:33 2010 GMT +- Not After : Jan 1 10:21:33 2014 GMT ++ Not Before: Jan 3 01:34:17 2014 GMT ++ Not After : Jan 2 01:34:17 2019 GMT + Subject: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org + Subject Public Key Info: + Public Key Algorithm: rsaEncryption +- Public-Key: (1024 bit) +- Modulus: +- 00:ce:be:2c:9f:47:ba:db:9c:9c:5b:f0:38:3b:f3: +- 74:20:37:76:23:9f:84:1c:81:90:b4:3e:00:20:34: +- 98:7e:81:69:50:a1:c3:65:96:ea:fa:00:da:8c:cc: +- 53:3f:ba:3c:d0:50:7a:5a:b4:6b:ac:d3:2e:18:ca: +- 2a:69:b3:6a:6f:38:c2:32:a8:06:b6:0a:30:a9:ee: +- 03:38:e9:05:a5:19:23:54:a8:3c:b9:08:ad:2b:72: +- 23:df:93:22:c4:46:a8:ea:f1:a6:e9:30:4a:3f:83: +- 39:e9:62:8e:8b:a3:5e:67:89:1d:7c:75:de:05:aa: +- 58:b1:b7:79:7c:10:80:6d:87 ++ RSA Public Key: (1024 bit) ++ Modulus (1024 bit): ++ 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: ++ bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: ++ 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: ++ 9d:7e:eb:a2:06:e2:ea:7d:07:c7:c7:99:c7:fb:d5: ++ b8:eb:63:77:62:2b:18:12:c3:53:58:d0:f5:c7:40: ++ 0c:01:d1:26:82:34:16:09:e3:dc:65:f4:dc:bb:5d: ++ a5:41:60:e7:a9:74:ba:d7:4c:b6:a3:9c:c5:8c:89: ++ af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: ++ d0:fc:d6:eb:fc:06:82:10:fb + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: +- 41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A ++ E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 + X509v3 Authority Key Identifier: +- keyid:41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A ++ keyid:E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 ++ DirName:/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org ++ serial:B9:90:A2:BF:62:69:17:9C + + X509v3 Basic Constraints: + CA:TRUE + Signature Algorithm: sha1WithRSAEncryption +- 86:00:33:b9:dd:ff:5f:83:59:5f:c3:29:3c:d7:11:db:10:b3: +- d7:d1:70:fb:0a:c6:74:85:c6:ea:e1:15:c4:92:f8:0e:11:cc: +- ff:a6:3c:31:c2:2c:66:d8:fe:63:93:9f:b0:97:e6:f5:bc:5c: +- 80:68:96:5d:eb:77:b9:23:dd:68:a7:49:03:ff:22:48:55:f1: +- 39:7c:20:21:ff:64:52:e1:f6:cf:3c:b3:4d:2c:5c:03:62:ea: +- c5:49:99:07:fa:8d:ff:7b:c2:75:0c:ca:24:b5:0b:f5:b7:57: +- 3a:10:f0:8a:bb:9a:e8:92:4d:d5:6f:c2:a2:29:36:61:78:a4: +- dc:7b ++ 8f:77:06:4e:31:72:12:ee:68:09:70:27:d4:31:85:ef:10:95: ++ f9:0f:2b:66:63:08:37:88:6e:b7:9b:40:3e:18:77:33:86:e8: ++ 61:6a:b7:3c:cb:c7:a6:d6:d5:92:6a:1f:56:d0:9f:5c:32:56: ++ d3:37:52:fe:0e:20:c2:7a:0d:fe:2d:3c:81:da:b8:7f:4d:6a: ++ 08:01:d9:be:7a:a2:15:be:a6:ce:49:64:90:8c:9a:ca:6e:2e: ++ 84:48:1d:94:19:56:94:46:aa:25:9b:68:c2:80:60:bf:cb:2e: ++ 35:03:ea:0a:65:5a:33:38:c6:cc:81:46:c0:bc:36:86:96:39: ++ 10:7d + -----BEGIN CERTIFICATE----- +-MIIC6DCCAlGgAwIBAgIJAJ/c95SYBUNMMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD +-VQQGEwJKUDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkx +-FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex +-JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTAxMjIz +-MTAyMTMzWhcNMTQwMTAxMTAyMTMzWjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgM +-B1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQKDA5SdWJ5IENv +-cmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz ++MIIDjTCCAvagAwIBAgIJALmQor9iaRecMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD ++VQQGEwJKUDEQMA4GA1UECBMHU2hpbWFuZTEUMBIGA1UEBxMLTWF0ei1lIGNpdHkx ++FzAVBgNVBAoTDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDEwxSdWJ5IFRlc3QgQ0Ex ++JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTQwMTAz ++MDEzNDE3WhcNMTkwMTAyMDEzNDE3WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT ++B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv ++cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz + ZWN1cml0eUBydWJ5LWxhbmcub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB +-gQDOviyfR7rbnJxb8Dg783QgN3Yjn4QcgZC0PgAgNJh+gWlQocNllur6ANqMzFM/ +-ujzQUHpatGus0y4Yyipps2pvOMIyqAa2CjCp7gM46QWlGSNUqDy5CK0rciPfkyLE +-Rqjq8abpMEo/gznpYo6Lo15niR18dd4Fqlixt3l8EIBthwIDAQABo1AwTjAdBgNV +-HQ4EFgQUQclJN7H6YeO61xk92dqMuYLJtGowHwYDVR0jBBgwFoAUQclJN7H6YeO6 +-1xk92dqMuYLJtGowDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCGADO5 +-3f9fg1lfwyk81xHbELPX0XD7CsZ0hcbq4RXEkvgOEcz/pjwxwixm2P5jk5+wl+b1 +-vFyAaJZd63e5I91op0kD/yJIVfE5fCAh/2RS4fbPPLNNLFwDYurFSZkH+o3/e8J1 +-DMoktQv1t1c6EPCKu5rokk3Vb8KiKTZheKTcew== ++gQDbddBF3rHfv3GgDrCl5rz0HJ3lJWdkxXvL8a/Gvpqq6n4PzAWv70BpBrLJE51+ ++66IG4up9B8fHmcf71bjrY3diKxgSw1NY0PXHQAwB0SaCNBYJ49xl9Ny7XaVBYOep ++dLrXTLajnMWMia/L6J8F/ur+ZCS/5+3j9tD81uv8BoIQ+wIDAQABo4H0MIHxMB0G ++A1UdDgQWBBToflisE3sDIo2erzILhImAgAwewjCBwQYDVR0jBIG5MIG2gBToflis ++E3sDIo2erzILhImAgAwewqGBkqSBjzCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT ++B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv ++cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz ++ZWN1cml0eUBydWJ5LWxhbmcub3JnggkAuZCiv2JpF5wwDAYDVR0TBAUwAwEB/zAN ++BgkqhkiG9w0BAQUFAAOBgQCPdwZOMXIS7mgJcCfUMYXvEJX5DytmYwg3iG63m0A+ ++GHczhuhharc8y8em1tWSah9W0J9cMlbTN1L+DiDCeg3+LTyB2rh/TWoIAdm+eqIV ++vqbOSWSQjJrKbi6ESB2UGVaURqolm2jCgGC/yy41A+oKZVozOMbMgUbAvDaGljkQ ++fQ== + -----END CERTIFICATE----- +diff --git a/test/net/imap/server.crt b/test/net/imap/server.crt +index d848b26..fa4f994 100644 +--- a/test/net/imap/server.crt ++++ b/test/net/imap/server.crt +@@ -1,17 +1,17 @@ + Certificate: + Data: +- Version: 3 (0x2) ++ Version: 1 (0x0) + Serial Number: 0 (0x0) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org + Validity +- Not Before: Dec 23 10:23:52 2010 GMT +- Not After : Jan 1 10:23:52 2014 GMT ++ Not Before: Jan 3 01:34:17 2014 GMT ++ Not After : Jan 2 01:34:17 2019 GMT + Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost + Subject Public Key Info: + Public Key Algorithm: rsaEncryption +- Public-Key: (1024 bit) +- Modulus: ++ RSA Public Key: (1024 bit) ++ Modulus (1024 bit): + 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: + bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: + 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: +@@ -22,40 +22,27 @@ Certificate: + af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: + d0:fc:d6:eb:fc:06:82:10:fb + Exponent: 65537 (0x10001) +- X509v3 extensions: +- X509v3 Basic Constraints: +- CA:FALSE +- Netscape Comment: +- OpenSSL Generated Certificate +- X509v3 Subject Key Identifier: +- E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 +- X509v3 Authority Key Identifier: +- keyid:41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A +- + Signature Algorithm: sha1WithRSAEncryption +- ae:ee:cd:fe:c9:af:48:0b:50:37:ac:6a:f6:68:90:9b:67:df: +- 6f:2d:17:c9:3c:a5:da:ad:39:dc:2a:5b:07:88:26:38:19:30: +- d6:95:cf:10:69:c7:92:14:83:be:f1:b5:8e:6f:d9:91:51:c5: +- 63:ae:1c:89:ac:27:bf:4f:2a:8f:4e:0c:57:42:0a:c9:8e:0c: +- f4:f3:02:f7:ea:44:b6:e4:47:05:af:4e:74:e4:87:87:d9:c8: +- 76:ed:ab:32:7c:f0:31:34:10:14:bc:a6:37:cd:d7:dc:33:da: +- 82:d3:d4:9b:e9:d5:cd:38:cc:fa:81:5f:4e:fd:5f:53:05:5d: +- 76:f9 ++ 85:f5:d3:05:8b:8c:f4:43:1c:88:f2:8f:b2:f2:93:77:b7:3d: ++ 95:c6:a0:34:bc:33:6a:d8:85:5f:3e:86:08:10:c5:5c:c1:76: ++ a3:53:3c:dc:38:98:23:97:e7:da:21:ac:e8:4d:3c:96:70:29: ++ ff:ff:1e:4a:9a:17:2b:db:04:62:b9:ef:ab:ea:a7:a5:e8:7c: ++ b1:d5:ed:30:a8:6c:78:de:51:7e:e3:8a:c2:a4:64:a8:63:a2: ++ bc:fd:43:9c:f3:55:7d:54:c9:6a:d8:53:1c:4b:6b:03:aa:b6: ++ 19:e6:a4:4f:47:00:96:c5:42:59:85:4e:c3:4e:cd:41:82:53: ++ 10:f8 + -----BEGIN CERTIFICATE----- +-MIIC3jCCAkegAwIBAgIBADANBgkqhkiG9w0BAQUFADCBjDELMAkGA1UEBhMCSlAx +-EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK +-DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI +-hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTEwMTIyMzEwMjM1MloX +-DTE0MDEwMTEwMjM1MlowYDELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx +-FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRIwEAYDVQQLDAlSdWJ5IFRlc3QxEjAQ +-BgNVBAMMCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23XQ +-Rd6x379xoA6wpea89Byd5SVnZMV7y/Gvxr6aqup+D8wFr+9AaQayyROdfuuiBuLq +-fQfHx5nH+9W462N3YisYEsNTWND1x0AMAdEmgjQWCePcZfTcu12lQWDnqXS610y2 +-o5zFjImvy+ifBf7q/mQkv+ft4/bQ/Nbr/AaCEPsCAwEAAaN7MHkwCQYDVR0TBAIw +-ADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUw +-HQYDVR0OBBYEFOh+WKwTewMijZ6vMguEiYCADB7CMB8GA1UdIwQYMBaAFEHJSTex +-+mHjutcZPdnajLmCybRqMA0GCSqGSIb3DQEBBQUAA4GBAK7uzf7Jr0gLUDesavZo +-kJtn328tF8k8pdqtOdwqWweIJjgZMNaVzxBpx5IUg77xtY5v2ZFRxWOuHImsJ79P +-Ko9ODFdCCsmODPTzAvfqRLbkRwWvTnTkh4fZyHbtqzJ88DE0EBS8pjfN19wz2oLT +-1Jvp1c04zPqBX079X1MFXXb5 ++MIICXDCCAcUCAQAwDQYJKoZIhvcNAQEFBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD ++VQQIEwdTaGltYW5lMRQwEgYDVQQHEwtNYXR6LWUgY2l0eTEXMBUGA1UEChMOUnVi ++eSBDb3JlIFRlYW0xFTATBgNVBAMTDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ ++ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0xNDAxMDMwMTM0MTdaFw0xOTAx ++MDIwMTM0MTdaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIEwdTaGltYW5lMRcwFQYD ++VQQKEw5SdWJ5IENvcmUgVGVhbTESMBAGA1UECxMJUnVieSBUZXN0MRIwEAYDVQQD ++Ewlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANt10EXesd+/ ++caAOsKXmvPQcneUlZ2TFe8vxr8a+mqrqfg/MBa/vQGkGsskTnX7rogbi6n0Hx8eZ ++x/vVuOtjd2IrGBLDU1jQ9cdADAHRJoI0Fgnj3GX03LtdpUFg56l0utdMtqOcxYyJ ++r8vonwX+6v5kJL/n7eP20PzW6/wGghD7AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEA ++hfXTBYuM9EMciPKPsvKTd7c9lcagNLwzatiFXz6GCBDFXMF2o1M83DiYI5fn2iGs ++6E08lnAp//8eSpoXK9sEYrnvq+qnpeh8sdXtMKhseN5RfuOKwqRkqGOivP1DnPNV ++fVTJathTHEtrA6q2GeakT0cAlsVCWYVOw07NQYJTEPg= + -----END CERTIFICATE----- +-- +1.8.5.1 + diff --git a/ruby.spec b/ruby.spec index b30b83d..9b8460a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -155,6 +155,9 @@ Patch18: ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.pa # Fixes multilib conlicts of .gemspec files. # https://bugs.ruby-lang.org/issues/8623 Patch19: ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch +# Backport regenerated certificates for IMAP tests. +# http://bugs.ruby-lang.org/issues/9341 +Patch20: ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -423,6 +426,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -891,6 +895,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %changelog * Fri Jan 03 2014 Vít Ondruch - 2.0.0.353-17 - Fix RubyGems version (rhbz#1036708). +- Fix FTBFS due to expired certificate for IMAP test case. * Mon Nov 25 2013 Vít Ondruch - 2.0.0.353-16 - Update to Ruby 2.0.0-p353. From f8855bc5dd7fed13a6ca027265c2065997365c4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 2 Jan 2014 18:36:55 +0100 Subject: [PATCH 135/530] Ignore IMAP tests due to expired certificate. --- ruby.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.spec b/ruby.spec index 52f0c0b..f1bb181 100644 --- a/ruby.spec +++ b/ruby.spec @@ -563,6 +563,10 @@ sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{r %check DISABLE_TESTS="" +# Ignore IMAP tests due to expired certificate. +# http://bugs.ruby-lang.org/issues/9341 +DISABLE_TESTS="-x test_imap.rb $DISABLE_TESTS" + %ifarch armv7l armv7hl armv7hnl # test_call_double(DL::TestDL) fails on ARM HardFP # http://bugs.ruby-lang.org/issues/6592 From 7b70466c53e32de5aba4f14d448c8050aed1094f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 2 Jan 2014 18:58:30 +0100 Subject: [PATCH 136/530] Upgrade to Ruby 2.1.0. --- ruby.spec | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/ruby.spec b/ruby.spec index f1bb181..fac33a8 100644 --- a/ruby.spec +++ b/ruby.spec @@ -6,14 +6,13 @@ %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} -%global ruby_version_patch_level %{major_minor_version}.%{teeny_version}.%{patch_level} %global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. #%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -%global revision 44362 +#%%global revision 44362 %global ruby_archive %{name}-%{ruby_version} @@ -22,11 +21,14 @@ %global development_release %{?milestone}%{?!milestone:%{?revision:r%{revision}}} %global ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision:r%{revision}}} %else -%global ruby_archive %{ruby_archive}-p%{patch_level} +# Ruby will be using semver versioning scheme since Ruby 2.1.0. However, it is +# unclear ATM what name will be used when next bugfix version is released. +# http://bugs.ruby-lang.org/issues/8835 +#%%global ruby_archive %{ruby_archive}-p%{patch_level} %endif -%global release 16 +%global release 17 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.0 @@ -37,7 +39,7 @@ # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 -%global irb_version %{ruby_version_patch_level} +%global irb_version %{ruby_version} %global bigdecimal_version 1.2.3 %global io_console_version 0.4.2 @@ -61,7 +63,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby -Version: %{ruby_version_patch_level} +Version: %{ruby_version} Release: %{release_string} Group: Development/Languages # Public Domain for example for: include/ruby/st.h, strftime.c, ... @@ -247,7 +249,7 @@ specified in standard Ruby syntax. Summary: The Interactive Ruby Version: %{irb_version} Group: Development/Libraries -Requires: %{name}-libs = %{ruby_version_patch_level} +Requires: %{name}-libs = %{ruby_version} Provides: irb = %{version}-%{release} Provides: ruby(irb) = %{version}-%{release} BuildArch: noarch @@ -387,8 +389,8 @@ serialize and de-serialize most Ruby objects to and from the YAML format. %package tcltk Summary: Tcl/Tk interface for scripting language Ruby Group: Development/Languages -Requires: %{name}-libs%{?_isa} = %{ruby_version_patch_level} -Provides: ruby(tcltk) = %{ruby_version_patch_level}-%{release} +Requires: %{name}-libs%{?_isa} = %{ruby_version} +Provides: ruby(tcltk) = %{ruby_version}-%{release} %description tcltk Tcl/Tk interface for the object-oriented scripting language Ruby. @@ -922,16 +924,11 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog -* Mon Dec 23 2013 Vít Ondruch - 2.1.0.0-0.16.r44362 -- Upgrade to Ruby 2.1.0 (r44362). +* Thu Jan 02 2014 Vít Ondruch - 2.1.0-17 +- Upgrade to Ruby 2.1.0. - Move RPM macros into /usr/lib/rpm/macros.d directory. - -* Mon Dec 02 2013 Vít Ondruch - 2.1.0.0-0.16.preview1 - Allow MD5 in OpenSSL for tests. -* Mon Oct 07 2013 Vít Ondruch - 2.1.0.0-0.16.preview1 -- Update to Ruby 2.1.0.preview1. - * Tue Jul 30 2013 Vít Ondruch - 2.0.0.247-15 - Move Psych symlinks to vendor dir, to prevent F18 -> F19 upgrade issues (rhbz#988490). From 16f19fee741116801ec4832494ef8844233e534e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 2 Jan 2014 19:00:56 +0100 Subject: [PATCH 137/530] Remove obsoleted obsoletes. --- ruby.spec | 2 -- 1 file changed, 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index fac33a8..68a65d5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -271,8 +271,6 @@ Requires: rubygem(json) >= %{json_version} Provides: rdoc = %{version}-%{release} Provides: ri = %{version}-%{release} Provides: rubygem(rdoc) = %{version}-%{release} -Obsoletes: ruby-rdoc < %{version} -Obsoletes: ruby-ri < %{version} BuildArch: noarch %description -n rubygem-rdoc From 8fc18e146bbc17abdc649038fd11e3ad5fc2f4fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 3 Jan 2014 13:20:53 +0100 Subject: [PATCH 138/530] Re-enable fixed test case. --- ruby.spec | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ruby.spec b/ruby.spec index 68a65d5..1bd690f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -585,12 +585,6 @@ sed -i "/assert_equal(\"-0x1.0p+2\", sprintf('%.1a', Float('-0x1.ffp+1')), \"\[r # the test suite). touch abrt.rb -# Fix "./ruby: error while loading shared libraries: libruby.so.2.1: cannot open -# shared object file: No such file or directory" error. -# http://bugs.ruby-lang.org/issues/8971 -# Fixed in rev43129. -sed -i '/yes-test-sample/,/test-knownbugs/ s/MINIRUBY/RUNRUBY/' uncommon.mk - # TestSignal#test_hup_me hangs up the test suite. # http://bugs.ruby-lang.org/issues/8997 sed -i '/def test_hup_me/,/end if Process.respond_to/ s/^/#/' test/ruby/test_signal.rb From 97430c9392040e6befb5cdf52f54f8e08bd99382 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 3 Jan 2014 14:09:59 +0100 Subject: [PATCH 139/530] Backport regenerated certificates for IMAP tests. --- ...x-test-failures-due-to-expired-certs.patch | 259 ++++++++++++++++++ ruby.spec | 8 +- 2 files changed, 263 insertions(+), 4 deletions(-) create mode 100644 ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch diff --git a/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch b/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch new file mode 100644 index 0000000..f9fa197 --- /dev/null +++ b/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch @@ -0,0 +1,259 @@ +From 5ac7c395c19426a9a92f0a918b03e0f493af6e2c Mon Sep 17 00:00:00 2001 +From: tmm1 +Date: Fri, 3 Jan 2014 01:46:55 +0000 +Subject: [PATCH] test/net/imap/test_imap.rb: fix test failures due to expired + certs + +* test/net/imap/cacert.pem: generate new CA cert, since the last one + expired. [Bug #9341] [ruby-core:59459] +* test/net/imap/server.crt: new server cert signed with updated CA. +* test/net/imap/Makefile: add `make regen_certs` to automate this + process. + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + ChangeLog | 8 +++++ + test/net/imap/Makefile | 15 +++++++++ + test/net/imap/cacert.pem | 84 ++++++++++++++++++++++++++---------------------- + test/net/imap/server.crt | 65 +++++++++++++++---------------------- + 4 files changed, 94 insertions(+), 78 deletions(-) + create mode 100644 test/net/imap/Makefile + +diff --git a/ChangeLog b/ChangeLog +index a4f20cd..d6a7148 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,11 @@ ++Fri Jan 3 10:43:57 2014 Aman Gupta ++ ++ * test/net/imap/cacert.pem: generate new CA cert, since the last one ++ expired. [Bug #9341] [ruby-core:59459] ++ * test/net/imap/server.crt: new server cert signed with updated CA. ++ * test/net/imap/Makefile: add `make regen_certs` to automate this ++ process. ++ + Wed Dec 25 16:58:31 2013 Nobuyoshi Nakada + + * proc.c (rb_mod_define_method): consider visibility only if self +diff --git a/test/net/imap/Makefile b/test/net/imap/Makefile +new file mode 100644 +index 0000000..b2bc9c7 +--- /dev/null ++++ b/test/net/imap/Makefile +@@ -0,0 +1,15 @@ ++all: ++ ++regen_certs: ++ touch server.key ++ make server.crt ++ ++cacert.pem: server.key ++ openssl req -new -x509 -days 1825 -key server.key -out cacert.pem -text -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org" ++ ++server.csr: ++ openssl req -new -key server.key -out server.csr -text -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost" ++ ++server.crt: server.csr cacert.pem ++ openssl x509 -days 1825 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -text -out server.crt ++ rm server.csr +diff --git a/test/net/imap/cacert.pem b/test/net/imap/cacert.pem +index bd7e68a..7073387 100644 +--- a/test/net/imap/cacert.pem ++++ b/test/net/imap/cacert.pem +@@ -2,59 +2,65 @@ Certificate: + Data: + Version: 3 (0x2) + Serial Number: +- 9f:dc:f7:94:98:05:43:4c ++ b9:90:a2:bf:62:69:17:9c + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org + Validity +- Not Before: Dec 23 10:21:33 2010 GMT +- Not After : Jan 1 10:21:33 2014 GMT ++ Not Before: Jan 3 01:34:17 2014 GMT ++ Not After : Jan 2 01:34:17 2019 GMT + Subject: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org + Subject Public Key Info: + Public Key Algorithm: rsaEncryption +- Public-Key: (1024 bit) +- Modulus: +- 00:ce:be:2c:9f:47:ba:db:9c:9c:5b:f0:38:3b:f3: +- 74:20:37:76:23:9f:84:1c:81:90:b4:3e:00:20:34: +- 98:7e:81:69:50:a1:c3:65:96:ea:fa:00:da:8c:cc: +- 53:3f:ba:3c:d0:50:7a:5a:b4:6b:ac:d3:2e:18:ca: +- 2a:69:b3:6a:6f:38:c2:32:a8:06:b6:0a:30:a9:ee: +- 03:38:e9:05:a5:19:23:54:a8:3c:b9:08:ad:2b:72: +- 23:df:93:22:c4:46:a8:ea:f1:a6:e9:30:4a:3f:83: +- 39:e9:62:8e:8b:a3:5e:67:89:1d:7c:75:de:05:aa: +- 58:b1:b7:79:7c:10:80:6d:87 ++ RSA Public Key: (1024 bit) ++ Modulus (1024 bit): ++ 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: ++ bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: ++ 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: ++ 9d:7e:eb:a2:06:e2:ea:7d:07:c7:c7:99:c7:fb:d5: ++ b8:eb:63:77:62:2b:18:12:c3:53:58:d0:f5:c7:40: ++ 0c:01:d1:26:82:34:16:09:e3:dc:65:f4:dc:bb:5d: ++ a5:41:60:e7:a9:74:ba:d7:4c:b6:a3:9c:c5:8c:89: ++ af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: ++ d0:fc:d6:eb:fc:06:82:10:fb + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: +- 41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A ++ E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 + X509v3 Authority Key Identifier: +- keyid:41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A ++ keyid:E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 ++ DirName:/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org ++ serial:B9:90:A2:BF:62:69:17:9C + + X509v3 Basic Constraints: + CA:TRUE + Signature Algorithm: sha1WithRSAEncryption +- 86:00:33:b9:dd:ff:5f:83:59:5f:c3:29:3c:d7:11:db:10:b3: +- d7:d1:70:fb:0a:c6:74:85:c6:ea:e1:15:c4:92:f8:0e:11:cc: +- ff:a6:3c:31:c2:2c:66:d8:fe:63:93:9f:b0:97:e6:f5:bc:5c: +- 80:68:96:5d:eb:77:b9:23:dd:68:a7:49:03:ff:22:48:55:f1: +- 39:7c:20:21:ff:64:52:e1:f6:cf:3c:b3:4d:2c:5c:03:62:ea: +- c5:49:99:07:fa:8d:ff:7b:c2:75:0c:ca:24:b5:0b:f5:b7:57: +- 3a:10:f0:8a:bb:9a:e8:92:4d:d5:6f:c2:a2:29:36:61:78:a4: +- dc:7b ++ 8f:77:06:4e:31:72:12:ee:68:09:70:27:d4:31:85:ef:10:95: ++ f9:0f:2b:66:63:08:37:88:6e:b7:9b:40:3e:18:77:33:86:e8: ++ 61:6a:b7:3c:cb:c7:a6:d6:d5:92:6a:1f:56:d0:9f:5c:32:56: ++ d3:37:52:fe:0e:20:c2:7a:0d:fe:2d:3c:81:da:b8:7f:4d:6a: ++ 08:01:d9:be:7a:a2:15:be:a6:ce:49:64:90:8c:9a:ca:6e:2e: ++ 84:48:1d:94:19:56:94:46:aa:25:9b:68:c2:80:60:bf:cb:2e: ++ 35:03:ea:0a:65:5a:33:38:c6:cc:81:46:c0:bc:36:86:96:39: ++ 10:7d + -----BEGIN CERTIFICATE----- +-MIIC6DCCAlGgAwIBAgIJAJ/c95SYBUNMMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD +-VQQGEwJKUDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkx +-FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex +-JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTAxMjIz +-MTAyMTMzWhcNMTQwMTAxMTAyMTMzWjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgM +-B1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQKDA5SdWJ5IENv +-cmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz ++MIIDjTCCAvagAwIBAgIJALmQor9iaRecMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD ++VQQGEwJKUDEQMA4GA1UECBMHU2hpbWFuZTEUMBIGA1UEBxMLTWF0ei1lIGNpdHkx ++FzAVBgNVBAoTDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDEwxSdWJ5IFRlc3QgQ0Ex ++JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTQwMTAz ++MDEzNDE3WhcNMTkwMTAyMDEzNDE3WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT ++B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv ++cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz + ZWN1cml0eUBydWJ5LWxhbmcub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB +-gQDOviyfR7rbnJxb8Dg783QgN3Yjn4QcgZC0PgAgNJh+gWlQocNllur6ANqMzFM/ +-ujzQUHpatGus0y4Yyipps2pvOMIyqAa2CjCp7gM46QWlGSNUqDy5CK0rciPfkyLE +-Rqjq8abpMEo/gznpYo6Lo15niR18dd4Fqlixt3l8EIBthwIDAQABo1AwTjAdBgNV +-HQ4EFgQUQclJN7H6YeO61xk92dqMuYLJtGowHwYDVR0jBBgwFoAUQclJN7H6YeO6 +-1xk92dqMuYLJtGowDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCGADO5 +-3f9fg1lfwyk81xHbELPX0XD7CsZ0hcbq4RXEkvgOEcz/pjwxwixm2P5jk5+wl+b1 +-vFyAaJZd63e5I91op0kD/yJIVfE5fCAh/2RS4fbPPLNNLFwDYurFSZkH+o3/e8J1 +-DMoktQv1t1c6EPCKu5rokk3Vb8KiKTZheKTcew== ++gQDbddBF3rHfv3GgDrCl5rz0HJ3lJWdkxXvL8a/Gvpqq6n4PzAWv70BpBrLJE51+ ++66IG4up9B8fHmcf71bjrY3diKxgSw1NY0PXHQAwB0SaCNBYJ49xl9Ny7XaVBYOep ++dLrXTLajnMWMia/L6J8F/ur+ZCS/5+3j9tD81uv8BoIQ+wIDAQABo4H0MIHxMB0G ++A1UdDgQWBBToflisE3sDIo2erzILhImAgAwewjCBwQYDVR0jBIG5MIG2gBToflis ++E3sDIo2erzILhImAgAwewqGBkqSBjzCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT ++B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv ++cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz ++ZWN1cml0eUBydWJ5LWxhbmcub3JnggkAuZCiv2JpF5wwDAYDVR0TBAUwAwEB/zAN ++BgkqhkiG9w0BAQUFAAOBgQCPdwZOMXIS7mgJcCfUMYXvEJX5DytmYwg3iG63m0A+ ++GHczhuhharc8y8em1tWSah9W0J9cMlbTN1L+DiDCeg3+LTyB2rh/TWoIAdm+eqIV ++vqbOSWSQjJrKbi6ESB2UGVaURqolm2jCgGC/yy41A+oKZVozOMbMgUbAvDaGljkQ ++fQ== + -----END CERTIFICATE----- +diff --git a/test/net/imap/server.crt b/test/net/imap/server.crt +index d848b26..fa4f994 100644 +--- a/test/net/imap/server.crt ++++ b/test/net/imap/server.crt +@@ -1,17 +1,17 @@ + Certificate: + Data: +- Version: 3 (0x2) ++ Version: 1 (0x0) + Serial Number: 0 (0x0) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org + Validity +- Not Before: Dec 23 10:23:52 2010 GMT +- Not After : Jan 1 10:23:52 2014 GMT ++ Not Before: Jan 3 01:34:17 2014 GMT ++ Not After : Jan 2 01:34:17 2019 GMT + Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost + Subject Public Key Info: + Public Key Algorithm: rsaEncryption +- Public-Key: (1024 bit) +- Modulus: ++ RSA Public Key: (1024 bit) ++ Modulus (1024 bit): + 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: + bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: + 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: +@@ -22,40 +22,27 @@ Certificate: + af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: + d0:fc:d6:eb:fc:06:82:10:fb + Exponent: 65537 (0x10001) +- X509v3 extensions: +- X509v3 Basic Constraints: +- CA:FALSE +- Netscape Comment: +- OpenSSL Generated Certificate +- X509v3 Subject Key Identifier: +- E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 +- X509v3 Authority Key Identifier: +- keyid:41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A +- + Signature Algorithm: sha1WithRSAEncryption +- ae:ee:cd:fe:c9:af:48:0b:50:37:ac:6a:f6:68:90:9b:67:df: +- 6f:2d:17:c9:3c:a5:da:ad:39:dc:2a:5b:07:88:26:38:19:30: +- d6:95:cf:10:69:c7:92:14:83:be:f1:b5:8e:6f:d9:91:51:c5: +- 63:ae:1c:89:ac:27:bf:4f:2a:8f:4e:0c:57:42:0a:c9:8e:0c: +- f4:f3:02:f7:ea:44:b6:e4:47:05:af:4e:74:e4:87:87:d9:c8: +- 76:ed:ab:32:7c:f0:31:34:10:14:bc:a6:37:cd:d7:dc:33:da: +- 82:d3:d4:9b:e9:d5:cd:38:cc:fa:81:5f:4e:fd:5f:53:05:5d: +- 76:f9 ++ 85:f5:d3:05:8b:8c:f4:43:1c:88:f2:8f:b2:f2:93:77:b7:3d: ++ 95:c6:a0:34:bc:33:6a:d8:85:5f:3e:86:08:10:c5:5c:c1:76: ++ a3:53:3c:dc:38:98:23:97:e7:da:21:ac:e8:4d:3c:96:70:29: ++ ff:ff:1e:4a:9a:17:2b:db:04:62:b9:ef:ab:ea:a7:a5:e8:7c: ++ b1:d5:ed:30:a8:6c:78:de:51:7e:e3:8a:c2:a4:64:a8:63:a2: ++ bc:fd:43:9c:f3:55:7d:54:c9:6a:d8:53:1c:4b:6b:03:aa:b6: ++ 19:e6:a4:4f:47:00:96:c5:42:59:85:4e:c3:4e:cd:41:82:53: ++ 10:f8 + -----BEGIN CERTIFICATE----- +-MIIC3jCCAkegAwIBAgIBADANBgkqhkiG9w0BAQUFADCBjDELMAkGA1UEBhMCSlAx +-EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK +-DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI +-hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTEwMTIyMzEwMjM1MloX +-DTE0MDEwMTEwMjM1MlowYDELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx +-FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRIwEAYDVQQLDAlSdWJ5IFRlc3QxEjAQ +-BgNVBAMMCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23XQ +-Rd6x379xoA6wpea89Byd5SVnZMV7y/Gvxr6aqup+D8wFr+9AaQayyROdfuuiBuLq +-fQfHx5nH+9W462N3YisYEsNTWND1x0AMAdEmgjQWCePcZfTcu12lQWDnqXS610y2 +-o5zFjImvy+ifBf7q/mQkv+ft4/bQ/Nbr/AaCEPsCAwEAAaN7MHkwCQYDVR0TBAIw +-ADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUw +-HQYDVR0OBBYEFOh+WKwTewMijZ6vMguEiYCADB7CMB8GA1UdIwQYMBaAFEHJSTex +-+mHjutcZPdnajLmCybRqMA0GCSqGSIb3DQEBBQUAA4GBAK7uzf7Jr0gLUDesavZo +-kJtn328tF8k8pdqtOdwqWweIJjgZMNaVzxBpx5IUg77xtY5v2ZFRxWOuHImsJ79P +-Ko9ODFdCCsmODPTzAvfqRLbkRwWvTnTkh4fZyHbtqzJ88DE0EBS8pjfN19wz2oLT +-1Jvp1c04zPqBX079X1MFXXb5 ++MIICXDCCAcUCAQAwDQYJKoZIhvcNAQEFBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD ++VQQIEwdTaGltYW5lMRQwEgYDVQQHEwtNYXR6LWUgY2l0eTEXMBUGA1UEChMOUnVi ++eSBDb3JlIFRlYW0xFTATBgNVBAMTDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ ++ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0xNDAxMDMwMTM0MTdaFw0xOTAx ++MDIwMTM0MTdaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIEwdTaGltYW5lMRcwFQYD ++VQQKEw5SdWJ5IENvcmUgVGVhbTESMBAGA1UECxMJUnVieSBUZXN0MRIwEAYDVQQD ++Ewlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANt10EXesd+/ ++caAOsKXmvPQcneUlZ2TFe8vxr8a+mqrqfg/MBa/vQGkGsskTnX7rogbi6n0Hx8eZ ++x/vVuOtjd2IrGBLDU1jQ9cdADAHRJoI0Fgnj3GX03LtdpUFg56l0utdMtqOcxYyJ ++r8vonwX+6v5kJL/n7eP20PzW6/wGghD7AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEA ++hfXTBYuM9EMciPKPsvKTd7c9lcagNLwzatiFXz6GCBDFXMF2o1M83DiYI5fn2iGs ++6E08lnAp//8eSpoXK9sEYrnvq+qnpeh8sdXtMKhseN5RfuOKwqRkqGOivP1DnPNV ++fVTJathTHEtrA6q2GeakT0cAlsVCWYVOw07NQYJTEPg= + -----END CERTIFICATE----- +-- +1.8.5.1 + diff --git a/ruby.spec b/ruby.spec index 1bd690f..486ca5e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -140,6 +140,9 @@ Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch # TestGemRemoteFetcher#test_download_to_cache. # http://bugs.ruby-lang.org/issues/9273 Patch18: ruby-2.1.0-resolv.rb-no-encodings.patch +# Backport regenerated certificates for IMAP tests. +# http://bugs.ruby-lang.org/issues/9341 +Patch19: ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -404,6 +407,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch12 -p1 %patch17 -p1 %patch18 -p1 +%patch19 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -563,10 +567,6 @@ sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{r %check DISABLE_TESTS="" -# Ignore IMAP tests due to expired certificate. -# http://bugs.ruby-lang.org/issues/9341 -DISABLE_TESTS="-x test_imap.rb $DISABLE_TESTS" - %ifarch armv7l armv7hl armv7hnl # test_call_double(DL::TestDL) fails on ARM HardFP # http://bugs.ruby-lang.org/issues/6592 From 0f37fb5c2c291a48379a7edb97c53ae991fcb401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 3 Jan 2014 16:21:47 +0100 Subject: [PATCH 140/530] Use %{_rpmconfigdir} for specifying RPM config dir. --- ruby.spec | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ruby.spec b/ruby.spec index 486ca5e..d2fba26 100644 --- a/ruby.spec +++ b/ruby.spec @@ -462,11 +462,11 @@ sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_li # Move macros file insto proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. -mkdir -p %{buildroot}%{_exec_prefix}/lib/rpm/macros.d -install -m 644 %{SOURCE4} %{buildroot}%{_exec_prefix}/lib/rpm/macros.d/macros.ruby -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_exec_prefix}/lib/rpm/macros.d/macros.ruby -install -m 644 %{SOURCE5} %{buildroot}%{_exec_prefix}/lib/rpm/macros.d/macros.rubygems -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_exec_prefix}/lib/rpm/macros.d/macros.rubygems +mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d +install -m 644 %{SOURCE4} %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby +install -m 644 %{SOURCE5} %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems # Kill bundled cert.pem mkdir -p %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ @@ -649,7 +649,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %doc README.EXT %lang(ja) %doc README.EXT.ja -%{_exec_prefix}/lib/rpm/macros.d/macros.ruby +%{_rpmconfigdir}/macros.d/macros.ruby %{_includedir}/* %{_libdir}/libruby.so @@ -846,7 +846,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %exclude %{gem_dir}/specifications/default/test-unit-*.gemspec %files -n rubygems-devel -%{_exec_prefix}/lib/rpm/macros.d/macros.rubygems +%{_rpmconfigdir}/macros.d/macros.rubygems %files -n rubygem-rake %{_bindir}/rake From 02ee7904a419f4434bdef373500f3b14916fed0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 6 Jan 2014 13:48:46 +0100 Subject: [PATCH 141/530] Rebase patches. --- ...o-specify-additional-preludes-by-configuratio.patch | 6 +++--- ruby-2.1.0-Enable-configuration-of-archlibdir.patch | 2 +- ...-duplicated-paths-when-empty-version-string-i.patch | 6 +++--- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 10 +++++----- ruby-2.1.0-resolv.rb-no-encodings.patch | 2 +- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index 55778ef..4487c44 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -13,7 +13,7 @@ diff --git a/Makefile.in b/Makefile.in index 7e8ed82..7916993 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -110,6 +110,7 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ +@@ -114,6 +114,7 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@ DEFAULT_PRELUDES = $(GEM_PRELUDE) @@ -25,7 +25,7 @@ diff --git a/common.mk b/common.mk index 5cfbc3d..3f0a82e 100644 --- a/common.mk +++ b/common.mk -@@ -110,7 +110,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(DMYEXT) +@@ -109,7 +109,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(DMYEXT) GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) @@ -38,7 +38,7 @@ diff --git a/configure.in b/configure.in index 0e371e2..d4f1dcb 100644 --- a/configure.in +++ b/configure.in -@@ -3731,6 +3731,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -3814,6 +3814,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 668edfa..4b44444 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 37d9a62..553d4d0 100644 --- a/configure.in +++ b/configure.in -@@ -2956,6 +2956,11 @@ if test ${multiarch+set}; then +@@ -3044,6 +3044,11 @@ if test ${multiarch+set}; then fi archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 950336c..86d1675 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -13,7 +13,7 @@ diff --git a/configure.in b/configure.in index 88d24ee..4a300b9 100644 --- a/configure.in +++ b/configure.in -@@ -3608,8 +3608,6 @@ AC_ARG_WITH(rubylibprefix, +@@ -3618,8 +3618,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -22,7 +22,7 @@ index 88d24ee..4a300b9 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, -@@ -3639,6 +3637,7 @@ AC_ARG_WITH(ruby-version, +@@ -3649,6 +3647,7 @@ AC_ARG_WITH(ruby-version, [ruby_version=full]) unset RUBY_LIB_VERSION unset RUBY_LIB_VERSION_STYLE @@ -30,7 +30,7 @@ index 88d24ee..4a300b9 100644 AS_CASE(["$ruby_version"], [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) -@@ -3655,30 +3654,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then +@@ -3665,30 +3664,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" eval $ruby_version elif test -z "${ruby_version}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 10e3d99..b7e2fed 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 553d4d0..03a4152 100644 --- a/configure.in +++ b/configure.in -@@ -3647,6 +3647,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3730,6 +3730,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index b7f6588..3c7272e 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index 03a4152..0e371e2 100644 --- a/configure.in +++ b/configure.in -@@ -3621,6 +3621,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -3704,6 +3704,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 03a4152..0e371e2 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -3644,6 +3648,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3727,6 +3731,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -38,7 +38,7 @@ diff --git a/loadpath.c b/loadpath.c index 623dc9d..74c5d9e 100644 --- a/loadpath.c +++ b/loadpath.c -@@ -86,6 +86,10 @@ const char ruby_initial_load_paths[] = +@@ -94,6 +94,10 @@ const char ruby_initial_load_paths[] = #endif #endif @@ -67,7 +67,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index b47b6e1..0b99408 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -317,6 +317,7 @@ sitelibdir = CONFIG["sitelibdir"] +@@ -324,6 +324,7 @@ sitelibdir = CONFIG["sitelibdir"] sitearchlibdir = CONFIG["sitearchdir"] vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] @@ -75,7 +75,7 @@ index b47b6e1..0b99408 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] configure_args = Shellwords.shellwords(CONFIG["configure_args"]) -@@ -505,7 +506,15 @@ end +@@ -512,7 +513,15 @@ end install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[README* *.txt *.rdoc *.gemspec] diff --git a/ruby-2.1.0-resolv.rb-no-encodings.patch b/ruby-2.1.0-resolv.rb-no-encodings.patch index f1037db..27e91aa 100644 --- a/ruby-2.1.0-resolv.rb-no-encodings.patch +++ b/ruby-2.1.0-resolv.rb-no-encodings.patch @@ -19,7 +19,7 @@ diff --git a/ChangeLog b/ChangeLog index 72eaa6f..93686e9 100644 --- a/ChangeLog +++ b/ChangeLog -@@ -1,6 +1,13 @@ +@@ -67,6 +67,13 @@ install win32.h. [ruby-core:58801][Bug #9199] reported by arton. From 19ff4992f3753a8a614abf5088635b6fbd2464e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 10 Jan 2014 14:53:57 +0100 Subject: [PATCH 142/530] Detect if rubygems are running under rpmbuild. This allows to install binaryi extensions on suitable place and clears the .spec files a bit. --- operating_system.rb | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/operating_system.rb b/operating_system.rb index fba8117..079564f 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -11,6 +11,15 @@ module Gem end private :previous_but_one_dir_to + ## + # Tries to detect, if arguments and environment variables suggest that + # 'gem install' is executed from rpmbuild. + + def rpmbuild? + (ARGV.include?('--install-dir') || ARGV.include?('-i')) && ENV['RPM_PACKAGE_NAME'] + end + private :rpmbuild? + ## # Default gems locations allowed on FHS system (/usr, /usr/share). # The locations are derived from directories specified during build @@ -78,8 +87,16 @@ module Gem end def default_ext_dir_for base_dir - dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir} - dirs && File.join(dirs.last[:ext_dir], RbConfig::CONFIG['RUBY_INSTALL_NAME']) + dir = if rpmbuild? + build_dir = base_dir.chomp Gem.default_dirs[:system][:gem_dir] + if build_dir != base_dir + File.join build_dir, Gem.default_dirs[:system][:ext_dir] + end + else + dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir} + dirs && dirs.last[:ext_dir] + end + dir && File.join(dir, RbConfig::CONFIG['RUBY_INSTALL_NAME']) end # This method should be available since RubyGems 2.2 until RubyGems 3.0. From 86a8f5cf5aacdfe5700ba763d9391f3dfd0b5db5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 10 Jan 2014 15:26:24 +0100 Subject: [PATCH 143/530] Bump the release and add changelog. --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index d2fba26..3eff915 100644 --- a/ruby.spec +++ b/ruby.spec @@ -28,7 +28,7 @@ %endif -%global release 17 +%global release 18 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.0 @@ -916,6 +916,10 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Jan 10 2014 Vít Ondruch - 2.1.0-18 +- Detect if rubygems are running under rpmbuild and install gem binary + extensions into appropriate place. + * Thu Jan 02 2014 Vít Ondruch - 2.1.0-17 - Upgrade to Ruby 2.1.0. - Move RPM macros into /usr/lib/rpm/macros.d directory. From e11dee85448fc7270671c1f1a004739f49a93903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 10 Jan 2014 16:06:12 +0100 Subject: [PATCH 144/530] Don't generate documentation on unexpected places. --- ruby.spec | 9 +++ ...-Add-BasicSpecification-source_paths.patch | 73 +++++++++++++++++++ ...ource_paths-for-fallback-rdoc-plugin.patch | 26 +++++++ 3 files changed, 108 insertions(+) create mode 100644 rubygems-2.2.1-Add-BasicSpecification-source_paths.patch create mode 100644 rubygems-2.2.1-Use-source_paths-for-fallback-rdoc-plugin.patch diff --git a/ruby.spec b/ruby.spec index 3eff915..ce34984 100644 --- a/ruby.spec +++ b/ruby.spec @@ -143,6 +143,12 @@ Patch18: ruby-2.1.0-resolv.rb-no-encodings.patch # Backport regenerated certificates for IMAP tests. # http://bugs.ruby-lang.org/issues/9341 Patch19: ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch +# Fix documentation generated on unexpected places. +# https://github.com/rubygems/rubygems/issues/758 +# https://github.com/rubygems/rubygems/commit/e088c6824209d98eccb0f1e6c7e21f26b4a1178d +Patch20: rubygems-2.2.1-Add-BasicSpecification-source_paths.patch +# https://github.com/rubygems/rubygems/commit/2f03b54b63043aadce9e95b83e98b29712bad21f +Patch21: rubygems-2.2.1-Use-source_paths-for-fallback-rdoc-plugin.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -408,6 +414,8 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 +%patch21 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -917,6 +925,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %changelog * Fri Jan 10 2014 Vít Ondruch - 2.1.0-18 +- Don't generate documentation on unexpected places. - Detect if rubygems are running under rpmbuild and install gem binary extensions into appropriate place. diff --git a/rubygems-2.2.1-Add-BasicSpecification-source_paths.patch b/rubygems-2.2.1-Add-BasicSpecification-source_paths.patch new file mode 100644 index 0000000..3cd1bed --- /dev/null +++ b/rubygems-2.2.1-Add-BasicSpecification-source_paths.patch @@ -0,0 +1,73 @@ +From e088c6824209d98eccb0f1e6c7e21f26b4a1178d Mon Sep 17 00:00:00 2001 +From: Eric Hodel +Date: Mon, 6 Jan 2014 14:20:18 -0800 +Subject: [PATCH] Add BasicSpecification#source_paths + +This allows documentation and analysis tools to retrieve paths of source +files in gems. This is needed as the introduction of shared gem +directories means the extension source directory is no longer included +in require_paths (which was meant for $LOAD_PATH, not source code). +--- + lib/rubygems/basic_specification.rb | 18 ++++++++++++++++++ + test/rubygems/test_gem_specification.rb | 16 ++++++++++++++++ + 2 files changed, 34 insertions(+) + +diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb +index a52377f..470a6eb 100644 +--- a/lib/rubygems/basic_specification.rb ++++ b/lib/rubygems/basic_specification.rb +@@ -207,6 +207,24 @@ def require_paths + end + + ## ++ # Returns the paths to the source files for use with analysis and ++ # documentation tools. These paths are relative to full_gem_path. ++ ++ def source_paths ++ paths = raw_require_paths.dup ++ ++ if @extensions then ++ ext_dirs = @extensions.map do |extension| ++ extension.split(File::SEPARATOR, 2).first ++ end.uniq ++ ++ paths.concat ext_dirs ++ end ++ ++ paths.uniq ++ end ++ ++ ## + # Return a Gem::Specification from this gem + + def to_spec +diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb +index 46db0c4..b72a5d1 100644 +--- a/test/rubygems/test_gem_specification.rb ++++ b/test/rubygems/test_gem_specification.rb +@@ -1809,6 +1809,22 @@ def test_source + assert_kind_of Gem::Source::Installed, @a1.source + end + ++ def test_source_paths ++ ext_spec ++ ++ @ext.require_paths = %w[lib ext foo] ++ @ext.extensions << 'bar/baz' ++ ++ expected = %w[ ++ lib ++ ext ++ foo ++ bar ++ ] ++ ++ assert_equal expected, @ext.source_paths ++ end ++ + def test_full_require_paths + ext_spec + +-- +1.8.5.1 + diff --git a/rubygems-2.2.1-Use-source_paths-for-fallback-rdoc-plugin.patch b/rubygems-2.2.1-Use-source_paths-for-fallback-rdoc-plugin.patch new file mode 100644 index 0000000..edf40f1 --- /dev/null +++ b/rubygems-2.2.1-Use-source_paths-for-fallback-rdoc-plugin.patch @@ -0,0 +1,26 @@ +From 2f03b54b63043aadce9e95b83e98b29712bad21f Mon Sep 17 00:00:00 2001 +From: Eric Hodel +Date: Mon, 6 Jan 2014 14:30:07 -0800 +Subject: [PATCH] Use source_paths for fallback rdoc plugin + +Fixes #758 +--- + lib/rubygems/rdoc.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/rubygems/rdoc.rb b/lib/rubygems/rdoc.rb +index 52249dc..633bd89 100644 +--- a/lib/rubygems/rdoc.rb ++++ b/lib/rubygems/rdoc.rb +@@ -193,7 +193,7 @@ def generate + ::RDoc::Parser::C.reset + + args = @spec.rdoc_options +- args.concat @spec.require_paths ++ args.concat @spec.source_paths + args.concat @spec.extra_rdoc_files + + case config_args = Gem.configuration[:rdoc] +-- +1.8.5.1 + From c4c64c841ce1b36e531038f235af66162c14b5a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 15 Jan 2014 10:16:52 +0100 Subject: [PATCH 145/530] Add support for ppc64le arch (rhbz#1053263). --- config.h | 5 +++++ ruby.spec | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/config.h b/config.h index ce501db..b34e398 100644 --- a/config.h +++ b/config.h @@ -20,7 +20,12 @@ #elif defined(__ia64__) #include "ruby/config-ia64.h" #elif defined(__powerpc64__) +#include +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ #include "ruby/config-ppc64.h" +#else +#include "ruby/config-ppc64le.h" +#endif #elif defined(__powerpc__) #include "ruby/config-ppc.h" #elif defined(__s390x__) diff --git a/ruby.spec b/ruby.spec index 9b8460a..421ac13 100644 --- a/ruby.spec +++ b/ruby.spec @@ -893,9 +893,10 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog -* Fri Jan 03 2014 Vít Ondruch - 2.0.0.353-17 +* Wed Jan 15 2014 Vít Ondruch - 2.0.0.353-17 - Fix RubyGems version (rhbz#1036708). - Fix FTBFS due to expired certificate for IMAP test case. +- Add support for ppc64le arch (rhbz#1053263). * Mon Nov 25 2013 Vít Ondruch - 2.0.0.353-16 - Update to Ruby 2.0.0-p353. From 199081935ed74325e7ae917b44a55dc1511d960f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 15 Jan 2014 10:16:52 +0100 Subject: [PATCH 146/530] Add support for ppc64le arch (rhbz#1053263). --- config.h | 5 +++++ ruby.spec | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/config.h b/config.h index ce501db..b34e398 100644 --- a/config.h +++ b/config.h @@ -20,7 +20,12 @@ #elif defined(__ia64__) #include "ruby/config-ia64.h" #elif defined(__powerpc64__) +#include +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ #include "ruby/config-ppc64.h" +#else +#include "ruby/config-ppc64le.h" +#endif #elif defined(__powerpc__) #include "ruby/config-ppc.h" #elif defined(__s390x__) diff --git a/ruby.spec b/ruby.spec index ce34984..5436e1f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -924,10 +924,11 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog -* Fri Jan 10 2014 Vít Ondruch - 2.1.0-18 +* Wed Jan 15 2014 Vít Ondruch - 2.1.0-18 - Don't generate documentation on unexpected places. - Detect if rubygems are running under rpmbuild and install gem binary extensions into appropriate place. +- Add support for ppc64le arch (rhbz#1053263). * Thu Jan 02 2014 Vít Ondruch - 2.1.0-17 - Upgrade to Ruby 2.1.0. From 04104b76f38b35a4e2f646cbefe7ed6cf423b468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 6 Feb 2014 08:59:35 +0100 Subject: [PATCH 147/530] "Errno::EINVAL: Invalid argument - recvmsg(2)" works with recent kernel. Tested with Kernel 3.12.8-300.fc20.x86_64. https://bugs.ruby-lang.org/issues/9124 --- ruby.spec | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/ruby.spec b/ruby.spec index 5436e1f..ea28606 100644 --- a/ruby.spec +++ b/ruby.spec @@ -611,19 +611,6 @@ sed -i '/Process.constants.grep(\/\\ACLOCK_\/).each {|n|/ s/$/\n next if [: # http://bugs.ruby-lang.org/issues/9259 sed -i "/^ gem 'minitest', '~> 4.0'/ s/^/#/" lib/rubygems/test_case.rb -# Errno::EINVAL: Invalid argument - recvmsg(2) -# Looks to be a problem of Linux 3.12+ and should be possible to remove as soon -# as Koji builders run fixed kerenel. -# https://bugs.ruby-lang.org/issues/9124 -sed -i '/^ def test_timestampns/,/^ end/ s/^/#/' test/socket/test_socket.rb -sed -i '/^ def test_timestamp/,/^ end/ s/^/#/' test/socket/test_socket.rb -sed -i '/^ def test_udp_server/,/^ end/ s/^/#/' test/socket/test_socket.rb -sed -i '/^ def test_recvmsg_nonblock_error/,/^ end/ s/^/#/' test/socket/test_nonblock.rb -sed -i '/^ def test_fd_passing_n/,/^ end/ s/^/#/' test/socket/test_unix.rb -sed -i '/^ def test_fd_passing_n2/,/^ end/ s/^/#/' test/socket/test_unix.rb -sed -i '/^ def test_recvmsg/,/^ end/ s/^/#/' test/socket/test_unix.rb -sed -i '/^ def test_sendcred_ucred/,/^ end/ s/^/#/' test/socket/test_unix.rb - # Segmentation fault. # https://bugs.ruby-lang.org/issues/9198 sed -i '/^ def test_machine_stackoverflow/,/^ end/ s/^/#/' test/ruby/test_exception.rb @@ -929,6 +916,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" - Detect if rubygems are running under rpmbuild and install gem binary extensions into appropriate place. - Add support for ppc64le arch (rhbz#1053263). +- Re-enable some test cases, which are passing now with Kernel 3.12.8+. * Thu Jan 02 2014 Vít Ondruch - 2.1.0-17 - Upgrade to Ruby 2.1.0. From 7347c8fd58b3bc41f59f79faadfb0a17309ebc13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 6 Feb 2014 09:04:54 +0100 Subject: [PATCH 148/530] Re-enabled "TestProcess#{test_clock_getres_constants,test_clock_gettime_constants} The issue was fixed with Kernel 3.12.9-300.fc20.armv7hl. http://bugs.ruby-lang.org/issues/9008 --- ruby.spec | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/ruby.spec b/ruby.spec index ea28606..645265f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -597,16 +597,6 @@ touch abrt.rb # http://bugs.ruby-lang.org/issues/8997 sed -i '/def test_hup_me/,/end if Process.respond_to/ s/^/#/' test/ruby/test_signal.rb -%ifarch armv7l armv7hl armv7hnl -# TestProcess#test_clock_getres_constants and TestProcess#test_clock_gettime_constants fails on ARM. -# http://bugs.ruby-lang.org/issues/9008 -# Kernel issue. Should be fixed in 3.13 kernel. -# https://lkml.org/lkml/2013/10/18/521 -# http://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/commit/?id=98d6f4dd84a134d942827584a3c5f67ffd8ec35f -sed -i '/Process.constants.grep(\/\\ACLOCK_\/).each {|n|/ s/$/\n next if [:CLOCK_REALTIME_ALARM, :CLOCK_BOOTTIME_ALARM].include? n/' \ - test/ruby/test_process.rb -%endif - # Fix "Could not find 'minitest'" error. # http://bugs.ruby-lang.org/issues/9259 sed -i "/^ gem 'minitest', '~> 4.0'/ s/^/#/" lib/rubygems/test_case.rb From 9fc3f49bd63fd3521e47ba3f09fb42d372a88e02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 6 Feb 2014 10:34:50 +0100 Subject: [PATCH 149/530] Backport fix for floating point issues on i686. --- ruby-2.2.0-configure.in-use-SSE2.patch | 49 ++++++++++++++++++++++++++ ruby.spec | 12 +++---- 2 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 ruby-2.2.0-configure.in-use-SSE2.patch diff --git a/ruby-2.2.0-configure.in-use-SSE2.patch b/ruby-2.2.0-configure.in-use-SSE2.patch new file mode 100644 index 0000000..87858ce --- /dev/null +++ b/ruby-2.2.0-configure.in-use-SSE2.patch @@ -0,0 +1,49 @@ +From 40967a5c0b975f3f3ec1538a820985aa61b65b8f Mon Sep 17 00:00:00 2001 +From: nobu +Date: Thu, 9 Jan 2014 11:46:26 +0000 +Subject: [PATCH] configure.in: use SSE2 + +* configure.in: use SSE2 instructions to drop unexpected precisions on + other than mingw. [ruby-core:59472] [Bug #8358] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44538 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + ChangeLog | 5 +++++ + configure.in | 8 ++++++++- + 2 files changed, 13 insertions(+), 0 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 7ec6eec..9ba337f 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++Thu Jan 9 20:46:22 2014 Nobuyoshi Nakada ++ ++ * configure.in: use SSE2 instructions to drop unexpected precisions on ++ other than mingw. [ruby-core:59472] [Bug #8358] ++ + Fri Jan 3 10:43:57 2014 Aman Gupta + + * test/net/imap/cacert.pem: generate new CA cert, since the last one +diff --git a/configure.in b/configure.in +index f9e9431..9c95cc4 100644 +--- a/configure.in ++++ b/configure.in +@@ -858,6 +857,14 @@ if test "$GCC" = yes; then + for oflag in -fno-fast-math; do + RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(optflags, $oflag)]) + done ++ AS_CASE(["$target"], ++ [*-darwin*], [ ++ # doesn't seem necessary on Mac OS X ++ ], ++ [[i[4-6]86*]], [ ++ RUBY_TRY_CFLAGS(-msse2 -mfpmath=sse, [RUBY_APPEND_OPTION(XCFLAGS, -msse2 -mfpmath=sse)]) ++ ] ++ ) + fi + + AC_ARG_WITH(opt-dir, +-- +1.8.5.1 + diff --git a/ruby.spec b/ruby.spec index 645265f..6a4e404 100644 --- a/ruby.spec +++ b/ruby.spec @@ -149,6 +149,9 @@ Patch19: ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch Patch20: rubygems-2.2.1-Add-BasicSpecification-source_paths.patch # https://github.com/rubygems/rubygems/commit/2f03b54b63043aadce9e95b83e98b29712bad21f Patch21: rubygems-2.2.1-Use-source_paths-for-fallback-rdoc-plugin.patch +# TestSprintf#test_float fails on i686 +# http://bugs.ruby-lang.org/issues/8358 +Patch22: ruby-2.2.0-configure.in-use-SSE2.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -416,6 +419,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch19 -p1 %patch20 -p1 %patch21 -p1 +%patch22 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -581,13 +585,6 @@ DISABLE_TESTS="" DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" %endif -%ifarch i686 -# TestSprintf#test_float fails on i686 -# http://bugs.ruby-lang.org/issues/8358 -sed -i "/assert_equal(\"0x1p+2\", sprintf('%.0a', Float('0x1.fp+1')), \"\[ruby-dev:42551\]\")/ s/^/#/" test/ruby/test_sprintf.rb -sed -i "/assert_equal(\"-0x1.0p+2\", sprintf('%.1a', Float('-0x1.ffp+1')), \"\[ruby-dev:42551\]\")/ s/^/#/" test/ruby/test_sprintf.rb -%endif - # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing # the test suite). @@ -907,6 +904,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" extensions into appropriate place. - Add support for ppc64le arch (rhbz#1053263). - Re-enable some test cases, which are passing now with Kernel 3.12.8+. +- Backport fix for floating point issues on i686. * Thu Jan 02 2014 Vít Ondruch - 2.1.0-17 - Upgrade to Ruby 2.1.0. From bbb52ff9a696a2e39dccafb0e5765d1ff3549aca Mon Sep 17 00:00:00 2001 From: Josef Stribny Date: Mon, 10 Feb 2014 14:13:33 +0100 Subject: [PATCH 150/530] Don't link cert.pem explicitely --- ruby.spec | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/ruby.spec b/ruby.spec index 421ac13..c1abd20 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,7 +26,7 @@ %endif -%global release 17 +%global release 18 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.0.14 @@ -179,8 +179,6 @@ BuildRequires: tk-devel # Needed to pass test_set_program_name(TestRubyOptions) BuildRequires: procps BuildRequires: %{_bindir}/dtrace -# Unbundle cert.pem -BuildRequires: ca-certificates # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. @@ -223,7 +221,6 @@ Requires: ruby(release) Requires: rubygem(rdoc) >= %{rdoc_version} Requires: rubygem(io-console) >= %{io_console_version} Requires: rubygem(psych) >= %{psych_version} -Requires: ca-certificates Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} BuildArch: noarch @@ -488,11 +485,6 @@ sed -i "s/%%{name}/%{name}/" %{buildroot}%{_sysconfdir}/rpm/macros.ruby install -m 644 %{SOURCE5} %{buildroot}%{_sysconfdir}/rpm/macros.rubygems sed -i "s/%%{name}/%{name}/" %{buildroot}%{_sysconfdir}/rpm/macros.rubygems -# Kill bundled cert.pem -mkdir -p %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ -ln -sf %{_sysconfdir}/pki/tls/cert.pem \ - %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ca-bundle.pem - # Install custom operating_system.rb. mkdir -p %{buildroot}%{rubygems_dir}/rubygems/defaults cp %{SOURCE1} %{buildroot}%{rubygems_dir}/rubygems/defaults @@ -893,6 +885,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Feb 10 2014 Josef Stribny - 2.0.0.353-18 +- Don't link cert.pem explicitely + * Wed Jan 15 2014 Vít Ondruch - 2.0.0.353-17 - Fix RubyGems version (rhbz#1036708). - Fix FTBFS due to expired certificate for IMAP test case. From b038223eae017fc71e3b2e1cc1221a7308bfdeba Mon Sep 17 00:00:00 2001 From: Josef Stribny Date: Mon, 10 Feb 2014 14:17:53 +0100 Subject: [PATCH 151/530] Don't link cert.pem explicitely --- ruby.spec | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/ruby.spec b/ruby.spec index 6a4e404..86359f7 100644 --- a/ruby.spec +++ b/ruby.spec @@ -28,7 +28,7 @@ %endif -%global release 18 +%global release 19 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.0 @@ -172,8 +172,6 @@ BuildRequires: tk-devel # Needed to pass test_set_program_name(TestRubyOptions) BuildRequires: procps BuildRequires: %{_bindir}/dtrace -# Unbundle cert.pem -BuildRequires: ca-certificates # RubyGems test suite optional dependencies. BuildRequires: %{_bindir}/git BuildRequires: %{_bindir}/cmake @@ -219,7 +217,6 @@ Requires: ruby(release) Requires: rubygem(rdoc) >= %{rdoc_version} Requires: rubygem(io-console) >= %{io_console_version} Requires: rubygem(psych) >= %{psych_version} -Requires: ca-certificates Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} BuildArch: noarch @@ -480,11 +477,6 @@ sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby install -m 644 %{SOURCE5} %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems -# Kill bundled cert.pem -mkdir -p %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ -ln -sf %{_sysconfdir}/pki/tls/cert.pem \ - %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ca-bundle.pem - # Install custom operating_system.rb. mkdir -p %{buildroot}%{rubygems_dir}/rubygems/defaults cp %{SOURCE1} %{buildroot}%{rubygems_dir}/rubygems/defaults @@ -898,6 +890,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Feb 10 2014 Josef Stribny - 2.1.0-19 +- Don't link cert.pem explicitely + * Wed Jan 15 2014 Vít Ondruch - 2.1.0-18 - Don't generate documentation on unexpected places. - Detect if rubygems are running under rpmbuild and install gem binary From 724ffdbb53749eb752ed8d30bc663e48a0738948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 3 Mar 2014 17:49:42 +0100 Subject: [PATCH 152/530] Add RPM dependency generators for RubyGems. --- ruby.spec | 16 ++++++++++ rubygems.attr | 3 ++ rubygems.prov | 36 +++++++++++++++++++++++ rubygems.req | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 136 insertions(+) create mode 100644 rubygems.attr create mode 100644 rubygems.prov create mode 100644 rubygems.req diff --git a/ruby.spec b/ruby.spec index 86359f7..f157de9 100644 --- a/ruby.spec +++ b/ruby.spec @@ -82,6 +82,10 @@ Source6: abrt_prelude.rb # https://fedorahosted.org/fpc/ticket/312 # https://bugzilla.redhat.com/show_bug.cgi?id=977941 Source7: config.h +# RPM dependency generators. +Source8: rubygems.attr +Source9: rubygems.req +Source10: rubygems.prov # Include the constants defined in macros files. @@ -477,6 +481,12 @@ sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby install -m 644 %{SOURCE5} %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems +# Install dependency generators. +mkdir -p %{buildroot}%{_rpmconfigdir}/fileattrs +install -m 644 %{SOURCE8} %{buildroot}%{_rpmconfigdir}/fileattrs +install -m 755 %{SOURCE9} %{buildroot}%{_rpmconfigdir} +install -m 755 %{SOURCE10} %{buildroot}%{_rpmconfigdir} + # Install custom operating_system.rb. mkdir -p %{buildroot}%{rubygems_dir}/rubygems/defaults cp %{SOURCE1} %{buildroot}%{rubygems_dir}/rubygems/defaults @@ -821,6 +831,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %files -n rubygems-devel %{_rpmconfigdir}/macros.d/macros.rubygems +%{_rpmconfigdir}/fileattrs/rubygems.attr +%{_rpmconfigdir}/rubygems.req +%{_rpmconfigdir}/rubygems.prov %files -n rubygem-rake %{_bindir}/rake @@ -890,6 +903,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Mar 03 2014 Vít Ondruch - 2.1.0-19 +- Add RPM dependency generators for RubyGems. + * Mon Feb 10 2014 Josef Stribny - 2.1.0-19 - Don't link cert.pem explicitely diff --git a/rubygems.attr b/rubygems.attr new file mode 100644 index 0000000..f711775 --- /dev/null +++ b/rubygems.attr @@ -0,0 +1,3 @@ +%__rubygems_requires %{_rpmconfigdir}/rubygems.req +%__rubygems_provides %{_rpmconfigdir}/rubygems.prov +%__rubygems_path ^%{gem_spec}$ diff --git a/rubygems.prov b/rubygems.prov new file mode 100644 index 0000000..f23ec3f --- /dev/null +++ b/rubygems.prov @@ -0,0 +1,36 @@ +#!/usr/bin/ruby + +require 'rubygems/package' + +module RubyGemsProv + module Helpers + # If there is some prelease version files, such as rc1 (i.e. non-numeric + # field), prepend this field by tilde instead of dot. + def self.normalize_prerelease(version) + if version.prerelease? + prerelease = version.version.sub /^#{version.release}\./, '' + "#{version.release}~#{prerelease}" + else + version.release + end + end + end + + # Reports all functionality gem provides. + def self.provides + while filename = gets + filename.strip! + begin + specification = Gem::Specification.load filename + + puts "rubygem(#{specification.name}) = #{Helpers::normalize_prerelease(specification.version)}" + rescue => e + # Ignore all errors. + end + end + end +end + +if __FILE__ == $0 + RubyGemsProv::provides +end diff --git a/rubygems.req b/rubygems.req new file mode 100644 index 0000000..831d7af --- /dev/null +++ b/rubygems.req @@ -0,0 +1,81 @@ +#!/usr/bin/ruby + +require 'rubygems/package' + +module RubyGemsReq + module Helpers + # Expands '~>' and '!=' gem requirements. + def self.expand_requirement(requirements) + requirements.inject([]) do |output, r| + output.concat case r.first + when '~>' + expand_pessimistic_requirement(r) + when '!=' + expand_not_equal_requirement(r) + else + [r] + end + end + end + + # Expands the pessimistic version operator '~>' into equivalent '>=' and + # '<' pair. + def self.expand_pessimistic_requirement(requirement) + next_version = Gem::Version.create(requirement.last).bump + return ['>=', requirement.last], ['<', next_version] + end + + # Expands the not equal version operator '!=' into equivalent '<' and + # '>' pair. + def self.expand_not_equal_requirement(requirement) + return ['<', requirement.last], ['>', requirement.last] + end + + # Converts Gem::Requirement into array of requirements strings compatible + # with RPM .spec file. + def self.requirement_versions_to_rpm(requirement) + self.expand_requirement(requirement.requirements).map do |op, version| + version == Gem::Version.new(0) ? "" : "#{op} #{version}" + end + end + end + + # Report RubyGems dependency, versioned if required. + def self.rubygems_dependency(specification) + Helpers::requirement_versions_to_rpm(specification.required_rubygems_version).each do |requirement| + dependency_string = "ruby(rubygems)" + dependency_strint += " #{specification.required_rubygems_version}" if requirement && requirement.length > 0 + puts dependency_string + end + end + + # Report all gem dependencies including their version. + def self.gem_depenencies(specification) + specification.runtime_dependencies.each do |dependency| + Helpers::requirement_versions_to_rpm(dependency.requirement).each do |requirement| + dependency_string = "rubygem(#{dependency.name})" + dependency_string += " #{requirement}" if requirement && requirement.length > 0 + puts dependency_string + end + end + end + + # Reports all requirements specified by all provided .gemspec files. + def self.requires + while filename = gets + filename.strip! + begin + specification = Gem::Specification.load filename + + rubygems_dependency(specification) + gem_depenencies(specification) + rescue => e + # Ignore all errors. + end + end + end +end + +if __FILE__ == $0 + RubyGemsReq::requires +end From df08120417d5cf499448bcc02ced3a1034fbb859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 5 Mar 2014 15:30:45 +0100 Subject: [PATCH 153/530] Update to Ruby 2.1.1. --- ...-additional-preludes-by-configuratio.patch | 2 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 6 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 +- ruby-2.1.0-resolv.rb-no-encodings.patch | 143 ---------- ...x-test-failures-due-to-expired-certs.patch | 259 ------------------ ruby-2.2.0-configure.in-use-SSE2.patch | 49 ---- ruby.spec | 36 +-- ...-Add-BasicSpecification-source_paths.patch | 73 ----- ...ource_paths-for-fallback-rdoc-plugin.patch | 26 -- 11 files changed, 17 insertions(+), 585 deletions(-) delete mode 100644 ruby-2.1.0-resolv.rb-no-encodings.patch delete mode 100644 ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch delete mode 100644 ruby-2.2.0-configure.in-use-SSE2.patch delete mode 100644 rubygems-2.2.1-Add-BasicSpecification-source_paths.patch delete mode 100644 rubygems-2.2.1-Use-source_paths-for-fallback-rdoc-plugin.patch diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index 4487c44..e297a73 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -38,7 +38,7 @@ diff --git a/configure.in b/configure.in index 0e371e2..d4f1dcb 100644 --- a/configure.in +++ b/configure.in -@@ -3814,6 +3814,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -3841,6 +3841,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 4b44444..90a97d7 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 37d9a62..553d4d0 100644 --- a/configure.in +++ b/configure.in -@@ -3044,6 +3044,11 @@ if test ${multiarch+set}; then +@@ -3071,6 +3071,11 @@ if test ${multiarch+set}; then fi archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 86d1675..da88a97 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -13,7 +13,7 @@ diff --git a/configure.in b/configure.in index 88d24ee..4a300b9 100644 --- a/configure.in +++ b/configure.in -@@ -3618,8 +3618,6 @@ AS_CASE(["$target_os"], +@@ -3645,8 +3645,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -22,7 +22,7 @@ index 88d24ee..4a300b9 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, -@@ -3649,6 +3647,7 @@ AC_ARG_WITH(ruby-version, +@@ -3676,6 +3676,7 @@ AC_ARG_WITH(ruby-version, [ruby_version=full]) unset RUBY_LIB_VERSION unset RUBY_LIB_VERSION_STYLE @@ -30,7 +30,7 @@ index 88d24ee..4a300b9 100644 AS_CASE(["$ruby_version"], [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) -@@ -3665,30 +3664,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then +@@ -3692,30 +3691,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" eval $ruby_version elif test -z "${ruby_version}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index b7e2fed..88eff60 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 553d4d0..03a4152 100644 --- a/configure.in +++ b/configure.in -@@ -3730,6 +3730,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3757,6 +3757,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 3c7272e..e0e488b 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index 03a4152..0e371e2 100644 --- a/configure.in +++ b/configure.in -@@ -3704,6 +3704,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -3731,6 +3731,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 03a4152..0e371e2 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -3727,6 +3731,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3754,6 +3754,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.1.0-resolv.rb-no-encodings.patch b/ruby-2.1.0-resolv.rb-no-encodings.patch deleted file mode 100644 index 27e91aa..0000000 --- a/ruby-2.1.0-resolv.rb-no-encodings.patch +++ /dev/null @@ -1,143 +0,0 @@ -From 1ffbe07e179a2e047d24c7091f6ff013195b1a93 Mon Sep 17 00:00:00 2001 -From: nobu -Date: Sat, 21 Dec 2013 03:37:26 +0000 -Subject: [PATCH] resolv.rb: no encodings - -* lib/resolv.rb (Resolv::Hosts#lazy_initialize): should not - consider encodings in hosts file. [ruby-core:59239] [Bug #9273] -* lib/resolv.rb (Resolv::Config.parse_resolv_conf): ditto. - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44312 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - ChangeLog | 7 +++++++ - lib/resolv.rb | 4 ++-- - test/resolv/test_addr.rb | 12 ++++++++++++ - test/resolv/test_dns.rb | 13 +++++++++++++ - 4 files changed, 34 insertions(+), 2 deletions(-) - -diff --git a/ChangeLog b/ChangeLog -index 72eaa6f..93686e9 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -67,6 +67,13 @@ - install win32.h. - [ruby-core:58801][Bug #9199] reported by arton. - -+Sat Dec 21 12:37:19 2013 Nobuyoshi Nakada -+ -+ * lib/resolv.rb (Resolv::Hosts#lazy_initialize): should not -+ consider encodings in hosts file. [ruby-core:59239] [Bug #9273] -+ -+ * lib/resolv.rb (Resolv::Config.parse_resolv_conf): ditto. -+ - Fri Dec 20 17:52:50 2013 Koichi Sasada - - * vm_method.c: check definition of -diff --git a/lib/resolv.rb b/lib/resolv.rb -index 6d34a67..0c2b68e 100644 ---- a/lib/resolv.rb -+++ b/lib/resolv.rb -@@ -187,7 +187,7 @@ class Resolv - unless @initialized - @name2addr = {} - @addr2name = {} -- open(@filename) {|f| -+ open(@filename, 'rb') {|f| - f.each {|line| - line.sub!(/#.*/, '') - addr, hostname, *aliases = line.split(/\s+/) -@@ -920,7 +920,7 @@ class Resolv - nameserver = [] - search = nil - ndots = 1 -- open(filename) {|f| -+ open(filename, 'rb') {|f| - f.each {|line| - line.sub!(/[#;].*/, '') - keyword, *args = line.split(/\s+/) -diff --git a/test/resolv/test_addr.rb b/test/resolv/test_addr.rb -index 84bc8c2..d4728e1 100644 ---- a/test/resolv/test_addr.rb -+++ b/test/resolv/test_addr.rb -@@ -13,4 +13,16 @@ class TestResolvAddr < Test::Unit::TestCase - end - } - end -+ -+ def test_invalid_byte_comment -+ bug9273 = '[ruby-core:59239] [Bug #9273]' -+ Tempfile.open('resolv_test_addr_') do |tmpfile| -+ tmpfile.print("\xff\x00\x40") -+ tmpfile.close -+ hosts = Resolv::Hosts.new(tmpfile.path) -+ assert_nothing_raised(ArgumentError, bug9273) do -+ hosts.each_address("") {break} -+ end -+ end -+ end - end -diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb -index 0d9565e..e3e38ef 100644 ---- a/test/resolv/test_dns.rb -+++ b/test/resolv/test_dns.rb -@@ -1,6 +1,7 @@ - require 'test/unit' - require 'resolv' - require 'socket' -+require 'tempfile' - - class TestResolvDNS < Test::Unit::TestCase - def setup -@@ -150,4 +151,16 @@ class TestResolvDNS < Test::Unit::TestCase - } - end - -+ def test_invalid_byte_comment -+ bug9273 = '[ruby-core:59239] [Bug #9273]' -+ Tempfile.open('resolv_test_dns_') do |tmpfile| -+ tmpfile.print("\xff\x00\x40") -+ tmpfile.close -+ Resolv::DNS.open(tmpfile.path) do |dns| -+ assert_nothing_raised(ArgumentError, bug9273) do -+ dns.getresources("foo.example.org", Resolv::DNS::Resource::IN::A) -+ end -+ end -+ end -+ end - end --- -1.8.4.2 - -From 1ef0a76c6c6556bf6ab155e2ad28a23748ee59ef Mon Sep 17 00:00:00 2001 -From: nobu -Date: Sat, 21 Dec 2013 07:18:18 +0000 -Subject: [PATCH] test_dns.rb: no server access - -* test/resolv/test_dns.rb (test_invalid_byte_comment): get rid of - actual server access. [Bug #9273] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - test/resolv/test_dns.rb | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb -index e3e38ef..07396fb 100644 ---- a/test/resolv/test_dns.rb -+++ b/test/resolv/test_dns.rb -@@ -156,10 +156,8 @@ class TestResolvDNS < Test::Unit::TestCase - Tempfile.open('resolv_test_dns_') do |tmpfile| - tmpfile.print("\xff\x00\x40") - tmpfile.close -- Resolv::DNS.open(tmpfile.path) do |dns| -- assert_nothing_raised(ArgumentError, bug9273) do -- dns.getresources("foo.example.org", Resolv::DNS::Resource::IN::A) -- end -+ assert_nothing_raised(ArgumentError, bug9273) do -+ Resolv::DNS::Config.parse_resolv_conf(tmpfile.path) - end - end - end --- -1.8.4.2 - diff --git a/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch b/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch deleted file mode 100644 index f9fa197..0000000 --- a/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch +++ /dev/null @@ -1,259 +0,0 @@ -From 5ac7c395c19426a9a92f0a918b03e0f493af6e2c Mon Sep 17 00:00:00 2001 -From: tmm1 -Date: Fri, 3 Jan 2014 01:46:55 +0000 -Subject: [PATCH] test/net/imap/test_imap.rb: fix test failures due to expired - certs - -* test/net/imap/cacert.pem: generate new CA cert, since the last one - expired. [Bug #9341] [ruby-core:59459] -* test/net/imap/server.crt: new server cert signed with updated CA. -* test/net/imap/Makefile: add `make regen_certs` to automate this - process. - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - ChangeLog | 8 +++++ - test/net/imap/Makefile | 15 +++++++++ - test/net/imap/cacert.pem | 84 ++++++++++++++++++++++++++---------------------- - test/net/imap/server.crt | 65 +++++++++++++++---------------------- - 4 files changed, 94 insertions(+), 78 deletions(-) - create mode 100644 test/net/imap/Makefile - -diff --git a/ChangeLog b/ChangeLog -index a4f20cd..d6a7148 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -1,3 +1,11 @@ -+Fri Jan 3 10:43:57 2014 Aman Gupta -+ -+ * test/net/imap/cacert.pem: generate new CA cert, since the last one -+ expired. [Bug #9341] [ruby-core:59459] -+ * test/net/imap/server.crt: new server cert signed with updated CA. -+ * test/net/imap/Makefile: add `make regen_certs` to automate this -+ process. -+ - Wed Dec 25 16:58:31 2013 Nobuyoshi Nakada - - * proc.c (rb_mod_define_method): consider visibility only if self -diff --git a/test/net/imap/Makefile b/test/net/imap/Makefile -new file mode 100644 -index 0000000..b2bc9c7 ---- /dev/null -+++ b/test/net/imap/Makefile -@@ -0,0 +1,15 @@ -+all: -+ -+regen_certs: -+ touch server.key -+ make server.crt -+ -+cacert.pem: server.key -+ openssl req -new -x509 -days 1825 -key server.key -out cacert.pem -text -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org" -+ -+server.csr: -+ openssl req -new -key server.key -out server.csr -text -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost" -+ -+server.crt: server.csr cacert.pem -+ openssl x509 -days 1825 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -text -out server.crt -+ rm server.csr -diff --git a/test/net/imap/cacert.pem b/test/net/imap/cacert.pem -index bd7e68a..7073387 100644 ---- a/test/net/imap/cacert.pem -+++ b/test/net/imap/cacert.pem -@@ -2,59 +2,65 @@ Certificate: - Data: - Version: 3 (0x2) - Serial Number: -- 9f:dc:f7:94:98:05:43:4c -+ b9:90:a2:bf:62:69:17:9c - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Validity -- Not Before: Dec 23 10:21:33 2010 GMT -- Not After : Jan 1 10:21:33 2014 GMT -+ Not Before: Jan 3 01:34:17 2014 GMT -+ Not After : Jan 2 01:34:17 2019 GMT - Subject: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Subject Public Key Info: - Public Key Algorithm: rsaEncryption -- Public-Key: (1024 bit) -- Modulus: -- 00:ce:be:2c:9f:47:ba:db:9c:9c:5b:f0:38:3b:f3: -- 74:20:37:76:23:9f:84:1c:81:90:b4:3e:00:20:34: -- 98:7e:81:69:50:a1:c3:65:96:ea:fa:00:da:8c:cc: -- 53:3f:ba:3c:d0:50:7a:5a:b4:6b:ac:d3:2e:18:ca: -- 2a:69:b3:6a:6f:38:c2:32:a8:06:b6:0a:30:a9:ee: -- 03:38:e9:05:a5:19:23:54:a8:3c:b9:08:ad:2b:72: -- 23:df:93:22:c4:46:a8:ea:f1:a6:e9:30:4a:3f:83: -- 39:e9:62:8e:8b:a3:5e:67:89:1d:7c:75:de:05:aa: -- 58:b1:b7:79:7c:10:80:6d:87 -+ RSA Public Key: (1024 bit) -+ Modulus (1024 bit): -+ 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: -+ bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: -+ 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: -+ 9d:7e:eb:a2:06:e2:ea:7d:07:c7:c7:99:c7:fb:d5: -+ b8:eb:63:77:62:2b:18:12:c3:53:58:d0:f5:c7:40: -+ 0c:01:d1:26:82:34:16:09:e3:dc:65:f4:dc:bb:5d: -+ a5:41:60:e7:a9:74:ba:d7:4c:b6:a3:9c:c5:8c:89: -+ af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: -+ d0:fc:d6:eb:fc:06:82:10:fb - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Subject Key Identifier: -- 41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A -+ E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 - X509v3 Authority Key Identifier: -- keyid:41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A -+ keyid:E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 -+ DirName:/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org -+ serial:B9:90:A2:BF:62:69:17:9C - - X509v3 Basic Constraints: - CA:TRUE - Signature Algorithm: sha1WithRSAEncryption -- 86:00:33:b9:dd:ff:5f:83:59:5f:c3:29:3c:d7:11:db:10:b3: -- d7:d1:70:fb:0a:c6:74:85:c6:ea:e1:15:c4:92:f8:0e:11:cc: -- ff:a6:3c:31:c2:2c:66:d8:fe:63:93:9f:b0:97:e6:f5:bc:5c: -- 80:68:96:5d:eb:77:b9:23:dd:68:a7:49:03:ff:22:48:55:f1: -- 39:7c:20:21:ff:64:52:e1:f6:cf:3c:b3:4d:2c:5c:03:62:ea: -- c5:49:99:07:fa:8d:ff:7b:c2:75:0c:ca:24:b5:0b:f5:b7:57: -- 3a:10:f0:8a:bb:9a:e8:92:4d:d5:6f:c2:a2:29:36:61:78:a4: -- dc:7b -+ 8f:77:06:4e:31:72:12:ee:68:09:70:27:d4:31:85:ef:10:95: -+ f9:0f:2b:66:63:08:37:88:6e:b7:9b:40:3e:18:77:33:86:e8: -+ 61:6a:b7:3c:cb:c7:a6:d6:d5:92:6a:1f:56:d0:9f:5c:32:56: -+ d3:37:52:fe:0e:20:c2:7a:0d:fe:2d:3c:81:da:b8:7f:4d:6a: -+ 08:01:d9:be:7a:a2:15:be:a6:ce:49:64:90:8c:9a:ca:6e:2e: -+ 84:48:1d:94:19:56:94:46:aa:25:9b:68:c2:80:60:bf:cb:2e: -+ 35:03:ea:0a:65:5a:33:38:c6:cc:81:46:c0:bc:36:86:96:39: -+ 10:7d - -----BEGIN CERTIFICATE----- --MIIC6DCCAlGgAwIBAgIJAJ/c95SYBUNMMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD --VQQGEwJKUDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkx --FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex --JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTAxMjIz --MTAyMTMzWhcNMTQwMTAxMTAyMTMzWjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgM --B1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQKDA5SdWJ5IENv --cmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz -+MIIDjTCCAvagAwIBAgIJALmQor9iaRecMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD -+VQQGEwJKUDEQMA4GA1UECBMHU2hpbWFuZTEUMBIGA1UEBxMLTWF0ei1lIGNpdHkx -+FzAVBgNVBAoTDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDEwxSdWJ5IFRlc3QgQ0Ex -+JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTQwMTAz -+MDEzNDE3WhcNMTkwMTAyMDEzNDE3WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT -+B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv -+cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz - ZWN1cml0eUBydWJ5LWxhbmcub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB --gQDOviyfR7rbnJxb8Dg783QgN3Yjn4QcgZC0PgAgNJh+gWlQocNllur6ANqMzFM/ --ujzQUHpatGus0y4Yyipps2pvOMIyqAa2CjCp7gM46QWlGSNUqDy5CK0rciPfkyLE --Rqjq8abpMEo/gznpYo6Lo15niR18dd4Fqlixt3l8EIBthwIDAQABo1AwTjAdBgNV --HQ4EFgQUQclJN7H6YeO61xk92dqMuYLJtGowHwYDVR0jBBgwFoAUQclJN7H6YeO6 --1xk92dqMuYLJtGowDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCGADO5 --3f9fg1lfwyk81xHbELPX0XD7CsZ0hcbq4RXEkvgOEcz/pjwxwixm2P5jk5+wl+b1 --vFyAaJZd63e5I91op0kD/yJIVfE5fCAh/2RS4fbPPLNNLFwDYurFSZkH+o3/e8J1 --DMoktQv1t1c6EPCKu5rokk3Vb8KiKTZheKTcew== -+gQDbddBF3rHfv3GgDrCl5rz0HJ3lJWdkxXvL8a/Gvpqq6n4PzAWv70BpBrLJE51+ -+66IG4up9B8fHmcf71bjrY3diKxgSw1NY0PXHQAwB0SaCNBYJ49xl9Ny7XaVBYOep -+dLrXTLajnMWMia/L6J8F/ur+ZCS/5+3j9tD81uv8BoIQ+wIDAQABo4H0MIHxMB0G -+A1UdDgQWBBToflisE3sDIo2erzILhImAgAwewjCBwQYDVR0jBIG5MIG2gBToflis -+E3sDIo2erzILhImAgAwewqGBkqSBjzCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT -+B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv -+cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz -+ZWN1cml0eUBydWJ5LWxhbmcub3JnggkAuZCiv2JpF5wwDAYDVR0TBAUwAwEB/zAN -+BgkqhkiG9w0BAQUFAAOBgQCPdwZOMXIS7mgJcCfUMYXvEJX5DytmYwg3iG63m0A+ -+GHczhuhharc8y8em1tWSah9W0J9cMlbTN1L+DiDCeg3+LTyB2rh/TWoIAdm+eqIV -+vqbOSWSQjJrKbi6ESB2UGVaURqolm2jCgGC/yy41A+oKZVozOMbMgUbAvDaGljkQ -+fQ== - -----END CERTIFICATE----- -diff --git a/test/net/imap/server.crt b/test/net/imap/server.crt -index d848b26..fa4f994 100644 ---- a/test/net/imap/server.crt -+++ b/test/net/imap/server.crt -@@ -1,17 +1,17 @@ - Certificate: - Data: -- Version: 3 (0x2) -+ Version: 1 (0x0) - Serial Number: 0 (0x0) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Validity -- Not Before: Dec 23 10:23:52 2010 GMT -- Not After : Jan 1 10:23:52 2014 GMT -+ Not Before: Jan 3 01:34:17 2014 GMT -+ Not After : Jan 2 01:34:17 2019 GMT - Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost - Subject Public Key Info: - Public Key Algorithm: rsaEncryption -- Public-Key: (1024 bit) -- Modulus: -+ RSA Public Key: (1024 bit) -+ Modulus (1024 bit): - 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: - bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: - 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: -@@ -22,40 +22,27 @@ Certificate: - af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: - d0:fc:d6:eb:fc:06:82:10:fb - Exponent: 65537 (0x10001) -- X509v3 extensions: -- X509v3 Basic Constraints: -- CA:FALSE -- Netscape Comment: -- OpenSSL Generated Certificate -- X509v3 Subject Key Identifier: -- E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 -- X509v3 Authority Key Identifier: -- keyid:41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A -- - Signature Algorithm: sha1WithRSAEncryption -- ae:ee:cd:fe:c9:af:48:0b:50:37:ac:6a:f6:68:90:9b:67:df: -- 6f:2d:17:c9:3c:a5:da:ad:39:dc:2a:5b:07:88:26:38:19:30: -- d6:95:cf:10:69:c7:92:14:83:be:f1:b5:8e:6f:d9:91:51:c5: -- 63:ae:1c:89:ac:27:bf:4f:2a:8f:4e:0c:57:42:0a:c9:8e:0c: -- f4:f3:02:f7:ea:44:b6:e4:47:05:af:4e:74:e4:87:87:d9:c8: -- 76:ed:ab:32:7c:f0:31:34:10:14:bc:a6:37:cd:d7:dc:33:da: -- 82:d3:d4:9b:e9:d5:cd:38:cc:fa:81:5f:4e:fd:5f:53:05:5d: -- 76:f9 -+ 85:f5:d3:05:8b:8c:f4:43:1c:88:f2:8f:b2:f2:93:77:b7:3d: -+ 95:c6:a0:34:bc:33:6a:d8:85:5f:3e:86:08:10:c5:5c:c1:76: -+ a3:53:3c:dc:38:98:23:97:e7:da:21:ac:e8:4d:3c:96:70:29: -+ ff:ff:1e:4a:9a:17:2b:db:04:62:b9:ef:ab:ea:a7:a5:e8:7c: -+ b1:d5:ed:30:a8:6c:78:de:51:7e:e3:8a:c2:a4:64:a8:63:a2: -+ bc:fd:43:9c:f3:55:7d:54:c9:6a:d8:53:1c:4b:6b:03:aa:b6: -+ 19:e6:a4:4f:47:00:96:c5:42:59:85:4e:c3:4e:cd:41:82:53: -+ 10:f8 - -----BEGIN CERTIFICATE----- --MIIC3jCCAkegAwIBAgIBADANBgkqhkiG9w0BAQUFADCBjDELMAkGA1UEBhMCSlAx --EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK --DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI --hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTEwMTIyMzEwMjM1MloX --DTE0MDEwMTEwMjM1MlowYDELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx --FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRIwEAYDVQQLDAlSdWJ5IFRlc3QxEjAQ --BgNVBAMMCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23XQ --Rd6x379xoA6wpea89Byd5SVnZMV7y/Gvxr6aqup+D8wFr+9AaQayyROdfuuiBuLq --fQfHx5nH+9W462N3YisYEsNTWND1x0AMAdEmgjQWCePcZfTcu12lQWDnqXS610y2 --o5zFjImvy+ifBf7q/mQkv+ft4/bQ/Nbr/AaCEPsCAwEAAaN7MHkwCQYDVR0TBAIw --ADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUw --HQYDVR0OBBYEFOh+WKwTewMijZ6vMguEiYCADB7CMB8GA1UdIwQYMBaAFEHJSTex --+mHjutcZPdnajLmCybRqMA0GCSqGSIb3DQEBBQUAA4GBAK7uzf7Jr0gLUDesavZo --kJtn328tF8k8pdqtOdwqWweIJjgZMNaVzxBpx5IUg77xtY5v2ZFRxWOuHImsJ79P --Ko9ODFdCCsmODPTzAvfqRLbkRwWvTnTkh4fZyHbtqzJ88DE0EBS8pjfN19wz2oLT --1Jvp1c04zPqBX079X1MFXXb5 -+MIICXDCCAcUCAQAwDQYJKoZIhvcNAQEFBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD -+VQQIEwdTaGltYW5lMRQwEgYDVQQHEwtNYXR6LWUgY2l0eTEXMBUGA1UEChMOUnVi -+eSBDb3JlIFRlYW0xFTATBgNVBAMTDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ -+ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0xNDAxMDMwMTM0MTdaFw0xOTAx -+MDIwMTM0MTdaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIEwdTaGltYW5lMRcwFQYD -+VQQKEw5SdWJ5IENvcmUgVGVhbTESMBAGA1UECxMJUnVieSBUZXN0MRIwEAYDVQQD -+Ewlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANt10EXesd+/ -+caAOsKXmvPQcneUlZ2TFe8vxr8a+mqrqfg/MBa/vQGkGsskTnX7rogbi6n0Hx8eZ -+x/vVuOtjd2IrGBLDU1jQ9cdADAHRJoI0Fgnj3GX03LtdpUFg56l0utdMtqOcxYyJ -+r8vonwX+6v5kJL/n7eP20PzW6/wGghD7AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEA -+hfXTBYuM9EMciPKPsvKTd7c9lcagNLwzatiFXz6GCBDFXMF2o1M83DiYI5fn2iGs -+6E08lnAp//8eSpoXK9sEYrnvq+qnpeh8sdXtMKhseN5RfuOKwqRkqGOivP1DnPNV -+fVTJathTHEtrA6q2GeakT0cAlsVCWYVOw07NQYJTEPg= - -----END CERTIFICATE----- --- -1.8.5.1 - diff --git a/ruby-2.2.0-configure.in-use-SSE2.patch b/ruby-2.2.0-configure.in-use-SSE2.patch deleted file mode 100644 index 87858ce..0000000 --- a/ruby-2.2.0-configure.in-use-SSE2.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 40967a5c0b975f3f3ec1538a820985aa61b65b8f Mon Sep 17 00:00:00 2001 -From: nobu -Date: Thu, 9 Jan 2014 11:46:26 +0000 -Subject: [PATCH] configure.in: use SSE2 - -* configure.in: use SSE2 instructions to drop unexpected precisions on - other than mingw. [ruby-core:59472] [Bug #8358] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44538 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - ChangeLog | 5 +++++ - configure.in | 8 ++++++++- - 2 files changed, 13 insertions(+), 0 deletion(-) - -diff --git a/ChangeLog b/ChangeLog -index 7ec6eec..9ba337f 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -1,3 +1,8 @@ -+Thu Jan 9 20:46:22 2014 Nobuyoshi Nakada -+ -+ * configure.in: use SSE2 instructions to drop unexpected precisions on -+ other than mingw. [ruby-core:59472] [Bug #8358] -+ - Fri Jan 3 10:43:57 2014 Aman Gupta - - * test/net/imap/cacert.pem: generate new CA cert, since the last one -diff --git a/configure.in b/configure.in -index f9e9431..9c95cc4 100644 ---- a/configure.in -+++ b/configure.in -@@ -858,6 +857,14 @@ if test "$GCC" = yes; then - for oflag in -fno-fast-math; do - RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(optflags, $oflag)]) - done -+ AS_CASE(["$target"], -+ [*-darwin*], [ -+ # doesn't seem necessary on Mac OS X -+ ], -+ [[i[4-6]86*]], [ -+ RUBY_TRY_CFLAGS(-msse2 -mfpmath=sse, [RUBY_APPEND_OPTION(XCFLAGS, -msse2 -mfpmath=sse)]) -+ ] -+ ) - fi - - AC_ARG_WITH(opt-dir, --- -1.8.5.1 - diff --git a/ruby.spec b/ruby.spec index f157de9..21f63ed 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,7 +1,7 @@ %global major_version 2 %global minor_version 1 -%global teeny_version 0 -%global patch_level 0 +%global teeny_version 1 +%global patch_level 76 %global major_minor_version %{major_version}.%{minor_version} @@ -28,10 +28,10 @@ %endif -%global release 19 +%global release 18 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -%global rubygems_version 2.2.0 +%global rubygems_version 2.2.2 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. @@ -41,11 +41,11 @@ # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version} -%global bigdecimal_version 1.2.3 +%global bigdecimal_version 1.2.4 %global io_console_version 0.4.2 %global json_version 1.8.1 %global minitest_version 4.7.5 -%global psych_version 2.0.2 +%global psych_version 2.0.3 %global rake_version 10.1.0 %global rdoc_version 4.1.0 @@ -140,22 +140,6 @@ Patch12: ruby-1.9.3-mkmf-verbose.patch # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch -# Fixes possible "ArgumentError: invalid byte sequence in US-ASCII" error in -# TestGemRemoteFetcher#test_download_to_cache. -# http://bugs.ruby-lang.org/issues/9273 -Patch18: ruby-2.1.0-resolv.rb-no-encodings.patch -# Backport regenerated certificates for IMAP tests. -# http://bugs.ruby-lang.org/issues/9341 -Patch19: ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch -# Fix documentation generated on unexpected places. -# https://github.com/rubygems/rubygems/issues/758 -# https://github.com/rubygems/rubygems/commit/e088c6824209d98eccb0f1e6c7e21f26b4a1178d -Patch20: rubygems-2.2.1-Add-BasicSpecification-source_paths.patch -# https://github.com/rubygems/rubygems/commit/2f03b54b63043aadce9e95b83e98b29712bad21f -Patch21: rubygems-2.2.1-Use-source_paths-for-fallback-rdoc-plugin.patch -# TestSprintf#test_float fails on i686 -# http://bugs.ruby-lang.org/issues/8358 -Patch22: ruby-2.2.0-configure.in-use-SSE2.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -416,11 +400,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch8 -p1 %patch12 -p1 %patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -903,6 +882,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Wed Mar 05 2014 Vít Ondruch - 2.1.1-18 +- Update to Ruby 2.1.1. + * Mon Mar 03 2014 Vít Ondruch - 2.1.0-19 - Add RPM dependency generators for RubyGems. diff --git a/rubygems-2.2.1-Add-BasicSpecification-source_paths.patch b/rubygems-2.2.1-Add-BasicSpecification-source_paths.patch deleted file mode 100644 index 3cd1bed..0000000 --- a/rubygems-2.2.1-Add-BasicSpecification-source_paths.patch +++ /dev/null @@ -1,73 +0,0 @@ -From e088c6824209d98eccb0f1e6c7e21f26b4a1178d Mon Sep 17 00:00:00 2001 -From: Eric Hodel -Date: Mon, 6 Jan 2014 14:20:18 -0800 -Subject: [PATCH] Add BasicSpecification#source_paths - -This allows documentation and analysis tools to retrieve paths of source -files in gems. This is needed as the introduction of shared gem -directories means the extension source directory is no longer included -in require_paths (which was meant for $LOAD_PATH, not source code). ---- - lib/rubygems/basic_specification.rb | 18 ++++++++++++++++++ - test/rubygems/test_gem_specification.rb | 16 ++++++++++++++++ - 2 files changed, 34 insertions(+) - -diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb -index a52377f..470a6eb 100644 ---- a/lib/rubygems/basic_specification.rb -+++ b/lib/rubygems/basic_specification.rb -@@ -207,6 +207,24 @@ def require_paths - end - - ## -+ # Returns the paths to the source files for use with analysis and -+ # documentation tools. These paths are relative to full_gem_path. -+ -+ def source_paths -+ paths = raw_require_paths.dup -+ -+ if @extensions then -+ ext_dirs = @extensions.map do |extension| -+ extension.split(File::SEPARATOR, 2).first -+ end.uniq -+ -+ paths.concat ext_dirs -+ end -+ -+ paths.uniq -+ end -+ -+ ## - # Return a Gem::Specification from this gem - - def to_spec -diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb -index 46db0c4..b72a5d1 100644 ---- a/test/rubygems/test_gem_specification.rb -+++ b/test/rubygems/test_gem_specification.rb -@@ -1809,6 +1809,22 @@ def test_source - assert_kind_of Gem::Source::Installed, @a1.source - end - -+ def test_source_paths -+ ext_spec -+ -+ @ext.require_paths = %w[lib ext foo] -+ @ext.extensions << 'bar/baz' -+ -+ expected = %w[ -+ lib -+ ext -+ foo -+ bar -+ ] -+ -+ assert_equal expected, @ext.source_paths -+ end -+ - def test_full_require_paths - ext_spec - --- -1.8.5.1 - diff --git a/rubygems-2.2.1-Use-source_paths-for-fallback-rdoc-plugin.patch b/rubygems-2.2.1-Use-source_paths-for-fallback-rdoc-plugin.patch deleted file mode 100644 index edf40f1..0000000 --- a/rubygems-2.2.1-Use-source_paths-for-fallback-rdoc-plugin.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 2f03b54b63043aadce9e95b83e98b29712bad21f Mon Sep 17 00:00:00 2001 -From: Eric Hodel -Date: Mon, 6 Jan 2014 14:30:07 -0800 -Subject: [PATCH] Use source_paths for fallback rdoc plugin - -Fixes #758 ---- - lib/rubygems/rdoc.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/rubygems/rdoc.rb b/lib/rubygems/rdoc.rb -index 52249dc..633bd89 100644 ---- a/lib/rubygems/rdoc.rb -+++ b/lib/rubygems/rdoc.rb -@@ -193,7 +193,7 @@ def generate - ::RDoc::Parser::C.reset - - args = @spec.rdoc_options -- args.concat @spec.require_paths -+ args.concat @spec.source_paths - args.concat @spec.extra_rdoc_files - - case config_args = Gem.configuration[:rdoc] --- -1.8.5.1 - From 699faa5e257b4448f7dd8fb72c4416a5d957490b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 7 Apr 2014 14:47:45 +0200 Subject: [PATCH 154/530] Fix typo. --- rubygems.req | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rubygems.req b/rubygems.req index 831d7af..4f7a583 100644 --- a/rubygems.req +++ b/rubygems.req @@ -44,7 +44,7 @@ module RubyGemsReq def self.rubygems_dependency(specification) Helpers::requirement_versions_to_rpm(specification.required_rubygems_version).each do |requirement| dependency_string = "ruby(rubygems)" - dependency_strint += " #{specification.required_rubygems_version}" if requirement && requirement.length > 0 + dependency_string += " #{specification.required_rubygems_version}" if requirement && requirement.length > 0 puts dependency_string end end From 0d5d7e9999b737c46f5ec14daa8a2378d4295326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 7 Apr 2014 15:23:37 +0200 Subject: [PATCH 155/530] Use revisions instead of tilde. Tilde is prohibited by FPC: https://fedorahosted.org/fpc/ticket/398 --- rubygems.prov | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rubygems.prov b/rubygems.prov index f23ec3f..b7c9777 100644 --- a/rubygems.prov +++ b/rubygems.prov @@ -9,9 +9,9 @@ module RubyGemsProv def self.normalize_prerelease(version) if version.prerelease? prerelease = version.version.sub /^#{version.release}\./, '' - "#{version.release}~#{prerelease}" + "#{version.release}-0.1.#{prerelease}" else - version.release + "#{version.release}-1" end end end From a7c9cd0323b3d5d30dbe2c0768bc60ad468cb03c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 8 Apr 2014 13:32:43 +0200 Subject: [PATCH 156/530] Import Ruby 2.1 sources. --- .gitignore | 1 + ...x-test-failures-due-to-expired-certs.patch | 259 ------------------ ...obal-Specification.dirs-during-insta.patch | 151 ---------- ...s-2.0.0-Fixes-for-empty-ruby-version.patch | 34 --- sources | 2 +- 5 files changed, 2 insertions(+), 445 deletions(-) delete mode 100644 ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch delete mode 100644 rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch delete mode 100644 rubygems-2.0.0-Fixes-for-empty-ruby-version.patch diff --git a/.gitignore b/.gitignore index 552398f..1c061b4 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ ruby-rev415a3ef9ab82c65a7abc-ext_tk.tar.gz /ruby-2.0.0-p195.tar.bz2 /ruby-2.0.0-p247.tar.bz2 /ruby-2.0.0-p353.tar.bz2 +/ruby-2.1.1.tar.bz2 diff --git a/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch b/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch deleted file mode 100644 index 783484b..0000000 --- a/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch +++ /dev/null @@ -1,259 +0,0 @@ -From 5ac7c395c19426a9a92f0a918b03e0f493af6e2c Mon Sep 17 00:00:00 2001 -From: tmm1 -Date: Fri, 3 Jan 2014 01:46:55 +0000 -Subject: [PATCH] test/net/imap/test_imap.rb: fix test failures due to expired - certs - -* test/net/imap/cacert.pem: generate new CA cert, since the last one - expired. [Bug #9341] [ruby-core:59459] -* test/net/imap/server.crt: new server cert signed with updated CA. -* test/net/imap/Makefile: add `make regen_certs` to automate this - process. - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - ChangeLog | 8 +++++ - test/net/imap/Makefile | 15 +++++++++ - test/net/imap/cacert.pem | 84 ++++++++++++++++++++++++++---------------------- - test/net/imap/server.crt | 65 +++++++++++++++---------------------- - 4 files changed, 94 insertions(+), 78 deletions(-) - create mode 100644 test/net/imap/Makefile - -diff --git a/ChangeLog b/ChangeLog -index a4f20cd..d6a7148 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -1,3 +1,11 @@ -+Fri Jan 3 10:43:57 2014 Aman Gupta -+ -+ * test/net/imap/cacert.pem: generate new CA cert, since the last one -+ expired. [Bug #9341] [ruby-core:59459] -+ * test/net/imap/server.crt: new server cert signed with updated CA. -+ * test/net/imap/Makefile: add `make regen_certs` to automate this -+ process. -+ - Fri Nov 22 13:18:28 2013 Nobuyoshi Nakada - - * util.c (ruby_strtod): BigMath requires more precision. -diff --git a/test/net/imap/Makefile b/test/net/imap/Makefile -new file mode 100644 -index 0000000..b2bc9c7 ---- /dev/null -+++ b/test/net/imap/Makefile -@@ -0,0 +1,15 @@ -+all: -+ -+regen_certs: -+ touch server.key -+ make server.crt -+ -+cacert.pem: server.key -+ openssl req -new -x509 -days 1825 -key server.key -out cacert.pem -text -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org" -+ -+server.csr: -+ openssl req -new -key server.key -out server.csr -text -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost" -+ -+server.crt: server.csr cacert.pem -+ openssl x509 -days 1825 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -text -out server.crt -+ rm server.csr -diff --git a/test/net/imap/cacert.pem b/test/net/imap/cacert.pem -index bd7e68a..7073387 100644 ---- a/test/net/imap/cacert.pem -+++ b/test/net/imap/cacert.pem -@@ -2,59 +2,65 @@ Certificate: - Data: - Version: 3 (0x2) - Serial Number: -- 9f:dc:f7:94:98:05:43:4c -+ b9:90:a2:bf:62:69:17:9c - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Validity -- Not Before: Dec 23 10:21:33 2010 GMT -- Not After : Jan 1 10:21:33 2014 GMT -+ Not Before: Jan 3 01:34:17 2014 GMT -+ Not After : Jan 2 01:34:17 2019 GMT - Subject: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Subject Public Key Info: - Public Key Algorithm: rsaEncryption -- Public-Key: (1024 bit) -- Modulus: -- 00:ce:be:2c:9f:47:ba:db:9c:9c:5b:f0:38:3b:f3: -- 74:20:37:76:23:9f:84:1c:81:90:b4:3e:00:20:34: -- 98:7e:81:69:50:a1:c3:65:96:ea:fa:00:da:8c:cc: -- 53:3f:ba:3c:d0:50:7a:5a:b4:6b:ac:d3:2e:18:ca: -- 2a:69:b3:6a:6f:38:c2:32:a8:06:b6:0a:30:a9:ee: -- 03:38:e9:05:a5:19:23:54:a8:3c:b9:08:ad:2b:72: -- 23:df:93:22:c4:46:a8:ea:f1:a6:e9:30:4a:3f:83: -- 39:e9:62:8e:8b:a3:5e:67:89:1d:7c:75:de:05:aa: -- 58:b1:b7:79:7c:10:80:6d:87 -+ RSA Public Key: (1024 bit) -+ Modulus (1024 bit): -+ 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: -+ bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: -+ 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: -+ 9d:7e:eb:a2:06:e2:ea:7d:07:c7:c7:99:c7:fb:d5: -+ b8:eb:63:77:62:2b:18:12:c3:53:58:d0:f5:c7:40: -+ 0c:01:d1:26:82:34:16:09:e3:dc:65:f4:dc:bb:5d: -+ a5:41:60:e7:a9:74:ba:d7:4c:b6:a3:9c:c5:8c:89: -+ af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: -+ d0:fc:d6:eb:fc:06:82:10:fb - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Subject Key Identifier: -- 41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A -+ E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 - X509v3 Authority Key Identifier: -- keyid:41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A -+ keyid:E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 -+ DirName:/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org -+ serial:B9:90:A2:BF:62:69:17:9C - - X509v3 Basic Constraints: - CA:TRUE - Signature Algorithm: sha1WithRSAEncryption -- 86:00:33:b9:dd:ff:5f:83:59:5f:c3:29:3c:d7:11:db:10:b3: -- d7:d1:70:fb:0a:c6:74:85:c6:ea:e1:15:c4:92:f8:0e:11:cc: -- ff:a6:3c:31:c2:2c:66:d8:fe:63:93:9f:b0:97:e6:f5:bc:5c: -- 80:68:96:5d:eb:77:b9:23:dd:68:a7:49:03:ff:22:48:55:f1: -- 39:7c:20:21:ff:64:52:e1:f6:cf:3c:b3:4d:2c:5c:03:62:ea: -- c5:49:99:07:fa:8d:ff:7b:c2:75:0c:ca:24:b5:0b:f5:b7:57: -- 3a:10:f0:8a:bb:9a:e8:92:4d:d5:6f:c2:a2:29:36:61:78:a4: -- dc:7b -+ 8f:77:06:4e:31:72:12:ee:68:09:70:27:d4:31:85:ef:10:95: -+ f9:0f:2b:66:63:08:37:88:6e:b7:9b:40:3e:18:77:33:86:e8: -+ 61:6a:b7:3c:cb:c7:a6:d6:d5:92:6a:1f:56:d0:9f:5c:32:56: -+ d3:37:52:fe:0e:20:c2:7a:0d:fe:2d:3c:81:da:b8:7f:4d:6a: -+ 08:01:d9:be:7a:a2:15:be:a6:ce:49:64:90:8c:9a:ca:6e:2e: -+ 84:48:1d:94:19:56:94:46:aa:25:9b:68:c2:80:60:bf:cb:2e: -+ 35:03:ea:0a:65:5a:33:38:c6:cc:81:46:c0:bc:36:86:96:39: -+ 10:7d - -----BEGIN CERTIFICATE----- --MIIC6DCCAlGgAwIBAgIJAJ/c95SYBUNMMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD --VQQGEwJKUDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkx --FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex --JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTAxMjIz --MTAyMTMzWhcNMTQwMTAxMTAyMTMzWjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgM --B1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQKDA5SdWJ5IENv --cmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz -+MIIDjTCCAvagAwIBAgIJALmQor9iaRecMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD -+VQQGEwJKUDEQMA4GA1UECBMHU2hpbWFuZTEUMBIGA1UEBxMLTWF0ei1lIGNpdHkx -+FzAVBgNVBAoTDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDEwxSdWJ5IFRlc3QgQ0Ex -+JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTQwMTAz -+MDEzNDE3WhcNMTkwMTAyMDEzNDE3WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT -+B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv -+cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz - ZWN1cml0eUBydWJ5LWxhbmcub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB --gQDOviyfR7rbnJxb8Dg783QgN3Yjn4QcgZC0PgAgNJh+gWlQocNllur6ANqMzFM/ --ujzQUHpatGus0y4Yyipps2pvOMIyqAa2CjCp7gM46QWlGSNUqDy5CK0rciPfkyLE --Rqjq8abpMEo/gznpYo6Lo15niR18dd4Fqlixt3l8EIBthwIDAQABo1AwTjAdBgNV --HQ4EFgQUQclJN7H6YeO61xk92dqMuYLJtGowHwYDVR0jBBgwFoAUQclJN7H6YeO6 --1xk92dqMuYLJtGowDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCGADO5 --3f9fg1lfwyk81xHbELPX0XD7CsZ0hcbq4RXEkvgOEcz/pjwxwixm2P5jk5+wl+b1 --vFyAaJZd63e5I91op0kD/yJIVfE5fCAh/2RS4fbPPLNNLFwDYurFSZkH+o3/e8J1 --DMoktQv1t1c6EPCKu5rokk3Vb8KiKTZheKTcew== -+gQDbddBF3rHfv3GgDrCl5rz0HJ3lJWdkxXvL8a/Gvpqq6n4PzAWv70BpBrLJE51+ -+66IG4up9B8fHmcf71bjrY3diKxgSw1NY0PXHQAwB0SaCNBYJ49xl9Ny7XaVBYOep -+dLrXTLajnMWMia/L6J8F/ur+ZCS/5+3j9tD81uv8BoIQ+wIDAQABo4H0MIHxMB0G -+A1UdDgQWBBToflisE3sDIo2erzILhImAgAwewjCBwQYDVR0jBIG5MIG2gBToflis -+E3sDIo2erzILhImAgAwewqGBkqSBjzCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT -+B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv -+cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz -+ZWN1cml0eUBydWJ5LWxhbmcub3JnggkAuZCiv2JpF5wwDAYDVR0TBAUwAwEB/zAN -+BgkqhkiG9w0BAQUFAAOBgQCPdwZOMXIS7mgJcCfUMYXvEJX5DytmYwg3iG63m0A+ -+GHczhuhharc8y8em1tWSah9W0J9cMlbTN1L+DiDCeg3+LTyB2rh/TWoIAdm+eqIV -+vqbOSWSQjJrKbi6ESB2UGVaURqolm2jCgGC/yy41A+oKZVozOMbMgUbAvDaGljkQ -+fQ== - -----END CERTIFICATE----- -diff --git a/test/net/imap/server.crt b/test/net/imap/server.crt -index d848b26..fa4f994 100644 ---- a/test/net/imap/server.crt -+++ b/test/net/imap/server.crt -@@ -1,17 +1,17 @@ - Certificate: - Data: -- Version: 3 (0x2) -+ Version: 1 (0x0) - Serial Number: 0 (0x0) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Validity -- Not Before: Dec 23 10:23:52 2010 GMT -- Not After : Jan 1 10:23:52 2014 GMT -+ Not Before: Jan 3 01:34:17 2014 GMT -+ Not After : Jan 2 01:34:17 2019 GMT - Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost - Subject Public Key Info: - Public Key Algorithm: rsaEncryption -- Public-Key: (1024 bit) -- Modulus: -+ RSA Public Key: (1024 bit) -+ Modulus (1024 bit): - 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: - bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: - 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: -@@ -22,40 +22,27 @@ Certificate: - af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: - d0:fc:d6:eb:fc:06:82:10:fb - Exponent: 65537 (0x10001) -- X509v3 extensions: -- X509v3 Basic Constraints: -- CA:FALSE -- Netscape Comment: -- OpenSSL Generated Certificate -- X509v3 Subject Key Identifier: -- E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 -- X509v3 Authority Key Identifier: -- keyid:41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A -- - Signature Algorithm: sha1WithRSAEncryption -- ae:ee:cd:fe:c9:af:48:0b:50:37:ac:6a:f6:68:90:9b:67:df: -- 6f:2d:17:c9:3c:a5:da:ad:39:dc:2a:5b:07:88:26:38:19:30: -- d6:95:cf:10:69:c7:92:14:83:be:f1:b5:8e:6f:d9:91:51:c5: -- 63:ae:1c:89:ac:27:bf:4f:2a:8f:4e:0c:57:42:0a:c9:8e:0c: -- f4:f3:02:f7:ea:44:b6:e4:47:05:af:4e:74:e4:87:87:d9:c8: -- 76:ed:ab:32:7c:f0:31:34:10:14:bc:a6:37:cd:d7:dc:33:da: -- 82:d3:d4:9b:e9:d5:cd:38:cc:fa:81:5f:4e:fd:5f:53:05:5d: -- 76:f9 -+ 85:f5:d3:05:8b:8c:f4:43:1c:88:f2:8f:b2:f2:93:77:b7:3d: -+ 95:c6:a0:34:bc:33:6a:d8:85:5f:3e:86:08:10:c5:5c:c1:76: -+ a3:53:3c:dc:38:98:23:97:e7:da:21:ac:e8:4d:3c:96:70:29: -+ ff:ff:1e:4a:9a:17:2b:db:04:62:b9:ef:ab:ea:a7:a5:e8:7c: -+ b1:d5:ed:30:a8:6c:78:de:51:7e:e3:8a:c2:a4:64:a8:63:a2: -+ bc:fd:43:9c:f3:55:7d:54:c9:6a:d8:53:1c:4b:6b:03:aa:b6: -+ 19:e6:a4:4f:47:00:96:c5:42:59:85:4e:c3:4e:cd:41:82:53: -+ 10:f8 - -----BEGIN CERTIFICATE----- --MIIC3jCCAkegAwIBAgIBADANBgkqhkiG9w0BAQUFADCBjDELMAkGA1UEBhMCSlAx --EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK --DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI --hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTEwMTIyMzEwMjM1MloX --DTE0MDEwMTEwMjM1MlowYDELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx --FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRIwEAYDVQQLDAlSdWJ5IFRlc3QxEjAQ --BgNVBAMMCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23XQ --Rd6x379xoA6wpea89Byd5SVnZMV7y/Gvxr6aqup+D8wFr+9AaQayyROdfuuiBuLq --fQfHx5nH+9W462N3YisYEsNTWND1x0AMAdEmgjQWCePcZfTcu12lQWDnqXS610y2 --o5zFjImvy+ifBf7q/mQkv+ft4/bQ/Nbr/AaCEPsCAwEAAaN7MHkwCQYDVR0TBAIw --ADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUw --HQYDVR0OBBYEFOh+WKwTewMijZ6vMguEiYCADB7CMB8GA1UdIwQYMBaAFEHJSTex --+mHjutcZPdnajLmCybRqMA0GCSqGSIb3DQEBBQUAA4GBAK7uzf7Jr0gLUDesavZo --kJtn328tF8k8pdqtOdwqWweIJjgZMNaVzxBpx5IUg77xtY5v2ZFRxWOuHImsJ79P --Ko9ODFdCCsmODPTzAvfqRLbkRwWvTnTkh4fZyHbtqzJ88DE0EBS8pjfN19wz2oLT --1Jvp1c04zPqBX079X1MFXXb5 -+MIICXDCCAcUCAQAwDQYJKoZIhvcNAQEFBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD -+VQQIEwdTaGltYW5lMRQwEgYDVQQHEwtNYXR6LWUgY2l0eTEXMBUGA1UEChMOUnVi -+eSBDb3JlIFRlYW0xFTATBgNVBAMTDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ -+ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0xNDAxMDMwMTM0MTdaFw0xOTAx -+MDIwMTM0MTdaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIEwdTaGltYW5lMRcwFQYD -+VQQKEw5SdWJ5IENvcmUgVGVhbTESMBAGA1UECxMJUnVieSBUZXN0MRIwEAYDVQQD -+Ewlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANt10EXesd+/ -+caAOsKXmvPQcneUlZ2TFe8vxr8a+mqrqfg/MBa/vQGkGsskTnX7rogbi6n0Hx8eZ -+x/vVuOtjd2IrGBLDU1jQ9cdADAHRJoI0Fgnj3GX03LtdpUFg56l0utdMtqOcxYyJ -+r8vonwX+6v5kJL/n7eP20PzW6/wGghD7AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEA -+hfXTBYuM9EMciPKPsvKTd7c9lcagNLwzatiFXz6GCBDFXMF2o1M83DiYI5fn2iGs -+6E08lnAp//8eSpoXK9sEYrnvq+qnpeh8sdXtMKhseN5RfuOKwqRkqGOivP1DnPNV -+fVTJathTHEtrA6q2GeakT0cAlsVCWYVOw07NQYJTEPg= - -----END CERTIFICATE----- --- -1.8.5.1 - diff --git a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch deleted file mode 100644 index 98013a7..0000000 --- a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch +++ /dev/null @@ -1,151 +0,0 @@ -From b95b9942361104dc5b7fd08eb4970f893d8c1a54 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 13 Feb 2013 13:12:30 +0100 -Subject: [PATCH 1/3] Remove duplicated check. - -The loaded specifications are rejected already in #gather_dependencies, -so this condition cannot trigger. ---- - lib/rubygems/dependency_installer.rb | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb -index d811f62..dffa8df 100644 ---- a/lib/rubygems/dependency_installer.rb -+++ b/lib/rubygems/dependency_installer.rb -@@ -330,9 +330,6 @@ class Gem::DependencyInstaller - - last = @gems_to_install.size - 1 - @gems_to_install.each_with_index do |spec, index| -- # REFACTOR more current spec set hardcoding, should be abstracted? -- next if Gem::Specification.include?(spec) and index != last -- - # TODO: make this sorta_verbose so other users can benefit from it - say "Installing gem #{spec.full_name}" if Gem.configuration.really_verbose - --- -1.8.1.2 - - -From 2fa9087b1986db6c7945c0f997fed2bfff5ce06a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 13 Feb 2013 15:47:47 +0100 -Subject: [PATCH 2/3] Do not modify global Specification.dirs during - installation. - -While gems are installed into --install-dir just fine even without -modifications of Specification.dirs, change in it makes inaccessible -gems already present on the system. ---- - lib/rubygems/dependency_installer.rb | 15 ++++++--------- - 1 file changed, 6 insertions(+), 9 deletions(-) - -diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb -index dffa8df..841f26a 100644 ---- a/lib/rubygems/dependency_installer.rb -+++ b/lib/rubygems/dependency_installer.rb -@@ -57,16 +57,14 @@ class Gem::DependencyInstaller - # :build_args:: See Gem::Installer::new - - def initialize(options = {}) -- @install_dir = options[:install_dir] || Gem.dir - - if options[:install_dir] then -- # HACK shouldn't change the global settings, needed for -i behavior -- # maybe move to the install command? See also github #442 -- Gem::Specification.dirs = @install_dir -+ Gem.ensure_gem_subdirectories options[:install_dir] - end - - options = DEFAULT_OPTIONS.merge options - -+ @install_dir = options[:install_dir] - @bin_dir = options[:bin_dir] - @dev_shallow = options[:dev_shallow] - @development = options[:development] -@@ -92,7 +89,7 @@ class Gem::DependencyInstaller - @installed_gems = [] - @toplevel_specs = nil - -- @cache_dir = options[:cache_dir] || @install_dir -+ @cache_dir = options[:cache_dir] || @install_dir || Gem.dir - - # Set with any errors that SpecFetcher finds while search through - # gemspecs for a dep -@@ -202,7 +199,7 @@ class Gem::DependencyInstaller - # that this isn't dependent only on the currently installed gems - dependency_list.specs.reject! { |spec| - not keep_names.include?(spec.full_name) and -- Gem::Specification.include?(spec) -+ (!@install_dir && Gem::Specification.include?(spec)) - } - - unless dependency_list.ok? or @ignore_dependencies or @force then -@@ -254,7 +251,7 @@ class Gem::DependencyInstaller - to_do.push t.spec - end - -- results.remove_installed! dep -+ results.remove_installed! dep unless @install_dir - - @available << results - results.inject_into_list dependency_list -@@ -360,7 +357,7 @@ class Gem::DependencyInstaller - :force => @force, - :format_executable => @format_executable, - :ignore_dependencies => @ignore_dependencies, -- :install_dir => @install_dir, -+ :install_dir => (@install_dir || Gem.dir), - :security_policy => @security_policy, - :user_install => @user_install, - :wrappers => @wrappers, --- -1.8.1.2 - - -From d473204ce920702dd87257db49355929f31530d4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 15 Feb 2013 17:02:44 +0100 -Subject: [PATCH 3/3] Default to Gem.dir as late as possible. - ---- - lib/rubygems/dependency_installer.rb | 2 +- - lib/rubygems/installer.rb | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb -index 841f26a..abcfa0f 100644 ---- a/lib/rubygems/dependency_installer.rb -+++ b/lib/rubygems/dependency_installer.rb -@@ -357,7 +357,7 @@ class Gem::DependencyInstaller - :force => @force, - :format_executable => @format_executable, - :ignore_dependencies => @ignore_dependencies, -- :install_dir => (@install_dir || Gem.dir), -+ :install_dir => @install_dir, - :security_policy => @security_policy, - :user_install => @user_install, - :wrappers => @wrappers, -diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index 780a88b..6543130 100644 ---- a/lib/rubygems/installer.rb -+++ b/lib/rubygems/installer.rb -@@ -537,13 +537,13 @@ class Gem::Installer - :bin_dir => nil, - :env_shebang => false, - :force => false, -- :install_dir => Gem.dir, - :only_install_dir => false - }.merge options - - @env_shebang = options[:env_shebang] - @force = options[:force] -- @gem_home = options[:install_dir] -+ @install_dir = options[:install_dir] -+ @gem_home = options[:install_dir] || Gem.dir - @ignore_dependencies = options[:ignore_dependencies] - @format_executable = options[:format_executable] - @security_policy = options[:security_policy] --- -1.8.1.2 - diff --git a/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch b/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch deleted file mode 100644 index 365dc7b..0000000 --- a/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch +++ /dev/null @@ -1,34 +0,0 @@ -From c9b2eff36728266052ccfff54d3ac0a0624fd0f1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 14 Feb 2013 11:50:41 +0100 -Subject: [PATCH] Use File.join insteado of manual path creation. - -This prevents issues, when File.join in #new_default_spec removes -superfluous slashes while they are kept in expected paths. E.g. the test -would fail if ruby configuration specifies --with-ruby-version=''. ---- - test/rubygems/test_gem_commands_contents_command.rb | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/test/rubygems/test_gem_commands_contents_command.rb b/test/rubygems/test_gem_commands_contents_command.rb -index 60df53f..35c9631 100644 ---- a/test/rubygems/test_gem_commands_contents_command.rb -+++ b/test/rubygems/test_gem_commands_contents_command.rb -@@ -140,10 +140,10 @@ lib/foo.rb - @cmd.execute - end - -- expected = %W[ -- #{Gem::ConfigMap[:bindir]}/default_command -- #{Gem::ConfigMap[:rubylibdir]}/default/gem.rb -- #{Gem::ConfigMap[:archdir]}/default_gem.so -+ expected = [ -+ File.join(Gem::ConfigMap[:bindir], 'default_command'), -+ File.join(Gem::ConfigMap[:rubylibdir], 'default/gem.rb'), -+ File.join(Gem::ConfigMap[:archdir], 'default_gem.so') - ].sort.join "\n" - - assert_equal expected, @ui.output.chomp --- -1.8.1.2 - diff --git a/sources b/sources index 0c071c1..d4da5ce 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -20eb8f067d20f6b76b7e16cce2a85a55 ruby-2.0.0-p353.tar.bz2 +53edc33b2f590ecdd9f6a344b9d92d0d ruby-2.1.1.tar.bz2 From 3f594feabd9e2aa513cb4cd97ef1af4adce2fca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 9 Apr 2014 09:34:30 +0200 Subject: [PATCH 157/530] Revert regression of Hash#reject. --- ruby-2.1.2-p79-hash.c-extra-states.patch | 33 ++++++++++++++++++++++++ ruby.spec | 6 ++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 ruby-2.1.2-p79-hash.c-extra-states.patch diff --git a/ruby-2.1.2-p79-hash.c-extra-states.patch b/ruby-2.1.2-p79-hash.c-extra-states.patch new file mode 100644 index 0000000..834bb4c --- /dev/null +++ b/ruby-2.1.2-p79-hash.c-extra-states.patch @@ -0,0 +1,33 @@ +From d5c45b5fb11748acbfc9ee6c7dbfeb04408de53d Mon Sep 17 00:00:00 2001 +From: naruse +Date: Sat, 1 Mar 2014 09:02:36 +0000 +Subject: [PATCH] merge revision(s) 44370: [Backport #9576] + + hash.c: extra states + + * hash.c (rb_hash_reject): use words "extra states". + + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45227 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + hash.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hash.c b/hash.c +index 66cd94b..9a5814a 100644 +--- a/hash.c ++++ b/hash.c +@@ -1178,7 +1178,7 @@ struct shift_var { + #endif + } + } +-#if HASH_REJECT_COPY_MISC_ATTRIBUTES ++#if HASH_REJECT_COPY_EXTRA_STATES + result = rb_hash_dup_empty(hash); + #else + result = rb_hash_new(); +diff --git a/version.h b/version.h +index 8c8f900..59c80e3 100644 +-- +1.9.1 + diff --git a/ruby.spec b/ruby.spec index 4744e93..11d9a6d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -139,6 +139,8 @@ Patch12: ruby-1.9.3-mkmf-verbose.patch # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +# https://www.ruby-lang.org/en/news/2014/03/10/regression-of-hash-reject-in-ruby-2-1-1/ +Patch18: ruby-2.1.2-p79-hash.c-extra-states.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -399,6 +401,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch8 -p1 %patch12 -p1 %patch17 -p1 +%patch18 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -881,8 +884,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog -* Wed Mar 05 2014 Vít Ondruch - 2.1.1-18 +* Tue Apr 08 2014 Vít Ondruch - 2.1.1-18 - Update to Ruby 2.1.1. +- Revert regression of Hash#reject. * Mon Mar 03 2014 Vít Ondruch - 2.1.0-19 - Add RPM dependency generators for RubyGems. From f49b015f1f33c5432d1fabbf6dcbd99cb0859fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 23 Apr 2014 16:36:57 +0200 Subject: [PATCH 158/530] Correctly expand $(prefix) in some Makefiles, e.g. eruby. --- ...ed-paths-when-empty-version-string-i.patch | 28 ++++++++++++++----- ruby.spec | 5 +++- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index da88a97..37c6fa4 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -1,16 +1,17 @@ -From 763c6571697b0bd551a8a0c27d538d00f161a9f3 Mon Sep 17 00:00:00 2001 +From e24d97c938c481450ed80ec83e5399595946c1ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 8 Feb 2013 22:48:41 +0100 Subject: [PATCH] Prevent duplicated paths when empty version string is configured. --- - configure.in | 15 +++++++++------ - loadpath.c | 12 ++++++++++++ - 2 files changed, 21 insertions(+), 6 deletions(-) + configure.in | 15 +++++++++------ + loadpath.c | 12 ++++++++++++ + tool/mkconfig.rb | 2 +- + 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/configure.in b/configure.in -index 88d24ee..4a300b9 100644 +index 17ed3ed..5843651 100644 --- a/configure.in +++ b/configure.in @@ -3645,8 +3645,6 @@ AS_CASE(["$target_os"], @@ -22,7 +23,7 @@ index 88d24ee..4a300b9 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, -@@ -3676,6 +3676,7 @@ AC_ARG_WITH(ruby-version, +@@ -3676,6 +3674,7 @@ AC_ARG_WITH(ruby-version, [ruby_version=full]) unset RUBY_LIB_VERSION unset RUBY_LIB_VERSION_STYLE @@ -108,6 +109,19 @@ index 9160031..0d4d953 100644 RUBY_LIB "\0" #ifdef RUBY_THINARCH +diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb +index 07076d4..35e6c3c 100755 +--- a/tool/mkconfig.rb ++++ b/tool/mkconfig.rb +@@ -121,7 +121,7 @@ File.foreach "config.status" do |line| + val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump + case name + when /^prefix$/ +- val = "(TOPDIR || DESTDIR + #{val})" ++ val = "(((TOPDIR && TOPDIR.empty?) ? nil : TOPDIR) || DESTDIR + #{val})" + when /^ARCH_FLAG$/ + val = "arch_flag || #{val}" if universal + when /^UNIVERSAL_ARCHNAMES$/ -- -1.8.4.2 +1.9.0 diff --git a/ruby.spec b/ruby.spec index 11d9a6d..cc721d1 100644 --- a/ruby.spec +++ b/ruby.spec @@ -27,7 +27,7 @@ %endif -%global release 18 +%global release 19 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.2 @@ -884,6 +884,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Wed Apr 23 2014 Vít Ondruch - 2.1.1-19 +- Correctly expand $(prefix) in some Makefiles, e.g. eruby. + * Tue Apr 08 2014 Vít Ondruch - 2.1.1-18 - Update to Ruby 2.1.1. - Revert regression of Hash#reject. From eab15b0506ea7c7512a071fcd00df38849120e17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 6 May 2014 08:18:00 +0200 Subject: [PATCH 159/530] Remove useless exclude (rhbz#1065897). --- ruby.spec | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index cc721d1..190decb 100644 --- a/ruby.spec +++ b/ruby.spec @@ -27,7 +27,7 @@ %endif -%global release 19 +%global release 20 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.2 @@ -650,7 +650,6 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/dl %{ruby_libdir}/drb %{ruby_libdir}/fiddle -%exclude %{ruby_libdir}/gems %exclude %{ruby_libdir}/irb %{ruby_libdir}/matrix %{ruby_libdir}/net @@ -884,6 +883,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue May 06 2014 Vít Ondruch - 2.1.1-20 +- Remove useless exclude (rhbz#1065897). + * Wed Apr 23 2014 Vít Ondruch - 2.1.1-19 - Correctly expand $(prefix) in some Makefiles, e.g. eruby. From 0a113b08ab42965229d4bc12a472d2db8917f176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 6 May 2014 14:31:57 +0200 Subject: [PATCH 160/530] Extract load macro into external file and include it. --- load.inc | 30 ++++++++++++++++++++++++++++++ ruby.spec | 37 +++++++------------------------------ 2 files changed, 37 insertions(+), 30 deletions(-) create mode 100644 load.inc diff --git a/load.inc b/load.inc new file mode 100644 index 0000000..bf9c07e --- /dev/null +++ b/load.inc @@ -0,0 +1,30 @@ +%{lua: + +function source_macros(file) + local macro = nil + + for line in io.lines(file) do + if not macro and line:match("^%%") then + macro = line:match("^%%(.*)$") + line = nil + end + + if macro then + if line and macro:match("^.-%s*\\%s*$") then + macro = macro .. '\n' .. line + end + + if not macro:match("^.-%s*\\%s*$") then + rpm.define(macro) + macro = nil + end + end + end +end + +} + +# Include the constants defined in macros files. Could be dropped as soon as +# RPM supports the %%load macro (RPM 4.12+ probably). +# http://lists.rpm.org/pipermail/rpm-maint/2014-February/003659.html +%define load() %{lua:source_macros(rpm.expand("%1"))} diff --git a/ruby.spec b/ruby.spec index 190decb..655437b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -86,37 +86,13 @@ Source8: rubygems.attr Source9: rubygems.req Source10: rubygems.prov +# %%load function should be supported in RPM 4.12+. +# http://lists.rpm.org/pipermail/rpm-maint/2014-February/003659.html +Source100: load.inc +%include %{SOURCE100} -# Include the constants defined in macros files. -# http://rpm.org/ticket/866 -%{lua: - -function source_macros(file) - local macro = nil - - for line in io.lines(file) do - if not macro and line:match("^%%") then - macro = line:match("^%%(.*)$") - line = nil - end - - if macro then - if line and macro:match("^.-%s*\\%s*$") then - macro = macro .. '\n' .. line - end - - if not macro:match("^.-%s*\\%s*$") then - rpm.define(macro) - macro = nil - end - end - end -end - -source_macros(rpm.expand("%{SOURCE4}")) -source_macros(rpm.expand("%{SOURCE5}")) - -} +%{load %{SOURCE4}} +%{load %{SOURCE5}} # http://bugs.ruby-lang.org/issues/7807 Patch0: ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -885,6 +861,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %changelog * Tue May 06 2014 Vít Ondruch - 2.1.1-20 - Remove useless exclude (rhbz#1065897). +- Extract load macro into external file and include it. * Wed Apr 23 2014 Vít Ondruch - 2.1.1-19 - Correctly expand $(prefix) in some Makefiles, e.g. eruby. From efdf386e3192775d84b69006d3bc12d5532455d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 7 May 2014 15:40:54 +0200 Subject: [PATCH 161/530] Kill bundled certificates. --- ruby.spec | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ruby.spec b/ruby.spec index 655437b..df45731 100644 --- a/ruby.spec +++ b/ruby.spec @@ -430,6 +430,16 @@ install -m644 %{SOURCE7} %{buildroot}%{_includedir}/%{name}/config.h # http://bugs.ruby-lang.org/issues/7807 sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_libdir}/pkgconfig/%{name}.pc +# Kill bundled certificates, as they should be part of ca-sertificates. +for cert in \ + Class3PublicPrimaryCertificationAuthority.pem \ + DigiCertHighAssuranceEVRootCA.pem \ + EntrustnetSecureServerCertificationAuthority.pem \ + GeoTrustGlobalCA.pem +do + rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert +done + # Move macros file insto proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d @@ -862,6 +872,7 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" * Tue May 06 2014 Vít Ondruch - 2.1.1-20 - Remove useless exclude (rhbz#1065897). - Extract load macro into external file and include it. +- Kill bundled certificates. * Wed Apr 23 2014 Vít Ondruch - 2.1.1-19 - Correctly expand $(prefix) in some Makefiles, e.g. eruby. From 098cd8787a738c16e2583c47b364f6389b553838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 7 May 2014 15:43:31 +0200 Subject: [PATCH 162/530] Fix typo. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index df45731..c1beea5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -430,7 +430,7 @@ install -m644 %{SOURCE7} %{buildroot}%{_includedir}/%{name}/config.h # http://bugs.ruby-lang.org/issues/7807 sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_libdir}/pkgconfig/%{name}.pc -# Kill bundled certificates, as they should be part of ca-sertificates. +# Kill bundled certificates, as they should be part of ca-certificates. for cert in \ Class3PublicPrimaryCertificationAuthority.pem \ DigiCertHighAssuranceEVRootCA.pem \ From d09c32278d13358b0d1fe0a3e92f0b262c3ff1ef Mon Sep 17 00:00:00 2001 From: Josef Stribny Date: Tue, 20 May 2014 13:24:29 +0200 Subject: [PATCH 163/530] Update to Ruby 2.1.2 --- .gitignore | 1 + ruby-2.1.2-p79-hash.c-extra-states.patch | 33 ------------------------ ruby.spec | 12 ++++----- sources | 2 +- 4 files changed, 8 insertions(+), 40 deletions(-) delete mode 100644 ruby-2.1.2-p79-hash.c-extra-states.patch diff --git a/.gitignore b/.gitignore index 1c061b4..f4b5d13 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ ruby-rev415a3ef9ab82c65a7abc-ext_tk.tar.gz /ruby-2.0.0-p247.tar.bz2 /ruby-2.0.0-p353.tar.bz2 /ruby-2.1.1.tar.bz2 +/ruby-2.1.2.tar.bz2 diff --git a/ruby-2.1.2-p79-hash.c-extra-states.patch b/ruby-2.1.2-p79-hash.c-extra-states.patch deleted file mode 100644 index 834bb4c..0000000 --- a/ruby-2.1.2-p79-hash.c-extra-states.patch +++ /dev/null @@ -1,33 +0,0 @@ -From d5c45b5fb11748acbfc9ee6c7dbfeb04408de53d Mon Sep 17 00:00:00 2001 -From: naruse -Date: Sat, 1 Mar 2014 09:02:36 +0000 -Subject: [PATCH] merge revision(s) 44370: [Backport #9576] - - hash.c: extra states - - * hash.c (rb_hash_reject): use words "extra states". - - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45227 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - hash.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/hash.c b/hash.c -index 66cd94b..9a5814a 100644 ---- a/hash.c -+++ b/hash.c -@@ -1178,7 +1178,7 @@ struct shift_var { - #endif - } - } --#if HASH_REJECT_COPY_MISC_ATTRIBUTES -+#if HASH_REJECT_COPY_EXTRA_STATES - result = rb_hash_dup_empty(hash); - #else - result = rb_hash_new(); -diff --git a/version.h b/version.h -index 8c8f900..59c80e3 100644 --- -1.9.1 - diff --git a/ruby.spec b/ruby.spec index c1beea5..7c9bdc0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,7 +1,7 @@ %global major_version 2 %global minor_version 1 -%global teeny_version 1 -%global patch_level 76 +%global teeny_version 2 +%global patch_level 95 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -44,7 +44,7 @@ %global io_console_version 0.4.2 %global json_version 1.8.1 %global minitest_version 4.7.5 -%global psych_version 2.0.3 +%global psych_version 2.0.5 %global rake_version 10.1.0 %global rdoc_version 4.1.0 @@ -115,8 +115,6 @@ Patch12: ruby-1.9.3-mkmf-verbose.patch # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch -# https://www.ruby-lang.org/en/news/2014/03/10/regression-of-hash-reject-in-ruby-2-1-1/ -Patch18: ruby-2.1.2-p79-hash.c-extra-states.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -377,7 +375,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch8 -p1 %patch12 -p1 %patch17 -p1 -%patch18 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -869,6 +866,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue May 20 2014 Josef Stribny - 2.1.2-21 +- Update to Ruby 2.1.2 + * Tue May 06 2014 Vít Ondruch - 2.1.1-20 - Remove useless exclude (rhbz#1065897). - Extract load macro into external file and include it. diff --git a/sources b/sources index d4da5ce..429bbe7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -53edc33b2f590ecdd9f6a344b9d92d0d ruby-2.1.1.tar.bz2 +ed9b8565bdeccb401d628ec8d54a0774 ruby-2.1.2.tar.bz2 From ce47215a639e7293cda9c7019145b54606fc02d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= Date: Wed, 21 May 2014 12:36:54 +0200 Subject: [PATCH 164/530] - Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86 --- ruby.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 7c9bdc0..6bace2d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -27,7 +27,7 @@ %endif -%global release 20 +%global release 21 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.2 @@ -63,7 +63,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version} -Release: %{release_string} +Release: %{release_string}.1 Group: Development/Languages # Public Domain for example for: include/ruby/st.h, strftime.c, ... License: (Ruby or BSD) and Public Domain @@ -866,6 +866,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Wed May 21 2014 Jaroslav Škarvada +- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86 + * Tue May 20 2014 Josef Stribny - 2.1.2-21 - Update to Ruby 2.1.2 From 96581d5c9605c490cc6d2ba86162ae739191694e Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Sat, 7 Jun 2014 22:07:12 -0500 Subject: [PATCH 165/530] - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild --- ruby.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 6bace2d..32635b4 100644 --- a/ruby.spec +++ b/ruby.spec @@ -27,7 +27,7 @@ %endif -%global release 21 +%global release 22 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.2 @@ -63,7 +63,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version} -Release: %{release_string}.1 +Release: %{release_string}.2 Group: Development/Languages # Public Domain for example for: include/ruby/st.h, strftime.c, ... License: (Ruby or BSD) and Public Domain @@ -866,6 +866,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Sun Jun 08 2014 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + * Wed May 21 2014 Jaroslav Škarvada - Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86 From c31c7edb6913eb7417ee68c59997548df2943dde Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Tue, 24 Jun 2014 12:07:04 +0100 Subject: [PATCH 166/530] Fix FTBFS, Specify tcl/tk 8.6, Add upstream patch to build with libffi 3.1 --- .gitignore | 26 +------------------------- ruby-r46485-libffi31.patch | 14 ++++++++++++++ ruby.spec | 30 ++++++++++++++++++++---------- 3 files changed, 35 insertions(+), 35 deletions(-) create mode 100644 ruby-r46485-libffi31.patch diff --git a/.gitignore b/.gitignore index f4b5d13..9c1eabd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1 @@ -ruby-1.8.7-p299.tar.bz2 -ruby-rev415a3ef9ab82c65a7abc-ext_tk.tar.gz -/ruby-1.8.7-p302.tar.bz2 -/ruby-rev54f344095916f83a2755a177f94e65a1c390a612-ext_tk.tar.gz -/ruby-1.8.7-p330.tar.bz2 -/ruby-revf30eca26639ce538339bc488c7ed1fd397b0c13f-ext_tk.tar.gz -/ruby-1.8.7-p334.tar.bz2 -/ruby-1.8.7-p352.tar.bz2 -/ruby-revc2dfaa7d40531aef3706bcc16f38178b0c6633ee-ext_tk.tar.gz -/ruby-1.8.7-p357.tar.bz2 -/ruby-1.9.3-p0.tar.gz -/ruby-1.9.3-p125.tar.gz -/ruby-1.9.3-p194.tar.gz -/ruby-1.9.3-p286.tar.gz -/ruby-1.9.3-p327.tar.gz -/ruby-1.9.3-p362.tar.gz -/ruby-1.9.3-p374.tar.gz -/ruby-1.9.3-p385.tar.gz -/ruby-2.0.0-r39387.tar.gz -/ruby-2.0.0-p0.tar.gz -/ruby-2.0.0-p195.tar.bz2 -/ruby-2.0.0-p247.tar.bz2 -/ruby-2.0.0-p353.tar.bz2 -/ruby-2.1.1.tar.bz2 -/ruby-2.1.2.tar.bz2 +/ruby-2.*.tar.bz2 diff --git a/ruby-r46485-libffi31.patch b/ruby-r46485-libffi31.patch new file mode 100644 index 0000000..79144a6 --- /dev/null +++ b/ruby-r46485-libffi31.patch @@ -0,0 +1,14 @@ +Index: ext/fiddle/extconf.rb +=================================================================== +--- ext/fiddle/extconf.rb (revision 46484) ++++ ext/fiddle/extconf.rb (revision 46485) +@@ -7,7 +7,8 @@ + pkg_config("libffi") + if ver = pkg_config("libffi", "modversion") + ver = ver.gsub(/-rc\d+/, '') # If ver contains rc version, just ignored. +- $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d%03d' % ver.split('.') }}) ++ ver = (ver.split('.') + [0,0])[0,3] ++ $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d%03d' % ver }}) + end + + unless have_header('ffi.h') diff --git a/ruby.spec b/ruby.spec index 32635b4..9e529bb 100644 --- a/ruby.spec +++ b/ruby.spec @@ -27,7 +27,7 @@ %endif -%global release 22 +%global release 23 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.2 @@ -63,7 +63,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version} -Release: %{release_string}.2 +Release: %{release_string} Group: Development/Languages # Public Domain for example for: include/ruby/st.h, strftime.c, ... License: (Ruby or BSD) and Public Domain @@ -102,19 +102,22 @@ Patch0: ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch Patch1: ruby-2.1.0-Enable-configuration-of-archlibdir.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. -Patch3: ruby-2.1.0-always-use-i386.patch +Patch2: ruby-2.1.0-always-use-i386.patch # Fixes random WEBRick test failures. # https://bugs.ruby-lang.org/issues/6573. -Patch5: ruby-1.9.3.p195-fix-webrick-tests.patch +Patch3: ruby-1.9.3.p195-fix-webrick-tests.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://redmine.ruby-lang.org/issues/5617 -Patch8: ruby-2.1.0-custom-rubygems-location.patch +Patch4: ruby-2.1.0-custom-rubygems-location.patch # Make mkmf verbose by default -Patch12: ruby-1.9.3-mkmf-verbose.patch +Patch5: ruby-1.9.3-mkmf-verbose.patch # Adds support for '--with-prelude' configuration option. This allows to built # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 -Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +# Fix build with libffi 3.1 +# https://bugs.ruby-lang.org/issues/9897 +Patch7: ruby-r46485-libffi31.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -370,11 +373,12 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch0 -p1 %patch1 -p1 +%patch2 -p1 %patch3 -p1 +%patch4 -p1 %patch5 -p1 -%patch8 -p1 -%patch12 -p1 -%patch17 -p1 +%patch6 -p1 +%patch7 -p0 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -401,6 +405,7 @@ autoconf --with-vendorarchhdrdir='$(vendorhdrdir)/$(arch)' \ --with-rubygemsdir='%{rubygems_dir}' \ --with-ruby-pc='%{name}.pc' \ + --with-tcltkversion=8.6 \ --disable-rpath \ --enable-shared \ --with-ruby-version='' \ @@ -866,6 +871,11 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Jun 24 2014 Peter Robinson 2.1.2-23 +- Fix FTBFS +- Specify tcl/tk 8.6 +- Add upstream patch to build with libffi 3.1 + * Sun Jun 08 2014 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild From 629648da07e180cf1591833d23b96dd25887d8fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 27 Jun 2014 12:49:55 +0200 Subject: [PATCH 167/530] Workaround OpenSSL::TestPKeyRSA#test_sign_verify_memory_leak timeouts on ARM. --- ruby.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.spec b/ruby.spec index 9e529bb..db7f6ff 100644 --- a/ruby.spec +++ b/ruby.spec @@ -554,6 +554,10 @@ DISABLE_TESTS="" # test_call_double(DL::TestDL) fails on ARM HardFP # http://bugs.ruby-lang.org/issues/6592 DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" + +# Workaround OpenSSL::TestPKeyRSA#test_sign_verify_memory_leak timeouts on ARM. +# https://bugs.ruby-lang.org/issues/9984 +sed -i -e 's|20_000|10_000|g' test/openssl/test_pkey_rsa.rb %endif # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, From b9d9d0c37a5e02e69f19caf1204c868d6bc2fd48 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 18 Aug 2014 00:28:26 +0000 Subject: [PATCH 168/530] - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index db7f6ff..89bcc0d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -27,7 +27,7 @@ %endif -%global release 23 +%global release 24 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.2 @@ -875,6 +875,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Aug 18 2014 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + * Tue Jun 24 2014 Peter Robinson 2.1.2-23 - Fix FTBFS - Specify tcl/tk 8.6 From 8e2921fd5a3125b7ce2487bb449b2e6db40cc3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 25 Aug 2014 16:07:51 +0200 Subject: [PATCH 169/530] Use load macro introduced in RPM 4.12. --- load.inc | 30 ------------------------------ ruby.spec | 14 +++++++------- 2 files changed, 7 insertions(+), 37 deletions(-) delete mode 100644 load.inc diff --git a/load.inc b/load.inc deleted file mode 100644 index bf9c07e..0000000 --- a/load.inc +++ /dev/null @@ -1,30 +0,0 @@ -%{lua: - -function source_macros(file) - local macro = nil - - for line in io.lines(file) do - if not macro and line:match("^%%") then - macro = line:match("^%%(.*)$") - line = nil - end - - if macro then - if line and macro:match("^.-%s*\\%s*$") then - macro = macro .. '\n' .. line - end - - if not macro:match("^.-%s*\\%s*$") then - rpm.define(macro) - macro = nil - end - end - end -end - -} - -# Include the constants defined in macros files. Could be dropped as soon as -# RPM supports the %%load macro (RPM 4.12+ probably). -# http://lists.rpm.org/pipermail/rpm-maint/2014-February/003659.html -%define load() %{lua:source_macros(rpm.expand("%1"))} diff --git a/ruby.spec b/ruby.spec index 89bcc0d..a524fc7 100644 --- a/ruby.spec +++ b/ruby.spec @@ -86,13 +86,10 @@ Source8: rubygems.attr Source9: rubygems.req Source10: rubygems.prov -# %%load function should be supported in RPM 4.12+. -# http://lists.rpm.org/pipermail/rpm-maint/2014-February/003659.html -Source100: load.inc -%include %{SOURCE100} - -%{load %{SOURCE4}} -%{load %{SOURCE5}} +# The load directive is supported since RPM 4.12, i.e. F21+. The build process +# fails on older Fedoras. +%{?load:%{SOURCE4}} +%{?load:%{SOURCE5}} # http://bugs.ruby-lang.org/issues/7807 Patch0: ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -875,6 +872,9 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Aug 25 2014 Vít Ondruch - 2.1.2-24 +- Use load macro introduced in RPM 4.12. + * Mon Aug 18 2014 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild From 1835dddc242bf73b9d4de1b5706eb23ff3402f64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 25 Aug 2014 17:37:43 +0200 Subject: [PATCH 170/530] Drop the unused patch_level. --- ruby.spec | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ruby.spec b/ruby.spec index a524fc7..40b9a6c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,7 +1,6 @@ %global major_version 2 %global minor_version 1 %global teeny_version 2 -%global patch_level 95 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -19,11 +18,6 @@ %if 0%{?milestone:1}%{?revision:1} != 0 %global development_release %{?milestone}%{?!milestone:%{?revision:r%{revision}}} %global ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision:r%{revision}}} -%else -# Ruby will be using semver versioning scheme since Ruby 2.1.0. However, it is -# unclear ATM what name will be used when next bugfix version is released. -# http://bugs.ruby-lang.org/issues/8835 -#%%global ruby_archive %{ruby_archive}-p%{patch_level} %endif From 61fd310e63c3d5d74d0113cb26637f5c3cb9add4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 29 Oct 2014 15:22:34 +0100 Subject: [PATCH 171/530] Update to Ruby 2.1.4. --- ruby-r46485-libffi31.patch | 14 -------------- ruby.spec | 25 +++++++++++-------------- sources | 2 +- 3 files changed, 12 insertions(+), 29 deletions(-) delete mode 100644 ruby-r46485-libffi31.patch diff --git a/ruby-r46485-libffi31.patch b/ruby-r46485-libffi31.patch deleted file mode 100644 index 79144a6..0000000 --- a/ruby-r46485-libffi31.patch +++ /dev/null @@ -1,14 +0,0 @@ -Index: ext/fiddle/extconf.rb -=================================================================== ---- ext/fiddle/extconf.rb (revision 46484) -+++ ext/fiddle/extconf.rb (revision 46485) -@@ -7,7 +7,8 @@ - pkg_config("libffi") - if ver = pkg_config("libffi", "modversion") - ver = ver.gsub(/-rc\d+/, '') # If ver contains rc version, just ignored. -- $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d%03d' % ver.split('.') }}) -+ ver = (ver.split('.') + [0,0])[0,3] -+ $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d%03d' % ver }}) - end - - unless have_header('ffi.h') diff --git a/ruby.spec b/ruby.spec index 40b9a6c..f2cf2a7 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 1 -%global teeny_version 2 +%global teeny_version 4 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 24 +%global release 23 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.2 @@ -106,9 +106,6 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch -# Fix build with libffi 3.1 -# https://bugs.ruby-lang.org/issues/9897 -Patch7: ruby-r46485-libffi31.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -369,7 +366,6 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch4 -p1 %patch5 -p1 %patch6 -p1 -%patch7 -p0 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -545,10 +541,6 @@ DISABLE_TESTS="" # test_call_double(DL::TestDL) fails on ARM HardFP # http://bugs.ruby-lang.org/issues/6592 DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" - -# Workaround OpenSSL::TestPKeyRSA#test_sign_verify_memory_leak timeouts on ARM. -# https://bugs.ruby-lang.org/issues/9984 -sed -i -e 's|20_000|10_000|g' test/openssl/test_pkey_rsa.rb %endif # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, @@ -568,9 +560,13 @@ sed -i "/^ gem 'minitest', '~> 4.0'/ s/^/#/" lib/rubygems/test_case.rb # https://bugs.ruby-lang.org/issues/9198 sed -i '/^ def test_machine_stackoverflow/,/^ end/ s/^/#/' test/ruby/test_exception.rb -# Allow MD5 in OpenSSL. -# https://bugs.ruby-lang.org/issues/9154 -OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" +# Don't test wrap ciphers to prevent "OpenSSL::Cipher::CipherError: wrap mode +# not allowed" error. +# https://bugs.ruby-lang.org/issues/10229 +sed -i '/assert(OpenSSL::Cipher::Cipher.new(name).is_a?(OpenSSL::Cipher::Cipher))/i \ + next if /wrap/ =~ name' test/openssl/test_cipher.rb + +make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig @@ -866,7 +862,8 @@ OPENSSL_ENABLE_MD5_VERIFY=1 make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog -* Mon Aug 25 2014 Vít Ondruch - 2.1.2-24 +* Wed Oct 29 2014 Vít Ondruch - 2.1.4-23 +- Update to Ruby 2.1.4. - Use load macro introduced in RPM 4.12. * Mon Aug 18 2014 Fedora Release Engineering diff --git a/sources b/sources index 429bbe7..0edbf6f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -ed9b8565bdeccb401d628ec8d54a0774 ruby-2.1.2.tar.bz2 +f4136e781d261e3cc20748005e1740b7 ruby-2.1.4.tar.bz2 From 2400b2d5741c6c45220a5678ce2943fd818ce98c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 14 Oct 2014 11:25:42 +0200 Subject: [PATCH 172/530] Include only vendor directories, not their content (rhbz#1114071). --- ruby.spec | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index f2cf2a7..18aee30 100644 --- a/ruby.spec +++ b/ruby.spec @@ -612,8 +612,8 @@ make check TESTS="-v $DISABLE_TESTS" # local system administrator. %exclude %{ruby_sitelibdir} %exclude %{ruby_sitearchdir} -%{ruby_vendorlibdir} -%{ruby_vendorarchdir} +%dir %{ruby_vendorlibdir} +%dir %{ruby_vendorarchdir} # List all these files explicitly to prevent surprises # Platform independent libraries. @@ -864,6 +864,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Wed Oct 29 2014 Vít Ondruch - 2.1.4-23 - Update to Ruby 2.1.4. +- Include only vendor directories, not their content (rhbz#1114071). - Use load macro introduced in RPM 4.12. * Mon Aug 18 2014 Fedora Release Engineering From 4375d5ca30bd504cc01fef2239e430db2f5b23a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 30 Oct 2014 13:59:52 +0100 Subject: [PATCH 173/530] Fix "invalid regex" warning for non-rubygem packages (rhbz#1154067). --- ruby.spec | 1 + rubygems.attr | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 18aee30..e1f6dbf 100644 --- a/ruby.spec +++ b/ruby.spec @@ -865,6 +865,7 @@ make check TESTS="-v $DISABLE_TESTS" * Wed Oct 29 2014 Vít Ondruch - 2.1.4-23 - Update to Ruby 2.1.4. - Include only vendor directories, not their content (rhbz#1114071). +- Fix "invalid regex" warning for non-rubygem packages (rhbz#1154067). - Use load macro introduced in RPM 4.12. * Mon Aug 18 2014 Fedora Release Engineering diff --git a/rubygems.attr b/rubygems.attr index f711775..f033d43 100644 --- a/rubygems.attr +++ b/rubygems.attr @@ -1,3 +1,5 @@ %__rubygems_requires %{_rpmconfigdir}/rubygems.req %__rubygems_provides %{_rpmconfigdir}/rubygems.prov -%__rubygems_path ^%{gem_spec}$ +# In non-gem packages, the %%{gem_name} macro is not available and the macro +# stays unexpanded which leads to "invalid regex" error (rhbz#1154067). +%__rubygems_path ^%{?gem_name:%{gem_spec}}%{!?gem_name:this_should_never_match_anything}$ From 79beb34d809cb4d1331bde72f2e940124c5f1aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 31 Oct 2014 08:59:55 +0100 Subject: [PATCH 174/530] Bump release to satisfy upgrade path. --- ruby.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index e1f6dbf..ec213ea 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 23 +%global release 24 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.2 @@ -862,7 +862,7 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog -* Wed Oct 29 2014 Vít Ondruch - 2.1.4-23 +* Fri Oct 31 2014 Vít Ondruch - 2.1.4-24 - Update to Ruby 2.1.4. - Include only vendor directories, not their content (rhbz#1114071). - Fix "invalid regex" warning for non-rubygem packages (rhbz#1154067). From 1610d07dcd91940692d4dd5e0c58e59e0fdb2961 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 28 Nov 2014 17:02:39 +0100 Subject: [PATCH 175/530] Update to Ruby 2.1.5. --- ruby-1.9.3-mkmf-verbose.patch | 2 +- ...-additional-preludes-by-configuratio.patch | 2 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 6 +-- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 +- ...0-Don-t-use-obsolete-SSLv3-for-tests.patch | 38 +++++++++++++++++++ ruby.spec | 15 +++++++- sources | 2 +- 9 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 ruby-2.2.0-Don-t-use-obsolete-SSLv3-for-tests.patch diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index 66107c4..120ee37 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,7 +11,7 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1828,7 +1828,7 @@ SRC +@@ -1829,7 +1829,7 @@ SRC SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index e297a73..6a425ea 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -38,7 +38,7 @@ diff --git a/configure.in b/configure.in index 0e371e2..d4f1dcb 100644 --- a/configure.in +++ b/configure.in -@@ -3841,6 +3841,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -3914,6 +3914,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 90a97d7..4a4919c 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 37d9a62..553d4d0 100644 --- a/configure.in +++ b/configure.in -@@ -3071,6 +3071,11 @@ if test ${multiarch+set}; then +@@ -3143,6 +3143,11 @@ if test ${multiarch+set}; then fi archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 37c6fa4..89f5890 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.in b/configure.in index 17ed3ed..5843651 100644 --- a/configure.in +++ b/configure.in -@@ -3645,8 +3645,6 @@ AS_CASE(["$target_os"], +@@ -3718,8 +3718,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -23,7 +23,7 @@ index 17ed3ed..5843651 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, -@@ -3676,6 +3674,7 @@ AC_ARG_WITH(ruby-version, +@@ -3749,6 +3747,7 @@ AC_ARG_WITH(ruby-version, [ruby_version=full]) unset RUBY_LIB_VERSION unset RUBY_LIB_VERSION_STYLE @@ -31,7 +31,7 @@ index 17ed3ed..5843651 100644 AS_CASE(["$ruby_version"], [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) -@@ -3692,30 +3691,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then +@@ -3765,30 +3764,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" eval $ruby_version elif test -z "${ruby_version}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 88eff60..78e9697 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 553d4d0..03a4152 100644 --- a/configure.in +++ b/configure.in -@@ -3757,6 +3757,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3830,6 +3830,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index e0e488b..55c7448 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index 03a4152..0e371e2 100644 --- a/configure.in +++ b/configure.in -@@ -3731,6 +3731,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -3804,6 +3804,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 03a4152..0e371e2 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -3754,6 +3754,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3827,6 +3831,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.2.0-Don-t-use-obsolete-SSLv3-for-tests.patch b/ruby-2.2.0-Don-t-use-obsolete-SSLv3-for-tests.patch new file mode 100644 index 0000000..3ad6520 --- /dev/null +++ b/ruby-2.2.0-Don-t-use-obsolete-SSLv3-for-tests.patch @@ -0,0 +1,38 @@ +From 75ca3a364e2e35a53a385eab08bebdcb08baeace Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Fri, 21 Nov 2014 16:02:52 +0100 +Subject: [PATCH] Don't use obsolete SSLv3 for tests. + +SSLv23 should be the most liberal settings according to upstream +documentation: + +https://www.openssl.org/docs/ssl/SSL_CTX_new.html +--- + test/openssl/test_ssl_session.rb | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/test/openssl/test_ssl_session.rb b/test/openssl/test_ssl_session.rb +index 8066ef1..2f3e578 100644 +--- a/test/openssl/test_ssl_session.rb ++++ b/test/openssl/test_ssl_session.rb +@@ -273,7 +273,7 @@ __EOS__ + + def test_ctx_client_session_cb + called = {} +- ctx = OpenSSL::SSL::SSLContext.new("SSLv3") ++ ctx = OpenSSL::SSL::SSLContext.new + ctx.session_cache_mode = OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT + + ctx.session_new_cb = lambda { |ary| +@@ -345,7 +345,7 @@ __EOS__ + last_client_session = nil + 3.times do + sock = TCPSocket.new("127.0.0.1", port) +- ssl = OpenSSL::SSL::SSLSocket.new(sock, OpenSSL::SSL::SSLContext.new("SSLv3")) ++ ssl = OpenSSL::SSL::SSLSocket.new(sock, OpenSSL::SSL::SSLContext.new(:SSLv23_server)) + ssl.sync_close = true + ssl.session = last_client_session if last_client_session + ssl.connect +-- +1.9.3 + diff --git a/ruby.spec b/ruby.spec index ec213ea..7ca58fd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 1 -%global teeny_version 4 +%global teeny_version 5 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 24 +%global release 25 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.2 @@ -106,6 +106,9 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +# Test are broken due to SSLv3 disabled in Fedora. +# https://bugs.ruby-lang.org/issues/10046 +Patch7: ruby-2.2.0-Don-t-use-obsolete-SSLv3-for-tests.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -366,6 +369,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -566,6 +570,10 @@ sed -i '/^ def test_machine_stackoverflow/,/^ end/ s/^/#/' test/ruby/test_exce sed -i '/assert(OpenSSL::Cipher::Cipher.new(name).is_a?(OpenSSL::Cipher::Cipher))/i \ next if /wrap/ =~ name' test/openssl/test_cipher.rb +# Test is broken due to SSLv3 disabled in Fedora. +# https://bugs.ruby-lang.org/issues/10046 +sed -i '/def test_ctx_server_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb + make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig @@ -862,6 +870,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Thu Nov 20 2014 Vít Ondruch - 2.1.5-25 +- Update to Ruby 2.1.5. + * Fri Oct 31 2014 Vít Ondruch - 2.1.4-24 - Update to Ruby 2.1.4. - Include only vendor directories, not their content (rhbz#1114071). diff --git a/sources b/sources index 0edbf6f..2f388ee 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -f4136e781d261e3cc20748005e1740b7 ruby-2.1.4.tar.bz2 +a7c3e5fec47eff23091b566e9e1dac1b ruby-2.1.5.tar.bz2 From de383e754884510ca50122b248f8fbbff496a7f2 Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Fri, 26 Dec 2014 16:53:38 -0700 Subject: [PATCH 176/530] Disbable sse2 on i668 (bug #1101811) --- ruby-nosse2.patch | 41 +++++++++++++++++++++++++++++++++++++++++ ruby.spec | 9 ++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 ruby-nosse2.patch diff --git a/ruby-nosse2.patch b/ruby-nosse2.patch new file mode 100644 index 0000000..9df25dd --- /dev/null +++ b/ruby-nosse2.patch @@ -0,0 +1,41 @@ +diff -up ruby-2.1.5/configure.in.nosse2 ruby-2.1.5/configure.in +--- ruby-2.1.5/configure.in.nosse2 2014-12-26 16:31:57.696889054 -0700 ++++ ruby-2.1.5/configure.in 2014-12-26 16:32:25.187718930 -0700 +@@ -860,22 +860,6 @@ if test "$GCC" = yes; then + for oflag in -fno-fast-math; do + RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(optflags, $oflag)]) + done +- AS_CASE(["$target"], +- [*-darwin*], [ +- # doesn't seem necessary on Mac OS X +- ], +- [[i[4-6]86*|i386*mingw*]], [ +- RUBY_TRY_CFLAGS(-msse2 -mfpmath=sse, [ +- RUBY_APPEND_OPTION(XCFLAGS, -msse2 -mfpmath=sse) +- ]) +- AS_CASE(["$XCFLAGS"], +- [[*-msse2*]], [ +- RUBY_TRY_CFLAGS(-mstackrealign, [ +- RUBY_APPEND_OPTION(XCFLAGS, -mstackrealign) +- ]) +- ]) +- ] +- ) + fi + + AC_ARG_WITH(opt-dir, +diff -up ruby-2.1.5/test/ruby/test_sprintf.rb.nosse2 ruby-2.1.5/test/ruby/test_sprintf.rb +--- ruby-2.1.5/test/ruby/test_sprintf.rb.nosse2 2014-09-03 09:25:51.000000000 -0600 ++++ ruby-2.1.5/test/ruby/test_sprintf.rb 2014-12-26 16:31:57.699889035 -0700 +@@ -194,8 +194,9 @@ class TestSprintf < Test::Unit::TestCase + sprintf("%20.0f", 36893488147419107329.0)) + assert_equal(" Inf", sprintf("% 0e", 1.0/0.0), "moved from btest/knownbug") + assert_equal(" -0.", sprintf("%#10.0f", -0.5), "[ruby-dev:42552]") +- assert_equal("0x1p+2", sprintf('%.0a', Float('0x1.fp+1')), "[ruby-dev:42551]") +- assert_equal("-0x1.0p+2", sprintf('%.1a', Float('-0x1.ffp+1')), "[ruby-dev:42551]") ++ # out of spec ++ #assert_equal("0x1p+2", sprintf('%.0a', Float('0x1.fp+1')), "[ruby-dev:42551]") ++ #assert_equal("-0x1.0p+2", sprintf('%.1a', Float('-0x1.ffp+1')), "[ruby-dev:42551]") + end + + def test_float_hex diff --git a/ruby.spec b/ruby.spec index 7ca58fd..9329c39 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 25 +%global release 26 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.2.2 @@ -109,6 +109,9 @@ Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch # Test are broken due to SSLv3 disabled in Fedora. # https://bugs.ruby-lang.org/issues/10046 Patch7: ruby-2.2.0-Don-t-use-obsolete-SSLv3-for-tests.patch +# Disable sse2, already applied upstream +# https://bugzilla.redhat.com/show_bug.cgi?id=1101811 +Patch8: ruby-nosse2.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -370,6 +373,7 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %patch5 -p1 %patch6 -p1 %patch7 -p1 +%patch8 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -870,6 +874,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Dec 26 2014 Orion Poplwski - 2.1.5-26 +- Disbable sse2 on i668 (bug #1101811) + * Thu Nov 20 2014 Vít Ondruch - 2.1.5-25 - Update to Ruby 2.1.5. From 9195984ef3a89b856569605333bce28c5454bd47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 15 Jan 2015 09:47:15 +0100 Subject: [PATCH 177/530] Upgrade to Ruby 2.2.0. - Explicitly list RubyGems directories to avoid accidentaly packaged content. - Split test-unit and power_assert gems into separate sub-packages. - Drop libdb dependency in favor of gdbm. --- ruby-1.9.3-mkmf-verbose.patch | 2 +- ruby-1.9.3.p195-fix-webrick-tests.patch | 25 -- ...-additional-preludes-by-configuratio.patch | 23 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 10 +- ruby-2.1.0-always-use-i386.patch | 4 +- ruby-2.1.0-custom-rubygems-location.patch | 24 +- ...0-Don-t-use-obsolete-SSLv3-for-tests.patch | 38 --- ruby.spec | 224 +++++++++--------- sources | 2 +- test_systemtap.rb | 9 + 11 files changed, 161 insertions(+), 202 deletions(-) delete mode 100644 ruby-1.9.3.p195-fix-webrick-tests.patch delete mode 100644 ruby-2.2.0-Don-t-use-obsolete-SSLv3-for-tests.patch create mode 100644 test_systemtap.rb diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index 120ee37..13148ce 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,7 +11,7 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1829,7 +1829,7 @@ SRC +@@ -1858,7 +1858,7 @@ SRC SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. diff --git a/ruby-1.9.3.p195-fix-webrick-tests.patch b/ruby-1.9.3.p195-fix-webrick-tests.patch deleted file mode 100644 index 3b2d6e7..0000000 --- a/ruby-1.9.3.p195-fix-webrick-tests.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 2db9ad4a090d0c82e30afa44c623e3c5c99f7a37 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 19 Nov 2012 14:37:28 +0100 -Subject: [PATCH] Fix WEBrick tests. - ---- - test/runner.rb | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/test/runner.rb b/test/runner.rb -index 94beb44..db4dfe9 100644 ---- a/test/runner.rb -+++ b/test/runner.rb -@@ -2,6 +2,8 @@ require 'rbconfig' - - require 'test/unit' - -+require_relative 'ruby/envutil' -+ - src_testdir = File.dirname(File.realpath(__FILE__)) - $LOAD_PATH << src_testdir - module Gem --- -1.8.3.1 - diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index 6a425ea..b30ad4f 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -4,41 +4,42 @@ Date: Fri, 4 Oct 2013 22:13:11 +0200 Subject: [PATCH] Allow to specify addition preludes by configuration option. --- - Makefile.in | 1 + + Makefile.in | 2 ++ common.mk | 2 +- configure.in | 7 +++++++ - 3 files changed, 9 insertions(+), 1 deletion(-) + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index 7e8ed82..7916993 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -114,6 +114,7 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ +@@ -114,6 +114,8 @@ XRUBY_LIBDIR = @XRUBY_LIBDIR@ + XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@ - DEFAULT_PRELUDES = $(GEM_PRELUDE) +OPTIONAL_PRELUDES = @OPTIONAL_PRELUDES@ - ++ #### End of system configuration section. #### + MAJOR= @MAJOR@ diff --git a/common.mk b/common.mk index 5cfbc3d..3f0a82e 100644 --- a/common.mk +++ b/common.mk -@@ -109,7 +109,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(DMYEXT) - +@@ -115,7 +115,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) + DEFAULT_PRELUDES = $(GEM_PRELUDE) -PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES) +PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES) $(OPTIONAL_PRELUDES) - GEM_PRELUDE = $(srcdir)/gem_prelude.rb - PRELUDES = prelude.c miniprelude.c - GOLFPRELUDES = golf_prelude.c + GEM_PRELUDE = $(srcdir)/gem_prelude.rb + PRELUDES = {$(srcdir)}prelude.c {$(srcdir)}miniprelude.c + GOLFPRELUDES = {$(srcdir)}golf_prelude.c diff --git a/configure.in b/configure.in index 0e371e2..d4f1dcb 100644 --- a/configure.in +++ b/configure.in -@@ -3914,6 +3914,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -4160,6 +4160,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 4a4919c..6863f07 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 37d9a62..553d4d0 100644 --- a/configure.in +++ b/configure.in -@@ -3143,6 +3143,11 @@ if test ${multiarch+set}; then +@@ -3379,6 +3379,11 @@ if test ${multiarch+set}; then fi archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 89f5890..570d4d7 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.in b/configure.in index 17ed3ed..5843651 100644 --- a/configure.in +++ b/configure.in -@@ -3718,8 +3718,6 @@ AS_CASE(["$target_os"], +@@ -3966,8 +3966,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -23,7 +23,7 @@ index 17ed3ed..5843651 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, -@@ -3749,6 +3747,7 @@ AC_ARG_WITH(ruby-version, +@@ -3997,6 +3995,7 @@ AC_ARG_WITH(ruby-version, [ruby_version=full]) unset RUBY_LIB_VERSION unset RUBY_LIB_VERSION_STYLE @@ -31,7 +31,7 @@ index 17ed3ed..5843651 100644 AS_CASE(["$ruby_version"], [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) -@@ -3765,30 +3764,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then +@@ -4013,30 +4012,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" eval $ruby_version elif test -z "${ruby_version}"; then @@ -39,7 +39,7 @@ index 17ed3ed..5843651 100644 + unset ruby_version_suffix + AC_DEFINE(RUBY_LIB_VERSION_BLANK, 1) else - RUBY_LIB_VERSION="\"${ruby_version}\"" + RUBY_LIB_VERSION="${ruby_version}" fi AC_SUBST(RUBY_LIB_VERSION_STYLE) AC_SUBST(RUBY_LIB_VERSION) @@ -113,7 +113,7 @@ diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb index 07076d4..35e6c3c 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -121,7 +121,7 @@ File.foreach "config.status" do |line| +@@ -123,7 +123,7 @@ File.foreach "config.status" do |line| val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump case name when /^prefix$/ diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 78e9697..210adb1 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 553d4d0..03a4152 100644 --- a/configure.in +++ b/configure.in -@@ -3830,6 +3830,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4078,6 +4078,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl @@ -19,7 +19,7 @@ index 553d4d0..03a4152 100644 + if test "${universal_binary-no}" = yes ; then arch="universal-${target_os}" - AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available, + if test "${rb_cv_architecture_available}" = yes; then -- 1.8.3.1 diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 55c7448..41de23f 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -5,17 +5,17 @@ Subject: [PATCH] Allow to install RubyGems into custom location, outside of Ruby tree. --- - configure.in | 5 +++++ - loadpath.c | 4 ++++ - template/verconf.h.in | 3 +++ - tool/rbinstall.rb | 9 +++++++++ + configure.in | 5 +++++ + loadpath.c | 4 ++++ + template/verconf.h.tmpl | 3 +++ + tool/rbinstall.rb | 9 +++++++++ 4 files changed, 21 insertions(+) diff --git a/configure.in b/configure.in index 03a4152..0e371e2 100644 --- a/configure.in +++ b/configure.in -@@ -3804,6 +3804,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4052,6 +4052,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 03a4152..0e371e2 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -3827,6 +3831,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4075,6 +4079,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -49,10 +49,10 @@ index 623dc9d..74c5d9e 100644 RUBY_LIB "\0" #ifdef RUBY_THINARCH RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0" -diff --git a/template/verconf.h.in b/template/verconf.h.in +diff --git a/template/verconf.h.tmpl b/template/verconf.h.tmpl index 79c003e..34f2382 100644 ---- a/template/verconf.h.in -+++ b/template/verconf.h.in +--- a/template/verconf.h.tmpl ++++ b/template/verconf.h.tmpl @@ -34,6 +34,9 @@ % if C["RUBY_SEARCH_PATH"] #define RUBY_SEARCH_PATH "${RUBY_SEARCH_PATH}" @@ -67,7 +67,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index b47b6e1..0b99408 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -324,6 +324,7 @@ sitelibdir = CONFIG["sitelibdir"] +@@ -317,6 +317,7 @@ sitelibdir = CONFIG["sitelibdir"] sitearchlibdir = CONFIG["sitearchdir"] vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] @@ -75,7 +75,7 @@ index b47b6e1..0b99408 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] configure_args = Shellwords.shellwords(CONFIG["configure_args"]) -@@ -512,7 +513,15 @@ end +@@ -505,7 +506,15 @@ end install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[README* *.txt *.rdoc *.gemspec] @@ -90,7 +90,7 @@ index b47b6e1..0b99408 100755 + end end - install?(:local, :arch, :lib) do + install?(:local, :comm, :hdr, :'comm-hdr') do -- 1.8.3.1 diff --git a/ruby-2.2.0-Don-t-use-obsolete-SSLv3-for-tests.patch b/ruby-2.2.0-Don-t-use-obsolete-SSLv3-for-tests.patch deleted file mode 100644 index 3ad6520..0000000 --- a/ruby-2.2.0-Don-t-use-obsolete-SSLv3-for-tests.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 75ca3a364e2e35a53a385eab08bebdcb08baeace Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 21 Nov 2014 16:02:52 +0100 -Subject: [PATCH] Don't use obsolete SSLv3 for tests. - -SSLv23 should be the most liberal settings according to upstream -documentation: - -https://www.openssl.org/docs/ssl/SSL_CTX_new.html ---- - test/openssl/test_ssl_session.rb | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/test/openssl/test_ssl_session.rb b/test/openssl/test_ssl_session.rb -index 8066ef1..2f3e578 100644 ---- a/test/openssl/test_ssl_session.rb -+++ b/test/openssl/test_ssl_session.rb -@@ -273,7 +273,7 @@ __EOS__ - - def test_ctx_client_session_cb - called = {} -- ctx = OpenSSL::SSL::SSLContext.new("SSLv3") -+ ctx = OpenSSL::SSL::SSLContext.new - ctx.session_cache_mode = OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT - - ctx.session_new_cb = lambda { |ary| -@@ -345,7 +345,7 @@ __EOS__ - last_client_session = nil - 3.times do - sock = TCPSocket.new("127.0.0.1", port) -- ssl = OpenSSL::SSL::SSLSocket.new(sock, OpenSSL::SSL::SSLContext.new("SSLv3")) -+ ssl = OpenSSL::SSL::SSLSocket.new(sock, OpenSSL::SSL::SSLContext.new(:SSLv23_server)) - ssl.sync_close = true - ssl.session = last_client_session if last_client_session - ssl.connect --- -1.9.3 - diff --git a/ruby.spec b/ruby.spec index 9329c39..cfe4cc6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,16 +1,16 @@ %global major_version 2 -%global minor_version 1 -%global teeny_version 5 +%global minor_version 2 +%global teeny_version 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. -#%%global milestone preview2 +#%%global milestone rc1 # Keep the revision enabled for pre-releases from SVN. -#%%global revision 44362 +#%%global revision 48936 %global ruby_archive %{name}-%{ruby_version} @@ -21,10 +21,10 @@ %endif -%global release 26 +%global release 1 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -%global rubygems_version 2.2.2 +%global rubygems_version 2.4.5 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. @@ -34,13 +34,15 @@ # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version} -%global bigdecimal_version 1.2.4 -%global io_console_version 0.4.2 +%global bigdecimal_version 1.2.6 +%global io_console_version 0.4.3 %global json_version 1.8.1 -%global minitest_version 4.7.5 -%global psych_version 2.0.5 -%global rake_version 10.1.0 -%global rdoc_version 4.1.0 +%global minitest_version 5.4.3 +%global power_assert_version 0.2.2 +%global psych_version 2.0.8 +%global rake_version 10.4.2 +%global rdoc_version 4.2.0 +%global test_unit_version 3.0.8 # Might not be needed in the future, if we are lucky enough. # https://bugzilla.redhat.com/show_bug.cgi?id=888262 @@ -62,7 +64,7 @@ Group: Development/Languages # Public Domain for example for: include/ruby/st.h, strftime.c, ... License: (Ruby or BSD) and Public Domain URL: http://ruby-lang.org/ -Source0: ftp://ftp.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.bz2 +Source0: ftp://ftp.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.xz Source1: operating_system.rb # TODO: Try to push SystemTap support upstream. Source2: libruby.stp @@ -79,6 +81,8 @@ Source7: config.h Source8: rubygems.attr Source9: rubygems.req Source10: rubygems.prov +# SystemTap sanity test case. +Source11: test_systemtap.rb # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. @@ -94,11 +98,8 @@ Patch1: ruby-2.1.0-Enable-configuration-of-archlibdir.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. Patch2: ruby-2.1.0-always-use-i386.patch -# Fixes random WEBRick test failures. -# https://bugs.ruby-lang.org/issues/6573. -Patch3: ruby-1.9.3.p195-fix-webrick-tests.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. -# http://redmine.ruby-lang.org/issues/5617 +# http://bugs.ruby-lang.org/issues/5617 Patch4: ruby-2.1.0-custom-rubygems-location.patch # Make mkmf verbose by default Patch5: ruby-1.9.3-mkmf-verbose.patch @@ -106,12 +107,6 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch -# Test are broken due to SSLv3 disabled in Fedora. -# https://bugs.ruby-lang.org/issues/10046 -Patch7: ruby-2.2.0-Don-t-use-obsolete-SSLv3-for-tests.patch -# Disable sse2, already applied upstream -# https://bugzilla.redhat.com/show_bug.cgi?id=1101811 -Patch8: ruby-nosse2.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -123,7 +118,6 @@ Requires: rubygem(bigdecimal) >= %{bigdecimal_version} BuildRequires: autoconf BuildRequires: gdbm-devel -BuildRequires: libdb-devel BuildRequires: libffi-devel BuildRequires: openssl-devel BuildRequires: libyaml-devel @@ -175,6 +169,8 @@ Group: Development/Libraries License: Ruby or MIT Requires: ruby(release) Requires: rubygem(rdoc) >= %{rdoc_version} +# TODO: This seems to be optional now. +# https://github.com/rubygems/rubygems/commit/68da16dd7508c5c4010bfe32f99422568d3d582f Requires: rubygem(io-console) >= %{io_console_version} Requires: rubygem(psych) >= %{psych_version} Provides: gem = %{version}-%{release} @@ -334,6 +330,22 @@ minitest/pride shows pride in testing and adds coloring to your test output. +# The Summary/Description fields are rather poor. +# https://github.com/k-tsj/power_assert/issues/3 +%package -n rubygem-power_assert +Summary: Power Assert for Ruby +Version: %{power_assert_version} +Group: Development/Libraries +License: Ruby or BSD +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(power_assert) = %{version}-%{release} +BuildArch: noarch + +%description -n rubygem-power_assert +Power Assert for Ruby. + + %package -n rubygem-psych Summary: A libyaml wrapper for Ruby Version: %{psych_version} @@ -349,8 +361,25 @@ libyaml[http://pyyaml.org/wiki/LibYAML] for its YAML parsing and emitting capabilities. In addition to wrapping libyaml, Psych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format. -# TODO: -# %%pacakge -n rubygem-test-unit + +# The Summary/Description fields are rather poor. +# https://github.com/test-unit/test-unit/issues/73 +%package -n rubygem-test-unit +Summary: Improved version of Test::Unit bundled in Ruby 1.8.x +Version: %{test_unit_version} +Group: Development/Libraries +# lib/test/unit/diff.rb is a double license of the Ruby license and PSF license. +# lib/test-unit.rb is a dual license of the Ruby license and LGPLv2.1 or later. +License: (Ruby or BSD) and (Ruby or BSD or Python) and (Ruby or BSD or LGPLv2+) +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(test-unit) = %{version}-%{release} +BuildArch: noarch + +%description -n rubygem-test-unit +Ruby 1.9.x bundles minitest not Test::Unit. Test::Unit +bundled in Ruby 1.8.x had not been improved but unbundled +Test::Unit (test-unit) is improved actively. %package tcltk @@ -365,15 +394,16 @@ Tcl/Tk interface for the object-oriented scripting language Ruby. %prep %setup -q -n %{ruby_archive} +# Remove bundled libraries to be sure they are not used. +rm -rf ext/psych/yaml +rm -rf ext/fiddle/libffi* + %patch0 -p1 %patch1 -p1 %patch2 -p1 -%patch3 -p1 %patch4 -p1 %patch5 -p1 %patch6 -p1 -%patch7 -p1 -%patch8 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -407,6 +437,10 @@ autoconf --enable-multiarch \ --with-prelude=./abrt_prelude.rb \ +# Avoid regeneration of prelude.c due to patch6 applied to common.mk. +# https://bugs.ruby-lang.org/issues/10554 +touch prelude.c + # Q= makes the build output more verbose and allows to check Fedora # compiler options. make %{?_smp_mflags} COPY="cp -p" Q= @@ -432,12 +466,14 @@ for cert in \ Class3PublicPrimaryCertificationAuthority.pem \ DigiCertHighAssuranceEVRootCA.pem \ EntrustnetSecureServerCertificationAuthority.pem \ - GeoTrustGlobalCA.pem + GeoTrustGlobalCA.pem \ + AddTrustExternalCARoot.pem \ + AddTrustExternalCARoot-2048.pem do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert done -# Move macros file insto proper place and replace the %%{name} macro, since it +# Move macros file into proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d install -m 644 %{SOURCE4} %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby @@ -496,22 +532,14 @@ mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_dir}/gems/json-%{json_vers mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/ mv %{buildroot}%{gem_dir}/specifications/default/json-%{json_version}.gemspec %{buildroot}%{gem_dir}/specifications -mkdir -p %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib -mv %{buildroot}%{ruby_libdir}/minitest %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/minitest-%{minitest_version}.gemspec %{buildroot}%{gem_dir}/specifications - mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version} mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/ mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications -# The links should replace directory, which RPM cannot handle and it is causing -# issues during upgrade from F18 to F19. As a workaround the links are placed -# into vendor direcories. This could be changed back as soon as F18 is EOLed. -# https://bugzilla.redhat.com/show_bug.cgi?id=988490 -ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_vendorlibdir}/psych -ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_vendorlibdir}/psych.rb -ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby_vendorarchdir}/psych.so +ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_libdir}/psych +ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_libdir}/psych.rb +ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby_libarchdir}/psych.so # Adjust the gemspec files so that the gems will load properly sed -i '/^end$/ i\ @@ -532,9 +560,6 @@ sed -i '/^end$/ i\ s.require_paths = ["lib"]\ s.extensions = ["json/ext/parser.so", "json/ext/generator.so"]' %{buildroot}%{gem_dir}/specifications/json-%{json_version}.gemspec -sed -i '/^end$/ i\ - s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec - # Install a tapset and fix up the path to the library. mkdir -p %{buildroot}%{tapset_dir} sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{ruby_version}|" \ @@ -543,31 +568,16 @@ sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{ruby_version}|" \ sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp %check -DISABLE_TESTS="" +# Sanity check that SystemTap (dtrace) was detected. +make runruby TESTRUN_SCRIPT=%{SOURCE11} -%ifarch armv7l armv7hl armv7hnl -# test_call_double(DL::TestDL) fails on ARM HardFP -# http://bugs.ruby-lang.org/issues/6592 -DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" -%endif +DISABLE_TESTS="" # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing # the test suite). touch abrt.rb -# TestSignal#test_hup_me hangs up the test suite. -# http://bugs.ruby-lang.org/issues/8997 -sed -i '/def test_hup_me/,/end if Process.respond_to/ s/^/#/' test/ruby/test_signal.rb - -# Fix "Could not find 'minitest'" error. -# http://bugs.ruby-lang.org/issues/9259 -sed -i "/^ gem 'minitest', '~> 4.0'/ s/^/#/" lib/rubygems/test_case.rb - -# Segmentation fault. -# https://bugs.ruby-lang.org/issues/9198 -sed -i '/^ def test_machine_stackoverflow/,/^ end/ s/^/#/' test/ruby/test_exception.rb - # Don't test wrap ciphers to prevent "OpenSSL::Cipher::CipherError: wrap mode # not allowed" error. # https://bugs.ruby-lang.org/issues/10229 @@ -576,6 +586,7 @@ sed -i '/assert(OpenSSL::Cipher::Cipher.new(name).is_a?(OpenSSL::Cipher::Cipher) # Test is broken due to SSLv3 disabled in Fedora. # https://bugs.ruby-lang.org/issues/10046 +sed -i '/def test_ctx_client_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb sed -i '/def test_ctx_server_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb make check TESTS="-v $DISABLE_TESTS" @@ -585,13 +596,13 @@ make check TESTS="-v $DISABLE_TESTS" %postun libs -p /sbin/ldconfig %files +%doc BSDL %doc COPYING %lang(ja) %doc COPYING.ja %doc GPL %doc LEGAL %{_bindir}/erb %{_bindir}/%{name}%{?with_rubypick:-mri} -%{_bindir}/testrb %{_mandir}/man1/erb* %{_mandir}/man1/ruby* @@ -599,7 +610,9 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{_libdir}/libruby-static.a %files devel -%doc COPYING* +%doc BSDL +%doc COPYING +%lang(ja) %doc COPYING.ja %doc GPL %doc LEGAL %doc README.EXT @@ -616,8 +629,8 @@ make check TESTS="-v $DISABLE_TESTS" %lang(ja) %doc COPYING.ja %doc GPL %doc LEGAL -%doc README -%lang(ja) %doc README.ja +%doc README.md +%lang(ja) %doc README.ja.md %doc NEWS %doc doc/NEWS-* # Exclude /usr/local directory since it is supposed to be managed by @@ -635,10 +648,9 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{ruby_libdir}/irb.rb %exclude %{ruby_libdir}/tcltk.rb %exclude %{ruby_libdir}/tk*.rb +%exclude %{ruby_libdir}/psych.rb %{ruby_libdir}/cgi -%{ruby_libdir}/date %{ruby_libdir}/digest -%{ruby_libdir}/dl %{ruby_libdir}/drb %{ruby_libdir}/fiddle %exclude %{ruby_libdir}/irb @@ -654,9 +666,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/rss %{ruby_libdir}/shell %{ruby_libdir}/syslog -%{ruby_libdir}/test %exclude %{ruby_libdir}/tk %exclude %{ruby_libdir}/tkextlib +%{ruby_libdir}/unicode_normalize %{ruby_libdir}/uri %{ruby_libdir}/webrick %{ruby_libdir}/xmlrpc @@ -676,9 +688,6 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/digest/rmd160.so %{ruby_libarchdir}/digest/sha1.so %{ruby_libarchdir}/digest/sha2.so -%dir %{ruby_libarchdir}/dl -%{ruby_libarchdir}/dl.so -%{ruby_libarchdir}/dl/callback.so %dir %{ruby_libarchdir}/enc %{ruby_libarchdir}/enc/big5.so %{ruby_libarchdir}/enc/cp949.so @@ -768,37 +777,24 @@ make check TESTS="-v $DISABLE_TESTS" %{tapset_root} -# TODO rubygems 2.0.0 does not create test-unit gemspec -# TODO for now put this in ruby-libs rpm -# TODO check if the following can be removed after -# TODO test-unit rebuild -%dir %{gem_dir} -%dir %{gem_dir}/specifications -%dir %{gem_dir}/specifications/default -%{gem_dir}/specifications/default/test-unit-*.gemspec - %files -n rubygems %{_bindir}/gem %{rubygems_dir} -%{gem_dir} -%exclude %{gem_dir}/gems/* -%{_exec_prefix}/lib*/gems -%exclude %{_exec_prefix}/lib*/gems/%{name}/bigdecimal-%{bigdecimal_version} -%exclude %{_exec_prefix}/lib*/gems/%{name}/io-console-%{io_console_version} -%exclude %{_exec_prefix}/lib*/gems/%{name}/json-%{json_version} -%exclude %{_exec_prefix}/lib*/gems/%{name}/psych-%{psych_version} -%exclude %{gem_dir}/gems/rake-%{rake_version} -%exclude %{gem_dir}/gems/rdoc-%{rdoc_version} -%exclude %{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec -%exclude %{gem_dir}/specifications/io-console-%{io_console_version}.gemspec -%exclude %{gem_dir}/specifications/json-%{json_version}.gemspec -%exclude %{gem_dir}/specifications/minitest-%{minitest_version}.gemspec -%exclude %{gem_dir}/specifications/rake-%{rake_version}.gemspec -%exclude %{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec -%exclude %{gem_dir}/specifications/psych-%{psych_version}.gemspec -# TODO rubygems 2.0.0 does not create test-unit gemspec -# TODO where to put test-unit-*.gemspec?? -%exclude %{gem_dir}/specifications/default/test-unit-*.gemspec + +# Explicitly include only RubyGems directory strucure to avoid accidentally +# packaged content. +%dir %{gem_dir} +%dir %{gem_dir}/build_info +%dir %{gem_dir}/cache +%dir %{gem_dir}/doc +%dir %{gem_dir}/extensions +%dir %{gem_dir}/gems +%dir %{gem_dir}/specifications +%dir %{gem_dir}/specifications/default +%dir %{_exec_prefix}/lib*/gems +%dir %{_exec_prefix}/lib*/gems/ruby + +%exclude %{gem_dir}/cache/* %files -n rubygems-devel %{_rpmconfigdir}/macros.d/macros.rubygems @@ -826,8 +822,8 @@ make check TESTS="-v $DISABLE_TESTS" %{_mandir}/man1/ri* %files doc -%doc README -%lang(ja) %doc README.ja +%doc README.md +%lang(ja) %doc README.ja.md %doc ChangeLog %doc doc/ChangeLog-* %doc ruby-exercise.stp @@ -854,16 +850,26 @@ make check TESTS="-v $DISABLE_TESTS" %files -n rubygem-minitest %{gem_dir}/gems/minitest-%{minitest_version} +%exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* %{gem_dir}/specifications/minitest-%{minitest_version}.gemspec +%files -n rubygem-power_assert +%{gem_dir}/gems/power_assert-%{power_assert_version} +%exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* +%{gem_dir}/specifications/power_assert-%{power_assert_version}.gemspec + %files -n rubygem-psych -%{ruby_vendorlibdir}/psych -%{ruby_vendorlibdir}/psych.rb -%{ruby_vendorarchdir}/psych.so +%{ruby_libdir}/psych +%{ruby_libdir}/psych.rb +%{ruby_libarchdir}/psych.so %{_libdir}/gems/%{name}/psych-%{psych_version} %{gem_dir}/gems/psych-%{psych_version} %{gem_dir}/specifications/psych-%{psych_version}.gemspec +%files -n rubygem-test-unit +%{gem_dir}/gems/test-unit-%{test_unit_version} +%{gem_dir}/specifications/test-unit-%{test_unit_version}.gemspec + %files tcltk %{ruby_libdir}/*-tk.rb %{ruby_libdir}/tcltk.rb @@ -874,6 +880,12 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Jan 02 2015 Vít Ondruch - 2.2.0-1 +- Upgrade to Ruby 2.2.0. +- Explicitly list RubyGems directories to avoid accidentaly packaged content. +- Split test-unit and power_assert gems into separate sub-packages. +- Drop libdb dependency in favor of gdbm. + * Fri Dec 26 2014 Orion Poplwski - 2.1.5-26 - Disbable sse2 on i668 (bug #1101811) diff --git a/sources b/sources index 2f388ee..3d0ea17 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -a7c3e5fec47eff23091b566e9e1dac1b ruby-2.1.5.tar.bz2 +54b43c6c6c9dd4c4b08ceb03ad0ded7a ruby-2.2.0.tar.xz diff --git a/test_systemtap.rb b/test_systemtap.rb new file mode 100644 index 0000000..aa8df4e --- /dev/null +++ b/test_systemtap.rb @@ -0,0 +1,9 @@ +require 'rbconfig' + +if RbConfig::CONFIG.select {|k, v| v =~ /dtrace/}.size == 1 + exit true +else + puts 'ERROR: SystemTap (dtrace) support was not detected.' + + exit false +end From 11e59a1355e68bf6dfeeb347ab33a42f1de384ef Mon Sep 17 00:00:00 2001 From: Mamoru TASAKA Date: Thu, 15 Jan 2015 20:27:34 +0900 Subject: [PATCH 178/530] Bump release to avoid EVR issue on rubygem-test-unit --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index cfe4cc6..d27d0d4 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 1 +%global release 3 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -880,6 +880,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Thu Jan 15 2015 Mamoru TASAKA - 2.2.0-3 +- Bump release to avoid EVR issue on rubygem-test-unit + * Fri Jan 02 2015 Vít Ondruch - 2.2.0-1 - Upgrade to Ruby 2.2.0. - Explicitly list RubyGems directories to avoid accidentaly packaged content. From 8dd648e75408479f6af1bb1c4c22919d45031ca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 29 Jan 2015 09:11:51 +0100 Subject: [PATCH 179/530] Add missing rubygem-test-unit dependency on rubygem-power_assert. --- .gitignore | 1 + ruby.spec | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9c1eabd..8df0b48 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /ruby-2.*.tar.bz2 +/ruby-2.2.0.tar.xz diff --git a/ruby.spec b/ruby.spec index d27d0d4..2783914 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 3 +%global release 4 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -373,6 +373,7 @@ Group: Development/Libraries License: (Ruby or BSD) and (Ruby or BSD or Python) and (Ruby or BSD or LGPLv2+) Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} +Requires: rubygem(power_assert) Provides: rubygem(test-unit) = %{version}-%{release} BuildArch: noarch @@ -880,6 +881,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Thu Jan 29 2015 Vít Ondruch - 2.2.0-4 +- Add missing rubygem-test-unit dependency on rubygem-power_assert. + * Thu Jan 15 2015 Mamoru TASAKA - 2.2.0-3 - Bump release to avoid EVR issue on rubygem-test-unit From c5abc51c7c15c610d415d76cc765682c4a14d415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 29 Jan 2015 09:12:45 +0100 Subject: [PATCH 180/530] Remove useless nosse2 patch. --- ruby-nosse2.patch | 41 ----------------------------------------- 1 file changed, 41 deletions(-) delete mode 100644 ruby-nosse2.patch diff --git a/ruby-nosse2.patch b/ruby-nosse2.patch deleted file mode 100644 index 9df25dd..0000000 --- a/ruby-nosse2.patch +++ /dev/null @@ -1,41 +0,0 @@ -diff -up ruby-2.1.5/configure.in.nosse2 ruby-2.1.5/configure.in ---- ruby-2.1.5/configure.in.nosse2 2014-12-26 16:31:57.696889054 -0700 -+++ ruby-2.1.5/configure.in 2014-12-26 16:32:25.187718930 -0700 -@@ -860,22 +860,6 @@ if test "$GCC" = yes; then - for oflag in -fno-fast-math; do - RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(optflags, $oflag)]) - done -- AS_CASE(["$target"], -- [*-darwin*], [ -- # doesn't seem necessary on Mac OS X -- ], -- [[i[4-6]86*|i386*mingw*]], [ -- RUBY_TRY_CFLAGS(-msse2 -mfpmath=sse, [ -- RUBY_APPEND_OPTION(XCFLAGS, -msse2 -mfpmath=sse) -- ]) -- AS_CASE(["$XCFLAGS"], -- [[*-msse2*]], [ -- RUBY_TRY_CFLAGS(-mstackrealign, [ -- RUBY_APPEND_OPTION(XCFLAGS, -mstackrealign) -- ]) -- ]) -- ] -- ) - fi - - AC_ARG_WITH(opt-dir, -diff -up ruby-2.1.5/test/ruby/test_sprintf.rb.nosse2 ruby-2.1.5/test/ruby/test_sprintf.rb ---- ruby-2.1.5/test/ruby/test_sprintf.rb.nosse2 2014-09-03 09:25:51.000000000 -0600 -+++ ruby-2.1.5/test/ruby/test_sprintf.rb 2014-12-26 16:31:57.699889035 -0700 -@@ -194,8 +194,9 @@ class TestSprintf < Test::Unit::TestCase - sprintf("%20.0f", 36893488147419107329.0)) - assert_equal(" Inf", sprintf("% 0e", 1.0/0.0), "moved from btest/knownbug") - assert_equal(" -0.", sprintf("%#10.0f", -0.5), "[ruby-dev:42552]") -- assert_equal("0x1p+2", sprintf('%.0a', Float('0x1.fp+1')), "[ruby-dev:42551]") -- assert_equal("-0x1.0p+2", sprintf('%.1a', Float('-0x1.ffp+1')), "[ruby-dev:42551]") -+ # out of spec -+ #assert_equal("0x1p+2", sprintf('%.0a', Float('0x1.fp+1')), "[ruby-dev:42551]") -+ #assert_equal("-0x1.0p+2", sprintf('%.1a', Float('-0x1.ffp+1')), "[ruby-dev:42551]") - end - - def test_float_hex From 76bbf0976dbb90eb22dc6590cee81462844d4e24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 3 Feb 2015 10:30:45 +0100 Subject: [PATCH 181/530] ConfigMap was deprecated in favor or RbConfig. https://github.com/rubygems/rubygems/commit/1d2feefde46c774947b4e6e677852b2abd4bc2a9 --- operating_system.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/operating_system.rb b/operating_system.rb index 079564f..3a21b0b 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -27,8 +27,8 @@ module Gem def default_locations @default_locations ||= { - :system => previous_but_one_dir_to(ConfigMap[:vendordir], ConfigMap[:RUBY_INSTALL_NAME]), - :local => previous_but_one_dir_to(ConfigMap[:sitedir], ConfigMap[:RUBY_INSTALL_NAME]) + :system => previous_but_one_dir_to(RbConfig::CONFIG['vendordir'], RbConfig::CONFIG['RUBY_INSTALL_NAME']), + :local => previous_but_one_dir_to(RbConfig::CONFIG['sitedir'], RbConfig::CONFIG['RUBY_INSTALL_NAME']) } end @@ -39,15 +39,15 @@ module Gem def default_dirs @libdir ||= case RUBY_PLATFORM when 'java' - ConfigMap[:datadir] + RbConfig::CONFIG['datadir'] else - ConfigMap[:libdir] + RbConfig::CONFIG['libdir'] end @default_dirs ||= Hash[default_locations.collect do |destination, path| [destination, { - :bin_dir => File.join(path, ConfigMap[:bindir].split(File::SEPARATOR).last), - :gem_dir => File.join(path, ConfigMap[:datadir].split(File::SEPARATOR).last, 'gems'), + :bin_dir => File.join(path, RbConfig::CONFIG['bindir'].split(File::SEPARATOR).last), + :gem_dir => File.join(path, RbConfig::CONFIG['datadir'].split(File::SEPARATOR).last, 'gems'), :ext_dir => File.join(path, @libdir.split(File::SEPARATOR).last, 'gems') }] end] From 329ba54c7ec5c5332f861d582fa6534db98c16d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 3 Feb 2015 13:33:29 +0100 Subject: [PATCH 182/530] Make operating_system.rb more robust. This avoids issues with incomplete rbconfig.rb such as: https://bugs.ruby-lang.org/issues/10822 --- operating_system.rb | 24 +++++++++++++++++------- ruby.spec | 5 ++++- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/operating_system.rb b/operating_system.rb index 3a21b0b..29f223e 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -6,6 +6,8 @@ module Gem # E.g. for '/usr/share/ruby', 'ruby', it returns '/usr' def previous_but_one_dir_to(path, dir) + return unless path + split_path = path.split(File::SEPARATOR) File.join(split_path.take_while { |one_dir| one_dir !~ /^#{dir}$/ }[0..-2]) end @@ -44,13 +46,21 @@ module Gem RbConfig::CONFIG['libdir'] end - @default_dirs ||= Hash[default_locations.collect do |destination, path| - [destination, { - :bin_dir => File.join(path, RbConfig::CONFIG['bindir'].split(File::SEPARATOR).last), - :gem_dir => File.join(path, RbConfig::CONFIG['datadir'].split(File::SEPARATOR).last, 'gems'), - :ext_dir => File.join(path, @libdir.split(File::SEPARATOR).last, 'gems') - }] - end] + @default_dirs ||= Hash.new do |hash, key| + hash[key] = if path = default_locations[key] + { + :bin_dir => File.join(path, RbConfig::CONFIG['bindir'].split(File::SEPARATOR).last), + :gem_dir => File.join(path, RbConfig::CONFIG['datadir'].split(File::SEPARATOR).last, 'gems'), + :ext_dir => File.join(path, @libdir.split(File::SEPARATOR).last, 'gems') + } + else + { + :bin_dir => '', + :gem_dir => '', + :ext_dir => '' + } + end + end end ## diff --git a/ruby.spec b/ruby.spec index 2783914..371d645 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 4 +%global release 5 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -881,6 +881,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Feb 03 2015 Vít Ondruch - 2.2.0-5 +- Make operating_system.rb more robust. + * Thu Jan 29 2015 Vít Ondruch - 2.2.0-4 - Add missing rubygem-test-unit dependency on rubygem-power_assert. From c8dee5c194a8804aa4c46ecb420531c8fbee6c57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 3 Feb 2015 16:19:49 +0100 Subject: [PATCH 183/530] Add RubyGems stub headers for bundled gems. --- ruby.spec | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ruby.spec b/ruby.spec index 371d645..726c45e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -561,6 +561,16 @@ sed -i '/^end$/ i\ s.require_paths = ["lib"]\ s.extensions = ["json/ext/parser.so", "json/ext/generator.so"]' %{buildroot}%{gem_dir}/specifications/json-%{json_version}.gemspec +# Push the .gemspecs through the RubyGems to let them write the stub headers. +# This speeds up loading of libraries and avoids warnings in Spring: +# https://github.com/rubygems/rubygems/pull/694 +for s in rake-%{rake_version}.gemspec rdoc-%{rdoc_version}.gemspec json-%{json_version}.gemspec; do + s="%{buildroot}%{gem_dir}/specifications/$s" + make runruby TESTRUN_SCRIPT="-rubygems \ + -e \"spec = Gem::Specification.load(%{$s})\" \ + -e \"File.write %{$s}, spec.to_ruby\"" +done + # Install a tapset and fix up the path to the library. mkdir -p %{buildroot}%{tapset_dir} sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{ruby_version}|" \ @@ -883,6 +893,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Tue Feb 03 2015 Vít Ondruch - 2.2.0-5 - Make operating_system.rb more robust. +- Add RubyGems stub headers for bundled gems. * Thu Jan 29 2015 Vít Ondruch - 2.2.0-4 - Add missing rubygem-test-unit dependency on rubygem-power_assert. From 351bd6cd021ebc786a163ec0812b86da5fc9d0a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 4 Feb 2015 13:53:46 +0100 Subject: [PATCH 184/530] Initialize all load paths in operating_system.rb --- operating_system.rb | 8 ++++++-- ruby.spec | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/operating_system.rb b/operating_system.rb index 29f223e..ed653fd 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -46,8 +46,10 @@ module Gem RbConfig::CONFIG['libdir'] end - @default_dirs ||= Hash.new do |hash, key| - hash[key] = if path = default_locations[key] + @default_dirs ||= default_locations.inject(Hash.new) do |hash, location| + destination, path = location + + hash[destination] = if path { :bin_dir => File.join(path, RbConfig::CONFIG['bindir'].split(File::SEPARATOR).last), :gem_dir => File.join(path, RbConfig::CONFIG['datadir'].split(File::SEPARATOR).last, 'gems'), @@ -60,6 +62,8 @@ module Gem :ext_dir => '' } end + + hash end end diff --git a/ruby.spec b/ruby.spec index 726c45e..cbe32ba 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 5 +%global release 6 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -891,6 +891,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Wed Feb 04 2015 Vít Ondruch - 2.2.0-6 +- Initialize all load paths in operating_system.rb. + * Tue Feb 03 2015 Vít Ondruch - 2.2.0-5 - Make operating_system.rb more robust. - Add RubyGems stub headers for bundled gems. From 46f541b5e60d86a3a9a1063b2f4c984ad7150b03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 5 Feb 2015 17:25:22 +0100 Subject: [PATCH 185/530] Fix directory ownership. --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index cbe32ba..b4e2505 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 6 +%global release 7 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -772,6 +772,7 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/pty.so %dir %{ruby_libarchdir}/racc %{ruby_libarchdir}/racc/cparse.so +%dir %{ruby_libarchdir}/rbconfig %{ruby_libarchdir}/rbconfig.rb %{ruby_libarchdir}/rbconfig/sizeof.so %{ruby_libarchdir}/readline.so @@ -891,6 +892,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Thu Feb 05 2015 Vít Ondruch - 2.2.0-7 +- Fix directory ownership. + * Wed Feb 04 2015 Vít Ondruch - 2.2.0-6 - Initialize all load paths in operating_system.rb. From 203ef6c1f774050e04c4ed53d9898838676e5c7d Mon Sep 17 00:00:00 2001 From: Till Maas Date: Sat, 21 Feb 2015 22:25:31 +0100 Subject: [PATCH 186/530] Rebuilt for Fedora 23 Change https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index b4e2505..067c837 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 7 +%global release 8 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -892,6 +892,10 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Sat Feb 21 2015 Till Maas - 2.2.0-8 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + * Thu Feb 05 2015 Vít Ondruch - 2.2.0-7 - Fix directory ownership. From 1af12992cf306213c7369fe0f4a170343a4cff61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 4 Mar 2015 11:49:19 +0100 Subject: [PATCH 187/530] Update to Ruby 2.2.1. --- .gitignore | 1 + ruby.spec | 7 +++++-- sources | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 8df0b48..c9945dc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /ruby-2.*.tar.bz2 /ruby-2.2.0.tar.xz +/ruby-2.2.1.tar.xz diff --git a/ruby.spec b/ruby.spec index 067c837..fe486ad 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 2 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 8 +%global release 9 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -892,6 +892,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Wed Mar 04 2015 Vít Ondruch - 2.2.1-9 +- Update to Ruby 2.2.1. + * Sat Feb 21 2015 Till Maas - 2.2.0-8 - Rebuilt for Fedora 23 Change https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code diff --git a/sources b/sources index 3d0ea17..c9ad145 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -54b43c6c6c9dd4c4b08ceb03ad0ded7a ruby-2.2.0.tar.xz +f7570579539faaa734c02e2857370298 ruby-2.2.1.tar.xz From 3db4917d37188faa60532d9ab447732d849670ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 4 Mar 2015 15:31:35 +0100 Subject: [PATCH 188/530] Enable some tests fixe in upstream. --- ruby.spec | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ruby.spec b/ruby.spec index fe486ad..df82cbb 100644 --- a/ruby.spec +++ b/ruby.spec @@ -589,12 +589,6 @@ DISABLE_TESTS="" # the test suite). touch abrt.rb -# Don't test wrap ciphers to prevent "OpenSSL::Cipher::CipherError: wrap mode -# not allowed" error. -# https://bugs.ruby-lang.org/issues/10229 -sed -i '/assert(OpenSSL::Cipher::Cipher.new(name).is_a?(OpenSSL::Cipher::Cipher))/i \ - next if /wrap/ =~ name' test/openssl/test_cipher.rb - # Test is broken due to SSLv3 disabled in Fedora. # https://bugs.ruby-lang.org/issues/10046 sed -i '/def test_ctx_client_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb From 4a07d55953ab91ee25d434c5c9f3deea5df27e43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 9 Mar 2015 17:21:07 +0100 Subject: [PATCH 189/530] License clarifications. --- ruby.spec | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index df82cbb..73caacc 100644 --- a/ruby.spec +++ b/ruby.spec @@ -61,8 +61,11 @@ Name: ruby Version: %{ruby_version} Release: %{release_string} Group: Development/Languages -# Public Domain for example for: include/ruby/st.h, strftime.c, ... -License: (Ruby or BSD) and Public Domain +# Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... +# MIT and CCO: ccan/* +# zlib: ext/digest/md5/md5.*, ext/nkf/nkf-utf8/nkf.c +# UCD: some of enc/trans/**/*.src +License: (Ruby or BSD) and Public Domain and MIT and CC0 and zlib and UCD URL: http://ruby-lang.org/ Source0: ftp://ftp.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.xz Source1: operating_system.rb @@ -228,7 +231,8 @@ from the terminal. Summary: A tool to generate HTML and command-line documentation for Ruby projects Version: %{rdoc_version} Group: Development/Libraries -License: GPLv2 and Ruby and MIT +# SIL: lib/rdoc/generator/template/darkfish/css/fonts.css +License: GPLv2 and Ruby and MIT and SIL Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Requires: ruby(irb) = %{irb_version} @@ -293,7 +297,8 @@ provide higher layer features, such like curses and readline. Summary: This is a JSON implementation as a Ruby extension in C Version: %{json_version} Group: Development/Libraries -License: Ruby or GPLv2 +# UCD: ext/json/generator/generator.c +License: (Ruby or GPLv2) and UCD Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(json) = %{version}-%{release} From 4612226c7e342ee5c10f1f9350272be330146a92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 11 Mar 2015 13:00:26 +0100 Subject: [PATCH 190/530] Clarify Rake's license. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 73caacc..dbda926 100644 --- a/ruby.spec +++ b/ruby.spec @@ -201,7 +201,7 @@ Macros and development tools for packaging RubyGems. Summary: Ruby based make-like utility Version: %{rake_version} Group: Development/Libraries -License: Ruby or MIT +License: MIT Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rake = %{version}-%{release} From b92051c2fd208a671d6c40d932c8410c940ef8b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 23 Mar 2015 11:01:10 +0100 Subject: [PATCH 191/530] Fix libruby.so versions in SystemTap scripts (rhbz#1202232). --- ruby.spec | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index dbda926..15ccae3 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 9 +%global release 10 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -578,10 +578,10 @@ done # Install a tapset and fix up the path to the library. mkdir -p %{buildroot}%{tapset_dir} -sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{ruby_version}|" \ - %{SOURCE2} > %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp +sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{major_minor_version}|" \ + %{SOURCE2} > %{buildroot}%{tapset_dir}/libruby.so.%{major_minor_version}.stp # Escape '*/' in comment. -sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp +sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{major_minor_version}.stp %check # Sanity check that SystemTap (dtrace) was detected. @@ -891,6 +891,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Mar 20 2015 Vít Ondruch - 2.2.1-10 +- Fix libruby.so versions in SystemTap scripts (rhbz#1202232). + * Wed Mar 04 2015 Vít Ondruch - 2.2.1-9 - Update to Ruby 2.2.1. From a0a4c7571b944e7f0277eefdd0cc9c48e0a92c6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 24 Mar 2015 08:42:35 +0100 Subject: [PATCH 192/530] Workaround issues with TestIO#test_seek. --- ruby.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.spec b/ruby.spec index 15ccae3..d2765d9 100644 --- a/ruby.spec +++ b/ruby.spec @@ -599,6 +599,10 @@ touch abrt.rb sed -i '/def test_ctx_client_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb sed -i '/def test_ctx_server_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb +# can_seek_data does not work correctly in chroot for Kernel 3.19+. +# https://bugs.ruby-lang.org/issues/10998 +sed -i '/break unless can_seek_data(f)/ s/^/#/' test/ruby/test_io.rb + make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig From b9da2e689a47e432a4272b43c849a9a818965bbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 24 Mar 2015 14:26:56 +0100 Subject: [PATCH 193/530] Apply upstream fix to TestIO#test_seek tests. --- ruby-2.2.1-use-statfs.patch | 158 ++++++++++++++++++++++++++++++++++++ ruby.spec | 8 +- 2 files changed, 162 insertions(+), 4 deletions(-) create mode 100644 ruby-2.2.1-use-statfs.patch diff --git a/ruby-2.2.1-use-statfs.patch b/ruby-2.2.1-use-statfs.patch new file mode 100644 index 0000000..842eb0e --- /dev/null +++ b/ruby-2.2.1-use-statfs.patch @@ -0,0 +1,158 @@ +From acae106c7c8feab92a52982976b147f1100207a5 Mon Sep 17 00:00:00 2001 +From: nobu +Date: Tue, 24 Mar 2015 08:30:15 +0000 +Subject: [PATCH] fs.c: use statfs/statvfs + +* ext/-test-/file/fs.c (get_fsname): return filesystem name by + statfs/statvfs. [ruby-core:68624] [Bug #10998] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + ChangeLog | 5 +++ + ext/-test-/file/extconf.rb | 14 ++++++++ + ext/-test-/file/fs.c | 85 +++++++++++++++++++++++++--------------------- + 3 files changed, 66 insertions(+), 38 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index a2f2f97..d7e11af 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++Tue Mar 24 17:30:12 2015 Nobuyoshi Nakada ++ ++ * ext/-test-/file/fs.c (get_fsname): return filesystem name by ++ statfs/statvfs. [ruby-core:68624] [Bug #10998] ++ + Thu Feb 26 15:48:41 2015 NAKAMURA Usaku + + * ext/win32/Win32API.rb (initialize): accept both a string and an array +diff --git a/ext/-test-/file/extconf.rb b/ext/-test-/file/extconf.rb +index 4e134dd..be4a2fb 100644 +--- a/ext/-test-/file/extconf.rb ++++ b/ext/-test-/file/extconf.rb +@@ -1,4 +1,18 @@ + $INCFLAGS << " -I$(topdir) -I$(top_srcdir)" ++ ++headers = %w[sys/param.h sys/mount.h sys/vfs.h].select {|h| have_header(h)} ++if have_type("struct statfs", headers) ++ have_struct_member("struct statfs", "f_fstypename", headers) ++ have_struct_member("struct statfs", "f_type", headers) ++end ++ ++headers = %w[sys/statvfs.h] ++if have_type("struct statvfs", headers) ++ have_struct_member("struct statvfs", "f_fstypename", headers) ++ have_struct_member("struct statvfs", "f_basetype", headers) ++ have_struct_member("struct statvfs", "f_type", headers) ++end ++ + $srcs = Dir[File.join($srcdir, "*.{#{SRC_EXT.join(%q{,})}}")] + inits = $srcs.map {|s| File.basename(s, ".*")} + inits.delete("init") +diff --git a/ext/-test-/file/fs.c b/ext/-test-/file/fs.c +index 4a41bf3..94d96d3 100644 +--- a/ext/-test-/file/fs.c ++++ b/ext/-test-/file/fs.c +@@ -1,55 +1,64 @@ + #include "ruby/ruby.h" + #include "ruby/io.h" + +-#ifdef __linux__ +-# define HAVE_GETMNTENT ++#ifdef HAVE_SYS_MOUNT_H ++#include ++#endif ++#ifdef HAVE_SYS_VFS_H ++#include + #endif + +-#ifdef HAVE_GETMNTENT +-# include +-# include ++#if defined HAVE_STRUCT_STATFS_F_FSTYPENAME ++typedef struct statfs statfs_t; ++# define STATFS(f, s) statfs((f), (s)) ++# define HAVE_STRUCT_STATFS_T_F_FSTYPENAME 1 ++#elif defined(HAVE_STRUCT_STATVFS_F_FSTYPENAME) /* NetBSD */ ++typedef struct statvfs statfs_t; ++# define STATFS(f, s) statvfs((f), (s)) ++# define HAVE_STRUCT_STATFS_T_F_FSTYPENAME 1 ++#elif defined(HAVE_STRUCT_STATVFS_F_BASETYPE) /* AIX, HP-UX, Solaris */ ++typedef struct statvfs statfs_t; ++# define STATFS(f, s) statvfs((f), (s)) ++# define HAVE_STRUCT_STATFS_T_F_FSTYPENAME 1 ++# define f_fstypename f_basetype ++#elif defined HAVE_STRUCT_STATFS_F_TYPE ++typedef struct statfs statfs_t; ++# define STATFS(f, s) statfs((f), (s)) ++#elif defined HAVE_STRUCT_STATVFS_F_TYPE ++typedef struct statvfs statfs_t; ++# define STATFS(f, s) statvfs((f), (s)) + #endif + + VALUE + get_fsname(VALUE self, VALUE str) + { +-#ifdef HAVE_GETMNTENT +- const char *path; +- struct mntent mntbuf; +- static const int buflen = 4096; +- char *buf = alloca(buflen); +- int len = 0; +- FILE *fp; +-#define FSNAME_LEN 100 +- char name[FSNAME_LEN] = ""; ++#ifdef STATFS ++ statfs_t st; ++# define CSTR(s) rb_str_new_cstr(s) + + FilePathValue(str); +- path = RSTRING_PTR(str); +- fp = setmntent("/etc/mtab", "r"); +- if (!fp) rb_sys_fail("setmntent(/etb/mtab)");; +- +- while (getmntent_r(fp, &mntbuf, buf, buflen)) { +- int i; +- char *mnt_dir = mntbuf.mnt_dir; +- for (i=0; mnt_dir[i]; i++) { +- if (mnt_dir[i] != path[i]) { +- goto next_entry; +- } +- } +- if (i >= len) { +- len = i; +- strlcpy(name, mntbuf.mnt_type, FSNAME_LEN); +- } +-next_entry: +- ; ++ str = rb_str_encode_ospath(str); ++ if (STATFS(StringValueCStr(str), &st) == -1) { ++ rb_sys_fail_str(str); ++ } ++# ifdef HAVE_STRUCT_STATFS_T_F_FSTYPENAME ++ if (st.f_fstypename[0]) ++ return CSTR(st.f_fstypename); ++# endif ++ switch (st.f_type) { ++ case 0x9123683E: /* BTRFS_SUPER_MAGIC */ ++ return CSTR("btrfs"); ++ case 0x7461636f: /* OCFS2_SUPER_MAGIC */ ++ return CSTR("ocfs"); ++ case 0xEF53: /* EXT2_SUPER_MAGIC EXT3_SUPER_MAGIC EXT4_SUPER_MAGIC */ ++ return CSTR("ext4"); ++ case 0x58465342: /* XFS_SUPER_MAGIC */ ++ return CSTR("xfs"); ++ case 0x01021994: /* TMPFS_MAGIC */ ++ return CSTR("tmpfs"); + } +- endmntent(fp); +- +- if (!len) rb_sys_fail("no matching entry");; +- return rb_str_new_cstr(name); +-#else +- return Qnil; + #endif ++ return Qnil; + } + + void diff --git a/ruby.spec b/ruby.spec index d2765d9..b72f53d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -110,6 +110,9 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +# can_seek_data does not work correctly in chroot for Kernel 3.19+. +# https://bugs.ruby-lang.org/issues/10998 +Patch7: ruby-2.2.1-use-statfs.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -410,6 +413,7 @@ rm -rf ext/fiddle/libffi* %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -599,10 +603,6 @@ touch abrt.rb sed -i '/def test_ctx_client_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb sed -i '/def test_ctx_server_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb -# can_seek_data does not work correctly in chroot for Kernel 3.19+. -# https://bugs.ruby-lang.org/issues/10998 -sed -i '/break unless can_seek_data(f)/ s/^/#/' test/ruby/test_io.rb - make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig From 05eb8b6a78d323e98f80dfd0c06bf80d03d9a2b1 Mon Sep 17 00:00:00 2001 From: Josef Stribny Date: Tue, 14 Apr 2015 09:51:46 +0200 Subject: [PATCH 194/530] Update to Ruby 2.2.2 --- .gitignore | 1 + ruby-2.2.1-use-statfs.patch | 25 ++++--------------------- ruby.spec | 7 +++++-- sources | 2 +- 4 files changed, 11 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index c9945dc..4b77c7b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /ruby-2.*.tar.bz2 /ruby-2.2.0.tar.xz /ruby-2.2.1.tar.xz +/ruby-2.2.2.tar.xz diff --git a/ruby-2.2.1-use-statfs.patch b/ruby-2.2.1-use-statfs.patch index 842eb0e..168e5d7 100644 --- a/ruby-2.2.1-use-statfs.patch +++ b/ruby-2.2.1-use-statfs.patch @@ -1,31 +1,14 @@ -From acae106c7c8feab92a52982976b147f1100207a5 Mon Sep 17 00:00:00 2001 -From: nobu -Date: Tue, 24 Mar 2015 08:30:15 +0000 -Subject: [PATCH] fs.c: use statfs/statvfs - -* ext/-test-/file/fs.c (get_fsname): return filesystem name by - statfs/statvfs. [ruby-core:68624] [Bug #10998] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - ChangeLog | 5 +++ - ext/-test-/file/extconf.rb | 14 ++++++++ - ext/-test-/file/fs.c | 85 +++++++++++++++++++++++++--------------------- - 3 files changed, 66 insertions(+), 38 deletions(-) - diff --git a/ChangeLog b/ChangeLog -index a2f2f97..d7e11af 100644 +index 909c092..9f09144 100644 --- a/ChangeLog +++ b/ChangeLog -@@ -1,3 +1,8 @@ +@@ -70,1 +70,6 @@ +Tue Mar 24 17:30:12 2015 Nobuyoshi Nakada + -+ * ext/-test-/file/fs.c (get_fsname): return filesystem name by -+ statfs/statvfs. [ruby-core:68624] [Bug #10998] ++ * ext/-test-/file/fs.c (get_fsname): return filesystem name by ++ statfs/statvfs. [ruby-core:68624] [Bug #10998] + Thu Feb 26 15:48:41 2015 NAKAMURA Usaku - - * ext/win32/Win32API.rb (initialize): accept both a string and an array diff --git a/ext/-test-/file/extconf.rb b/ext/-test-/file/extconf.rb index 4e134dd..be4a2fb 100644 --- a/ext/-test-/file/extconf.rb diff --git a/ruby.spec b/ruby.spec index b72f53d..275b7e8 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 2 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 10 +%global release 1 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -895,6 +895,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Apr 14 2015 Josef Stribny - 2.2.2-1 +- Update to Ruby 2.2.2 + * Fri Mar 20 2015 Vít Ondruch - 2.2.1-10 - Fix libruby.so versions in SystemTap scripts (rhbz#1202232). diff --git a/sources b/sources index c9ad145..d24389c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -f7570579539faaa734c02e2857370298 ruby-2.2.1.tar.xz +dbce9b9d79d90f213ba8d448b0b6ed86 ruby-2.2.2.tar.xz From 55367be78b062b35180fbe48a3ac4d6dd50a1072 Mon Sep 17 00:00:00 2001 From: Josef Stribny Date: Tue, 14 Apr 2015 12:13:39 +0200 Subject: [PATCH 195/530] Bump release because of gems --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 275b7e8..ca60bb3 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 1 +%global release 11 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -895,6 +895,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Apr 14 2015 Josef Stribny - 2.2.2-11 +- Bump release because of gems + * Tue Apr 14 2015 Josef Stribny - 2.2.2-1 - Update to Ruby 2.2.2 From e3316c21a0b7d9fd645b7660b820783bf53f274e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 4 May 2015 17:06:56 +0200 Subject: [PATCH 196/530] Fix upgrade path. rubygem-io-console's version was recently bumped in F21 due to update of Ruby to version 2.1.6 and it makes the higher release to win. --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index ca60bb3..9aa5831 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 11 +%global release 40 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -895,6 +895,10 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon May 04 2015 Vít Ondruch - 2.2.2-40 +- Fix upgrade path (rubygem-io-console's version was recently bumped in F21 + and makes the higher release to win). + * Tue Apr 14 2015 Josef Stribny - 2.2.2-11 - Bump release because of gems From 4e3eb750378a8b6316c7766a1bb13649ffcd832c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 11 May 2015 12:18:15 +0200 Subject: [PATCH 197/530] Tcl/Tk switch is not needed anymore. --- ruby.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 9aa5831..ffca221 100644 --- a/ruby.spec +++ b/ruby.spec @@ -440,7 +440,6 @@ autoconf --with-vendorarchhdrdir='$(vendorhdrdir)/$(arch)' \ --with-rubygemsdir='%{rubygems_dir}' \ --with-ruby-pc='%{name}.pc' \ - --with-tcltkversion=8.6 \ --disable-rpath \ --enable-shared \ --with-ruby-version='' \ From 3e4eba90703d793dc761c42aea9a324feffa299e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 10 Jun 2015 15:20:27 +0200 Subject: [PATCH 198/530] Fix the git BR following the git package split. --- ruby.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index ffca221..9dfc587 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 40 +%global release 41 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -133,7 +133,7 @@ BuildRequires: tk-devel BuildRequires: procps BuildRequires: %{_bindir}/dtrace # RubyGems test suite optional dependencies. -BuildRequires: %{_bindir}/git +BuildRequires: git BuildRequires: %{_bindir}/cmake # This package provides %%{_bindir}/ruby-mri therefore it is marked by this @@ -894,6 +894,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Wed Jun 10 2015 Vít Ondruch - 2.2.2-41 +- Fix the git BR following the git package split. + * Mon May 04 2015 Vít Ondruch - 2.2.2-40 - Fix upgrade path (rubygem-io-console's version was recently bumped in F21 and makes the higher release to win). From 3131d89fdee1030a9ca4d125e9c56cc56db48ba3 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Thu, 18 Jun 2015 22:37:48 +0000 Subject: [PATCH 199/530] - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 9dfc587..68921e9 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 41 +%global release 42 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -894,6 +894,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Thu Jun 18 2015 Fedora Release Engineering - 2.2.2-42 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + * Wed Jun 10 2015 Vít Ondruch - 2.2.2-41 - Fix the git BR following the git package split. From d954989b453e9a1e33d931a0074fa805c1f7dea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 23 Jun 2015 13:08:50 +0200 Subject: [PATCH 200/530] Fix for "dh key too small" error of OpenSSL 1.0.2+. --- ..._remote_fetcher.rb-get-rid-of-errors.patch | 30 +++++++++++++++++++ ruby.spec | 10 ++++++- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 ruby-2.3.0-test_gem_remote_fetcher.rb-get-rid-of-errors.patch diff --git a/ruby-2.3.0-test_gem_remote_fetcher.rb-get-rid-of-errors.patch b/ruby-2.3.0-test_gem_remote_fetcher.rb-get-rid-of-errors.patch new file mode 100644 index 0000000..0427b05 --- /dev/null +++ b/ruby-2.3.0-test_gem_remote_fetcher.rb-get-rid-of-errors.patch @@ -0,0 +1,30 @@ +From 6398515adfc86813686605019a3e22d49cd95517 Mon Sep 17 00:00:00 2001 +From: nobu +Date: Fri, 19 Jun 2015 06:04:00 +0000 +Subject: [PATCH] test_gem_remote_fetcher.rb: get rid of errors + +* test/rubygems/test_gem_remote_fetcher.rb (start_ssl_server): + temporary measure for "dh key too small" error of OpenSSL + 1.0.2c+. + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50972 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + test/rubygems/test_gem_remote_fetcher.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb +index 6b29e18..63dd8fe 100644 +--- a/test/rubygems/test_gem_remote_fetcher.rb ++++ b/test/rubygems/test_gem_remote_fetcher.rb +@@ -898,7 +898,7 @@ gems: + server.mount_proc("/insecure_redirect") { |req, res| + res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to']) + } +- server.ssl_context.tmp_dh_callback = proc { OpenSSL::PKey::DH.new 128 } ++ server.ssl_context.tmp_dh_callback = proc {|_, _, k| OpenSSL::PKey::DH.new(k) } + t = Thread.new do + begin + server.start +-- +2.4.3 + diff --git a/ruby.spec b/ruby.spec index 68921e9..00cc467 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 42 +%global release 43 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -113,6 +113,10 @@ Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch # can_seek_data does not work correctly in chroot for Kernel 3.19+. # https://bugs.ruby-lang.org/issues/10998 Patch7: ruby-2.2.1-use-statfs.patch +# Fix "dh key too small" error of OpenSSL 1.0.2c+. +# https://github.com/rubygems/rubygems/issues/1289 +# https://github.com/ruby/ruby/commit/6398515adfc86813686605019a3e22d49cd95517 +Patch8: ruby-2.3.0-test_gem_remote_fetcher.rb-get-rid-of-errors.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -414,6 +418,7 @@ rm -rf ext/fiddle/libffi* %patch5 -p1 %patch6 -p1 %patch7 -p1 +%patch8 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -894,6 +899,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Jun 23 2015 Vít Ondruch - 2.2.2-43 +- Fix for "dh key too small" error of OpenSSL 1.0.2+. + * Thu Jun 18 2015 Fedora Release Engineering - 2.2.2-42 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild From 693a96cb402ee7c698cd1bffa50d54e8660bf920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 23 Jul 2015 14:09:03 +0200 Subject: [PATCH 201/530] Fix test broken by disabled SSLv3 in OpenSSL. --- ...3-in-test-as-it-is-insecure-and-may-.patch | 25 +++++++++++++++++++ ...-when-testing-SSL-session-cache-call.patch | 23 +++++++++++++++++ ...2.3.0-fix-test-ctx-client-session-cb.patch | 13 ++++++++++ ruby.spec | 13 ++++++---- 4 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 ruby-2.3.0-Don-t-force-SSLv3-in-test-as-it-is-insecure-and-may-.patch create mode 100644 ruby-2.3.0-Use-OP_NO_TICKET-when-testing-SSL-session-cache-call.patch create mode 100644 ruby-2.3.0-fix-test-ctx-client-session-cb.patch diff --git a/ruby-2.3.0-Don-t-force-SSLv3-in-test-as-it-is-insecure-and-may-.patch b/ruby-2.3.0-Don-t-force-SSLv3-in-test-as-it-is-insecure-and-may-.patch new file mode 100644 index 0000000..efd947f --- /dev/null +++ b/ruby-2.3.0-Don-t-force-SSLv3-in-test-as-it-is-insecure-and-may-.patch @@ -0,0 +1,25 @@ +From b9fa5fc9a14e6c889c9a0fa9c9386b2018f2314c Mon Sep 17 00:00:00 2001 +From: Jeremy Evans +Date: Fri, 17 Jul 2015 11:25:09 -0600 +Subject: [PATCH 4/8] Don't force SSLv3 in test, as it is insecure and may not + be supported + +LibreSSL disables SSLv3 by default, and there's no reason this code +should require SSLv3. + +diff --git test/openssl/test_ssl_session.rb test/openssl/test_ssl_session.rb +index 0c384c7..d4713d9 100644 +--- test/openssl/test_ssl_session.rb ++++ test/openssl/test_ssl_session.rb +@@ -355,7 +355,7 @@ __EOS__ + 3.times do + sock = TCPSocket.new("127.0.0.1", port) + begin +- ssl = OpenSSL::SSL::SSLSocket.new(sock, OpenSSL::SSL::SSLContext.new("SSLv3")) ++ ssl = OpenSSL::SSL::SSLSocket.new(sock, OpenSSL::SSL::SSLContext.new) + ssl.sync_close = true + ssl.session = last_client_session if last_client_session + ssl.connect +-- +2.4.5 + diff --git a/ruby-2.3.0-Use-OP_NO_TICKET-when-testing-SSL-session-cache-call.patch b/ruby-2.3.0-Use-OP_NO_TICKET-when-testing-SSL-session-cache-call.patch new file mode 100644 index 0000000..d5e90ae --- /dev/null +++ b/ruby-2.3.0-Use-OP_NO_TICKET-when-testing-SSL-session-cache-call.patch @@ -0,0 +1,23 @@ +From fb08c34eee2c883a01ab0dda2a2e34a290516a2a Mon Sep 17 00:00:00 2001 +From: Jeremy Evans +Date: Fri, 17 Jul 2015 11:31:45 -0600 +Subject: [PATCH 5/8] Use OP_NO_TICKET when testing SSL session cache callbacks + +This fixes the test when using LibreSSL and possibly some +configurations of OpenSSL. + +diff --git test/openssl/test_ssl_session.rb test/openssl/test_ssl_session.rb +index d4713d9..58fa20b 100644 +--- test/openssl/test_ssl_session.rb ++++ test/openssl/test_ssl_session.rb +@@ -316,6 +316,7 @@ __EOS__ + + ctx_proc = Proc.new { |ctx, ssl| + ctx.session_cache_mode = OpenSSL::SSL::SSLContext::SESSION_CACHE_SERVER ++ ctx.options = OpenSSL::SSL::OP_NO_TICKET + last_server_session = nil + + # get_cb is called whenever a client proposed to resume a session but +-- +2.4.5 + diff --git a/ruby-2.3.0-fix-test-ctx-client-session-cb.patch b/ruby-2.3.0-fix-test-ctx-client-session-cb.patch new file mode 100644 index 0000000..0757a52 --- /dev/null +++ b/ruby-2.3.0-fix-test-ctx-client-session-cb.patch @@ -0,0 +1,13 @@ +Index: test/openssl/test_ssl_session.rb +=================================================================== +--- test/openssl/test_ssl_session.rb (revision 49098) ++++ test/openssl/test_ssl_session.rb (revision 49099) +@@ -278,7 +278,7 @@ + + def test_ctx_client_session_cb + called = {} +- ctx = OpenSSL::SSL::SSLContext.new("SSLv3") ++ ctx = OpenSSL::SSL::SSLContext.new + ctx.session_cache_mode = OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT + + ctx.session_new_cb = lambda { |ary| diff --git a/ruby.spec b/ruby.spec index 00cc467..2dec272 100644 --- a/ruby.spec +++ b/ruby.spec @@ -117,6 +117,11 @@ Patch7: ruby-2.2.1-use-statfs.patch # https://github.com/rubygems/rubygems/issues/1289 # https://github.com/ruby/ruby/commit/6398515adfc86813686605019a3e22d49cd95517 Patch8: ruby-2.3.0-test_gem_remote_fetcher.rb-get-rid-of-errors.patch +# Don't use SSLv3 for tests. +# https://bugs.ruby-lang.org/issues/10046 +Patch9: ruby-2.3.0-fix-test-ctx-client-session-cb.patch +Patch10: ruby-2.3.0-Don-t-force-SSLv3-in-test-as-it-is-insecure-and-may-.patch +Patch11: ruby-2.3.0-Use-OP_NO_TICKET-when-testing-SSL-session-cache-call.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -419,6 +424,9 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch7 -p1 %patch8 -p1 +%patch9 +%patch10 +%patch11 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -602,11 +610,6 @@ DISABLE_TESTS="" # the test suite). touch abrt.rb -# Test is broken due to SSLv3 disabled in Fedora. -# https://bugs.ruby-lang.org/issues/10046 -sed -i '/def test_ctx_client_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb -sed -i '/def test_ctx_server_session_cb$/,/^ end$/ s/^/#/' test/openssl/test_ssl_session.rb - make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig From b945bce4cbb1015cfbf8b2ea51e48e452ecf674e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 1 Sep 2015 14:24:51 +0200 Subject: [PATCH 202/530] Update to Ruby 2.2.3. --- .gitignore | 1 + ruby-1.9.3-mkmf-verbose.patch | 2 +- ...-additional-preludes-by-configuratio.patch | 4 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 6 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 +- ruby-2.2.1-use-statfs.patch | 141 ------------------ ..._remote_fetcher.rb-get-rid-of-errors.patch | 30 ---- ruby.spec | 16 +- sources | 2 +- 11 files changed, 17 insertions(+), 193 deletions(-) delete mode 100644 ruby-2.2.1-use-statfs.patch delete mode 100644 ruby-2.3.0-test_gem_remote_fetcher.rb-get-rid-of-errors.patch diff --git a/.gitignore b/.gitignore index 4b77c7b..db108f0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /ruby-2.2.0.tar.xz /ruby-2.2.1.tar.xz /ruby-2.2.2.tar.xz +/ruby-2.2.3.tar.xz diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index 13148ce..0f2a742 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,7 +11,7 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1858,7 +1858,7 @@ SRC +@@ -1859,7 +1859,7 @@ SRC SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index b30ad4f..6eb6122 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -26,7 +26,7 @@ diff --git a/common.mk b/common.mk index 5cfbc3d..3f0a82e 100644 --- a/common.mk +++ b/common.mk -@@ -115,7 +115,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) +@@ -117,7 +117,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) DEFAULT_PRELUDES = $(GEM_PRELUDE) @@ -39,7 +39,7 @@ diff --git a/configure.in b/configure.in index 0e371e2..d4f1dcb 100644 --- a/configure.in +++ b/configure.in -@@ -4160,6 +4160,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -4169,6 +4169,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 6863f07..b54f8e0 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 37d9a62..553d4d0 100644 --- a/configure.in +++ b/configure.in -@@ -3379,6 +3379,11 @@ if test ${multiarch+set}; then +@@ -3385,6 +3385,11 @@ if test ${multiarch+set}; then fi archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 570d4d7..b401158 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.in b/configure.in index 17ed3ed..5843651 100644 --- a/configure.in +++ b/configure.in -@@ -3966,8 +3966,6 @@ AS_CASE(["$target_os"], +@@ -3975,8 +3975,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -23,7 +23,7 @@ index 17ed3ed..5843651 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, -@@ -3997,6 +3995,7 @@ AC_ARG_WITH(ruby-version, +@@ -4006,6 +4004,7 @@ AC_ARG_WITH(ruby-version, [ruby_version=full]) unset RUBY_LIB_VERSION unset RUBY_LIB_VERSION_STYLE @@ -31,7 +31,7 @@ index 17ed3ed..5843651 100644 AS_CASE(["$ruby_version"], [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) -@@ -4013,30 +4012,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then +@@ -4022,30 +4021,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" eval $ruby_version elif test -z "${ruby_version}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 210adb1..f8e61f5 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 553d4d0..03a4152 100644 --- a/configure.in +++ b/configure.in -@@ -4078,6 +4078,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4087,6 +4087,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 41de23f..c21c858 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index 03a4152..0e371e2 100644 --- a/configure.in +++ b/configure.in -@@ -4052,6 +4052,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4061,6 +4061,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 03a4152..0e371e2 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4075,6 +4079,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4084,6 +4088,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.2.1-use-statfs.patch b/ruby-2.2.1-use-statfs.patch deleted file mode 100644 index 168e5d7..0000000 --- a/ruby-2.2.1-use-statfs.patch +++ /dev/null @@ -1,141 +0,0 @@ -diff --git a/ChangeLog b/ChangeLog -index 909c092..9f09144 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -70,1 +70,6 @@ -+Tue Mar 24 17:30:12 2015 Nobuyoshi Nakada -+ -+ * ext/-test-/file/fs.c (get_fsname): return filesystem name by -+ statfs/statvfs. [ruby-core:68624] [Bug #10998] -+ - Thu Feb 26 15:48:41 2015 NAKAMURA Usaku -diff --git a/ext/-test-/file/extconf.rb b/ext/-test-/file/extconf.rb -index 4e134dd..be4a2fb 100644 ---- a/ext/-test-/file/extconf.rb -+++ b/ext/-test-/file/extconf.rb -@@ -1,4 +1,18 @@ - $INCFLAGS << " -I$(topdir) -I$(top_srcdir)" -+ -+headers = %w[sys/param.h sys/mount.h sys/vfs.h].select {|h| have_header(h)} -+if have_type("struct statfs", headers) -+ have_struct_member("struct statfs", "f_fstypename", headers) -+ have_struct_member("struct statfs", "f_type", headers) -+end -+ -+headers = %w[sys/statvfs.h] -+if have_type("struct statvfs", headers) -+ have_struct_member("struct statvfs", "f_fstypename", headers) -+ have_struct_member("struct statvfs", "f_basetype", headers) -+ have_struct_member("struct statvfs", "f_type", headers) -+end -+ - $srcs = Dir[File.join($srcdir, "*.{#{SRC_EXT.join(%q{,})}}")] - inits = $srcs.map {|s| File.basename(s, ".*")} - inits.delete("init") -diff --git a/ext/-test-/file/fs.c b/ext/-test-/file/fs.c -index 4a41bf3..94d96d3 100644 ---- a/ext/-test-/file/fs.c -+++ b/ext/-test-/file/fs.c -@@ -1,55 +1,64 @@ - #include "ruby/ruby.h" - #include "ruby/io.h" - --#ifdef __linux__ --# define HAVE_GETMNTENT -+#ifdef HAVE_SYS_MOUNT_H -+#include -+#endif -+#ifdef HAVE_SYS_VFS_H -+#include - #endif - --#ifdef HAVE_GETMNTENT --# include --# include -+#if defined HAVE_STRUCT_STATFS_F_FSTYPENAME -+typedef struct statfs statfs_t; -+# define STATFS(f, s) statfs((f), (s)) -+# define HAVE_STRUCT_STATFS_T_F_FSTYPENAME 1 -+#elif defined(HAVE_STRUCT_STATVFS_F_FSTYPENAME) /* NetBSD */ -+typedef struct statvfs statfs_t; -+# define STATFS(f, s) statvfs((f), (s)) -+# define HAVE_STRUCT_STATFS_T_F_FSTYPENAME 1 -+#elif defined(HAVE_STRUCT_STATVFS_F_BASETYPE) /* AIX, HP-UX, Solaris */ -+typedef struct statvfs statfs_t; -+# define STATFS(f, s) statvfs((f), (s)) -+# define HAVE_STRUCT_STATFS_T_F_FSTYPENAME 1 -+# define f_fstypename f_basetype -+#elif defined HAVE_STRUCT_STATFS_F_TYPE -+typedef struct statfs statfs_t; -+# define STATFS(f, s) statfs((f), (s)) -+#elif defined HAVE_STRUCT_STATVFS_F_TYPE -+typedef struct statvfs statfs_t; -+# define STATFS(f, s) statvfs((f), (s)) - #endif - - VALUE - get_fsname(VALUE self, VALUE str) - { --#ifdef HAVE_GETMNTENT -- const char *path; -- struct mntent mntbuf; -- static const int buflen = 4096; -- char *buf = alloca(buflen); -- int len = 0; -- FILE *fp; --#define FSNAME_LEN 100 -- char name[FSNAME_LEN] = ""; -+#ifdef STATFS -+ statfs_t st; -+# define CSTR(s) rb_str_new_cstr(s) - - FilePathValue(str); -- path = RSTRING_PTR(str); -- fp = setmntent("/etc/mtab", "r"); -- if (!fp) rb_sys_fail("setmntent(/etb/mtab)");; -- -- while (getmntent_r(fp, &mntbuf, buf, buflen)) { -- int i; -- char *mnt_dir = mntbuf.mnt_dir; -- for (i=0; mnt_dir[i]; i++) { -- if (mnt_dir[i] != path[i]) { -- goto next_entry; -- } -- } -- if (i >= len) { -- len = i; -- strlcpy(name, mntbuf.mnt_type, FSNAME_LEN); -- } --next_entry: -- ; -+ str = rb_str_encode_ospath(str); -+ if (STATFS(StringValueCStr(str), &st) == -1) { -+ rb_sys_fail_str(str); -+ } -+# ifdef HAVE_STRUCT_STATFS_T_F_FSTYPENAME -+ if (st.f_fstypename[0]) -+ return CSTR(st.f_fstypename); -+# endif -+ switch (st.f_type) { -+ case 0x9123683E: /* BTRFS_SUPER_MAGIC */ -+ return CSTR("btrfs"); -+ case 0x7461636f: /* OCFS2_SUPER_MAGIC */ -+ return CSTR("ocfs"); -+ case 0xEF53: /* EXT2_SUPER_MAGIC EXT3_SUPER_MAGIC EXT4_SUPER_MAGIC */ -+ return CSTR("ext4"); -+ case 0x58465342: /* XFS_SUPER_MAGIC */ -+ return CSTR("xfs"); -+ case 0x01021994: /* TMPFS_MAGIC */ -+ return CSTR("tmpfs"); - } -- endmntent(fp); -- -- if (!len) rb_sys_fail("no matching entry");; -- return rb_str_new_cstr(name); --#else -- return Qnil; - #endif -+ return Qnil; - } - - void diff --git a/ruby-2.3.0-test_gem_remote_fetcher.rb-get-rid-of-errors.patch b/ruby-2.3.0-test_gem_remote_fetcher.rb-get-rid-of-errors.patch deleted file mode 100644 index 0427b05..0000000 --- a/ruby-2.3.0-test_gem_remote_fetcher.rb-get-rid-of-errors.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 6398515adfc86813686605019a3e22d49cd95517 Mon Sep 17 00:00:00 2001 -From: nobu -Date: Fri, 19 Jun 2015 06:04:00 +0000 -Subject: [PATCH] test_gem_remote_fetcher.rb: get rid of errors - -* test/rubygems/test_gem_remote_fetcher.rb (start_ssl_server): - temporary measure for "dh key too small" error of OpenSSL - 1.0.2c+. - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50972 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - test/rubygems/test_gem_remote_fetcher.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb -index 6b29e18..63dd8fe 100644 ---- a/test/rubygems/test_gem_remote_fetcher.rb -+++ b/test/rubygems/test_gem_remote_fetcher.rb -@@ -898,7 +898,7 @@ gems: - server.mount_proc("/insecure_redirect") { |req, res| - res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to']) - } -- server.ssl_context.tmp_dh_callback = proc { OpenSSL::PKey::DH.new 128 } -+ server.ssl_context.tmp_dh_callback = proc {|_, _, k| OpenSSL::PKey::DH.new(k) } - t = Thread.new do - begin - server.start --- -2.4.3 - diff --git a/ruby.spec b/ruby.spec index 2dec272..4b2be96 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 2 -%global teeny_version 2 +%global teeny_version 3 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 43 +%global release 44 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5 @@ -110,13 +110,6 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch -# can_seek_data does not work correctly in chroot for Kernel 3.19+. -# https://bugs.ruby-lang.org/issues/10998 -Patch7: ruby-2.2.1-use-statfs.patch -# Fix "dh key too small" error of OpenSSL 1.0.2c+. -# https://github.com/rubygems/rubygems/issues/1289 -# https://github.com/ruby/ruby/commit/6398515adfc86813686605019a3e22d49cd95517 -Patch8: ruby-2.3.0-test_gem_remote_fetcher.rb-get-rid-of-errors.patch # Don't use SSLv3 for tests. # https://bugs.ruby-lang.org/issues/10046 Patch9: ruby-2.3.0-fix-test-ctx-client-session-cb.patch @@ -422,8 +415,6 @@ rm -rf ext/fiddle/libffi* %patch4 -p1 %patch5 -p1 %patch6 -p1 -%patch7 -p1 -%patch8 -p1 %patch9 %patch10 %patch11 @@ -902,6 +893,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Sep 01 2015 Vít Ondruch - 2.2.3-44 +- Update to Ruby 2.2.3. + * Tue Jun 23 2015 Vít Ondruch - 2.2.2-43 - Fix for "dh key too small" error of OpenSSL 1.0.2+. diff --git a/sources b/sources index d24389c..dbae8f0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -dbce9b9d79d90f213ba8d448b0b6ed86 ruby-2.2.2.tar.xz +2a8bc1f46aba8938add70f742e8af1ff ruby-2.2.3.tar.xz From 8e1e241814f2920089ec6850ddafa368af49f013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 2 Sep 2015 15:47:20 +0200 Subject: [PATCH 203/530] Fix RubyGems version. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 4b2be96..5d21789 100644 --- a/ruby.spec +++ b/ruby.spec @@ -24,7 +24,7 @@ %global release 44 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -%global rubygems_version 2.4.5 +%global rubygems_version 2.4.5.1 # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. From bd75b0a7fe5f050c28474b829827f4e8d9da1e45 Mon Sep 17 00:00:00 2001 From: Michal Toman Date: Fri, 4 Sep 2015 14:23:36 +0200 Subject: [PATCH 204/530] Add support for MIPS architecture to config.h --- config.h | 8 ++++++++ ruby.spec | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/config.h b/config.h index b34e398..39e4a5c 100644 --- a/config.h +++ b/config.h @@ -44,6 +44,14 @@ #include "ruby/config-sparc.h" #elif defined(__aarch64__) #include "ruby/config-aarch64.h" +#elif defined(__mips64) && defined(__MIPSEL__) +#include "ruby/config-mips64el.h" +#elif defined(__mips64) +#include "ruby/config-mips64.h" +#elif defined(__mips) && defined(__MIPSEL__) +#include "ruby/config-mipsel.h" +#elif defined(__mips) +#include "ruby/config-mips.h" #else #error "The ruby-devel package is not usable with the architecture." #endif diff --git a/ruby.spec b/ruby.spec index 5d21789..4eeaac3 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 44 +%global release 45 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5.1 @@ -893,6 +893,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Sep 04 2015 Michal Toman - 2.2.3-45 +- Add support for MIPS architecture to config.h + * Tue Sep 01 2015 Vít Ondruch - 2.2.3-44 - Update to Ruby 2.2.3. From c0513dfb8c81a228619c6142195c5117aa0d1228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 10 Dec 2015 15:30:53 +0100 Subject: [PATCH 205/530] Fix ABRT hook autoloading. --- ...2.3-Generate-preludes-using-miniruby.patch | 28 +++++++++++++++++++ ruby.spec | 13 +++++---- 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 ruby-2.2.3-Generate-preludes-using-miniruby.patch diff --git a/ruby-2.2.3-Generate-preludes-using-miniruby.patch b/ruby-2.2.3-Generate-preludes-using-miniruby.patch new file mode 100644 index 0000000..81b7c5b --- /dev/null +++ b/ruby-2.2.3-Generate-preludes-using-miniruby.patch @@ -0,0 +1,28 @@ +From 9fedac991e717f0103d092275ac301e58c5cf010 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 2 Dec 2014 10:56:58 +0100 +Subject: [PATCH] Generate preludes using miniruby. + +--- + common.mk | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/common.mk b/common.mk +index 76f1621..b0f6e28 100644 +--- a/common.mk ++++ b/common.mk +@@ -782,9 +782,9 @@ $(PRELUDE_C): $(COMPILE_PRELUDE) \ + $(PRELUDE_C): $(COMPILE_PRELUDE) \ + {$(srcdir)}lib/rubygems/defaults.rb \ + {$(srcdir)}lib/rubygems/core_ext/kernel_gem.rb \ +- $(PRELUDE_SCRIPTS) $(LIB_SRCS) ++ $(PRELUDE_SCRIPTS) $(PREP) $(LIB_SRCS) + $(ECHO) generating $@ +- $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \ ++ $(Q) $(MINIRUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \ + $(srcdir)/template/prelude.c.tmpl $(PRELUDE_SCRIPTS) + + {$(VPATH)}golf_prelude.c: $(COMPILE_PRELUDE) {$(srcdir)}golf_prelude.rb +-- +2.1.0 + diff --git a/ruby.spec b/ruby.spec index 4eeaac3..6eabb43 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 45 +%global release 46 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5.1 @@ -110,6 +110,9 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # in support for ABRT. # http://bugs.ruby-lang.org/issues/8566 Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +# Use miniruby to regenerate prelude.c. +# https://bugs.ruby-lang.org/issues/10554 +Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch # Don't use SSLv3 for tests. # https://bugs.ruby-lang.org/issues/10046 Patch9: ruby-2.3.0-fix-test-ctx-client-session-cb.patch @@ -415,6 +418,7 @@ rm -rf ext/fiddle/libffi* %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 %patch9 %patch10 %patch11 @@ -450,10 +454,6 @@ autoconf --enable-multiarch \ --with-prelude=./abrt_prelude.rb \ -# Avoid regeneration of prelude.c due to patch6 applied to common.mk. -# https://bugs.ruby-lang.org/issues/10554 -touch prelude.c - # Q= makes the build output more verbose and allows to check Fedora # compiler options. make %{?_smp_mflags} COPY="cp -p" Q= @@ -893,6 +893,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Thu Dec 10 2015 Vít Ondruch - 2.2.3-46 +- Fix ABRT hook autoloading. + * Fri Sep 04 2015 Michal Toman - 2.2.3-45 - Add support for MIPS architecture to config.h From e4e06c7ce8495db764ae6aec9a5407c0f524fda8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 11 Dec 2015 10:56:00 +0100 Subject: [PATCH 206/530] Ensure that abrt hook is used. --- ruby.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ruby.spec b/ruby.spec index 6eabb43..697cd47 100644 --- a/ruby.spec +++ b/ruby.spec @@ -594,6 +594,9 @@ sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{m # Sanity check that SystemTap (dtrace) was detected. make runruby TESTRUN_SCRIPT=%{SOURCE11} +# Check if abrt hook is required. +LD_LIBRARY_PATH=. RUBYOPT=-I.:lib:.ext/x86_64-linux/ ./ruby -d -e '' |& grep abrt + DISABLE_TESTS="" # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, From b3ffc2fef657bfea6c48fd6cc78a0658be946428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Sun, 13 Dec 2015 19:36:58 +0100 Subject: [PATCH 207/530] Move the ABRT hook test into separate file. --- ruby.spec | 18 ++++++++++-------- test_abrt.rb | 7 +++++++ 2 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 test_abrt.rb diff --git a/ruby.spec b/ruby.spec index 697cd47..7c561a8 100644 --- a/ruby.spec +++ b/ruby.spec @@ -86,6 +86,8 @@ Source9: rubygems.req Source10: rubygems.prov # SystemTap sanity test case. Source11: test_systemtap.rb +# ABRT hoook test case. +Source12: test_abrt.rb # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. @@ -591,19 +593,19 @@ sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{major_minor_version}|" \ sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{major_minor_version}.stp %check -# Sanity check that SystemTap (dtrace) was detected. -make runruby TESTRUN_SCRIPT=%{SOURCE11} - -# Check if abrt hook is required. -LD_LIBRARY_PATH=. RUBYOPT=-I.:lib:.ext/x86_64-linux/ ./ruby -d -e '' |& grep abrt - -DISABLE_TESTS="" - # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing # the test suite). touch abrt.rb +# Sanity check that SystemTap (dtrace) was detected. +make runruby TESTRUN_SCRIPT=%{SOURCE11} + +# Check if abrt hook is required. +make runruby TESTRUN_SCRIPT=%{SOURCE12} + +DISABLE_TESTS="" + make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig diff --git a/test_abrt.rb b/test_abrt.rb new file mode 100644 index 0000000..6d110ba --- /dev/null +++ b/test_abrt.rb @@ -0,0 +1,7 @@ +if !!$LOADED_FEATURES.detect { |f| f =~ /abrt\.rb/ } + exit true +else + puts 'ERROR: ABRT hook was not loaded.' + + exit false +end From e46753608115f8c1c3b4174ae46f29ac16dd2340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 21 Dec 2015 13:07:52 +0100 Subject: [PATCH 208/530] Update to Ruby 2.2.4. --- .gitignore | 1 + ...3-in-test-as-it-is-insecure-and-may-.patch | 25 ------------------- ...-when-testing-SSL-session-cache-call.patch | 23 ----------------- ...2.3.0-fix-test-ctx-client-session-cb.patch | 13 ---------- ruby.spec | 15 ++++------- sources | 2 +- 6 files changed, 7 insertions(+), 72 deletions(-) delete mode 100644 ruby-2.3.0-Don-t-force-SSLv3-in-test-as-it-is-insecure-and-may-.patch delete mode 100644 ruby-2.3.0-Use-OP_NO_TICKET-when-testing-SSL-session-cache-call.patch delete mode 100644 ruby-2.3.0-fix-test-ctx-client-session-cb.patch diff --git a/.gitignore b/.gitignore index db108f0..81f7fc1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /ruby-2.2.1.tar.xz /ruby-2.2.2.tar.xz /ruby-2.2.3.tar.xz +/ruby-2.2.4.tar.xz diff --git a/ruby-2.3.0-Don-t-force-SSLv3-in-test-as-it-is-insecure-and-may-.patch b/ruby-2.3.0-Don-t-force-SSLv3-in-test-as-it-is-insecure-and-may-.patch deleted file mode 100644 index efd947f..0000000 --- a/ruby-2.3.0-Don-t-force-SSLv3-in-test-as-it-is-insecure-and-may-.patch +++ /dev/null @@ -1,25 +0,0 @@ -From b9fa5fc9a14e6c889c9a0fa9c9386b2018f2314c Mon Sep 17 00:00:00 2001 -From: Jeremy Evans -Date: Fri, 17 Jul 2015 11:25:09 -0600 -Subject: [PATCH 4/8] Don't force SSLv3 in test, as it is insecure and may not - be supported - -LibreSSL disables SSLv3 by default, and there's no reason this code -should require SSLv3. - -diff --git test/openssl/test_ssl_session.rb test/openssl/test_ssl_session.rb -index 0c384c7..d4713d9 100644 ---- test/openssl/test_ssl_session.rb -+++ test/openssl/test_ssl_session.rb -@@ -355,7 +355,7 @@ __EOS__ - 3.times do - sock = TCPSocket.new("127.0.0.1", port) - begin -- ssl = OpenSSL::SSL::SSLSocket.new(sock, OpenSSL::SSL::SSLContext.new("SSLv3")) -+ ssl = OpenSSL::SSL::SSLSocket.new(sock, OpenSSL::SSL::SSLContext.new) - ssl.sync_close = true - ssl.session = last_client_session if last_client_session - ssl.connect --- -2.4.5 - diff --git a/ruby-2.3.0-Use-OP_NO_TICKET-when-testing-SSL-session-cache-call.patch b/ruby-2.3.0-Use-OP_NO_TICKET-when-testing-SSL-session-cache-call.patch deleted file mode 100644 index d5e90ae..0000000 --- a/ruby-2.3.0-Use-OP_NO_TICKET-when-testing-SSL-session-cache-call.patch +++ /dev/null @@ -1,23 +0,0 @@ -From fb08c34eee2c883a01ab0dda2a2e34a290516a2a Mon Sep 17 00:00:00 2001 -From: Jeremy Evans -Date: Fri, 17 Jul 2015 11:31:45 -0600 -Subject: [PATCH 5/8] Use OP_NO_TICKET when testing SSL session cache callbacks - -This fixes the test when using LibreSSL and possibly some -configurations of OpenSSL. - -diff --git test/openssl/test_ssl_session.rb test/openssl/test_ssl_session.rb -index d4713d9..58fa20b 100644 ---- test/openssl/test_ssl_session.rb -+++ test/openssl/test_ssl_session.rb -@@ -316,6 +316,7 @@ __EOS__ - - ctx_proc = Proc.new { |ctx, ssl| - ctx.session_cache_mode = OpenSSL::SSL::SSLContext::SESSION_CACHE_SERVER -+ ctx.options = OpenSSL::SSL::OP_NO_TICKET - last_server_session = nil - - # get_cb is called whenever a client proposed to resume a session but --- -2.4.5 - diff --git a/ruby-2.3.0-fix-test-ctx-client-session-cb.patch b/ruby-2.3.0-fix-test-ctx-client-session-cb.patch deleted file mode 100644 index 0757a52..0000000 --- a/ruby-2.3.0-fix-test-ctx-client-session-cb.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: test/openssl/test_ssl_session.rb -=================================================================== ---- test/openssl/test_ssl_session.rb (revision 49098) -+++ test/openssl/test_ssl_session.rb (revision 49099) -@@ -278,7 +278,7 @@ - - def test_ctx_client_session_cb - called = {} -- ctx = OpenSSL::SSL::SSLContext.new("SSLv3") -+ ctx = OpenSSL::SSL::SSLContext.new - ctx.session_cache_mode = OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT - - ctx.session_new_cb = lambda { |ary| diff --git a/ruby.spec b/ruby.spec index 7c561a8..3e4f698 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 2 -%global teeny_version 3 +%global teeny_version 4 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 46 +%global release 47 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} %global rubygems_version 2.4.5.1 @@ -115,11 +115,6 @@ Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch # Use miniruby to regenerate prelude.c. # https://bugs.ruby-lang.org/issues/10554 Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch -# Don't use SSLv3 for tests. -# https://bugs.ruby-lang.org/issues/10046 -Patch9: ruby-2.3.0-fix-test-ctx-client-session-cb.patch -Patch10: ruby-2.3.0-Don-t-force-SSLv3-in-test-as-it-is-insecure-and-may-.patch -Patch11: ruby-2.3.0-Use-OP_NO_TICKET-when-testing-SSL-session-cache-call.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: ruby(rubygems) >= %{rubygems_version} @@ -421,9 +416,6 @@ rm -rf ext/fiddle/libffi* %patch5 -p1 %patch6 -p1 %patch7 -p1 -%patch9 -%patch10 -%patch11 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -898,6 +890,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Dec 21 2015 Vít Ondruch - 2.2.4-47 +- Update to Ruby 2.2.4. + * Thu Dec 10 2015 Vít Ondruch - 2.2.3-46 - Fix ABRT hook autoloading. diff --git a/sources b/sources index dbae8f0..94b8135 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -2a8bc1f46aba8938add70f742e8af1ff ruby-2.2.3.tar.xz +350bfd495e1974cf752de9f4566c7911 ruby-2.2.4.tar.xz From 4c12d4e704a383f79d42d06832477b79224d2181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 5 Jan 2016 10:58:10 +0100 Subject: [PATCH 209/530] Upgrade to Ruby 2.3.0. --- .gitignore | 8 +- macros.rubygems | 3 +- operating_system.rb | 26 +- ruby-1.9.3-mkmf-verbose.patch | 2 +- ...-additional-preludes-by-configuratio.patch | 8 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 64 +--- ruby-2.1.0-always-use-i386.patch | 4 +- ruby-2.1.0-custom-rubygems-location.patch | 14 +- ...2.3-Generate-preludes-using-miniruby.patch | 8 +- ruby-2.3.0-ruby_version.patch | 300 ++++++++++++++++++ ruby.spec | 207 +++++++----- sources | 2 +- test_systemtap.rb | 65 +++- 14 files changed, 549 insertions(+), 164 deletions(-) create mode 100644 ruby-2.3.0-ruby_version.patch diff --git a/.gitignore b/.gitignore index 81f7fc1..3523d77 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ +/*/ /ruby-2.*.tar.bz2 -/ruby-2.2.0.tar.xz -/ruby-2.2.1.tar.xz -/ruby-2.2.2.tar.xz -/ruby-2.2.3.tar.xz -/ruby-2.2.4.tar.xz +/ruby-2.*.tar.xz +/*.rpm diff --git a/macros.rubygems b/macros.rubygems index 1043c02..6d99ac3 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -20,8 +20,7 @@ CONFIGURE_ARGS="--with-cflags='%{optflags}' $CONFIGURE_ARGS" \\\ gem install \\\ -V \\\ --local \\\ - --install-dir %{-d*}%{!?-d:.%{gem_dir}} \\\ - --bindir .%{_bindir} \\\ + --build-root %{-d*}%{!?-d:.} \\\ --force \\\ --document=ri,rdoc \\\ %{-n*}%{!?-n:%{gem_name}-%{version}.gem} \ diff --git a/operating_system.rb b/operating_system.rb index ed653fd..4b2903d 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -13,12 +13,28 @@ module Gem end private :previous_but_one_dir_to + ## + # Detects --install-dir option specified on command line. + + def opt_install_dir? + @opt_install_dir ||= ARGV.include?('--install-dir') || ARGV.include?('-i') + end + private :opt_install_dir? + + ## + # Detects --build-root option specified on command line. + + def opt_build_root? + @opt_build_root ||= ARGV.include?('--build-root') + end + private :opt_build_root? + ## # Tries to detect, if arguments and environment variables suggest that # 'gem install' is executed from rpmbuild. def rpmbuild? - (ARGV.include?('--install-dir') || ARGV.include?('-i')) && ENV['RPM_PACKAGE_NAME'] + @rpmbuild ||= ENV['RPM_PACKAGE_NAME'] && (opt_install_dir? || opt_build_root?) end private :rpmbuild? @@ -80,7 +96,9 @@ module Gem # RubyGems default overrides. def default_dir - if Process.uid == 0 + if opt_build_root? + Gem.default_dirs[:system][:gem_dir] + elsif Process.uid == 0 Gem.default_dirs[:local][:gem_dir] else Gem.user_dir @@ -93,7 +111,9 @@ module Gem end def default_bindir - if Process.uid == 0 + if opt_build_root? + Gem.default_dirs[:system][:bin_dir] + elsif Process.uid == 0 Gem.default_dirs[:local][:bin_dir] else File.join [Dir.home, 'bin'] diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index 0f2a742..ccbd972 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,7 +11,7 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1859,7 +1859,7 @@ SRC +@@ -1892,7 +1892,7 @@ def configuration(srcdir) SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index 6eb6122..6f16bae 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -13,9 +13,9 @@ diff --git a/Makefile.in b/Makefile.in index 7e8ed82..7916993 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -114,6 +114,8 @@ XRUBY_LIBDIR = @XRUBY_LIBDIR@ - XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ +@@ -116,6 +116,8 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@ + BOOTSTRAPRUBY = @BOOTSTRAPRUBY@ +OPTIONAL_PRELUDES = @OPTIONAL_PRELUDES@ + @@ -26,7 +26,7 @@ diff --git a/common.mk b/common.mk index 5cfbc3d..3f0a82e 100644 --- a/common.mk +++ b/common.mk -@@ -117,7 +117,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) +@@ -127,7 +127,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) DEFAULT_PRELUDES = $(GEM_PRELUDE) @@ -39,7 +39,7 @@ diff --git a/configure.in b/configure.in index 0e371e2..d4f1dcb 100644 --- a/configure.in +++ b/configure.in -@@ -4169,6 +4169,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -4334,6 +4334,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index b54f8e0..33bd565 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 37d9a62..553d4d0 100644 --- a/configure.in +++ b/configure.in -@@ -3385,6 +3385,11 @@ if test ${multiarch+set}; then +@@ -3592,6 +3592,11 @@ if test ${multiarch+set}; then fi archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index b401158..6661f9b 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -5,71 +5,25 @@ Subject: [PATCH] Prevent duplicated paths when empty version string is configured. --- - configure.in | 15 +++++++++------ + configure.in | 3 ++- loadpath.c | 12 ++++++++++++ tool/mkconfig.rb | 2 +- - 3 files changed, 22 insertions(+), 7 deletions(-) + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/configure.in b/configure.in -index 17ed3ed..5843651 100644 +index db37cd6..ce8d149 100644 --- a/configure.in +++ b/configure.in -@@ -3975,8 +3975,6 @@ AS_CASE(["$target_os"], - rubyw_install_name='$(RUBYW_INSTALL_NAME)' - ]) +@@ -4188,7 +4188,8 @@ AS_CASE(["$ruby_version_dir_name"], + ruby_version_dir=/'${ruby_version_dir_name}' --rubylibdir='${rubylibprefix}/${ruby_version}' --rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} - - rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} - AC_ARG_WITH(rubyarchprefix, -@@ -4006,6 +4004,7 @@ AC_ARG_WITH(ruby-version, - [ruby_version=full]) - unset RUBY_LIB_VERSION - unset RUBY_LIB_VERSION_STYLE -+ruby_version_suffix=/'${ruby_version}' - AS_CASE(["$ruby_version"], - [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], - [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) -@@ -4022,30 +4021,34 @@ if test ${RUBY_LIB_VERSION_STYLE+set}; then - ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" - eval $ruby_version - elif test -z "${ruby_version}"; then + if test -z "${ruby_version_dir_name}"; then - AC_MSG_ERROR([No ruby version, No place for bundled libraries]) -+ unset ruby_version_suffix ++ unset ruby_version_dir + AC_DEFINE(RUBY_LIB_VERSION_BLANK, 1) - else - RUBY_LIB_VERSION="${ruby_version}" fi - AC_SUBST(RUBY_LIB_VERSION_STYLE) - AC_SUBST(RUBY_LIB_VERSION) -+rubylibdir='${rubylibprefix}'${ruby_version_suffix} -+rubyarchdir=${multiarch+'${rubyarchprefix}'${ruby_version_suffix}}${multiarch-'${rubylibdir}/${arch}'} -+ - AC_ARG_WITH(sitedir, - AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), - [sitedir=$withval], - [sitedir='${rubylibprefix}/site_ruby']) --sitelibdir='${sitedir}/${ruby_version}' -+sitelibdir='${sitedir}'${ruby_version_suffix} - - AC_ARG_WITH(sitearchdir, - AS_HELP_STRING([--with-sitearchdir=DIR], - [architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]), - [sitearchdir=$withval], -- [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}]) -+ [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby'${ruby_version_suffix}}${multiarch-'${sitelibdir}/${sitearch}'}]) - - AC_ARG_WITH(vendordir, - AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), - [vendordir=$withval], - [vendordir='${rubylibprefix}/vendor_ruby']) --vendorlibdir='${vendordir}/${ruby_version}' -+vendorlibdir='${vendordir}'${ruby_version_suffix} - - AC_ARG_WITH(vendorarchdir, - AS_HELP_STRING([--with-vendorarchdir=DIR], + rubylibdir='${rubylibprefix}'${ruby_version_dir} diff --git a/loadpath.c b/loadpath.c index 9160031..0d4d953 100644 --- a/loadpath.c @@ -113,7 +67,7 @@ diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb index 07076d4..35e6c3c 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -123,7 +123,7 @@ File.foreach "config.status" do |line| +@@ -122,7 +122,7 @@ def config.write(arg) val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump case name when /^prefix$/ diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index f8e61f5..3c3fcd4 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,8 +11,8 @@ diff --git a/configure.in b/configure.in index 553d4d0..03a4152 100644 --- a/configure.in +++ b/configure.in -@@ -4087,6 +4087,8 @@ AC_SUBST(vendorarchdir)dnl - +@@ -4252,6 +4252,8 @@ AC_SUBST(vendorarchdir)dnl + AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl +target_cpu=`echo $target_cpu | sed s/i.86/i386/` diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index c21c858..36a7711 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,9 +15,9 @@ diff --git a/configure.in b/configure.in index 03a4152..0e371e2 100644 --- a/configure.in +++ b/configure.in -@@ -4061,6 +4061,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4224,6 +4224,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], - [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) + [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) +AC_ARG_WITH(rubygemsdir, + AS_HELP_STRING([--with-rubygemsdir=DIR], [custom rubygems directory]), @@ -26,14 +26,14 @@ index 03a4152..0e371e2 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4084,6 +4088,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4248,6 +4252,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl +AC_SUBST(rubygemsdir)dnl + AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl - diff --git a/loadpath.c b/loadpath.c index 623dc9d..74c5d9e 100644 --- a/loadpath.c @@ -53,7 +53,7 @@ diff --git a/template/verconf.h.tmpl b/template/verconf.h.tmpl index 79c003e..34f2382 100644 --- a/template/verconf.h.tmpl +++ b/template/verconf.h.tmpl -@@ -34,6 +34,9 @@ +@@ -36,6 +36,9 @@ % if C["RUBY_SEARCH_PATH"] #define RUBY_SEARCH_PATH "${RUBY_SEARCH_PATH}" % end @@ -67,7 +67,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index b47b6e1..0b99408 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -317,6 +317,7 @@ sitelibdir = CONFIG["sitelibdir"] +@@ -328,6 +328,7 @@ def CONFIG.[](name, mandatory = false) sitearchlibdir = CONFIG["sitearchdir"] vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] @@ -75,7 +75,7 @@ index b47b6e1..0b99408 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] configure_args = Shellwords.shellwords(CONFIG["configure_args"]) -@@ -505,7 +506,15 @@ end +@@ -506,7 +507,15 @@ def CONFIG.[](name, mandatory = false) install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[README* *.txt *.rdoc *.gemspec] diff --git a/ruby-2.2.3-Generate-preludes-using-miniruby.patch b/ruby-2.2.3-Generate-preludes-using-miniruby.patch index 81b7c5b..aa17411 100644 --- a/ruby-2.2.3-Generate-preludes-using-miniruby.patch +++ b/ruby-2.2.3-Generate-preludes-using-miniruby.patch @@ -1,4 +1,4 @@ -From 9fedac991e717f0103d092275ac301e58c5cf010 Mon Sep 17 00:00:00 2001 +From 07eb5f5e775dec01a92a8b13910eaced9e8ee0cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 2 Dec 2014 10:56:58 +0100 Subject: [PATCH] Generate preludes using miniruby. @@ -8,10 +8,10 @@ Subject: [PATCH] Generate preludes using miniruby. 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common.mk b/common.mk -index 76f1621..b0f6e28 100644 +index 168dc52..20c218a 100644 --- a/common.mk +++ b/common.mk -@@ -782,9 +782,9 @@ $(PRELUDE_C): $(COMPILE_PRELUDE) \ +@@ -839,9 +839,9 @@ $(MINIPRELUDE_C): $(COMPILE_PRELUDE) $(PRELUDE_C): $(COMPILE_PRELUDE) \ {$(srcdir)}lib/rubygems/defaults.rb \ {$(srcdir)}lib/rubygems/core_ext/kernel_gem.rb \ @@ -24,5 +24,5 @@ index 76f1621..b0f6e28 100644 {$(VPATH)}golf_prelude.c: $(COMPILE_PRELUDE) {$(srcdir)}golf_prelude.rb -- -2.1.0 +2.6.3 diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch new file mode 100644 index 0000000..6a13e3a --- /dev/null +++ b/ruby-2.3.0-ruby_version.patch @@ -0,0 +1,300 @@ +From 4fc1be3af3f58621bb751c9e63c208b15c0e8d16 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 31 Mar 2015 16:21:04 +0200 +Subject: [PATCH 1/4] Use ruby_version_dir_name for versioned directories. + +This disallows changing the ruby_version constant by --with-ruby-version +configuration options. The two places version numbers are disallowed as +well, since there are a lot of places which cannot handle this format +properly. + +ruby_version_dir_name now specifies custom version string for versioned +directories, e.g. instead of default X.Y.Z, you can specify whatever +string. +--- + configure.in | 68 ++++++++++++++++++++++++++++------------------------- + template/ruby.pc.in | 1 + + 2 files changed, 37 insertions(+), 32 deletions(-) + +diff --git a/configure.in b/configure.in +index db37cd6..6e73fae 100644 +--- a/configure.in ++++ b/configure.in +@@ -4137,9 +4137,6 @@ AS_CASE(["$target_os"], + rubyw_install_name='$(RUBYW_INSTALL_NAME)' + ]) + +-rubylibdir='${rubylibprefix}/${ruby_version}' +-rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} +- + rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} + AC_ARG_WITH(rubyarchprefix, + AS_HELP_STRING([--with-rubyarchprefix=DIR], +@@ -4162,58 +4159,64 @@ AC_ARG_WITH(ridir, + AC_SUBST(ridir) + AC_SUBST(RI_BASE_NAME) + +-AC_ARG_WITH(ruby-version, +- AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|minor|STR)]), +- [ruby_version=$withval], +- [ruby_version=full]) + unset RUBY_LIB_VERSION +-unset RUBY_LIB_VERSION_STYLE +-AS_CASE(["$ruby_version"], +- [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], +- [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) +-if test ${RUBY_LIB_VERSION_STYLE+set}; then +- { +- echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" +- echo '#define STRINGIZE(x) x' +- test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' +- echo '#include "verconf.h"' +- echo '#include "version.h"' +- echo 'ruby_version=RUBY_LIB_VERSION' +- } > conftest.c +- test -f verconf.h || > verconf.h +- ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" +- eval $ruby_version +-elif test -z "${ruby_version}"; then +- AC_MSG_ERROR([No ruby version, No place for bundled libraries]) +-else +- RUBY_LIB_VERSION="${ruby_version}" +-fi ++RUBY_LIB_VERSION_STYLE='3 /* full */' ++{ ++echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" ++echo '#define STRINGIZE(x) x' ++test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' ++echo '#include "verconf.h"' ++echo '#include "version.h"' ++echo 'ruby_version=RUBY_LIB_VERSION' ++} > conftest.c ++test -f verconf.h || > verconf.h ++ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" ++eval $ruby_version ++ ++RUBY_LIB_VERSION="${ruby_version}" ++ + AC_SUBST(RUBY_LIB_VERSION_STYLE) + AC_SUBST(RUBY_LIB_VERSION) + ++AC_ARG_WITH(ruby-version, ++ AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|STR)]), ++ [ruby_version_dir_name=$withval], ++ [ruby_version_dir_name=full]) ++AS_CASE(["$ruby_version_dir_name"], ++ [full], [ruby_version_dir_name='${ruby_version}']) ++ ++ruby_version_dir=/'${ruby_version_dir_name}' ++ ++if test -z "${ruby_version_dir_name}"; then ++ AC_MSG_ERROR([No ruby version, No place for bundled libraries]) ++fi ++ ++rubylibdir='${rubylibprefix}'${ruby_version_dir} ++rubyarchdir=${multiarch+'${rubyarchprefix}'${ruby_version_dir}}${multiarch-'${rubylibdir}/${arch}'} ++ + AC_ARG_WITH(sitedir, + AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), + [sitedir=$withval], + [sitedir='${rubylibprefix}/site_ruby']) +-sitelibdir='${sitedir}/${ruby_version}' ++sitelibdir='${sitedir}'${ruby_version_dir} + + AC_ARG_WITH(sitearchdir, + AS_HELP_STRING([--with-sitearchdir=DIR], + [architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]), + [sitearchdir=$withval], +- [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}]) ++ [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby'${ruby_version_dir}}${multiarch-'${sitelibdir}/${sitearch}'}]) + + AC_ARG_WITH(vendordir, + AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), + [vendordir=$withval], + [vendordir='${rubylibprefix}/vendor_ruby']) +-vendorlibdir='${vendordir}/${ruby_version}' ++vendorlibdir='${vendordir}'${ruby_version_dir} + + AC_ARG_WITH(vendorarchdir, + AS_HELP_STRING([--with-vendorarchdir=DIR], + [architecture dependent vendor libraries in DIR [[VENDORDIR/SITEARCH]], "no" to disable vendor directory]), + [vendorarchdir=$withval], +- [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) ++ [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) + + if test "${LOAD_RELATIVE+set}"; then + AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) +@@ -4230,6 +4233,7 @@ AC_SUBST(sitearchincludedir)dnl + AC_SUBST(arch)dnl + AC_SUBST(sitearch)dnl + AC_SUBST(ruby_version)dnl ++AC_SUBST(ruby_version_dir_name)dnl + AC_SUBST(rubylibdir)dnl + AC_SUBST(rubyarchdir)dnl + AC_SUBST(sitedir)dnl +diff --git a/template/ruby.pc.in b/template/ruby.pc.in +index 8a2c066..c81b211 100644 +--- a/template/ruby.pc.in ++++ b/template/ruby.pc.in +@@ -9,6 +9,7 @@ MAJOR=@MAJOR@ + MINOR=@MINOR@ + TEENY=@TEENY@ + ruby_version=@ruby_version@ ++ruby_version_dir_name=@ruby_version_dir_name@ + RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@ + RUBY_BASE_NAME=@RUBY_BASE_NAME@ + RUBY_VERSION_NAME=@RUBY_VERSION_NAME@ +-- +2.1.0 + + +From 518850aba6eee76de7715aae8d37330e34b01983 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 31 Mar 2015 16:37:26 +0200 +Subject: [PATCH 2/4] Add ruby_version_dir_name support for RDoc. + +--- + lib/rdoc/ri/paths.rb | 2 +- + tool/rbinstall.rb | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lib/rdoc/ri/paths.rb b/lib/rdoc/ri/paths.rb +index 970cb91..5bf8230 100644 +--- a/lib/rdoc/ri/paths.rb ++++ b/lib/rdoc/ri/paths.rb +@@ -10,7 +10,7 @@ module RDoc::RI::Paths + #:stopdoc: + require 'rbconfig' + +- version = RbConfig::CONFIG['ruby_version'] ++ version = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + + BASE = if RbConfig::CONFIG.key? 'ridir' then + File.join RbConfig::CONFIG['ridir'], version +diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb +index d4c110e..d39c9a6 100755 +--- a/tool/rbinstall.rb ++++ b/tool/rbinstall.rb +@@ -406,7 +406,7 @@ def CONFIG.[](name, mandatory = false) + + install?(:doc, :rdoc) do + if $rdocdir +- ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version'], "system") ++ ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version_dir_name'] || CONFIG['ruby_version'], "system") + prepare "rdoc", ridatadir + install_recursive($rdocdir, ridatadir, :mode => $data_mode) + end +-- +2.1.0 + + +From f8d136f9a46d1fe87eba622ab9665935d05e981b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 31 Mar 2015 16:37:44 +0200 +Subject: [PATCH 3/4] Add ruby_version_dir_name support for RubyGems. + +--- + lib/rubygems/defaults.rb | 11 ++++++----- + test/rubygems/test_gem.rb | 5 +++-- + 2 files changed, 9 insertions(+), 7 deletions(-) + +diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb +index 55ca080..75eea2b 100644 +--- a/lib/rubygems/defaults.rb ++++ b/lib/rubygems/defaults.rb +@@ -32,20 +32,20 @@ def self.default_dir + [ + File.dirname(RbConfig::CONFIG['sitedir']), + 'Gems', +- RbConfig::CONFIG['ruby_version'] ++ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + ] + elsif RbConfig::CONFIG['rubylibprefix'] then + [ + RbConfig::CONFIG['rubylibprefix'], + 'gems', +- RbConfig::CONFIG['ruby_version'] ++ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + ] + else + [ + RbConfig::CONFIG['libdir'], + ruby_engine, + 'gems', +- RbConfig::CONFIG['ruby_version'] ++ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + ] + end + +@@ -75,7 +75,8 @@ def self.default_rubygems_dirs + + def self.user_dir + parts = [Gem.user_home, '.gem', ruby_engine] +- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty? ++ ruby_version_dir_name = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] ++ parts << ruby_version_dir_name unless ruby_version_dir_name.empty? + File.join parts + end + +@@ -172,7 +173,7 @@ def self.vendor_dir # :nodoc: + return nil unless RbConfig::CONFIG.key? 'vendordir' + + File.join RbConfig::CONFIG['vendordir'], 'gems', +- RbConfig::CONFIG['ruby_version'] ++ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + end + + end +diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb +index 0428bea..b6e090e 100644 +--- a/test/rubygems/test_gem.rb ++++ b/test/rubygems/test_gem.rb +@@ -963,7 +963,8 @@ def test_self_use_paths + + def test_self_user_dir + parts = [@userhome, '.gem', Gem.ruby_engine] +- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty? ++ ruby_version_dir_name = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] ++ parts << ruby_version_dir_name unless ruby_version_dir_name.empty? + + assert_equal File.join(parts), Gem.user_dir + end +@@ -1090,7 +1091,7 @@ def test_self_user_home_user_drive_and_path + def test_self_vendor_dir + expected = + File.join RbConfig::CONFIG['vendordir'], 'gems', +- RbConfig::CONFIG['ruby_version'] ++ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + + assert_equal expected, Gem.vendor_dir + end +-- +2.1.0 + + +From 88c38a030c22dbf9422ece847bdfbf87d6659313 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Wed, 1 Apr 2015 14:55:37 +0200 +Subject: [PATCH 4/4] Let headers directories follow the configured version + name. + +--- + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.in b/configure.in +index 6e73fae..c842725 100644 +--- a/configure.in ++++ b/configure.in +@@ -274,7 +274,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` + RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` + AC_SUBST(RUBY_BASE_NAME) + AC_SUBST(RUBYW_BASE_NAME) +-AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version}') ++AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version_dir_name}') + + AC_CANONICAL_TARGET + test x"$target_alias" = x && +-- +2.1.0 + diff --git a/ruby.spec b/ruby.spec index 3e4f698..999130a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,16 +1,16 @@ %global major_version 2 -%global minor_version 2 -%global teeny_version 4 +%global minor_version 3 +%global teeny_version 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. -#%%global milestone rc1 +#%%global milestone preview2 # Keep the revision enabled for pre-releases from SVN. -#%%global revision 48936 +#%%global revision 53264 %global ruby_archive %{name}-%{ruby_version} @@ -21,28 +21,32 @@ %endif -%global release 47 +%global release 50 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -%global rubygems_version 2.4.5.1 - # The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. %global rubygems_dir %{_datadir}/rubygems +# Bundled libraries versions +%global rubygems_version 2.5.1 +%global molinillo_version 0.4.0 + # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version} -%global bigdecimal_version 1.2.6 -%global io_console_version 0.4.3 -%global json_version 1.8.1 -%global minitest_version 5.4.3 -%global power_assert_version 0.2.2 -%global psych_version 2.0.8 +%global bigdecimal_version 1.2.8 +%global did_you_mean_version 1.0.0 +%global io_console_version 0.4.5 +%global json_version 1.8.3 +%global minitest_version 5.8.3 +%global power_assert_version 0.2.6 +%global psych_version 2.0.17 %global rake_version 10.4.2 -%global rdoc_version 4.2.0 -%global test_unit_version 3.0.8 +%global rdoc_version 4.2.1 +%global net_telnet_version 0.1.1 +%global test_unit_version 3.1.5 # Might not be needed in the future, if we are lucky enough. # https://bugzilla.redhat.com/show_bug.cgi?id=888262 @@ -84,25 +88,28 @@ Source7: config.h Source8: rubygems.attr Source9: rubygems.req Source10: rubygems.prov -# SystemTap sanity test case. -Source11: test_systemtap.rb # ABRT hoook test case. Source12: test_abrt.rb +# SystemTap tests. +Source13: test_systemtap.rb # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. %{?load:%{SOURCE4}} %{?load:%{SOURCE5}} +# Fix ruby_version abuse. +# https://bugs.ruby-lang.org/issues/11002 +Patch0: ruby-2.3.0-ruby_version.patch # http://bugs.ruby-lang.org/issues/7807 -Patch0: ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +Patch1: ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch # Allows to override libruby.so placement. Hopefully we will be able to return # to plain --with-rubyarchprefix. # http://bugs.ruby-lang.org/issues/8973 -Patch1: ruby-2.1.0-Enable-configuration-of-archlibdir.patch +Patch2: ruby-2.1.0-Enable-configuration-of-archlibdir.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. -Patch2: ruby-2.1.0-always-use-i386.patch +Patch3: ruby-2.1.0-always-use-i386.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://bugs.ruby-lang.org/issues/5617 Patch4: ruby-2.1.0-custom-rubygems-location.patch @@ -117,12 +124,10 @@ Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} -Requires: ruby(rubygems) >= %{rubygems_version} -# Make the bigdecimal gem a runtime dependency of Ruby to avoid problems -# with user-installed gems, that don't require it in gemspec/Gemfile -# See https://bugzilla.redhat.com/show_bug.cgi?id=829209 -# and http://bugs.ruby-lang.org/issues/6123 -Requires: rubygem(bigdecimal) >= %{bigdecimal_version} +Suggests: rubypick +Recommends: ruby(rubygems) >= %{rubygems_version} +Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} +Recommends: rubygem(did_you_mean) >= %{did_you_mean_version} BuildRequires: autoconf BuildRequires: gdbm-devel @@ -142,8 +147,6 @@ BuildRequires: %{_bindir}/cmake # virtual provide. It can be installed as dependency of rubypick. Provides: ruby(runtime_executable) = %{ruby_release} -%global __provides_exclude_from ^(%{ruby_libarchdir}|%{gem_archdir})/.*\\.so$ - %description Ruby is the interpreted scripting language for quick and easy object-oriented programming. It has many features to process text @@ -166,9 +169,17 @@ Group: Development/Libraries License: Ruby or BSD Provides: ruby(release) = %{ruby_release} +# Virtual provides for CCAN copylibs. +# https://fedorahosted.org/fpc/ticket/364 +Provides: bundled(ccan-build_assert) +Provides: bundled(ccan-check_type) +Provides: bundled(ccan-container_of) +Provides: bundled(ccan-list) + %description libs This package includes the libruby, necessary to run Ruby. + # TODO: Rename or not rename to ruby-rubygems? %package -n rubygems Summary: The Ruby standard for packaging ruby libraries @@ -176,13 +187,14 @@ Version: %{rubygems_version} Group: Development/Libraries License: Ruby or MIT Requires: ruby(release) -Requires: rubygem(rdoc) >= %{rdoc_version} -# TODO: This seems to be optional now. -# https://github.com/rubygems/rubygems/commit/68da16dd7508c5c4010bfe32f99422568d3d582f -Requires: rubygem(io-console) >= %{io_console_version} +Recommends: rubygem(rdoc) >= %{rdoc_version} +Recommends: rubygem(io-console) >= %{io_console_version} Requires: rubygem(psych) >= %{psych_version} Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} +# https://github.com/rubygems/rubygems/pull/1189#issuecomment-121600910 +Provides: bundled(rubygem(molinillo)) = %{molinillo_version} +Provides: bundled(rubygem-molinillo) = %{molinillo_version} BuildArch: noarch %description -n rubygems @@ -196,6 +208,8 @@ Version: %{rubygems_version} Group: Development/Libraries License: Ruby or MIT Requires: ruby(rubygems) = %{version}-%{release} +# Needed for RDoc documentation format generation. +Requires: rubygem(json) >= %{json_version} BuildArch: noarch %description -n rubygems-devel @@ -241,7 +255,7 @@ License: GPLv2 and Ruby and MIT and SIL Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Requires: ruby(irb) = %{irb_version} -Requires: rubygem(json) >= %{json_version} +Recommends: rubygem(json) >= %{json_version} Provides: rdoc = %{version}-%{release} Provides: ri = %{version}-%{release} Provides: rubygem(rdoc) = %{version}-%{release} @@ -285,6 +299,20 @@ floating point arithmetic often introduces subtle errors because of the conversion between base 10 and base 2. +%package -n rubygem-did_you_mean +Summary: "Did you mean?" experience in Ruby +Version: %{did_you_mean_version} +Group: Development/Libraries +License: MIT +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(did_you_mean) = %{version}-%{release} + +%description -n rubygem-did_you_mean +"did you mean?" experience in Ruby: the error message will tell you the right +one when you misspelled something. + + %package -n rubygem-io-console Summary: IO/Console is a simple console utilizing library Version: %{io_console_version} @@ -340,8 +368,6 @@ minitest/pride shows pride in testing and adds coloring to your test output. -# The Summary/Description fields are rather poor. -# https://github.com/k-tsj/power_assert/issues/3 %package -n rubygem-power_assert Summary: Power Assert for Ruby Version: %{power_assert_version} @@ -353,7 +379,9 @@ Provides: rubygem(power_assert) = %{version}-%{release} BuildArch: noarch %description -n rubygem-power_assert -Power Assert for Ruby. +Power Assert shows each value of variables and method calls in the expression. +It is useful for testing, providing which value wasn't correct when the +condition is not satisfied. %package -n rubygem-psych @@ -372,6 +400,25 @@ capabilities. In addition to wrapping libyaml, Psych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format. +%package -n rubygem-net-telnet +Summary: Provides telnet client functionality +Version: %{net_telnet_version} +Group: Development/Libraries +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(net-telnet) = %{version}-%{release} + +%description -n rubygem-net-telnet +Provides telnet client functionality. + +This class also has, through delegation, all the methods of a socket object +(by default, a TCPSocket, but can be set by the Proxy option to new()). This +provides methods such as close() to end the session and sysread() to read data +directly from the host, instead of via the waitfor() mechanism. Note that if +you do use sysread() directly when in telnet mode, you should probably pass +the output through preprocess() to extract telnet command sequences. + + # The Summary/Description fields are rather poor. # https://github.com/test-unit/test-unit/issues/73 %package -n rubygem-test-unit @@ -412,6 +459,7 @@ rm -rf ext/fiddle/libffi* %patch0 -p1 %patch1 -p1 %patch2 -p1 +%patch3 -p1 %patch4 -p1 %patch5 -p1 %patch6 -p1 @@ -509,10 +557,6 @@ mkdir -p %{buildroot}%{_exec_prefix}/lib{,64}/gems/%{name} # Move bundled rubygems to %%gem_dir and %%gem_extdir_mri # make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems -mkdir -p %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/lib -mv %{buildroot}%{ruby_libdir}/rake* %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/rake-%{rake_version}.gemspec %{buildroot}%{gem_dir}/specifications - mkdir -p %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib mv %{buildroot}%{gem_dir}/specifications/default/rdoc-%{rdoc_version}.gemspec %{buildroot}%{gem_dir}/specifications @@ -550,32 +594,10 @@ ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby # Adjust the gemspec files so that the gems will load properly sed -i '/^end$/ i\ - s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/rake-%{rake_version}.gemspec - -sed -i '/^end$/ i\ - s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec - -sed -i '/^end$/ i\ - s.require_paths = ["lib"]\ - s.extensions = ["bigdecimal.so"]' %{buildroot}%{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec - -sed -i '/^end$/ i\ - s.require_paths = ["lib"]\ - s.extensions = ["io/console.so"]' %{buildroot}%{gem_dir}/specifications/io-console-%{io_console_version}.gemspec - -sed -i '/^end$/ i\ - s.require_paths = ["lib"]\ s.extensions = ["json/ext/parser.so", "json/ext/generator.so"]' %{buildroot}%{gem_dir}/specifications/json-%{json_version}.gemspec -# Push the .gemspecs through the RubyGems to let them write the stub headers. -# This speeds up loading of libraries and avoids warnings in Spring: -# https://github.com/rubygems/rubygems/pull/694 -for s in rake-%{rake_version}.gemspec rdoc-%{rdoc_version}.gemspec json-%{json_version}.gemspec; do - s="%{buildroot}%{gem_dir}/specifications/$s" - make runruby TESTRUN_SCRIPT="-rubygems \ - -e \"spec = Gem::Specification.load(%{$s})\" \ - -e \"File.write %{$s}, spec.to_ruby\"" -done +# Move man pages into proper location +mv %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/doc/rake.1 %{buildroot}%{_mandir}/man1 # Install a tapset and fix up the path to the library. mkdir -p %{buildroot}%{tapset_dir} @@ -584,18 +606,36 @@ sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{major_minor_version}|" \ # Escape '*/' in comment. sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{major_minor_version}.stp +# Prepare -doc subpackage file lists. +find doc -maxdepth 1 -type f ! -name '.*' ! -name '*.ja*' > .ruby-doc.en +echo 'doc/images' >> .ruby-doc.en +echo 'doc/syntax' >> .ruby-doc.en + +find doc -maxdepth 1 -type f -name '*.ja*' > .ruby-doc.ja +echo 'doc/irb' >> .ruby-doc.ja +echo 'doc/pty' >> .ruby-doc.ja + +sed -i 's/^/%doc /' .ruby-doc.* +sed -i 's/^/%lang(ja) /' .ruby-doc.ja + %check +# Check RubyGems version correctness. +[ "`make runruby TESTRUN_SCRIPT='bin/gem -v' | tail -1`" == '%{rubygems_version}' ] +# Check Molinillo version correctness. +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\"module Gem; module Resolver; end; end; require 'rubygems/resolver/molinillo/lib/molinillo/gem_metadata'; puts Gem::Resolver::Molinillo::VERSION\\\"\" | tail -1`" \ + == '%{molinillo_version}' ] + # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing # the test suite). touch abrt.rb -# Sanity check that SystemTap (dtrace) was detected. -make runruby TESTRUN_SCRIPT=%{SOURCE11} - # Check if abrt hook is required. make runruby TESTRUN_SCRIPT=%{SOURCE12} +# Check if systemtap is supported. +make runruby TESTRUN_SCRIPT=%{SOURCE13} + DISABLE_TESTS="" make check TESTS="-v $DISABLE_TESTS" @@ -624,8 +664,6 @@ make check TESTS="-v $DISABLE_TESTS" %lang(ja) %doc COPYING.ja %doc GPL %doc LEGAL -%doc README.EXT -%lang(ja) %doc README.EXT.ja %{_rpmconfigdir}/macros.d/macros.ruby @@ -639,9 +677,7 @@ make check TESTS="-v $DISABLE_TESTS" %doc GPL %doc LEGAL %doc README.md -%lang(ja) %doc README.ja.md %doc NEWS -%doc doc/NEWS-* # Exclude /usr/local directory since it is supposed to be managed by # local system administrator. %exclude %{ruby_sitelibdir} @@ -686,6 +722,8 @@ make check TESTS="-v $DISABLE_TESTS" # Platform specific libraries. %{_libdir}/libruby.so.* %dir %{ruby_libarchdir} +%dir %{ruby_libarchdir}/cgi +%{ruby_libarchdir}/cgi/escape.so %{ruby_libarchdir}/continuation.so %{ruby_libarchdir}/coverage.so %{ruby_libarchdir}/date_core.so @@ -729,6 +767,7 @@ make check TESTS="-v $DISABLE_TESTS" %dir %{ruby_libarchdir}/enc/trans %{ruby_libarchdir}/enc/trans/big5.so %{ruby_libarchdir}/enc/trans/chinese.so +%{ruby_libarchdir}/enc/trans/ebcdic.so %{ruby_libarchdir}/enc/trans/emoji.so %{ruby_libarchdir}/enc/trans/emoji_iso2022_kddi.so %{ruby_libarchdir}/enc/trans/emoji_sjis_docomo.so @@ -750,7 +789,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/enc/utf_16le.so %{ruby_libarchdir}/enc/utf_32be.so %{ruby_libarchdir}/enc/utf_32le.so +%{ruby_libarchdir}/enc/windows_1250.so %{ruby_libarchdir}/enc/windows_1251.so +%{ruby_libarchdir}/enc/windows_1252.so %{ruby_libarchdir}/enc/windows_31j.so %{ruby_libarchdir}/etc.so %{ruby_libarchdir}/fcntl.so @@ -831,11 +872,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec %{_mandir}/man1/ri* -%files doc +%files doc -f .ruby-doc.en -f .ruby-doc.ja %doc README.md -%lang(ja) %doc README.ja.md %doc ChangeLog -%doc doc/ChangeLog-* %doc ruby-exercise.stp %{_datadir}/ri @@ -846,6 +885,11 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/gems/bigdecimal-%{bigdecimal_version} %{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec +%files -n rubygem-did_you_mean +%{gem_dir}/gems/did_you_mean-%{did_you_mean_version} +%exclude %{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/.* +%{gem_dir}/specifications/did_you_mean-%{did_you_mean_version}.gemspec + %files -n rubygem-io-console %{ruby_libdir}/io %{ruby_libarchdir}/io/console.so @@ -876,6 +920,11 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/gems/psych-%{psych_version} %{gem_dir}/specifications/psych-%{psych_version}.gemspec +%files -n rubygem-net-telnet +%{gem_dir}/gems/net-telnet-%{net_telnet_version} +%exclude %{gem_dir}/gems/net-telnet-%{net_telnet_version}/.* +%{gem_dir}/specifications/net-telnet-%{net_telnet_version}.gemspec + %files -n rubygem-test-unit %{gem_dir}/gems/test-unit-%{test_unit_version} %{gem_dir}/specifications/test-unit-%{test_unit_version}.gemspec @@ -890,6 +939,16 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon Jan 04 2016 Vít Ondruch - 2.3.0-50 +- Upgrade to Ruby 2.3.0. +- Move gemified net-telnet into subpackage. +- Add did_you_mean subpackage. +- Add virtual provides for CCAN copylibs. +- Use weak dependencies. + +* Tue Dec 22 2015 Pavel Valena - 2.3.0-0.7.preview2 +- Add systemtap tests. + * Mon Dec 21 2015 Vít Ondruch - 2.2.4-47 - Update to Ruby 2.2.4. diff --git a/sources b/sources index 94b8135..f935fb7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -350bfd495e1974cf752de9f4566c7911 ruby-2.2.4.tar.xz +92ef54e033fb95ec9bdf7023666e5f1f ruby-2.3.0.tar.xz diff --git a/test_systemtap.rb b/test_systemtap.rb index aa8df4e..eb518df 100644 --- a/test_systemtap.rb +++ b/test_systemtap.rb @@ -1,9 +1,64 @@ -require 'rbconfig' +require 'set' -if RbConfig::CONFIG.select {|k, v| v =~ /dtrace/}.size == 1 - exit true -else - puts 'ERROR: SystemTap (dtrace) support was not detected.' +LIBRUBY_SO = 'libruby.so' +PROBES_D = 'probes.d' +### +# Detect SystemTap section headers presence. + +stap_headers = [ + '\.stapsdt\.base', + '\.note\.stapsdt' +] + +header_regexp = %r{ (#{stap_headers.join('|')}) } + +section_headers = `readelf -S "#{LIBRUBY_SO}"` +detected_stap_headers = section_headers.scan(header_regexp).flatten + +# Assume there are both headers until this is proven wrong ;) +unless detected_stap_headers.size == 2 + puts 'ERROR: SystemTap (DTrace) headers were not detected in resulting library.' + exit false +end + +### +# Find if every declared probe is propagated to resulting library. + +# Colect probes specified in probes.d file. +probes = [] + +File.open(PROBES_D) do |file| + file.each_line do |line| + if probe = line[/probe (\S+)\(.*\);/, 1] + probes << probe + end + end +end + +probes = Set.new probes + +# These probes are excluded by VM_COLLECT_USAGE_DETAILS ifdef. +EXCLUDE_PROBES = Set.new %w(insn insn__operand) +unless EXCLUDE_PROBES.subset? probes + puts 'ERROR: Change in SystemTap (DTrace) probes definition file detected.' + exit false +end + +probes -= EXCLUDE_PROBES + +# Detect probes in resulting library. +probe_regexp = %r{ +^\s*stapsdt\s*0[xX][0-9a-fA-F]+\tNT_STAPSDT \(SystemTap probe descriptors\)$ +^\s*Provider: ruby$ +^\s*Name: (\S+)$ +} + +notes = `readelf -n "#{LIBRUBY_SO}"` +detected_probes = Set.new notes.scan(probe_regexp).flatten + +# Both sets must be equal, otherwise something is wrong. +unless probes == detected_probes + puts 'ERROR: SystemTap (DTrace) probes were not correctly propagated into resulting library.' exit false end From 16c9e1e6b0e402a074893ac835b32a41943fcd94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 6 Jan 2016 12:20:42 +0100 Subject: [PATCH 210/530] Load RubyGems prior ABRT hook to properly rescue RubyGems exceptions. --- abrt_prelude.rb | 10 +++++++--- ruby.spec | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/abrt_prelude.rb b/abrt_prelude.rb index 5ffc51d..587c6a6 100644 --- a/abrt_prelude.rb +++ b/abrt_prelude.rb @@ -1,4 +1,8 @@ -begin - require 'abrt' -rescue LoadError +if defined?(Gem) + require 'rubygems.rb' + + begin + require 'abrt' + rescue LoadError + end end diff --git a/ruby.spec b/ruby.spec index 999130a..02783ab 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 50 +%global release 51 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -630,8 +630,9 @@ sed -i 's/^/%lang(ja) /' .ruby-doc.ja # the test suite). touch abrt.rb -# Check if abrt hook is required. -make runruby TESTRUN_SCRIPT=%{SOURCE12} +# Check if abrt hook is required (RubyGems are disabled by default when using +# runruby, so re-enable them). +make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE12}" # Check if systemtap is supported. make runruby TESTRUN_SCRIPT=%{SOURCE13} @@ -939,6 +940,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Wed Jan 06 2016 Vít Ondruch - 2.3.0-51 +- Load RubyGems prior ABRT hook to properly rescue RubyGems exceptions. + * Mon Jan 04 2016 Vít Ondruch - 2.3.0-50 - Upgrade to Ruby 2.3.0. - Move gemified net-telnet into subpackage. From 5ed2c68dc58913fd1e4c3870b86af1a4145dbf2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 6 Jan 2016 15:11:29 +0100 Subject: [PATCH 211/530] Explicitly require RDoc, since weak dependencies are ignored by default. --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 02783ab..8dadd1c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 51 +%global release 52 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -210,6 +210,7 @@ License: Ruby or MIT Requires: ruby(rubygems) = %{version}-%{release} # Needed for RDoc documentation format generation. Requires: rubygem(json) >= %{json_version} +Requires: rubygem(rdoc) >= %{rdoc_version} BuildArch: noarch %description -n rubygems-devel @@ -940,6 +941,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Wed Jan 06 2016 Vít Ondruch - 2.3.0-52 +- Explicitly require RDoc, since weak dependencies are ignored by default. + * Wed Jan 06 2016 Vít Ondruch - 2.3.0-51 - Load RubyGems prior ABRT hook to properly rescue RubyGems exceptions. From 55ecc214e1acb8d899c6ff735aa1813e2f19b5a5 Mon Sep 17 00:00:00 2001 From: Mamoru TASAKA Date: Fri, 15 Jan 2016 14:12:34 +0900 Subject: [PATCH 212/530] Backport trunk@53455 to make ruby-qt build --- ...undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch | 31 +++++++++++++++++++ ruby.spec | 10 +++++- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 ruby-2.3.0-undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch diff --git a/ruby-2.3.0-undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch b/ruby-2.3.0-undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch new file mode 100644 index 0000000..da7e980 --- /dev/null +++ b/ruby-2.3.0-undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch @@ -0,0 +1,31 @@ +From 98e565ec78cb4a07ffde8589ac4581fca31e9c17 Mon Sep 17 00:00:00 2001 +From: mrkn +Date: Thu, 7 Jan 2016 13:35:32 +0000 +Subject: [PATCH] * ruby.h: undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P + and HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P on C++. [ruby-core:72736] + [Bug #11962] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53455 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + ChangeLog | 6 ++++++ + include/ruby/ruby.h | 7 +++++++ + 2 files changed, 13 insertions(+) + +diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h +index 7aabf5b..82dca14 100644 +--- a/include/ruby/ruby.h ++++ b/include/ruby/ruby.h +@@ -26,6 +26,13 @@ extern "C" { + #include RUBY_EXTCONF_H + #endif + ++#if defined(__cplusplus) ++/* __builtin_choose_expr and __builtin_types_compatible aren't available ++ * on C++. See https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html */ ++# undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P ++# undef HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P ++#endif ++ + #include "defines.h" + + #define NORETURN_STYLE_NEW 1 diff --git a/ruby.spec b/ruby.spec index 8dadd1c..695e430 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 52 +%global release 53 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -122,6 +122,10 @@ Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch # Use miniruby to regenerate prelude.c. # https://bugs.ruby-lang.org/issues/10554 Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch +# 98e565ec78cb4a07ffde8589ac4581fca31e9c17 +# https://bugs.ruby-lang.org/issues/11962 +# https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/53455 +Patch8: ruby-2.3.0-undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -465,6 +469,7 @@ rm -rf ext/fiddle/libffi* %patch5 -p1 %patch6 -p1 %patch7 -p1 +%patch8 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -941,6 +946,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Jan 15 2016 Mamoru TASAKA - 2.3.0-53 +- Backport trunk@53455 to make ruby-qt build + * Wed Jan 06 2016 Vít Ondruch - 2.3.0-52 - Explicitly require RDoc, since weak dependencies are ignored by default. From 2414227a755e10692df045215819dbd453f35744 Mon Sep 17 00:00:00 2001 From: Mamoru TASAKA Date: Fri, 15 Jan 2016 14:35:09 +0900 Subject: [PATCH 213/530] kill one test for now --- ruby.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.spec b/ruby.spec index 695e430..8dc9661 100644 --- a/ruby.spec +++ b/ruby.spec @@ -645,6 +645,10 @@ make runruby TESTRUN_SCRIPT=%{SOURCE13} DISABLE_TESTS="" +# https://bugs.ruby-lang.org/issues/11480 +# Once seen: http://koji.fedoraproject.org/koji/taskinfo?taskID=12556650 +DISABLE_TESTS="$DISABLE_TESTS -x test_fork.rb" + make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig From dd6ce9ce9cc6b65f22e071e0a87fb79d67430ac5 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Wed, 3 Feb 2016 14:35:12 +0000 Subject: [PATCH 214/530] Add rubypick and rubygems requires to ruby-devel to deal with BuildRequires failures in koji, this likely needs to be revisited post mass rebuild but we need it now to ensure we don't have a high failure --- ruby.spec | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 8dc9661..0607822 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 53 +%global release 54 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -162,6 +162,8 @@ straight-forward, and extensible. Summary: A Ruby development environment Group: Development/Languages Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: rubypick +Requires: rubygems %description devel Header files and libraries for building an extension library for the @@ -950,6 +952,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Wed Feb 3 2016 Peter Robinson 2.3.0-54 +- Add rubypick and rubygems requires to ruby-devel to deal with BuildRequires + * Fri Jan 15 2016 Mamoru TASAKA - 2.3.0-53 - Backport trunk@53455 to make ruby-qt build From f2347fa378194ad532a199584d18fdd1429d1166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 29 Apr 2016 23:17:31 +0200 Subject: [PATCH 215/530] Update to Ruby 2.3.1. --- ...-additional-preludes-by-configuratio.patch | 2 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 +-- ruby-2.3.0-ruby_version.patch | 8 ++--- ...undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch | 31 ------------------- ruby-2.4.0-increase-timeout-for-ARMv7.patch | 25 +++++++++++++++ ruby.spec | 14 +++++---- sources | 2 +- 10 files changed, 44 insertions(+), 48 deletions(-) delete mode 100644 ruby-2.3.0-undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch create mode 100644 ruby-2.4.0-increase-timeout-for-ARMv7.patch diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index 6f16bae..75eb363 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -39,7 +39,7 @@ diff --git a/configure.in b/configure.in index 0e371e2..d4f1dcb 100644 --- a/configure.in +++ b/configure.in -@@ -4334,6 +4334,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -4374,6 +4374,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 33bd565..43fa7f6 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 37d9a62..553d4d0 100644 --- a/configure.in +++ b/configure.in -@@ -3592,6 +3592,11 @@ if test ${multiarch+set}; then +@@ -3632,6 +3632,11 @@ if test ${multiarch+set}; then fi archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 6661f9b..eb34107 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.in b/configure.in index db37cd6..ce8d149 100644 --- a/configure.in +++ b/configure.in -@@ -4188,7 +4188,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4228,7 +4228,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 3c3fcd4..9d78b05 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 553d4d0..03a4152 100644 --- a/configure.in +++ b/configure.in -@@ -4252,6 +4252,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4292,6 +4292,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 36a7711..e82f172 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index 03a4152..0e371e2 100644 --- a/configure.in +++ b/configure.in -@@ -4224,6 +4224,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4264,6 +4264,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 03a4152..0e371e2 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4248,6 +4252,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4288,6 +4292,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 6a13e3a..cdd016c 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.in b/configure.in index db37cd6..6e73fae 100644 --- a/configure.in +++ b/configure.in -@@ -4137,9 +4137,6 @@ AS_CASE(["$target_os"], +@@ -4177,9 +4177,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index db37cd6..6e73fae 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -4162,58 +4159,64 @@ AC_ARG_WITH(ridir, +@@ -4202,58 +4199,64 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -124,7 +124,7 @@ index db37cd6..6e73fae 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4230,6 +4233,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4270,6 +4273,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -286,7 +286,7 @@ diff --git a/configure.in b/configure.in index 6e73fae..c842725 100644 --- a/configure.in +++ b/configure.in -@@ -274,7 +274,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -275,7 +275,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) diff --git a/ruby-2.3.0-undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch b/ruby-2.3.0-undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch deleted file mode 100644 index da7e980..0000000 --- a/ruby-2.3.0-undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 98e565ec78cb4a07ffde8589ac4581fca31e9c17 Mon Sep 17 00:00:00 2001 -From: mrkn -Date: Thu, 7 Jan 2016 13:35:32 +0000 -Subject: [PATCH] * ruby.h: undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P - and HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P on C++. [ruby-core:72736] - [Bug #11962] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53455 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - ChangeLog | 6 ++++++ - include/ruby/ruby.h | 7 +++++++ - 2 files changed, 13 insertions(+) - -diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h -index 7aabf5b..82dca14 100644 ---- a/include/ruby/ruby.h -+++ b/include/ruby/ruby.h -@@ -26,6 +26,13 @@ extern "C" { - #include RUBY_EXTCONF_H - #endif - -+#if defined(__cplusplus) -+/* __builtin_choose_expr and __builtin_types_compatible aren't available -+ * on C++. See https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html */ -+# undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P -+# undef HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P -+#endif -+ - #include "defines.h" - - #define NORETURN_STYLE_NEW 1 diff --git a/ruby-2.4.0-increase-timeout-for-ARMv7.patch b/ruby-2.4.0-increase-timeout-for-ARMv7.patch new file mode 100644 index 0000000..d0dfcb2 --- /dev/null +++ b/ruby-2.4.0-increase-timeout-for-ARMv7.patch @@ -0,0 +1,25 @@ +From 35568b41699ca1cd466fc8d23a84139b73ad0f1b Mon Sep 17 00:00:00 2001 +From: naruse +Date: Tue, 19 Jan 2016 02:52:37 +0000 +Subject: [PATCH] increase timeout for ARMv7 + +http://rubyci.s3.amazonaws.com/scw-9d6766/ruby-trunk/log/20160113T091704Z.diff.html.gz + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53586 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + test/ruby/test_iseq.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/ruby/test_iseq.rb b/test/ruby/test_iseq.rb +index 7af8c1b..4561eeb 100644 +--- a/test/ruby/test_iseq.rb ++++ b/test/ruby/test_iseq.rb +@@ -187,7 +187,7 @@ def test_safe_call_chain + end + + def test_parent_iseq_mark +- assert_separately([], <<-'end;') ++ assert_separately([], <<-'end;', timeout: 20) + ->{ + ->{ + ->{ diff --git a/ruby.spec b/ruby.spec index 0607822..da5411b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 3 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 54 +%global release 55 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -122,10 +122,9 @@ Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch # Use miniruby to regenerate prelude.c. # https://bugs.ruby-lang.org/issues/10554 Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch -# 98e565ec78cb4a07ffde8589ac4581fca31e9c17 -# https://bugs.ruby-lang.org/issues/11962 -# https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/53455 -Patch8: ruby-2.3.0-undef-BUILTIN_CHOOSE_EXPR_CONSTANT_P.patch +# Prevent test failures on ARM. +# https://bugs.ruby-lang.org/issues/12331 +Patch8: ruby-2.4.0-increase-timeout-for-ARMv7.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -952,6 +951,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Apr 29 2016 Vít Ondruch - 2.3.1-55 +- Update to Ruby 2.3.1. + * Wed Feb 3 2016 Peter Robinson 2.3.0-54 - Add rubypick and rubygems requires to ruby-devel to deal with BuildRequires diff --git a/sources b/sources index f935fb7..6eb7405 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -92ef54e033fb95ec9bdf7023666e5f1f ruby-2.3.0.tar.xz +01e9d172a5c33b385e92fc0cc2899766 ruby-2.3.1.tar.xz From cad4c2ab270483dc0846adf830bf63529387dff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 23 May 2016 14:02:20 +0200 Subject: [PATCH 216/530] Requires rubygem(json) for rubygem-rdoc (rhbz#1325022). This makes it compatible with rubygem-rdoc package built from rdoc gem. --- ruby.spec | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index da5411b..0744039 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 55 +%global release 56 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -261,7 +261,9 @@ License: GPLv2 and Ruby and MIT and SIL Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Requires: ruby(irb) = %{irb_version} -Recommends: rubygem(json) >= %{json_version} +# Hardcode the dependency to keep it compatible with dependencies of the +# official rubygem-rdoc gem. +Requires: rubygem(json) >= %{json_version} Provides: rdoc = %{version}-%{release} Provides: ri = %{version}-%{release} Provides: rubygem(rdoc) = %{version}-%{release} @@ -951,6 +953,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Mon May 23 2016 Vít Ondruch - 2.3.1-56 +- Requires rubygem(json) for rubygem-rdoc (rhbz#1325022). + * Fri Apr 29 2016 Vít Ondruch - 2.3.1-55 - Update to Ruby 2.3.1. From b1466a4c8f2cd28556efcd93c5dc539bff041be9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 12 Jul 2016 13:50:14 +0200 Subject: [PATCH 217/530] Make symlinks for json gem. --- ruby.spec | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 0744039..e75c0c8 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 56 +%global release 57 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -591,6 +591,9 @@ mkdir -p %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version} mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/ mv %{buildroot}%{gem_dir}/specifications/default/json-%{json_version}.gemspec %{buildroot}%{gem_dir}/specifications +ln -s %{gem_dir}/gems/json-%{json_version}/lib/json.rb %{buildroot}%{ruby_libdir}/json.rb +ln -s %{gem_dir}/gems/json-%{json_version}/lib/json %{buildroot}%{ruby_libdir}/json +ln -s %{_libdir}/gems/%{name}/json-%{json_version}/json/ %{buildroot}%{ruby_libarchdir}/json mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version} @@ -912,6 +915,8 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/io-console-%{io_console_version}.gemspec %files -n rubygem-json +%{ruby_libdir}/json* +%{ruby_libarchdir}/json* %{_libdir}/gems/%{name}/json-%{json_version} %{gem_dir}/gems/json-%{json_version} %{gem_dir}/specifications/json-%{json_version}.gemspec @@ -953,6 +958,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Jul 12 2016 Vít Ondruch - 2.3.1-57 +- Make symlinks for json gem. + * Mon May 23 2016 Vít Ondruch - 2.3.1-56 - Requires rubygem(json) for rubygem-rdoc (rhbz#1325022). From 7684b6800d525e61d12253b21efa2447f4f5ad26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 10 Aug 2016 18:26:29 +0200 Subject: [PATCH 218/530] Workaround "an invalid stdio handle" error on PPC (rhbz#1361037). --- ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch | 119 +++++++++++++++++++ ruby.spec | 10 +- 2 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch diff --git a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch new file mode 100644 index 0000000..8765d2a --- /dev/null +++ b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch @@ -0,0 +1,119 @@ +From 346e147ba6480839b87046e9a9efab0bf6ed3660 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Wed, 10 Aug 2016 17:35:48 +0200 +Subject: [PATCH] Rely on ldd to detect glibc. + +This is just workaround, since we know we are quite sure this will be successful +on Red Hat platforms. + +This workaround rhbz#1361037 +--- + test/fiddle/helper.rb | 92 --------------------------------------------------- + 1 file changed, 92 deletions(-) + +diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb +index 1da3d93..65148a1 100644 +--- a/test/fiddle/helper.rb ++++ b/test/fiddle/helper.rb +@@ -6,98 +6,6 @@ + + libc_so = libm_so = nil + +-case RUBY_PLATFORM +-when /cygwin/ +- libc_so = "cygwin1.dll" +- libm_so = "cygwin1.dll" +-when /x86_64-linux/ +- libc_so = "/lib64/libc.so.6" +- libm_so = "/lib64/libm.so.6" +-when /linux/ +- libdir = '/lib' +- case [0].pack('L!').size +- when 4 +- # 32-bit ruby +- libdir = '/lib32' if File.directory? '/lib32' +- when 8 +- # 64-bit ruby +- libdir = '/lib64' if File.directory? '/lib64' +- end +- libc_so = File.join(libdir, "libc.so.6") +- libm_so = File.join(libdir, "libm.so.6") +-when /mingw/, /mswin/ +- require "rbconfig" +- crtname = RbConfig::CONFIG["RUBY_SO_NAME"][/msvc\w+/] || 'ucrtbase' +- libc_so = libm_so = "#{crtname}.dll" +-when /darwin/ +- libc_so = "/usr/lib/libc.dylib" +- libm_so = "/usr/lib/libm.dylib" +-when /kfreebsd/ +- libc_so = "/lib/libc.so.0.1" +- libm_so = "/lib/libm.so.1" +-when /gnu/ #GNU/Hurd +- libc_so = "/lib/libc.so.0.3" +- libm_so = "/lib/libm.so.6" +-when /mirbsd/ +- libc_so = "/usr/lib/libc.so.41.10" +- libm_so = "/usr/lib/libm.so.7.0" +-when /freebsd/ +- libc_so = "/lib/libc.so.7" +- libm_so = "/lib/libm.so.5" +-when /bsd|dragonfly/ +- libc_so = "/usr/lib/libc.so" +- libm_so = "/usr/lib/libm.so" +-when /solaris/ +- libdir = '/lib' +- case [0].pack('L!').size +- when 4 +- # 32-bit ruby +- libdir = '/lib' if File.directory? '/lib' +- when 8 +- # 64-bit ruby +- libdir = '/lib/64' if File.directory? '/lib/64' +- end +- libc_so = File.join(libdir, "libc.so") +- libm_so = File.join(libdir, "libm.so") +-when /aix/ +- pwd=Dir.pwd +- libc_so = libm_so = "#{pwd}/libaixdltest.so" +- unless File.exist? libc_so +- cobjs=%w!strcpy.o! +- mobjs=%w!floats.o sin.o! +- funcs=%w!sin sinf strcpy strncpy! +- expfile='dltest.exp' +- require 'tmpdir' +- Dir.mktmpdir do |dir| +- begin +- Dir.chdir dir +- %x!/usr/bin/ar x /usr/lib/libc.a #{cobjs.join(' ')}! +- %x!/usr/bin/ar x /usr/lib/libm.a #{mobjs.join(' ')}! +- %x!echo "#{funcs.join("\n")}\n" > #{expfile}! +- require 'rbconfig' +- if RbConfig::CONFIG["GCC"] = 'yes' +- lflag='-Wl,' +- else +- lflag='' +- end +- flags="#{lflag}-bE:#{expfile} #{lflag}-bnoentry -lm" +- %x!#{RbConfig::CONFIG["LDSHARED"]} -o #{libc_so} #{(cobjs+mobjs).join(' ')} #{flags}! +- ensure +- Dir.chdir pwd +- end +- end +- end +-else +- libc_so = ARGV[0] if ARGV[0] && ARGV[0][0] == ?/ +- libm_so = ARGV[1] if ARGV[1] && ARGV[1][0] == ?/ +- if( !(libc_so && libm_so) ) +- $stderr.puts("libc and libm not found: #{$0} ") +- end +-end +- +-libc_so = nil if !libc_so || (libc_so[0] == ?/ && !File.file?(libc_so)) +-libm_so = nil if !libm_so || (libm_so[0] == ?/ && !File.file?(libm_so)) +- + if !libc_so || !libm_so + ruby = EnvUtil.rubybin + ldd = `ldd #{ruby}` +-- +2.9.2 + diff --git a/ruby.spec b/ruby.spec index e75c0c8..829f506 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 57 +%global release 58 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -125,6 +125,10 @@ Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch # Prevent test failures on ARM. # https://bugs.ruby-lang.org/issues/12331 Patch8: ruby-2.4.0-increase-timeout-for-ARMv7.patch +# Workaround "an invalid stdio handle" error on PPC, due to recently introduced +# hardening features of glibc (rhbz#1361037). +# https://bugs.ruby-lang.org/issues/12666 +Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -473,6 +477,7 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch7 -p1 %patch8 -p1 +%patch9 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -958,6 +963,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Wed Aug 10 2016 Vít Ondruch - 2.3.1-58 +- Workaround "an invalid stdio handle" error on PPC (rhbz#1361037). + * Tue Jul 12 2016 Vít Ondruch - 2.3.1-57 - Make symlinks for json gem. From 46551f13fcf318224916557bdaff973335c2056c Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Fri, 14 Oct 2016 10:36:21 +0100 Subject: [PATCH 219/530] config.h: Add riscv64 variant. --- config.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config.h b/config.h index 39e4a5c..b44f715 100644 --- a/config.h +++ b/config.h @@ -52,6 +52,8 @@ #include "ruby/config-mipsel.h" #elif defined(__mips) #include "ruby/config-mips.h" +#elif defined(__riscv64) +#include "ruby/config-riscv64.h" #else #error "The ruby-devel package is not usable with the architecture." #endif From c4c93c1113cad7eab3aaa57a2bd9247b530cff2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 21 Oct 2016 16:47:58 +0200 Subject: [PATCH 220/530] Use continue to use OpenSSL 1.0 for the moment. Only upcoming Ruby 2.4 support OpenSSL 1.1 so far: https://bugs.ruby-lang.org/issues/12830 --- ruby.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 829f506..3cc576b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 58 +%global release 59 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -139,7 +139,7 @@ Recommends: rubygem(did_you_mean) >= %{did_you_mean_version} BuildRequires: autoconf BuildRequires: gdbm-devel BuildRequires: libffi-devel -BuildRequires: openssl-devel +BuildRequires: compat-openssl10-devel BuildRequires: libyaml-devel BuildRequires: readline-devel BuildRequires: tk-devel @@ -963,6 +963,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Oct 21 2016 Vít Ondruch - 2.3.1-59 +- Use continue to use OpenSSL 1.0 for the moment. + * Wed Aug 10 2016 Vít Ondruch - 2.3.1-58 - Workaround "an invalid stdio handle" error on PPC (rhbz#1361037). From dbf79976ab87a9fa860c1454c6ec7118d4b333f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 21 Oct 2016 16:48:42 +0200 Subject: [PATCH 221/530] Harden package. --- ruby.spec | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ruby.spec b/ruby.spec index 3cc576b..659a4ed 100644 --- a/ruby.spec +++ b/ruby.spec @@ -490,6 +490,10 @@ cp -a %{SOURCE6} . %build autoconf +# Ruby does not respec LDFLAGS :( +# https://bugs.ruby-lang.org/issues/11863 +export EXTLDFLAGS="%{__global_ldflags}" + %configure \ --with-rubylibprefix='%{ruby_libdir}' \ --with-archlibdir='%{_libdir}' \ @@ -965,6 +969,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Fri Oct 21 2016 Vít Ondruch - 2.3.1-59 - Use continue to use OpenSSL 1.0 for the moment. +- Harden package. * Wed Aug 10 2016 Vít Ondruch - 2.3.1-58 - Workaround "an invalid stdio handle" error on PPC (rhbz#1361037). From 4fb1d9c02d92ae2f7ecaf1b644695ed94fc12978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 20 Oct 2016 13:55:21 +0200 Subject: [PATCH 222/530] Add gemspec_add_dep and gemspec_remove_dep macros. --- macros.rubygems | 78 +++++++++++++++++++++++++++++++++++++++++++++++++ ruby.spec | 1 + 2 files changed, 79 insertions(+) diff --git a/macros.rubygems b/macros.rubygems index 6d99ac3..8218ec9 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -34,3 +34,81 @@ gem install \\\ %rubygems_default_filter %{expand: \ %global __provides_exclude_from %{?__provides_exclude_from:%{__provides_exclude_from}|}^%{gem_extdir_mri}/.*\\\\.so$ \ } + +# The 'read' command in gemspec_add _depand gemspec_remove_dep macros is not +# essential, but it is usefull to make the sript appear in build log. + +# Add dependency named gem with version requirements to .gemspec. It adds +# runtime dependency by default. +# -g Specifies name of the gem dependency. +# -s Overrides the default .gemspec location. +# -d Add development dependecy. +# +# The remaining arguments are expected to be version requirements and should +# be valid Ruby code. +%gemspec_add_dep(g:s:d) \ +read -d '' gemspec_add_dep_script << 'EOR' || : \ + gemspec_file = '%{-s*}%{!?-s:./%{gem_name}.gemspec}' \ + \ + name = '%{-g*}' \ + requirements = %{*}%{!?1:nil} \ + \ + type = :%{!?-d:runtime}%{?-d:development} \ + \ + spec = Gem::Specification.load(gemspec_file) \ + abort("#{gemspec_file} is not accessible.") unless spec \ + \ + dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \ + if dep \ + dep.requirement.concat requirements \ + else \ + spec.public_send "add_#{type}_dependency", name, requirements \ + end \ + File.write gemspec_file, spec.to_ruby \ +EOR\ +echo "$gemspec_add_dep_script" | ruby \ +unset -v gemspec_add_dep_script \ +%{nil} + +# Remove dependency named gem with version requirements to .gemspec. It +# removes runtime dependency by default. +# -g Specifies name of the gem dependency. +# -s Overrides the default .gemspec location. +# -d Remove development dependecy. +# +# The remaining arguments are expected to be version requirements and should +# be valid Ruby code. The macro fails if these specific requirements can't be +# removed. +%gemspec_remove_dep(g:s:d) \ +read -d '' gemspec_remove_dep_script << 'EOR' || : \ + gemspec_file = '%{-s*}%{!?-s:./%{gem_name}.gemspec}' \ + \ + name = '%{-g*}' \ + requirements = %{*}%{!?1:nil} \ + \ + type = :%{!?-d:runtime}%{?-d:development} \ + \ + spec = Gem::Specification.load(gemspec_file) \ + abort("#{gemspec_file} is not accessible.") unless spec \ + \ + dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \ + if dep \ + if requirements \ + requirements = Gem::Requirement.create(requirements).requirements \ + requirements.each do |r| \ + unless dep.requirement.requirements.reject! { |dependency_requirements| dependency_requirements == r } \ + abort("Requirement '#{r.first} #{r.last}' was not possible to remove for dependency '#{dep}'!") \ + end \ + end \ + spec.dependencies.delete dep if dep.requirement.requirements.empty? \ + else \ + spec.dependencies.delete dep \ + end \ + else \ + abort("Dependency '#{name}' was not found!") \ + end \ + File.write gemspec_file, spec.to_ruby \ +EOR\ +echo "$gemspec_remove_dep_script" | ruby \ +unset -v gemspec_remove_dep_script \ +%{nil} diff --git a/ruby.spec b/ruby.spec index 659a4ed..e0ba0de 100644 --- a/ruby.spec +++ b/ruby.spec @@ -969,6 +969,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Fri Oct 21 2016 Vít Ondruch - 2.3.1-59 - Use continue to use OpenSSL 1.0 for the moment. +- Add gemspec_add_dep and gemspec_remove_dep macros. - Harden package. * Wed Aug 10 2016 Vít Ondruch - 2.3.1-58 From 2e9e67ab5bb1bd97212856674291c515f5010030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 21 Oct 2016 12:36:39 +0200 Subject: [PATCH 223/530] Improve macro documentation. --- macros.rubygems | 52 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/macros.rubygems b/macros.rubygems index 8218ec9..45c59c4 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -10,9 +10,14 @@ %gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}.gemspec %gem_docdir %{gem_dir}/doc/%{gem_name}-%{version} -# Install gem into appropriate directory. -# -n Overrides gem file name for installation. -# -d Set installation directory. + +# %gem_install - Install gem into appropriate directory. +# +# Usage: %gem_install [options] +# +# -n Overrides gem file name for installation. +# -d Set installation directory. +# %gem_install(d:n:) \ mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \ \ @@ -26,6 +31,7 @@ gem install \\\ %{-n*}%{!?-n:%{gem_name}-%{version}.gem} \ %{nil} + # For rubygems packages we want to filter out any provides caused by private # libs in %%{gem_archdir}. # @@ -35,17 +41,23 @@ gem install \\\ %global __provides_exclude_from %{?__provides_exclude_from:%{__provides_exclude_from}|}^%{gem_extdir_mri}/.*\\\\.so$ \ } + # The 'read' command in gemspec_add _depand gemspec_remove_dep macros is not # essential, but it is usefull to make the sript appear in build log. -# Add dependency named gem with version requirements to .gemspec. It adds -# runtime dependency by default. -# -g Specifies name of the gem dependency. -# -s Overrides the default .gemspec location. -# -d Add development dependecy. + +# %gemspec_add_dep - Add dependency into .gemspec. +# +# Usage: %gemspec_add_dep -g [options] [requirements] +# +# Add dependency named to .gemspec file. The macro adds runtime +# dependency by default. The [requirements] argument can be used to specify +# the dependency constraints more precisely. It is expected to be valid Ruby +# code. +# +# -s Overrides the default .gemspec location. +# -d Add development dependecy. # -# The remaining arguments are expected to be version requirements and should -# be valid Ruby code. %gemspec_add_dep(g:s:d) \ read -d '' gemspec_add_dep_script << 'EOR' || : \ gemspec_file = '%{-s*}%{!?-s:./%{gem_name}.gemspec}' \ @@ -70,15 +82,19 @@ echo "$gemspec_add_dep_script" | ruby \ unset -v gemspec_add_dep_script \ %{nil} -# Remove dependency named gem with version requirements to .gemspec. It -# removes runtime dependency by default. -# -g Specifies name of the gem dependency. -# -s Overrides the default .gemspec location. -# -d Remove development dependecy. + +# %gemspec_remove_dep - Remove dependency from .gemspec. +# +# Usage: %gemspec_remove_dep -g [options] [requirements] +# +# Remove dependency named from .gemspec file. The macro removes runtime +# dependency by default. The [requirements] argument can be used to specify +# the dependency constraints more precisely. It is expected to be valid Ruby +# code. The macro fails if these specific requirements can't be removed. +# +# -s Overrides the default .gemspec location. +# -d Remove development dependecy. # -# The remaining arguments are expected to be version requirements and should -# be valid Ruby code. The macro fails if these specific requirements can't be -# removed. %gemspec_remove_dep(g:s:d) \ read -d '' gemspec_remove_dep_script << 'EOR' || : \ gemspec_file = '%{-s*}%{!?-s:./%{gem_name}.gemspec}' \ From 2221c5b84347a5b6b430e191719c542557a3d7a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 24 Oct 2016 10:48:05 +0200 Subject: [PATCH 224/530] Avoid conflict between OpenSSL 1.0.x and 1.1.x. --- ...-ex_data-index-for-X509_STORE-_CTX-r.patch | 206 ++++++++++++++++++ ruby.spec | 6 +- 2 files changed, 211 insertions(+), 1 deletion(-) create mode 100644 ruby-2.4.0-openssl-register-ex_data-index-for-X509_STORE-_CTX-r.patch diff --git a/ruby-2.4.0-openssl-register-ex_data-index-for-X509_STORE-_CTX-r.patch b/ruby-2.4.0-openssl-register-ex_data-index-for-X509_STORE-_CTX-r.patch new file mode 100644 index 0000000..594d5f9 --- /dev/null +++ b/ruby-2.4.0-openssl-register-ex_data-index-for-X509_STORE-_CTX-r.patch @@ -0,0 +1,206 @@ +From 2aabfcd4c604891ab043649129bb1404e3c311f0 Mon Sep 17 00:00:00 2001 +From: rhe +Date: Thu, 19 May 2016 04:53:05 +0000 +Subject: [PATCH] openssl: register ex_data index for X509_STORE{_CTX,} + respectively + +* ext/openssl/ossl.c (Init_openssl): register an ex_data index for + X509_STORE and X509_STORE_CTX respectively. Since they don't share + the ex_data index registry, we can't use the same index. + (ossl_verify_cb): use the the correct index. + +* ext/openssl/ossl_ssl.c (ossl_ssl_verify_callback): ditto. + +* ext/openssl/ossl_x509store.c (ossl_x509store_set_vfy_cb): ditto. + (ossl_x509stctx_verify): ditto. + +* ext/openssl/ossl.h (void ossl_clear_error): add extern declarations + of ossl_store_{ctx_,}ex_verify_cb_idx. + +* ext/openssl/openssl_missing.c: remove X509_STORE_set_ex_data and + X509_STORE_get_ex_data. + +* ext/openssl/openssl_missing.h: implement X509_STORE_get_ex_data, + X509_STORE_set_ex_data and X509_STORE_get_ex_new_index as macros. + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + ChangeLog | 21 +++++++++++++++++++++ + ext/openssl/openssl_missing.c | 14 -------------- + ext/openssl/openssl_missing.h | 9 +++++++-- + ext/openssl/ossl.c | 15 +++++++++------ + ext/openssl/ossl.h | 3 ++- + ext/openssl/ossl_ssl.c | 2 +- + ext/openssl/ossl_x509store.c | 4 ++-- + 7 files changed, 42 insertions(+), 26 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index c163123..73ea253 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,24 @@ ++Thu May 19 13:22:44 2016 Kazuki Yamaguchi ++ ++ * ext/openssl/ossl.c (Init_openssl): register an ex_data index for ++ X509_STORE and X509_STORE_CTX respectively. Since they don't share ++ the ex_data index registry, we can't use the same index. ++ (ossl_verify_cb): use the the correct index. ++ ++ * ext/openssl/ossl_ssl.c (ossl_ssl_verify_callback): ditto. ++ ++ * ext/openssl/ossl_x509store.c (ossl_x509store_set_vfy_cb): ditto. ++ (ossl_x509stctx_verify): ditto. ++ ++ * ext/openssl/ossl.h (void ossl_clear_error): add extern declarations ++ of ossl_store_{ctx_,}ex_verify_cb_idx. ++ ++ * ext/openssl/openssl_missing.c: remove X509_STORE_set_ex_data and ++ X509_STORE_get_ex_data. ++ ++ * ext/openssl/openssl_missing.h: implement X509_STORE_get_ex_data, ++ X509_STORE_set_ex_data and X509_STORE_get_ex_new_index as macros. ++ + Tue Apr 26 02:58:51 2016 Marcus Stollsteimer + + * doc/extension.rdoc: Improvements to english grammers. +diff --git a/ext/openssl/openssl_missing.c b/ext/openssl/openssl_missing.c +index bd8eef5..31f2d0a 100644 +--- a/ext/openssl/openssl_missing.c ++++ b/ext/openssl/openssl_missing.c +@@ -34,20 +34,6 @@ HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in) + #endif /* HAVE_HMAC_CTX_COPY */ + #endif /* NO_HMAC */ + +-#if !defined(HAVE_X509_STORE_SET_EX_DATA) +-int X509_STORE_set_ex_data(X509_STORE *str, int idx, void *data) +-{ +- return CRYPTO_set_ex_data(&str->ex_data, idx, data); +-} +-#endif +- +-#if !defined(HAVE_X509_STORE_GET_EX_DATA) +-void *X509_STORE_get_ex_data(X509_STORE *str, int idx) +-{ +- return CRYPTO_get_ex_data(&str->ex_data, idx); +-} +-#endif +- + #if !defined(HAVE_EVP_MD_CTX_CREATE) + EVP_MD_CTX * + EVP_MD_CTX_create(void) +diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h +index 2dc49d3..955579c 100644 +--- a/ext/openssl/openssl_missing.h ++++ b/ext/openssl/openssl_missing.h +@@ -133,11 +133,16 @@ int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, EVP_CIPHER_CTX *in); + #endif + + #if !defined(HAVE_X509_STORE_GET_EX_DATA) +-void *X509_STORE_get_ex_data(X509_STORE *str, int idx); ++# define X509_STORE_get_ex_data(x, idx) \ ++ CRYPTO_get_ex_data(&(x)->ex_data, (idx)) + #endif + + #if !defined(HAVE_X509_STORE_SET_EX_DATA) +-int X509_STORE_set_ex_data(X509_STORE *str, int idx, void *data); ++# define X509_STORE_set_ex_data(x, idx, data) \ ++ CRYPTO_set_ex_data(&(x)->ex_data, (idx), (data)) ++# define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ ++ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, (l), (p), \ ++ (newf), (dupf), (freef)) + #endif + + #if !defined(HAVE_X509_CRL_SET_VERSION) +diff --git a/ext/openssl/ossl.c b/ext/openssl/ossl.c +index ac82815..2b5579e 100644 +--- a/ext/openssl/ossl.c ++++ b/ext/openssl/ossl.c +@@ -198,7 +198,8 @@ ossl_pem_passwd_cb(char *buf, int max_len, int flag, void *pwd) + /* + * Verify callback + */ +-int ossl_verify_cb_idx; ++int ossl_store_ctx_ex_verify_cb_idx; ++int ossl_store_ex_verify_cb_idx; + + VALUE + ossl_call_verify_cb_proc(struct ossl_verify_cb_args *args) +@@ -214,10 +215,10 @@ ossl_verify_cb(int ok, X509_STORE_CTX *ctx) + struct ossl_verify_cb_args args; + int state = 0; + +- proc = (VALUE)X509_STORE_CTX_get_ex_data(ctx, ossl_verify_cb_idx); +- if ((void*)proc == 0) +- proc = (VALUE)X509_STORE_get_ex_data(ctx->ctx, ossl_verify_cb_idx); +- if ((void*)proc == 0) ++ proc = (VALUE)X509_STORE_CTX_get_ex_data(ctx, ossl_store_ctx_ex_verify_cb_idx); ++ if (!proc) ++ proc = (VALUE)X509_STORE_get_ex_data(ctx->ctx, ossl_store_ex_verify_cb_idx); ++ if (!proc) + return ok; + if (!NIL_P(proc)) { + ret = Qfalse; +@@ -1127,8 +1128,10 @@ Init_openssl(void) + /* + * Verify callback Proc index for ext-data + */ +- if ((ossl_verify_cb_idx = X509_STORE_CTX_get_ex_new_index(0, (void *)"ossl_verify_cb_idx", 0, 0, 0)) < 0) ++ if ((ossl_store_ctx_ex_verify_cb_idx = X509_STORE_CTX_get_ex_new_index(0, (void *)"ossl_store_ctx_ex_verify_cb_idx", 0, 0, 0)) < 0) + ossl_raise(eOSSLError, "X509_STORE_CTX_get_ex_new_index"); ++ if ((ossl_store_ex_verify_cb_idx = X509_STORE_get_ex_new_index(0, (void *)"ossl_store_ex_verify_cb_idx", 0, 0, 0)) < 0) ++ ossl_raise(eOSSLError, "X509_STORE_get_ex_new_index"); + + /* + * Init debug core +diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h +index a31ca95..5b2f6e1 100644 +--- a/ext/openssl/ossl.h ++++ b/ext/openssl/ossl.h +@@ -167,7 +167,8 @@ void ossl_clear_error(void); + /* + * Verify callback + */ +-extern int ossl_verify_cb_idx; ++extern int ossl_store_ctx_ex_verify_cb_idx; ++extern int ossl_store_ex_verify_cb_idx; + + struct ossl_verify_cb_args { + VALUE proc; +diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c +index 938e36f..87df7f9 100644 +--- a/ext/openssl/ossl_ssl.c ++++ b/ext/openssl/ossl_ssl.c +@@ -307,7 +307,7 @@ ossl_ssl_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) + + ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); + cb = (VALUE)SSL_get_ex_data(ssl, ossl_ssl_ex_vcb_idx); +- X509_STORE_CTX_set_ex_data(ctx, ossl_verify_cb_idx, (void*)cb); ++ X509_STORE_CTX_set_ex_data(ctx, ossl_store_ctx_ex_verify_cb_idx, (void *)cb); + return ossl_verify_cb(preverify_ok, ctx); + } + +diff --git a/ext/openssl/ossl_x509store.c b/ext/openssl/ossl_x509store.c +index aca25b1..8d6f9de 100644 +--- a/ext/openssl/ossl_x509store.c ++++ b/ext/openssl/ossl_x509store.c +@@ -130,7 +130,7 @@ ossl_x509store_set_vfy_cb(VALUE self, VALUE cb) + X509_STORE *store; + + GetX509Store(self, store); +- X509_STORE_set_ex_data(store, ossl_verify_cb_idx, (void*)cb); ++ X509_STORE_set_ex_data(store, ossl_store_ex_verify_cb_idx, (void *)cb); + rb_iv_set(self, "@verify_callback", cb); + + return cb; +@@ -467,7 +467,7 @@ ossl_x509stctx_verify(VALUE self) + int result; + + GetX509StCtx(self, ctx); +- X509_STORE_CTX_set_ex_data(ctx, ossl_verify_cb_idx, ++ X509_STORE_CTX_set_ex_data(ctx, ossl_store_ctx_ex_verify_cb_idx, + (void*)rb_iv_get(self, "@verify_callback")); + result = X509_verify_cert(ctx); + +-- +2.10.0 + diff --git a/ruby.spec b/ruby.spec index e0ba0de..2817201 100644 --- a/ruby.spec +++ b/ruby.spec @@ -129,6 +129,9 @@ Patch8: ruby-2.4.0-increase-timeout-for-ARMv7.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +# Avoid conflict between OpenSSL 1.0.x and 1.1.x. +# https://bugs.ruby-lang.org/issues/12868 +Patch10: ruby-2.4.0-openssl-register-ex_data-index-for-X509_STORE-_CTX-r.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -478,6 +481,7 @@ rm -rf ext/fiddle/libffi* %patch7 -p1 %patch8 -p1 %patch9 -p1 +%patch10 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -968,7 +972,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Fri Oct 21 2016 Vít Ondruch - 2.3.1-59 -- Use continue to use OpenSSL 1.0 for the moment. +- Continue to use OpenSSL 1.0 for the moment. - Add gemspec_add_dep and gemspec_remove_dep macros. - Harden package. From 0a64e4b921f6b38f91813ae8dbd714facf4e9491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 18 Nov 2016 16:58:41 +0100 Subject: [PATCH 225/530] Update to Ruby 2.3.2. --- ruby-2.3.0-ruby_version.patch | 4 +- ruby-2.4.0-increase-timeout-for-ARMv7.patch | 25 --- ...-ex_data-index-for-X509_STORE-_CTX-r.patch | 206 ------------------ ruby.spec | 26 +-- sources | 2 +- 5 files changed, 14 insertions(+), 249 deletions(-) delete mode 100644 ruby-2.4.0-increase-timeout-for-ARMv7.patch delete mode 100644 ruby-2.4.0-openssl-register-ex_data-index-for-X509_STORE-_CTX-r.patch diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index cdd016c..96d7249 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -249,7 +249,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index 0428bea..b6e090e 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -963,7 +963,8 @@ def test_self_use_paths +@@ -962,7 +962,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -259,7 +259,7 @@ index 0428bea..b6e090e 100644 assert_equal File.join(parts), Gem.user_dir end -@@ -1090,7 +1091,7 @@ def test_self_user_home_user_drive_and_path +@@ -1089,7 +1090,7 @@ def test_self_user_home_user_drive_and_path def test_self_vendor_dir expected = File.join RbConfig::CONFIG['vendordir'], 'gems', diff --git a/ruby-2.4.0-increase-timeout-for-ARMv7.patch b/ruby-2.4.0-increase-timeout-for-ARMv7.patch deleted file mode 100644 index d0dfcb2..0000000 --- a/ruby-2.4.0-increase-timeout-for-ARMv7.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 35568b41699ca1cd466fc8d23a84139b73ad0f1b Mon Sep 17 00:00:00 2001 -From: naruse -Date: Tue, 19 Jan 2016 02:52:37 +0000 -Subject: [PATCH] increase timeout for ARMv7 - -http://rubyci.s3.amazonaws.com/scw-9d6766/ruby-trunk/log/20160113T091704Z.diff.html.gz - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53586 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - test/ruby/test_iseq.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/test/ruby/test_iseq.rb b/test/ruby/test_iseq.rb -index 7af8c1b..4561eeb 100644 ---- a/test/ruby/test_iseq.rb -+++ b/test/ruby/test_iseq.rb -@@ -187,7 +187,7 @@ def test_safe_call_chain - end - - def test_parent_iseq_mark -- assert_separately([], <<-'end;') -+ assert_separately([], <<-'end;', timeout: 20) - ->{ - ->{ - ->{ diff --git a/ruby-2.4.0-openssl-register-ex_data-index-for-X509_STORE-_CTX-r.patch b/ruby-2.4.0-openssl-register-ex_data-index-for-X509_STORE-_CTX-r.patch deleted file mode 100644 index 594d5f9..0000000 --- a/ruby-2.4.0-openssl-register-ex_data-index-for-X509_STORE-_CTX-r.patch +++ /dev/null @@ -1,206 +0,0 @@ -From 2aabfcd4c604891ab043649129bb1404e3c311f0 Mon Sep 17 00:00:00 2001 -From: rhe -Date: Thu, 19 May 2016 04:53:05 +0000 -Subject: [PATCH] openssl: register ex_data index for X509_STORE{_CTX,} - respectively - -* ext/openssl/ossl.c (Init_openssl): register an ex_data index for - X509_STORE and X509_STORE_CTX respectively. Since they don't share - the ex_data index registry, we can't use the same index. - (ossl_verify_cb): use the the correct index. - -* ext/openssl/ossl_ssl.c (ossl_ssl_verify_callback): ditto. - -* ext/openssl/ossl_x509store.c (ossl_x509store_set_vfy_cb): ditto. - (ossl_x509stctx_verify): ditto. - -* ext/openssl/ossl.h (void ossl_clear_error): add extern declarations - of ossl_store_{ctx_,}ex_verify_cb_idx. - -* ext/openssl/openssl_missing.c: remove X509_STORE_set_ex_data and - X509_STORE_get_ex_data. - -* ext/openssl/openssl_missing.h: implement X509_STORE_get_ex_data, - X509_STORE_set_ex_data and X509_STORE_get_ex_new_index as macros. - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - ChangeLog | 21 +++++++++++++++++++++ - ext/openssl/openssl_missing.c | 14 -------------- - ext/openssl/openssl_missing.h | 9 +++++++-- - ext/openssl/ossl.c | 15 +++++++++------ - ext/openssl/ossl.h | 3 ++- - ext/openssl/ossl_ssl.c | 2 +- - ext/openssl/ossl_x509store.c | 4 ++-- - 7 files changed, 42 insertions(+), 26 deletions(-) - -diff --git a/ChangeLog b/ChangeLog -index c163123..73ea253 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -1,3 +1,24 @@ -+Thu May 19 13:22:44 2016 Kazuki Yamaguchi -+ -+ * ext/openssl/ossl.c (Init_openssl): register an ex_data index for -+ X509_STORE and X509_STORE_CTX respectively. Since they don't share -+ the ex_data index registry, we can't use the same index. -+ (ossl_verify_cb): use the the correct index. -+ -+ * ext/openssl/ossl_ssl.c (ossl_ssl_verify_callback): ditto. -+ -+ * ext/openssl/ossl_x509store.c (ossl_x509store_set_vfy_cb): ditto. -+ (ossl_x509stctx_verify): ditto. -+ -+ * ext/openssl/ossl.h (void ossl_clear_error): add extern declarations -+ of ossl_store_{ctx_,}ex_verify_cb_idx. -+ -+ * ext/openssl/openssl_missing.c: remove X509_STORE_set_ex_data and -+ X509_STORE_get_ex_data. -+ -+ * ext/openssl/openssl_missing.h: implement X509_STORE_get_ex_data, -+ X509_STORE_set_ex_data and X509_STORE_get_ex_new_index as macros. -+ - Tue Apr 26 02:58:51 2016 Marcus Stollsteimer - - * doc/extension.rdoc: Improvements to english grammers. -diff --git a/ext/openssl/openssl_missing.c b/ext/openssl/openssl_missing.c -index bd8eef5..31f2d0a 100644 ---- a/ext/openssl/openssl_missing.c -+++ b/ext/openssl/openssl_missing.c -@@ -34,20 +34,6 @@ HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in) - #endif /* HAVE_HMAC_CTX_COPY */ - #endif /* NO_HMAC */ - --#if !defined(HAVE_X509_STORE_SET_EX_DATA) --int X509_STORE_set_ex_data(X509_STORE *str, int idx, void *data) --{ -- return CRYPTO_set_ex_data(&str->ex_data, idx, data); --} --#endif -- --#if !defined(HAVE_X509_STORE_GET_EX_DATA) --void *X509_STORE_get_ex_data(X509_STORE *str, int idx) --{ -- return CRYPTO_get_ex_data(&str->ex_data, idx); --} --#endif -- - #if !defined(HAVE_EVP_MD_CTX_CREATE) - EVP_MD_CTX * - EVP_MD_CTX_create(void) -diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h -index 2dc49d3..955579c 100644 ---- a/ext/openssl/openssl_missing.h -+++ b/ext/openssl/openssl_missing.h -@@ -133,11 +133,16 @@ int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, EVP_CIPHER_CTX *in); - #endif - - #if !defined(HAVE_X509_STORE_GET_EX_DATA) --void *X509_STORE_get_ex_data(X509_STORE *str, int idx); -+# define X509_STORE_get_ex_data(x, idx) \ -+ CRYPTO_get_ex_data(&(x)->ex_data, (idx)) - #endif - - #if !defined(HAVE_X509_STORE_SET_EX_DATA) --int X509_STORE_set_ex_data(X509_STORE *str, int idx, void *data); -+# define X509_STORE_set_ex_data(x, idx, data) \ -+ CRYPTO_set_ex_data(&(x)->ex_data, (idx), (data)) -+# define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ -+ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, (l), (p), \ -+ (newf), (dupf), (freef)) - #endif - - #if !defined(HAVE_X509_CRL_SET_VERSION) -diff --git a/ext/openssl/ossl.c b/ext/openssl/ossl.c -index ac82815..2b5579e 100644 ---- a/ext/openssl/ossl.c -+++ b/ext/openssl/ossl.c -@@ -198,7 +198,8 @@ ossl_pem_passwd_cb(char *buf, int max_len, int flag, void *pwd) - /* - * Verify callback - */ --int ossl_verify_cb_idx; -+int ossl_store_ctx_ex_verify_cb_idx; -+int ossl_store_ex_verify_cb_idx; - - VALUE - ossl_call_verify_cb_proc(struct ossl_verify_cb_args *args) -@@ -214,10 +215,10 @@ ossl_verify_cb(int ok, X509_STORE_CTX *ctx) - struct ossl_verify_cb_args args; - int state = 0; - -- proc = (VALUE)X509_STORE_CTX_get_ex_data(ctx, ossl_verify_cb_idx); -- if ((void*)proc == 0) -- proc = (VALUE)X509_STORE_get_ex_data(ctx->ctx, ossl_verify_cb_idx); -- if ((void*)proc == 0) -+ proc = (VALUE)X509_STORE_CTX_get_ex_data(ctx, ossl_store_ctx_ex_verify_cb_idx); -+ if (!proc) -+ proc = (VALUE)X509_STORE_get_ex_data(ctx->ctx, ossl_store_ex_verify_cb_idx); -+ if (!proc) - return ok; - if (!NIL_P(proc)) { - ret = Qfalse; -@@ -1127,8 +1128,10 @@ Init_openssl(void) - /* - * Verify callback Proc index for ext-data - */ -- if ((ossl_verify_cb_idx = X509_STORE_CTX_get_ex_new_index(0, (void *)"ossl_verify_cb_idx", 0, 0, 0)) < 0) -+ if ((ossl_store_ctx_ex_verify_cb_idx = X509_STORE_CTX_get_ex_new_index(0, (void *)"ossl_store_ctx_ex_verify_cb_idx", 0, 0, 0)) < 0) - ossl_raise(eOSSLError, "X509_STORE_CTX_get_ex_new_index"); -+ if ((ossl_store_ex_verify_cb_idx = X509_STORE_get_ex_new_index(0, (void *)"ossl_store_ex_verify_cb_idx", 0, 0, 0)) < 0) -+ ossl_raise(eOSSLError, "X509_STORE_get_ex_new_index"); - - /* - * Init debug core -diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h -index a31ca95..5b2f6e1 100644 ---- a/ext/openssl/ossl.h -+++ b/ext/openssl/ossl.h -@@ -167,7 +167,8 @@ void ossl_clear_error(void); - /* - * Verify callback - */ --extern int ossl_verify_cb_idx; -+extern int ossl_store_ctx_ex_verify_cb_idx; -+extern int ossl_store_ex_verify_cb_idx; - - struct ossl_verify_cb_args { - VALUE proc; -diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c -index 938e36f..87df7f9 100644 ---- a/ext/openssl/ossl_ssl.c -+++ b/ext/openssl/ossl_ssl.c -@@ -307,7 +307,7 @@ ossl_ssl_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) - - ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); - cb = (VALUE)SSL_get_ex_data(ssl, ossl_ssl_ex_vcb_idx); -- X509_STORE_CTX_set_ex_data(ctx, ossl_verify_cb_idx, (void*)cb); -+ X509_STORE_CTX_set_ex_data(ctx, ossl_store_ctx_ex_verify_cb_idx, (void *)cb); - return ossl_verify_cb(preverify_ok, ctx); - } - -diff --git a/ext/openssl/ossl_x509store.c b/ext/openssl/ossl_x509store.c -index aca25b1..8d6f9de 100644 ---- a/ext/openssl/ossl_x509store.c -+++ b/ext/openssl/ossl_x509store.c -@@ -130,7 +130,7 @@ ossl_x509store_set_vfy_cb(VALUE self, VALUE cb) - X509_STORE *store; - - GetX509Store(self, store); -- X509_STORE_set_ex_data(store, ossl_verify_cb_idx, (void*)cb); -+ X509_STORE_set_ex_data(store, ossl_store_ex_verify_cb_idx, (void *)cb); - rb_iv_set(self, "@verify_callback", cb); - - return cb; -@@ -467,7 +467,7 @@ ossl_x509stctx_verify(VALUE self) - int result; - - GetX509StCtx(self, ctx); -- X509_STORE_CTX_set_ex_data(ctx, ossl_verify_cb_idx, -+ X509_STORE_CTX_set_ex_data(ctx, ossl_store_ctx_ex_verify_cb_idx, - (void*)rb_iv_get(self, "@verify_callback")); - result = X509_verify_cert(ctx); - --- -2.10.0 - diff --git a/ruby.spec b/ruby.spec index 2817201..5b8b02b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 3 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 59 +%global release 60 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -29,8 +29,8 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 2.5.1 -%global molinillo_version 0.4.0 +%global rubygems_version 2.5.2 +%global molinillo_version 0.4.1 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 @@ -40,9 +40,9 @@ %global did_you_mean_version 1.0.0 %global io_console_version 0.4.5 %global json_version 1.8.3 -%global minitest_version 5.8.3 +%global minitest_version 5.8.5 %global power_assert_version 0.2.6 -%global psych_version 2.0.17 +%global psych_version 2.1.0 %global rake_version 10.4.2 %global rdoc_version 4.2.1 %global net_telnet_version 0.1.1 @@ -122,16 +122,10 @@ Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch # Use miniruby to regenerate prelude.c. # https://bugs.ruby-lang.org/issues/10554 Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch -# Prevent test failures on ARM. -# https://bugs.ruby-lang.org/issues/12331 -Patch8: ruby-2.4.0-increase-timeout-for-ARMv7.patch # Workaround "an invalid stdio handle" error on PPC, due to recently introduced # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch -# Avoid conflict between OpenSSL 1.0.x and 1.1.x. -# https://bugs.ruby-lang.org/issues/12868 -Patch10: ruby-2.4.0-openssl-register-ex_data-index-for-X509_STORE-_CTX-r.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -479,9 +473,7 @@ rm -rf ext/fiddle/libffi* %patch5 -p1 %patch6 -p1 %patch7 -p1 -%patch8 -p1 %patch9 -p1 -%patch10 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -545,7 +537,8 @@ for cert in \ EntrustnetSecureServerCertificationAuthority.pem \ GeoTrustGlobalCA.pem \ AddTrustExternalCARoot.pem \ - AddTrustExternalCARoot-2048.pem + AddTrustExternalCARoot-2048.pem \ + GlobalSignRootCA.pem do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert done @@ -971,6 +964,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Fri Nov 18 2016 Vít Ondruch - 2.3.2-60 +- Update to Ruby 2.3.2. + * Fri Oct 21 2016 Vít Ondruch - 2.3.1-59 - Continue to use OpenSSL 1.0 for the moment. - Add gemspec_add_dep and gemspec_remove_dep macros. diff --git a/sources b/sources index 6eb7405..9f89eaf 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -01e9d172a5c33b385e92fc0cc2899766 ruby-2.3.1.tar.xz +37bae2bf9cf6deda3b7d8b0ad61fc0af ruby-2.3.2.tar.xz From 324c2d071e3ab9ccbf4e02002ac7b945a4ec319a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 18 Nov 2016 17:22:30 +0100 Subject: [PATCH 226/530] Ensure there is not forgotten any certificate. --- ruby.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby.spec b/ruby.spec index 5b8b02b..e5d1549 100644 --- a/ruby.spec +++ b/ruby.spec @@ -542,6 +542,8 @@ for cert in \ do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert done +# Ensure there is not forgotten any certificate. +test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" # Move macros file into proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. From b3e0a8c314a6b918f25a870515a6346e83b76431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 22 Nov 2016 13:25:46 +0100 Subject: [PATCH 227/530] Exclude json.rb from ruby-libs (rhbz#1397370). --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index e5d1549..0b14b9b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 60 +%global release 61 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -716,6 +716,7 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/*.rb %exclude %{ruby_libdir}/*-tk.rb %exclude %{ruby_libdir}/irb.rb +%exclude %{ruby_libdir}/json.rb %exclude %{ruby_libdir}/tcltk.rb %exclude %{ruby_libdir}/tk*.rb %exclude %{ruby_libdir}/psych.rb @@ -966,6 +967,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog +* Tue Nov 22 2016 Vít Ondruch - 2.3.2-61 +- Exclude json.rb from ruby-libs (rhbz#1397370). + * Fri Nov 18 2016 Vít Ondruch - 2.3.2-60 - Update to Ruby 2.3.2. From d14e3f780f68851070c2a5bf08b61327a59d857c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 22 Nov 2016 13:27:42 +0100 Subject: [PATCH 228/530] Update to Ruby 2.3.3. --- ruby.spec | 5 +++-- sources | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 0b14b9b..201961a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 3 -%global teeny_version 2 +%global teeny_version 3 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -967,7 +967,8 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/tkextlib %changelog -* Tue Nov 22 2016 Vít Ondruch - 2.3.2-61 +* Tue Nov 22 2016 Vít Ondruch - 2.3.3-61 +- Update to Ruby 2.3.3. - Exclude json.rb from ruby-libs (rhbz#1397370). * Fri Nov 18 2016 Vít Ondruch - 2.3.2-60 diff --git a/sources b/sources index 9f89eaf..26c008e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -37bae2bf9cf6deda3b7d8b0ad61fc0af ruby-2.3.2.tar.xz +0cba3d1b677d2695236ace62ca6d2255 ruby-2.3.3.tar.xz From 3130f89edd72b661d3c7bb776241a6bcf771f6c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 9 Jan 2017 15:58:21 +0100 Subject: [PATCH 229/530] Upgrade to Ruby 2.4.0. Move gemified xmlrpc into subpackage. Move gemified openssl into subpackage. Tk is removed from stdlib. Extend 'gem_' macros for pre-release version support. --- macros.rubygems | 12 +- ruby-1.9.3-mkmf-verbose.patch | 4 +- ...-additional-preludes-by-configuratio.patch | 4 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 4 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 8 +- ...2.3-Generate-preludes-using-miniruby.patch | 10 +- ruby-2.3.0-ruby_version.patch | 24 +- ruby.spec | 209 +++++++++++------- sources | 2 +- test_systemtap.rb | 37 ++-- 12 files changed, 183 insertions(+), 135 deletions(-) diff --git a/macros.rubygems b/macros.rubygems index 45c59c4..0652ec6 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -3,12 +3,12 @@ %gem_archdir %{_libdir}/gems # Common gem locations and files. -%gem_instdir %{gem_dir}/gems/%{gem_name}-%{version} -%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version} +%gem_instdir %{gem_dir}/gems/%{gem_name}-%{version}%{?prerelease} +%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version}%{?prerelease} %gem_libdir %{gem_instdir}/lib -%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}.gem -%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}.gemspec -%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version} +%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}%{?prerelease}.gem +%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}%{?prerelease}.gemspec +%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}%{?prerelease} # %gem_install - Install gem into appropriate directory. @@ -28,7 +28,7 @@ gem install \\\ --build-root %{-d*}%{!?-d:.} \\\ --force \\\ --document=ri,rdoc \\\ - %{-n*}%{!?-n:%{gem_name}-%{version}.gem} \ + %{-n*}%{!?-n:%{gem_name}-%{version}%{?prerelease}.gem} \ %{nil} diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index ccbd972..d94ef7f 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,7 +11,7 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1892,7 +1892,7 @@ def configuration(srcdir) +@@ -1897,7 +1897,7 @@ def configuration(srcdir) SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. @@ -19,7 +19,7 @@ index 682eb46..e6b1445 100644 +V = 1 Q1 = $(V:1=) Q = $(Q1:0=@) - ECHO1 = $(V:1=@#{CONFIG['NULLCMD']}) + ECHO1 = $(V:1=@ #{CONFIG['NULLCMD']}) -- 1.8.3.1 diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index 75eb363..af8b9a9 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -26,7 +26,7 @@ diff --git a/common.mk b/common.mk index 5cfbc3d..3f0a82e 100644 --- a/common.mk +++ b/common.mk -@@ -127,7 +127,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) +@@ -144,7 +144,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) DEFAULT_PRELUDES = $(GEM_PRELUDE) @@ -39,7 +39,7 @@ diff --git a/configure.in b/configure.in index 0e371e2..d4f1dcb 100644 --- a/configure.in +++ b/configure.in -@@ -4374,6 +4374,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -4536,6 +4536,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 43fa7f6..a4e6c28 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 37d9a62..553d4d0 100644 --- a/configure.in +++ b/configure.in -@@ -3632,6 +3632,11 @@ if test ${multiarch+set}; then +@@ -3790,6 +3790,11 @@ if test ${multiarch+set}; then fi archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index eb34107..e841569 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.in b/configure.in index db37cd6..ce8d149 100644 --- a/configure.in +++ b/configure.in -@@ -4228,7 +4228,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4390,7 +4390,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then @@ -67,7 +67,7 @@ diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb index 07076d4..35e6c3c 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -122,7 +122,7 @@ def config.write(arg) +@@ -113,7 +113,7 @@ val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump case name when /^prefix$/ diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 9d78b05..ba358f3 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 553d4d0..03a4152 100644 --- a/configure.in +++ b/configure.in -@@ -4292,6 +4292,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4454,6 +4454,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index e82f172..44fe4a7 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index 03a4152..0e371e2 100644 --- a/configure.in +++ b/configure.in -@@ -4264,6 +4264,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4426,6 +4426,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 03a4152..0e371e2 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4288,6 +4292,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4450,6 +4454,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -67,7 +67,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index b47b6e1..0b99408 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -328,6 +328,7 @@ def CONFIG.[](name, mandatory = false) +@@ -330,6 +330,7 @@ def CONFIG.[](name, mandatory = false) sitearchlibdir = CONFIG["sitearchdir"] vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] @@ -75,7 +75,7 @@ index b47b6e1..0b99408 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] configure_args = Shellwords.shellwords(CONFIG["configure_args"]) -@@ -506,7 +507,15 @@ def CONFIG.[](name, mandatory = false) +@@ -517,7 +518,15 @@ def CONFIG.[](name, mandatory = false) install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[README* *.txt *.rdoc *.gemspec] diff --git a/ruby-2.2.3-Generate-preludes-using-miniruby.patch b/ruby-2.2.3-Generate-preludes-using-miniruby.patch index aa17411..6e8adc4 100644 --- a/ruby-2.2.3-Generate-preludes-using-miniruby.patch +++ b/ruby-2.2.3-Generate-preludes-using-miniruby.patch @@ -11,12 +11,12 @@ diff --git a/common.mk b/common.mk index 168dc52..20c218a 100644 --- a/common.mk +++ b/common.mk -@@ -839,9 +839,9 @@ $(MINIPRELUDE_C): $(COMPILE_PRELUDE) +@@ -873,9 +873,9 @@ $(MINIPRELUDE_C): $(COMPILE_PRELUDE) + $(srcdir)/template/prelude.c.tmpl + $(PRELUDE_C): $(COMPILE_PRELUDE) \ - {$(srcdir)}lib/rubygems/defaults.rb \ - {$(srcdir)}lib/rubygems/core_ext/kernel_gem.rb \ -- $(PRELUDE_SCRIPTS) $(LIB_SRCS) -+ $(PRELUDE_SCRIPTS) $(PREP) $(LIB_SRCS) +- $(PRELUDE_SCRIPTS) ++ $(PRELUDE_SCRIPTS) $(PREP) $(ECHO) generating $@ - $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \ + $(Q) $(MINIRUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \ diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 96d7249..b4d6f76 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -12,15 +12,15 @@ ruby_version_dir_name now specifies custom version string for versioned directories, e.g. instead of default X.Y.Z, you can specify whatever string. --- - configure.in | 68 ++++++++++++++++++++++++++++------------------------- + configure.in | 64 ++++++++++++++++++++++++++++------------------------- template/ruby.pc.in | 1 + - 2 files changed, 37 insertions(+), 32 deletions(-) + 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/configure.in b/configure.in index db37cd6..6e73fae 100644 --- a/configure.in +++ b/configure.in -@@ -4177,9 +4177,6 @@ AS_CASE(["$target_os"], +@@ -4341,9 +4341,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index db37cd6..6e73fae 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -4202,58 +4199,64 @@ AC_ARG_WITH(ridir, +@@ -4366,56 +4363,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -48,11 +48,9 @@ index db37cd6..6e73fae 100644 - echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" - echo '#define STRINGIZE(x) x' - test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' -- echo '#include "verconf.h"' - echo '#include "version.h"' - echo 'ruby_version=RUBY_LIB_VERSION' - } > conftest.c -- test -f verconf.h || > verconf.h - ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" - eval $ruby_version -elif test -z "${ruby_version}"; then @@ -65,11 +63,9 @@ index db37cd6..6e73fae 100644 +echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" +echo '#define STRINGIZE(x) x' +test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' -+echo '#include "verconf.h"' +echo '#include "version.h"' +echo 'ruby_version=RUBY_LIB_VERSION' +} > conftest.c -+test -f verconf.h || > verconf.h +ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" +eval $ruby_version + @@ -124,7 +120,7 @@ index db37cd6..6e73fae 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4270,6 +4273,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4432,6 +4435,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -175,7 +171,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index d4c110e..d39c9a6 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -406,7 +406,7 @@ def CONFIG.[](name, mandatory = false) +@@ -417,7 +417,7 @@ def CONFIG.[](name, mandatory = false) install?(:doc, :rdoc) do if $rdocdir @@ -244,12 +240,12 @@ index 55ca080..75eea2b 100644 + RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] end - end + ## diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index 0428bea..b6e090e 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -962,7 +962,8 @@ def test_self_use_paths +@@ -1101,7 +1101,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -259,7 +255,7 @@ index 0428bea..b6e090e 100644 assert_equal File.join(parts), Gem.user_dir end -@@ -1089,7 +1090,7 @@ def test_self_user_home_user_drive_and_path +@@ -1228,7 +1229,7 @@ def test_self_user_home_user_drive_and_path def test_self_vendor_dir expected = File.join RbConfig::CONFIG['vendordir'], 'gems', @@ -286,7 +282,7 @@ diff --git a/configure.in b/configure.in index 6e73fae..c842725 100644 --- a/configure.in +++ b/configure.in -@@ -275,7 +275,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -271,7 +271,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) diff --git a/ruby.spec b/ruby.spec index 201961a..d377d4b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,16 +1,16 @@ %global major_version 2 -%global minor_version 3 -%global teeny_version 3 +%global minor_version 4 +%global teeny_version 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. -#%%global milestone preview2 +#%%global milestone rc1 # Keep the revision enabled for pre-releases from SVN. -#%%global revision 53264 +#%%global revision 57159 %global ruby_archive %{name}-%{ruby_version} @@ -21,7 +21,7 @@ %endif -%global release 61 +%global release 70 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -29,24 +29,26 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 2.5.2 -%global molinillo_version 0.4.1 +%global rubygems_version 2.6.8 +%global molinillo_version 0.5.3 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version} -%global bigdecimal_version 1.2.8 -%global did_you_mean_version 1.0.0 -%global io_console_version 0.4.5 -%global json_version 1.8.3 -%global minitest_version 5.8.5 -%global power_assert_version 0.2.6 -%global psych_version 2.1.0 -%global rake_version 10.4.2 -%global rdoc_version 4.2.1 +%global bigdecimal_version 1.3.0 +%global did_you_mean_version 1.1.0 +%global io_console_version 0.4.6 +%global json_version 2.0.2 +%global minitest_version 5.10.1 %global net_telnet_version 0.1.1 -%global test_unit_version 3.1.5 +%global openssl_version 2.0.2 +%global power_assert_version 0.4.1 +%global psych_version 2.2.2 +%global rake_version 12.0.0 +%global rdoc_version 5.0.0 +%global test_unit_version 3.2.3 +%global xmlrpc_version 0.2.1 # Might not be needed in the future, if we are lucky enough. # https://bugzilla.redhat.com/show_bug.cgi?id=888262 @@ -132,20 +134,22 @@ Suggests: rubypick Recommends: ruby(rubygems) >= %{rubygems_version} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} Recommends: rubygem(did_you_mean) >= %{did_you_mean_version} +Recommends: rubygem(openssl) >= %{openssl_version} BuildRequires: autoconf BuildRequires: gdbm-devel BuildRequires: libffi-devel -BuildRequires: compat-openssl10-devel +BuildRequires: openssl-devel BuildRequires: libyaml-devel BuildRequires: readline-devel -BuildRequires: tk-devel # Needed to pass test_set_program_name(TestRubyOptions) BuildRequires: procps BuildRequires: %{_bindir}/dtrace # RubyGems test suite optional dependencies. BuildRequires: git BuildRequires: %{_bindir}/cmake +# Required to test hardening. +BuildRequires: %{_bindir}/checksec # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. @@ -182,6 +186,13 @@ Provides: bundled(ccan-check_type) Provides: bundled(ccan-container_of) Provides: bundled(ccan-list) +# Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe +# so lets obsolete it. This is not the best place, but we don't have +# better, unless https://fedorahosted.org/fpc/ticket/645 provides some +# generic solution. +Obsoletes: ruby-tcltk < 2.4.0 + + %description libs This package includes the libruby, necessary to run Ruby. @@ -195,6 +206,7 @@ License: Ruby or MIT Requires: ruby(release) Recommends: rubygem(rdoc) >= %{rdoc_version} Recommends: rubygem(io-console) >= %{io_console_version} +Requires: rubygem(openssl) >= %{openssl_version} Requires: rubygem(psych) >= %{psych_version} Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} @@ -377,6 +389,20 @@ minitest/pride shows pride in testing and adds coloring to your test output. +%package -n rubygem-openssl +Summary: OpenSSL provides SSL, TLS and general purpose cryptography +Version: %{openssl_version} +Group: Development/Libraries +License: Ruby or BSD +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(openssl) = %{version}-%{release} + +%description -n rubygem-openssl +OpenSSL provides SSL, TLS and general purpose cryptography. It wraps the +OpenSSL library. + + %package -n rubygem-power_assert Summary: Power Assert for Ruby Version: %{power_assert_version} @@ -428,10 +454,8 @@ you do use sysread() directly when in telnet mode, you should probably pass the output through preprocess() to extract telnet command sequences. -# The Summary/Description fields are rather poor. -# https://github.com/test-unit/test-unit/issues/73 %package -n rubygem-test-unit -Summary: Improved version of Test::Unit bundled in Ruby 1.8.x +Summary: An xUnit family unit testing framework for Ruby Version: %{test_unit_version} Group: Development/Libraries # lib/test/unit/diff.rb is a double license of the Ruby license and PSF license. @@ -444,19 +468,26 @@ Provides: rubygem(test-unit) = %{version}-%{release} BuildArch: noarch %description -n rubygem-test-unit -Ruby 1.9.x bundles minitest not Test::Unit. Test::Unit -bundled in Ruby 1.8.x had not been improved but unbundled -Test::Unit (test-unit) is improved actively. +Test::Unit (test-unit) is unit testing framework for Ruby, based on xUnit +principles. These were originally designed by Kent Beck, creator of extreme +programming software development methodology, for Smalltalk's SUnit. It allows +writing tests, checking results and automated testing in Ruby. -%package tcltk -Summary: Tcl/Tk interface for scripting language Ruby -Group: Development/Languages -Requires: %{name}-libs%{?_isa} = %{ruby_version} -Provides: ruby(tcltk) = %{ruby_version}-%{release} +%package -n rubygem-xmlrpc +Summary: XMLRPC is a lightweight protocol that enables remote procedure calls over HTTP +Version: %{xmlrpc_version} +Group: Development/Libraries +License: Ruby or BSD +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(xmlrpc) = %{version}-%{release} +BuildArch: noarch + +%description -n rubygem-xmlrpc +XMLRPC is a lightweight protocol that enables remote procedure calls over +HTTP. -%description tcltk -Tcl/Tk interface for the object-oriented scripting language Ruby. %prep %setup -q -n %{ruby_archive} @@ -486,10 +517,6 @@ cp -a %{SOURCE6} . %build autoconf -# Ruby does not respec LDFLAGS :( -# https://bugs.ruby-lang.org/issues/11863 -export EXTLDFLAGS="%{__global_ldflags}" - %configure \ --with-rubylibprefix='%{ruby_libdir}' \ --with-archlibdir='%{_libdir}' \ @@ -504,6 +531,7 @@ export EXTLDFLAGS="%{__global_ldflags}" --with-vendorarchhdrdir='$(vendorhdrdir)/$(arch)' \ --with-rubygemsdir='%{rubygems_dir}' \ --with-ruby-pc='%{name}.pc' \ + --with-compress-debug-sections=no \ --disable-rpath \ --enable-shared \ --with-ruby-version='' \ @@ -532,15 +560,12 @@ sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_li # Kill bundled certificates, as they should be part of ca-certificates. for cert in \ - Class3PublicPrimaryCertificationAuthority.pem \ - DigiCertHighAssuranceEVRootCA.pem \ - EntrustnetSecureServerCertificationAuthority.pem \ - GeoTrustGlobalCA.pem \ - AddTrustExternalCARoot.pem \ - AddTrustExternalCARoot-2048.pem \ - GlobalSignRootCA.pem + rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem \ + rubygems.org/AddTrustExternalCARoot.pem \ + index.rubygems.org/GlobalSignRootCA.pem do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert + rm -r $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) done # Ensure there is not forgotten any certificate. test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" @@ -603,6 +628,15 @@ ln -s %{gem_dir}/gems/json-%{json_version}/lib/json.rb %{buildroot}%{ruby_libdir ln -s %{gem_dir}/gems/json-%{json_version}/lib/json %{buildroot}%{ruby_libdir}/json ln -s %{_libdir}/gems/%{name}/json-%{json_version}/json/ %{buildroot}%{ruby_libarchdir}/json +mkdir -p %{buildroot}%{gem_dir}/gems/openssl-%{openssl_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version} +mv %{buildroot}%{ruby_libdir}/openssl* %{buildroot}%{gem_dir}/gems/openssl-%{openssl_version}/lib +mv %{buildroot}%{ruby_libarchdir}/openssl.so %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version}/ +mv %{buildroot}%{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec %{buildroot}%{gem_dir}/specifications +ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl %{buildroot}%{ruby_libdir}/openssl +ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl.rb %{buildroot}%{ruby_libdir}/openssl.rb +ln -s %{_libdir}/gems/%{name}/openssl-%{openssl_version}/openssl.so %{buildroot}%{ruby_libarchdir}/openssl.so + mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version} mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib @@ -612,6 +646,12 @@ ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_libdir ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_libdir}/psych.rb ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby_libarchdir}/psych.so +# Move the binary extensions into proper place (if no gem has binary extension, +# the extensions directory might be empty). +find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{ruby_version}/* -maxdepth 0 \ + -exec mv '{}' %{buildroot}%{_libdir}/gems/%{name}/ \; \ + || echo "No gem binary extensions to move." + # Adjust the gemspec files so that the gems will load properly sed -i '/^end$/ i\ s.extensions = ["json/ext/parser.so", "json/ext/generator.so"]' %{buildroot}%{gem_dir}/specifications/json-%{json_version}.gemspec @@ -639,6 +679,10 @@ sed -i 's/^/%doc /' .ruby-doc.* sed -i 's/^/%lang(ja) /' .ruby-doc.ja %check +# Check Ruby hardening. +checksec -f libruby.so.%{ruby_version} | \ + grep "Full RELRO.*Canary found.*NX enabled.*DSO.*No RPATH.*No RUNPATH.*Yes.*\d*.*\d*.*libruby.so.%{ruby_version}" + # Check RubyGems version correctness. [ "`make runruby TESTRUN_SCRIPT='bin/gem -v' | tail -1`" == '%{rubygems_version}' ] # Check Molinillo version correctness. @@ -670,25 +714,22 @@ make check TESTS="-v $DISABLE_TESTS" %postun libs -p /sbin/ldconfig %files -%doc BSDL -%doc COPYING -%lang(ja) %doc COPYING.ja -%doc GPL -%doc LEGAL +%license BSDL +%license COPYING +%lang(ja) %license COPYING.ja +%license GPL +%license LEGAL %{_bindir}/erb %{_bindir}/%{name}%{?with_rubypick:-mri} %{_mandir}/man1/erb* %{_mandir}/man1/ruby* -# http://fedoraproject.org/wiki/Packaging:Guidelines#Packaging_Static_Libraries -%exclude %{_libdir}/libruby-static.a - %files devel -%doc BSDL -%doc COPYING -%lang(ja) %doc COPYING.ja -%doc GPL -%doc LEGAL +%license BSDL +%license COPYING +%lang(ja) %license COPYING.ja +%license GPL +%license LEGAL %{_rpmconfigdir}/macros.d/macros.ruby @@ -697,10 +738,10 @@ make check TESTS="-v $DISABLE_TESTS" %{_libdir}/pkgconfig/%{name}.pc %files libs -%doc COPYING -%lang(ja) %doc COPYING.ja -%doc GPL -%doc LEGAL +%license COPYING +%lang(ja) %license COPYING.ja +%license GPL +%license LEGAL %doc README.md %doc NEWS # Exclude /usr/local directory since it is supposed to be managed by @@ -714,20 +755,18 @@ make check TESTS="-v $DISABLE_TESTS" # Platform independent libraries. %dir %{ruby_libdir} %{ruby_libdir}/*.rb -%exclude %{ruby_libdir}/*-tk.rb %exclude %{ruby_libdir}/irb.rb %exclude %{ruby_libdir}/json.rb -%exclude %{ruby_libdir}/tcltk.rb -%exclude %{ruby_libdir}/tk*.rb +%exclude %{ruby_libdir}/openssl.rb %exclude %{ruby_libdir}/psych.rb %{ruby_libdir}/cgi %{ruby_libdir}/digest %{ruby_libdir}/drb %{ruby_libdir}/fiddle +%{ruby_libdir}/forwardable %exclude %{ruby_libdir}/irb %{ruby_libdir}/matrix %{ruby_libdir}/net -%{ruby_libdir}/openssl %{ruby_libdir}/optparse %{ruby_libdir}/racc %{ruby_libdir}/rbconfig @@ -737,12 +776,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/rss %{ruby_libdir}/shell %{ruby_libdir}/syslog -%exclude %{ruby_libdir}/tk -%exclude %{ruby_libdir}/tkextlib %{ruby_libdir}/unicode_normalize %{ruby_libdir}/uri %{ruby_libdir}/webrick -%{ruby_libdir}/xmlrpc %{ruby_libdir}/yaml # Platform specific libraries. @@ -818,6 +854,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/enc/windows_1250.so %{ruby_libarchdir}/enc/windows_1251.so %{ruby_libarchdir}/enc/windows_1252.so +%{ruby_libarchdir}/enc/windows_1253.so +%{ruby_libarchdir}/enc/windows_1254.so +%{ruby_libarchdir}/enc/windows_1257.so %{ruby_libarchdir}/enc/windows_31j.so %{ruby_libarchdir}/etc.so %{ruby_libarchdir}/fcntl.so @@ -832,7 +871,6 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/mathn/rational.so %{ruby_libarchdir}/nkf.so %{ruby_libarchdir}/objspace.so -%{ruby_libarchdir}/openssl.so %{ruby_libarchdir}/pathname.so %{ruby_libarchdir}/pty.so %dir %{ruby_libarchdir}/racc @@ -847,9 +885,6 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/stringio.so %{ruby_libarchdir}/strscan.so %{ruby_libarchdir}/syslog.so -%exclude %{ruby_libarchdir}/tcltklib.so -%{ruby_libarchdir}/thread.so -%exclude %{ruby_libarchdir}/tkutil.so %{ruby_libarchdir}/zlib.so %{tapset_root} @@ -935,6 +970,14 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* %{gem_dir}/specifications/minitest-%{minitest_version}.gemspec +%files -n rubygem-openssl +%{ruby_libdir}/openssl +%{ruby_libdir}/openssl.rb +%{ruby_libarchdir}/openssl.so +%{_libdir}/gems/%{name}/openssl-%{openssl_version} +%{gem_dir}/gems/openssl-%{openssl_version} +%{gem_dir}/specifications/openssl-%{openssl_version}.gemspec + %files -n rubygem-power_assert %{gem_dir}/gems/power_assert-%{power_assert_version} %exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* @@ -957,16 +1000,24 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/gems/test-unit-%{test_unit_version} %{gem_dir}/specifications/test-unit-%{test_unit_version}.gemspec -%files tcltk -%{ruby_libdir}/*-tk.rb -%{ruby_libdir}/tcltk.rb -%{ruby_libdir}/tk*.rb -%{ruby_libarchdir}/tcltklib.so -%{ruby_libarchdir}/tkutil.so -%{ruby_libdir}/tk -%{ruby_libdir}/tkextlib +%files -n rubygem-xmlrpc +%license %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/LICENSE.txt +%dir %{gem_dir}/gems/xmlrpc-%{xmlrpc_version} +%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/Gemfile +%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/Rakefile +%doc %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/README.md +%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/bin +%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/lib +%{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Mon Jan 02 2017 Vít Ondruch - 2.4.0-70 +- Upgrade to Ruby 2.4.0. +- Move gemified xmlrpc into subpackage. +- Move gemified openssl into subpackage. +- Tk is removed from stdlib. +- Extend 'gem_' macros for pre-release version support. + * Tue Nov 22 2016 Vít Ondruch - 2.3.3-61 - Update to Ruby 2.3.3. - Exclude json.rb from ruby-libs (rhbz#1397370). diff --git a/sources b/sources index 26c008e..a541cc8 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -0cba3d1b677d2695236ace62ca6d2255 ruby-2.3.3.tar.xz +SHA512 (ruby-2.4.0.tar.xz) = 975a5388592adc038461e0acebb6c0efee242891b2ea8621476401458efe2bc0fdd317d3bf99beb745b0b3808410efdff33862da29c95c027f457943721e3ab6 diff --git a/test_systemtap.rb b/test_systemtap.rb index eb518df..5784e2d 100644 --- a/test_systemtap.rb +++ b/test_systemtap.rb @@ -3,8 +3,10 @@ require 'set' LIBRUBY_SO = 'libruby.so' PROBES_D = 'probes.d' -### -# Detect SystemTap section headers presence. +# These probes are excluded by VM_COLLECT_USAGE_DETAILS ifdef. +EXCLUDE_PROBES = Set.new %w(insn insn__operand) + +## Detect SystemTap section headers presence stap_headers = [ '\.stapsdt\.base', @@ -22,43 +24,42 @@ unless detected_stap_headers.size == 2 exit false end -### -# Find if every declared probe is propagated to resulting library. +## Find if every declared probe is propagated to resulting library # Colect probes specified in probes.d file. -probes = [] +probes_declared = [] File.open(PROBES_D) do |file| file.each_line do |line| if probe = line[/probe (\S+)\(.*\);/, 1] - probes << probe + probes_declared << probe end end end -probes = Set.new probes +probes_declared = Set.new probes_declared -# These probes are excluded by VM_COLLECT_USAGE_DETAILS ifdef. -EXCLUDE_PROBES = Set.new %w(insn insn__operand) -unless EXCLUDE_PROBES.subset? probes +unless EXCLUDE_PROBES.subset? probes_declared puts 'ERROR: Change in SystemTap (DTrace) probes definition file detected.' exit false end -probes -= EXCLUDE_PROBES +probes_declared -= EXCLUDE_PROBES # Detect probes in resulting library. -probe_regexp = %r{ -^\s*stapsdt\s*0[xX][0-9a-fA-F]+\tNT_STAPSDT \(SystemTap probe descriptors\)$ -^\s*Provider: ruby$ -^\s*Name: (\S+)$ +get_probes_detected = %r{ +^\s*Provider:\s+ruby,\s+Name:\s+(\S+),\s+.*$ } -notes = `readelf -n "#{LIBRUBY_SO}"` -detected_probes = Set.new notes.scan(probe_regexp).flatten +probes_detected = `eu-readelf -n "#{LIBRUBY_SO}"` + +probes_detected = Set.new probes_detected.scan(get_probes_detected).flatten # Both sets must be equal, otherwise something is wrong. -unless probes == detected_probes +unless probes_declared == probes_detected puts 'ERROR: SystemTap (DTrace) probes were not correctly propagated into resulting library.' + puts " Undetected probes: #{(probes_declared - probes_detected).sort.join(', ')}\n", + " Additional detected probes: #{(probes_detected - probes_declared).sort.join(', ')}" + exit false end From b04585e06441159cbe5facb87d2f30774dad2375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 9 Jan 2017 18:14:07 +0100 Subject: [PATCH 230/530] Add rubygem-io-console dependency for rubygem-rdoc. The io-console is now the hard requirement and RDoc does not work without it. --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index d377d4b..de6c40a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 70 +%global release 71 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -274,6 +274,7 @@ License: GPLv2 and Ruby and MIT and SIL Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Requires: ruby(irb) = %{irb_version} +Requires: rubygem(io-console) >= %{io_console_version} # Hardcode the dependency to keep it compatible with dependencies of the # official rubygem-rdoc gem. Requires: rubygem(json) >= %{json_version} @@ -1011,6 +1012,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Mon Jan 09 2017 Vít Ondruch - 2.4.0-71 +- Add rubygem-io-console dependency for rubygem-rdoc. + * Mon Jan 02 2017 Vít Ondruch - 2.4.0-70 - Upgrade to Ruby 2.4.0. - Move gemified xmlrpc into subpackage. From 9a0bd11655a81ace9767fa4779c201b59744f69f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 12 Jan 2017 09:00:09 +0100 Subject: [PATCH 231/530] Link files into directory to avoid dir => symlink isues. It is not easy to change the directory to simplink in RPM world. Hence keep everything in the directory and just link back the files. --- ruby.spec | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index de6c40a..12b47d6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 71 +%global release 72 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -634,7 +634,11 @@ mkdir -p %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version} mv %{buildroot}%{ruby_libdir}/openssl* %{buildroot}%{gem_dir}/gems/openssl-%{openssl_version}/lib mv %{buildroot}%{ruby_libarchdir}/openssl.so %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version}/ mv %{buildroot}%{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl %{buildroot}%{ruby_libdir}/openssl +# This used to be directory when OpenSSL was integral part of StdLib => Keep +# it as directory and link everything in it to prevent directory => symlink +# conversion RPM issues. +mkdir -p %{buildroot}%{ruby_libdir}/openssl +ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl/* %{buildroot}%{ruby_libdir}/openssl ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl.rb %{buildroot}%{ruby_libdir}/openssl.rb ln -s %{_libdir}/gems/%{name}/openssl-%{openssl_version}/openssl.so %{buildroot}%{ruby_libarchdir}/openssl.so @@ -1012,6 +1016,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Wed Jan 11 2017 Vít Ondruch - 2.4.0-72 +- Link files into directory to avoid dir => symlink isues. + * Mon Jan 09 2017 Vít Ondruch - 2.4.0-71 - Add rubygem-io-console dependency for rubygem-rdoc. From ab16bf76efcc129fe1fac5966dcb2e7e42f2df92 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Thu, 12 Jan 2017 17:30:40 +0100 Subject: [PATCH 232/530] Rebuild for readline 7.x Signed-off-by: Igor Gnatenko --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 12b47d6..8fc426f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 72 +%global release 73 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1016,6 +1016,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Thu Jan 12 2017 Igor Gnatenko - 2.4.0-73 +- Rebuild for readline 7.x + * Wed Jan 11 2017 Vít Ondruch - 2.4.0-72 - Link files into directory to avoid dir => symlink isues. From 277ae4829a525e7235a2b17723f608ea10ca43df Mon Sep 17 00:00:00 2001 From: Mamoru TASAKA Date: Fri, 13 Jan 2017 06:37:59 +0900 Subject: [PATCH 233/530] Rebuild again for f26-ruby24 sidetag --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 8fc426f..f89276e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 73 +%global release 74 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1016,6 +1016,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Fri Jan 13 2017 Mamoru TASAKA - 2.4.0-74 +- Rebuild again for f26-ruby24 sidetag + * Thu Jan 12 2017 Igor Gnatenko - 2.4.0-73 - Rebuild for readline 7.x From f540c43daed6594f055f27cd4c9f17b90a454743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 17 Jan 2017 16:22:14 +0100 Subject: [PATCH 234/530] Apply patch fixing rubygem-mongo build failures. --- ...nhelper.c-block-argument-at-tailcall.patch | 36 +++++++++++++++++++ ruby.spec | 9 ++++- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 ruby-2.4.0-vm_insnhelper.c-block-argument-at-tailcall.patch diff --git a/ruby-2.4.0-vm_insnhelper.c-block-argument-at-tailcall.patch b/ruby-2.4.0-vm_insnhelper.c-block-argument-at-tailcall.patch new file mode 100644 index 0000000..cb8fe26 --- /dev/null +++ b/ruby-2.4.0-vm_insnhelper.c-block-argument-at-tailcall.patch @@ -0,0 +1,36 @@ +From ff3496b0116ed2ed589d000b7bfca3d8288b009c Mon Sep 17 00:00:00 2001 +From: nobu +Date: Mon, 9 Jan 2017 02:55:39 +0000 +Subject: [PATCH] vm_insnhelper.c: block argument at tailcall + +* vm_insnhelper.c (vm_call_iseq_setup_tailcall): check interrupts + after set up the new frame, not the passed block to be clobbered + by invoked finalizers and so on. [ruby-core:78981] [Bug #13107] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57293 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + vm_insnhelper.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/vm_insnhelper.c b/vm_insnhelper.c +index b580412..662a2d6 100644 +--- a/vm_insnhelper.c ++++ b/vm_insnhelper.c +@@ -1538,8 +1538,6 @@ vm_call_iseq_setup_tailcall(rb_thread_t *th, rb_control_frame_t *cfp, struct rb_ + vm_pop_frame(th, cfp, cfp->ep); + cfp = th->cfp; + +- RUBY_VM_CHECK_INTS(th); +- + sp_orig = sp = cfp->sp; + + /* push self */ +@@ -1558,6 +1556,8 @@ vm_call_iseq_setup_tailcall(rb_thread_t *th, rb_control_frame_t *cfp, struct rb_ + iseq->body->stack_max); + + cfp->sp = sp_orig; ++ RUBY_VM_CHECK_INTS(th); ++ + return Qundef; + } + diff --git a/ruby.spec b/ruby.spec index f89276e..cdb2047 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 74 +%global release 75 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -128,6 +128,9 @@ Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +# This fixed rubygem-mongo build failures and may be something else as well. +# https://bugs.ruby-lang.org/issues/13107 +Patch10: ruby-2.4.0-vm_insnhelper.c-block-argument-at-tailcall.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -506,6 +509,7 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch7 -p1 %patch9 -p1 +%patch10 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1016,6 +1020,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Tue Jan 17 2017 Vít Ondruch - 2.4.0-75 +- Apply patch fixing rubygem-mongo build failures. + * Fri Jan 13 2017 Mamoru TASAKA - 2.4.0-74 - Rebuild again for f26-ruby24 sidetag From 415daf8d3b965446d272df04fa8566a3198f51eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 3 Feb 2017 14:53:23 +0100 Subject: [PATCH 235/530] Fix GCC 7.x compatibility (rhbz#1417590). --- ruby.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index cdb2047..0efd54e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 75 +%global release 76 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -131,6 +131,9 @@ Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch # This fixed rubygem-mongo build failures and may be something else as well. # https://bugs.ruby-lang.org/issues/13107 Patch10: ruby-2.4.0-vm_insnhelper.c-block-argument-at-tailcall.patch +# Fix GCC 7.x compatibility (rhbz#1417590). +# https://bugs.ruby-lang.org/issues/13150 +Patch11: ruby-2.4.0-Prevent-GC-by-volatile.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -510,6 +513,7 @@ rm -rf ext/fiddle/libffi* %patch7 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1020,6 +1024,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Fri Feb 03 2017 Vít Ondruch - 2.4.0-76 +- Fix GCC 7.x compatibility (rhbz#1417590). + * Tue Jan 17 2017 Vít Ondruch - 2.4.0-75 - Apply patch fixing rubygem-mongo build failures. From c467007dbbd08acf62d5749475fbd60c45d1cb7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 3 Feb 2017 15:01:34 +0100 Subject: [PATCH 236/530] Use standardized multilib solution (rhbz#1412274). This helps platform specific difference between builds. --- ruby.spec | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 0efd54e..6efcd61 100644 --- a/ruby.spec +++ b/ruby.spec @@ -156,6 +156,7 @@ BuildRequires: git BuildRequires: %{_bindir}/cmake # Required to test hardening. BuildRequires: %{_bindir}/checksec +BuildRequires: multilib-rpm-config # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. @@ -557,8 +558,7 @@ make install DESTDIR=%{buildroot} # Rename ruby/config.h to ruby/config-.h to avoid file conflicts on # multilib systems and install config.h wrapper -mv %{buildroot}%{_includedir}/%{name}/config.h %{buildroot}%{_includedir}/%{name}/config-%{_arch}.h -install -m644 %{SOURCE7} %{buildroot}%{_includedir}/%{name}/config.h +%multilib_fix_c_header --file %{_includedir}/%{name}/config.h # Rename the ruby executable. It is replaced by RubyPick. %{?with_rubypick:mv %{buildroot}%{_bindir}/%{name}{,-mri}} @@ -1026,6 +1026,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Fri Feb 03 2017 Vít Ondruch - 2.4.0-76 - Fix GCC 7.x compatibility (rhbz#1417590). +- Use standardized multilib solution (rhbz#1412274). * Tue Jan 17 2017 Vít Ondruch - 2.4.0-75 - Apply patch fixing rubygem-mongo build failures. From 3a2607aa17e07967db626c96882c5dbde4de7149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 3 Feb 2017 15:32:51 +0100 Subject: [PATCH 237/530] Add missing patch. --- ruby-2.4.0-Prevent-GC-by-volatile.patch | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 ruby-2.4.0-Prevent-GC-by-volatile.patch diff --git a/ruby-2.4.0-Prevent-GC-by-volatile.patch b/ruby-2.4.0-Prevent-GC-by-volatile.patch new file mode 100644 index 0000000..302f27b --- /dev/null +++ b/ruby-2.4.0-Prevent-GC-by-volatile.patch @@ -0,0 +1,36 @@ +From 7c1b30a602ab109d8d5388d7dfb3c5b180ba24e1 Mon Sep 17 00:00:00 2001 +From: naruse +Date: Mon, 23 Jan 2017 16:58:27 +0000 +Subject: [PATCH] Prevent GC by volatile [Bug #13150] + +test/ruby/test_marshal.rb test_context_switch (load) and test_gc (dump) +are failed on FreeBSD 10.3 and gcc7 (FreeBSD Ports Collection) 7.0.0 +20170115 (experimental); RB_GC_GUARD looks not worked well. + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57410 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + marshal.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/marshal.c b/marshal.c +index a9926ac..d628daa 100644 +--- a/marshal.c ++++ b/marshal.c +@@ -1024,7 +1024,7 @@ VALUE + rb_marshal_dump_limited(VALUE obj, VALUE port, int limit) + { + struct dump_arg *arg; +- VALUE wrapper; /* used to avoid memory leak in case of exception */ ++ volatile VALUE wrapper; /* used to avoid memory leak in case of exception */ + + wrapper = TypedData_Make_Struct(rb_cData, struct dump_arg, &dump_arg_data, arg); + arg->dest = 0; +@@ -2038,7 +2038,7 @@ rb_marshal_load_with_proc(VALUE port, VALUE proc) + { + int major, minor, infection = 0; + VALUE v; +- VALUE wrapper; /* used to avoid memory leak in case of exception */ ++ volatile VALUE wrapper; /* used to avoid memory leak in case of exception */ + struct load_arg *arg; + + v = rb_check_string_type(port); From 8d50b10ccbc99c1a2605d46cbb2930521a61d16a Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 11 Feb 2017 11:54:53 +0000 Subject: [PATCH 238/530] - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 6efcd61..b9b046f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 76 +%global release 77 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1024,6 +1024,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Sat Feb 11 2017 Fedora Release Engineering - 2.4.0-77 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + * Fri Feb 03 2017 Vít Ondruch - 2.4.0-76 - Fix GCC 7.x compatibility (rhbz#1417590). - Use standardized multilib solution (rhbz#1412274). From 101851f2d315b3598063327c2450f20b8ed0623d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 23 Feb 2017 09:23:29 +0100 Subject: [PATCH 239/530] Fix OpenSSL symlinks. --- ruby.spec | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index b9b046f..1dbbcbd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 77 +%global release 78 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -646,7 +646,8 @@ mv %{buildroot}%{gem_dir}/specifications/default/openssl-%{openssl_version}.gems # it as directory and link everything in it to prevent directory => symlink # conversion RPM issues. mkdir -p %{buildroot}%{ruby_libdir}/openssl -ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl/* %{buildroot}%{ruby_libdir}/openssl +find %{buildroot}%{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl -maxdepth 1 -type f -exec \ + sh -c 'ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl/`basename {}` %{buildroot}%{ruby_libdir}/openssl' \; ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl.rb %{buildroot}%{ruby_libdir}/openssl.rb ln -s %{_libdir}/gems/%{name}/openssl-%{openssl_version}/openssl.so %{buildroot}%{ruby_libarchdir}/openssl.so @@ -1024,6 +1025,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Thu Feb 23 2017 Vít Ondruch - 2.4.0-78 +- Fix OpenSSL symlinks. + * Sat Feb 11 2017 Fedora Release Engineering - 2.4.0-77 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild From 4571daf34e5f971f235a53268ab3ebf73a249b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 8 Mar 2017 18:48:45 +0100 Subject: [PATCH 240/530] Be more careful about RubyGems directory ownership. And make this aligned with independent rubygems package. --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 1dbbcbd..6c7b523 100644 --- a/ruby.spec +++ b/ruby.spec @@ -905,7 +905,11 @@ make check TESTS="-v $DISABLE_TESTS" %files -n rubygems %{_bindir}/gem -%{rubygems_dir} +%dir %{rubygems_dir} +%{rubygems_dir}/rbconfig +%{rubygems_dir}/rubygems +%{rubygems_dir}/rubygems.rb +%{rubygems_dir}/ubygems.rb # Explicitly include only RubyGems directory strucure to avoid accidentally # packaged content. From 5c42276905e94f855596b31adca3945b0826204d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 3 Apr 2017 16:10:27 +0200 Subject: [PATCH 241/530] Update to Ruby 2.4.1. --- ruby-2.4.0-Prevent-GC-by-volatile.patch | 36 ------------------- ...nhelper.c-block-argument-at-tailcall.patch | 36 ------------------- ruby.spec | 21 +++++------ sources | 2 +- 4 files changed, 9 insertions(+), 86 deletions(-) delete mode 100644 ruby-2.4.0-Prevent-GC-by-volatile.patch delete mode 100644 ruby-2.4.0-vm_insnhelper.c-block-argument-at-tailcall.patch diff --git a/ruby-2.4.0-Prevent-GC-by-volatile.patch b/ruby-2.4.0-Prevent-GC-by-volatile.patch deleted file mode 100644 index 302f27b..0000000 --- a/ruby-2.4.0-Prevent-GC-by-volatile.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 7c1b30a602ab109d8d5388d7dfb3c5b180ba24e1 Mon Sep 17 00:00:00 2001 -From: naruse -Date: Mon, 23 Jan 2017 16:58:27 +0000 -Subject: [PATCH] Prevent GC by volatile [Bug #13150] - -test/ruby/test_marshal.rb test_context_switch (load) and test_gc (dump) -are failed on FreeBSD 10.3 and gcc7 (FreeBSD Ports Collection) 7.0.0 -20170115 (experimental); RB_GC_GUARD looks not worked well. - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57410 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - marshal.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/marshal.c b/marshal.c -index a9926ac..d628daa 100644 ---- a/marshal.c -+++ b/marshal.c -@@ -1024,7 +1024,7 @@ VALUE - rb_marshal_dump_limited(VALUE obj, VALUE port, int limit) - { - struct dump_arg *arg; -- VALUE wrapper; /* used to avoid memory leak in case of exception */ -+ volatile VALUE wrapper; /* used to avoid memory leak in case of exception */ - - wrapper = TypedData_Make_Struct(rb_cData, struct dump_arg, &dump_arg_data, arg); - arg->dest = 0; -@@ -2038,7 +2038,7 @@ rb_marshal_load_with_proc(VALUE port, VALUE proc) - { - int major, minor, infection = 0; - VALUE v; -- VALUE wrapper; /* used to avoid memory leak in case of exception */ -+ volatile VALUE wrapper; /* used to avoid memory leak in case of exception */ - struct load_arg *arg; - - v = rb_check_string_type(port); diff --git a/ruby-2.4.0-vm_insnhelper.c-block-argument-at-tailcall.patch b/ruby-2.4.0-vm_insnhelper.c-block-argument-at-tailcall.patch deleted file mode 100644 index cb8fe26..0000000 --- a/ruby-2.4.0-vm_insnhelper.c-block-argument-at-tailcall.patch +++ /dev/null @@ -1,36 +0,0 @@ -From ff3496b0116ed2ed589d000b7bfca3d8288b009c Mon Sep 17 00:00:00 2001 -From: nobu -Date: Mon, 9 Jan 2017 02:55:39 +0000 -Subject: [PATCH] vm_insnhelper.c: block argument at tailcall - -* vm_insnhelper.c (vm_call_iseq_setup_tailcall): check interrupts - after set up the new frame, not the passed block to be clobbered - by invoked finalizers and so on. [ruby-core:78981] [Bug #13107] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57293 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - vm_insnhelper.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/vm_insnhelper.c b/vm_insnhelper.c -index b580412..662a2d6 100644 ---- a/vm_insnhelper.c -+++ b/vm_insnhelper.c -@@ -1538,8 +1538,6 @@ vm_call_iseq_setup_tailcall(rb_thread_t *th, rb_control_frame_t *cfp, struct rb_ - vm_pop_frame(th, cfp, cfp->ep); - cfp = th->cfp; - -- RUBY_VM_CHECK_INTS(th); -- - sp_orig = sp = cfp->sp; - - /* push self */ -@@ -1558,6 +1556,8 @@ vm_call_iseq_setup_tailcall(rb_thread_t *th, rb_control_frame_t *cfp, struct rb_ - iseq->body->stack_max); - - cfp->sp = sp_orig; -+ RUBY_VM_CHECK_INTS(th); -+ - return Qundef; - } - diff --git a/ruby.spec b/ruby.spec index 6c7b523..82d5781 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 4 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 78 +%global release 79 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -29,8 +29,8 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 2.6.8 -%global molinillo_version 0.5.3 +%global rubygems_version 2.6.11 +%global molinillo_version 0.5.7 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 @@ -42,7 +42,7 @@ %global json_version 2.0.2 %global minitest_version 5.10.1 %global net_telnet_version 0.1.1 -%global openssl_version 2.0.2 +%global openssl_version 2.0.3 %global power_assert_version 0.4.1 %global psych_version 2.2.2 %global rake_version 12.0.0 @@ -128,12 +128,6 @@ Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch -# This fixed rubygem-mongo build failures and may be something else as well. -# https://bugs.ruby-lang.org/issues/13107 -Patch10: ruby-2.4.0-vm_insnhelper.c-block-argument-at-tailcall.patch -# Fix GCC 7.x compatibility (rhbz#1417590). -# https://bugs.ruby-lang.org/issues/13150 -Patch11: ruby-2.4.0-Prevent-GC-by-volatile.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -513,8 +507,6 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch7 -p1 %patch9 -p1 -%patch10 -p1 -%patch11 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1029,6 +1021,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Mon Apr 03 2017 Vít Ondruch - 2.4.1-79 +- Update to Ruby 2.4.1. + * Thu Feb 23 2017 Vít Ondruch - 2.4.0-78 - Fix OpenSSL symlinks. diff --git a/sources b/sources index a541cc8..49ed326 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.4.0.tar.xz) = 975a5388592adc038461e0acebb6c0efee242891b2ea8621476401458efe2bc0fdd317d3bf99beb745b0b3808410efdff33862da29c95c027f457943721e3ab6 +SHA512 (ruby-2.4.1.tar.xz) = e6fd290b6edd166348b70f0f1c56f7ed9d956c4c1eb91d97d0548041ca4196b9b75ec1ad35c745bdbfd4de195899093e7205d7f02b014ecf1c48e6f31cf25903 From fde2a68e73dd5bb0e7e59d38754c75bd1f1016c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 20 Jul 2017 16:41:16 +0200 Subject: [PATCH 242/530] OpenSSL 1.1.0f-3 disables some weak ciphers. Adjust the package to pass the tests suite. --- ...her-suites-in-test_sslctx_set_params.patch | 26 +++++++++++++++++++ ruby.spec | 11 +++++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 ruby-2.5.0-allow-3DES-cipher-suites-in-test_sslctx_set_params.patch diff --git a/ruby-2.5.0-allow-3DES-cipher-suites-in-test_sslctx_set_params.patch b/ruby-2.5.0-allow-3DES-cipher-suites-in-test_sslctx_set_params.patch new file mode 100644 index 0000000..9c3e375 --- /dev/null +++ b/ruby-2.5.0-allow-3DES-cipher-suites-in-test_sslctx_set_params.patch @@ -0,0 +1,26 @@ +From 261353a42d0dc0e7bf73e5a8fb8ecffd04249d42 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Tue, 27 Jun 2017 14:31:09 +0900 +Subject: [PATCH] test/test_ssl: allow 3DES cipher suites in + test_sslctx_set_params + +Fedora's OpenSSL seems to enable 3DES cipher suites by DEFAULT. + +Fixes: https://github.com/ruby/openssl/issues/127 +--- + test/test_ssl.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb +index 19066566..b3efe95a 100644 +--- a/test/openssl/test_ssl.rb ++++ b/test/openssl/test_ssl.rb +@@ -350,7 +350,7 @@ def test_sslctx_set_params + assert_equal OpenSSL::SSL::VERIFY_PEER, ctx.verify_mode + ciphers_names = ctx.ciphers.collect{|v, _, _, _| v } + assert ciphers_names.all?{|v| /A(EC)?DH/ !~ v }, "anon ciphers are disabled" +- assert ciphers_names.all?{|v| /(RC4|MD5|EXP|DES)/ !~ v }, "weak ciphers are disabled" ++ assert ciphers_names.all?{|v| /(RC4|MD5|EXP|DES(?!-EDE|-CBC3))/ !~ v }, "weak ciphers are disabled" + assert_equal 0, ctx.options & OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS + if defined?(OpenSSL::SSL::OP_NO_COMPRESSION) # >= 1.0.0 + assert_equal OpenSSL::SSL::OP_NO_COMPRESSION, diff --git a/ruby.spec b/ruby.spec index 82d5781..e4f716f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 79 +%global release 80 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -128,6 +128,10 @@ Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +# Fix OpenSSL::TestSSL#test_sslctx_set_params failures due to recent changes in +# OpenSSL. +# https://github.com/ruby/openssl/issues/127 +Patch10: ruby-2.5.0-allow-3DES-cipher-suites-in-test_sslctx_set_params.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -507,6 +511,7 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch7 -p1 %patch9 -p1 +%patch10 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1021,6 +1026,10 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Thu Jul 20 2017 Vít Ondruch - 2.4.1-80 +- OpenSSL 1.1.0f-3 disables some weak ciphers. Adjust the package to pass + the tests suite. + * Mon Apr 03 2017 Vít Ondruch - 2.4.1-79 - Update to Ruby 2.4.1. From 6e9956416e4616dc157136273562c4e4642bdfa9 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 27 Jul 2017 13:20:58 +0000 Subject: [PATCH 243/530] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index e4f716f..d93d74e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 80 +%global release 81 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1026,6 +1026,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Thu Jul 27 2017 Fedora Release Engineering - 2.4.1-81 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + * Thu Jul 20 2017 Vít Ondruch - 2.4.1-80 - OpenSSL 1.1.0f-3 disables some weak ciphers. Adjust the package to pass the tests suite. From 7e690d1b1d5467fd7b40bb5ee42bf5e1b47de74b Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 3 Aug 2017 07:50:57 +0000 Subject: [PATCH 244/530] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index d93d74e..53df209 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 81 +%global release 82 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1026,6 +1026,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Thu Aug 03 2017 Fedora Release Engineering - 2.4.1-82 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + * Thu Jul 27 2017 Fedora Release Engineering - 2.4.1-81 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild From 30f6c6490e560273c0593dfc1f465dd61d9d8c2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 11 Aug 2017 12:34:04 +0200 Subject: [PATCH 245/530] Fix "IOError: stream closed" errors affecting Puma. --- ...-do-not-enqueue-redundant-interrupts.patch | 241 ++++++++++++++++++ ruby.spec | 9 +- 2 files changed, 249 insertions(+), 1 deletion(-) create mode 100644 ruby-2.4.2-IO-close-do-not-enqueue-redundant-interrupts.patch diff --git a/ruby-2.4.2-IO-close-do-not-enqueue-redundant-interrupts.patch b/ruby-2.4.2-IO-close-do-not-enqueue-redundant-interrupts.patch new file mode 100644 index 0000000..263b532 --- /dev/null +++ b/ruby-2.4.2-IO-close-do-not-enqueue-redundant-interrupts.patch @@ -0,0 +1,241 @@ +From 27251312111b7e25e347773e5777ee6072f9289b Mon Sep 17 00:00:00 2001 +From: nagachika +Date: Sat, 8 Jul 2017 02:21:36 +0000 +Subject: [PATCH] merge revision(s) 58284,58812,59028: [Backport #13632] + + vm_core.h: ruby_error_stream_closed + + * vm_core.h (ruby_special_exceptions): renamed + ruby_error_closed_stream as ruby_error_stream_closed, like the + message. + speed up IO#close with many threads + + Today, it increases IO#close performance with many threads: + + Execution time (sec) + name trunk after + vm_thread_close 4.276 3.018 + + Speedup ratio: compare with the result of `trunk' (greater is better) + name after + vm_thread_close 1.417 + + This speedup comes because rb_notify_fd_close only scans threads + inside rb_thread_io_blocking_region, not all threads in the VM. + + In the future, this type data structure may allow us to notify + waiters of multiple FDs on a single thread (when using + Fibers). + + * thread.c (struct waiting_fd): declare + (rb_thread_io_blocking_region): use on-stack list waiter + (rb_notify_fd_close): walk vm->waiting_fds instead + (call_without_gvl): remove old field setting + (th_init): ditto + * vm_core.h (typedef struct rb_vm_struct): add waiting_fds list + * (typedef struct rb_thread_struct): remove waiting_fd field + (rb_vm_living_threads_init): initialize waiting_fds list + + I am now kicking myself for not thinking about this 3 years ago + when I introduced ccan/list in [Feature #9632] to optimize this + same function :< + IO#close: do not enqueue redundant interrupts (take #2) + + Enqueuing multiple errors for one event causes spurious errors + down the line, as reported by Nikolay Vashchenko in + https://bugs.ruby-lang.org/issues/13632 + + This should fix bad interactions with test_race_gets_and_close + in test/ruby/test_io.rb since we ensure rb_notify_fd_close + continues returning the busy flag after enqueuing the interrupt. + + Backporting changes to 2.4 and earlier releases will be more + challenging... + + * thread.c (rb_notify_fd_close): do not enqueue multiple interrupts + [ruby-core:81581] [Bug #13632] + * test/ruby/test_io.rb (test_single_exception_on_close): + new test based on script from Nikolay + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@59286 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + test/ruby/test_io.rb | 22 ++++++++++++++++++++++ + thread.c | 36 +++++++++++++++++++++++++----------- + vm.c | 1 - + vm_core.h | 6 +++--- + 4 files changed, 50 insertions(+), 15 deletions(-) + +diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb +index 61dfba318042..034dac570ce4 100644 +--- a/test/ruby/test_io.rb ++++ b/test/ruby/test_io.rb +@@ -2809,6 +2809,28 @@ def test_cross_thread_close_stdio + end; + end + ++ def test_single_exception_on_close ++ a = [] ++ t = [] ++ 10.times do ++ r, w = IO.pipe ++ a << [r, w] ++ t << Thread.new do ++ while r.gets ++ end rescue IOError ++ Thread.current.pending_interrupt? ++ end ++ end ++ a.each do |r, w| ++ w.write -"\n" ++ w.close ++ r.close ++ end ++ t.each do |th| ++ assert_equal false, th.value, '[ruby-core:81581] [Bug #13632]' ++ end ++ end ++ + def test_open_mode + feature4742 = "[ruby-core:36338]" + bug6055 = '[ruby-dev:45268]' +diff --git a/thread.c b/thread.c +index 7391cf96d284..2691fd835de4 100644 +--- a/thread.c ++++ b/thread.c +@@ -95,7 +95,11 @@ static int rb_threadptr_pending_interrupt_empty_p(rb_thread_t *th); + #define eTerminateSignal INT2FIX(1) + static volatile int system_working = 1; + +-#define closed_stream_error GET_VM()->special_exceptions[ruby_error_closed_stream] ++struct waiting_fd { ++ struct list_node wfd_node; /* <=> vm.waiting_fds */ ++ rb_thread_t *th; ++ int fd; ++}; + + inline static void + st_delete_wrap(st_table *table, st_data_t key) +@@ -1310,7 +1314,6 @@ call_without_gvl(void *(*func)(void *), void *data1, + rb_thread_t *th = GET_THREAD(); + int saved_errno = 0; + +- th->waiting_fd = -1; + if (ubf == RUBY_UBF_IO || ubf == RUBY_UBF_PROCESS) { + ubf = ubf_select; + data2 = th; +@@ -1433,11 +1436,15 @@ VALUE + rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd) + { + volatile VALUE val = Qundef; /* shouldn't be used */ ++ rb_vm_t *vm = GET_VM(); + rb_thread_t *th = GET_THREAD(); + volatile int saved_errno = 0; + int state; ++ struct waiting_fd wfd; + +- th->waiting_fd = fd; ++ wfd.fd = fd; ++ wfd.th = th; ++ list_add(&vm->waiting_fds, &wfd.wfd_node); + + TH_PUSH_TAG(th); + if ((state = EXEC_TAG()) == 0) { +@@ -1448,8 +1455,8 @@ rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd) + } + TH_POP_TAG(); + +- /* clear waiting_fd anytime */ +- th->waiting_fd = -1; ++ /* must be deleted before jump */ ++ list_del(&wfd.wfd_node); + + if (state) { + TH_JUMP_TAG(th, state); +@@ -2195,16 +2202,23 @@ int + rb_notify_fd_close(int fd) + { + rb_vm_t *vm = GET_THREAD()->vm; +- rb_thread_t *th = 0; ++ struct waiting_fd *wfd = 0; + int busy; + + busy = 0; +- list_for_each(&vm->living_threads, th, vmlt_node) { +- if (th->waiting_fd == fd) { +- VALUE err = th->vm->special_exceptions[ruby_error_closed_stream]; ++ list_for_each(&vm->waiting_fds, wfd, wfd_node) { ++ if (wfd->fd == fd) { ++ rb_thread_t *th = wfd->th; ++ VALUE err; ++ ++ busy = 1; ++ if (!th) { ++ continue; ++ } ++ wfd->th = 0; ++ err = th->vm->special_exceptions[ruby_error_stream_closed]; + rb_threadptr_pending_interrupt_enque(th, err); + rb_threadptr_interrupt(th); +- busy = 1; + } + } + return busy; +@@ -4839,7 +4853,7 @@ Init_Thread(void) + rb_define_method(rb_cThread, "name=", rb_thread_setname, 1); + rb_define_method(rb_cThread, "inspect", rb_thread_inspect, 0); + +- rb_vm_register_special_exception(ruby_error_closed_stream, rb_eIOError, "stream closed"); ++ rb_vm_register_special_exception(ruby_error_stream_closed, rb_eIOError, "stream closed"); + + cThGroup = rb_define_class("ThreadGroup", rb_cObject); + rb_define_alloc_func(cThGroup, thgroup_s_alloc); +diff --git a/vm.c b/vm.c +index 0544bcc4e573..c8ed39ad1e47 100644 +--- a/vm.c ++++ b/vm.c +@@ -2477,7 +2477,6 @@ th_init(rb_thread_t *th, VALUE self) + th->status = THREAD_RUNNABLE; + th->errinfo = Qnil; + th->last_status = Qnil; +- th->waiting_fd = -1; + th->root_svar = Qfalse; + th->local_storage_recursive_hash = Qnil; + th->local_storage_recursive_hash_for_trace = Qnil; +diff --git a/vm_core.h b/vm_core.h +index d0385d219f82..8e2b93d8e9b2 100644 +--- a/vm_core.h ++++ b/vm_core.h +@@ -427,7 +427,7 @@ enum ruby_special_exceptions { + ruby_error_reenter, + ruby_error_nomemory, + ruby_error_sysstack, +- ruby_error_closed_stream, ++ ruby_error_stream_closed, + ruby_special_error_count + }; + +@@ -490,6 +490,7 @@ typedef struct rb_vm_struct { + struct rb_thread_struct *main_thread; + struct rb_thread_struct *running_thread; + ++ struct list_head waiting_fds; /* <=> struct waiting_fd */ + struct list_head living_threads; + size_t living_thread_num; + VALUE thgroup_default; +@@ -712,8 +713,6 @@ typedef struct rb_thread_struct { + /* passing state */ + int state; + +- int waiting_fd; +- + /* for rb_iterate */ + VALUE passed_block_handler; + +@@ -1445,6 +1444,7 @@ void rb_thread_wakeup_timer_thread(void); + static inline void + rb_vm_living_threads_init(rb_vm_t *vm) + { ++ list_head_init(&vm->waiting_fds); + list_head_init(&vm->living_threads); + vm->living_thread_num = 0; + } diff --git a/ruby.spec b/ruby.spec index 53df209..b279692 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 82 +%global release 83 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -132,6 +132,9 @@ Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch # OpenSSL. # https://github.com/ruby/openssl/issues/127 Patch10: ruby-2.5.0-allow-3DES-cipher-suites-in-test_sslctx_set_params.patch +# Fix "IOError: stream closed" errors affecting Puma. +# https://bugs.ruby-lang.org/issues/13632 +Patch11: ruby-2.4.2-IO-close-do-not-enqueue-redundant-interrupts.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -512,6 +515,7 @@ rm -rf ext/fiddle/libffi* %patch7 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1026,6 +1030,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Fri Aug 11 2017 Vít Ondruch - 2.4.1-83 +- Fix "IOError: stream closed" errors affecting Puma. + * Thu Aug 03 2017 Fedora Release Engineering - 2.4.1-82 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild From ad2b787feae36c3dcc785cbf00784447714094b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 11 Aug 2017 12:42:38 +0200 Subject: [PATCH 246/530] Temporary disable checksec on PPC64LE (rhbz#1479302). --- ruby.spec | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ruby.spec b/ruby.spec index b279692..4a11b3e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -694,9 +694,17 @@ sed -i 's/^/%doc /' .ruby-doc.* sed -i 's/^/%lang(ja) /' .ruby-doc.ja %check +# Temporary change the hardening check on PPC64LE as long as the checksec is +# is providing incorrect output. +# https://bugzilla.redhat.com/show_bug.cgi?id=1479302 +%ifnarch ppc64le # Check Ruby hardening. checksec -f libruby.so.%{ruby_version} | \ grep "Full RELRO.*Canary found.*NX enabled.*DSO.*No RPATH.*No RUNPATH.*Yes.*\d*.*\d*.*libruby.so.%{ruby_version}" +%else +checksec -f libruby.so.%{ruby_version} | \ + grep "Full RELRO.*Canary found.*NX enabled.*DSO.*No RPATH.*No RUNPATH.*No.*\d*.*\d*.*libruby.so.%{ruby_version}" +%endif # Check RubyGems version correctness. [ "`make runruby TESTRUN_SCRIPT='bin/gem -v' | tail -1`" == '%{rubygems_version}' ] @@ -1032,6 +1040,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Fri Aug 11 2017 Vít Ondruch - 2.4.1-83 - Fix "IOError: stream closed" errors affecting Puma. +- Temporary disable checksec on PPC64LE (rhbz#1479302). * Thu Aug 03 2017 Fedora Release Engineering - 2.4.1-82 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild From c9dec05f47a2d8efb89feb3f52916331289113b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 8 Sep 2017 14:10:33 +0200 Subject: [PATCH 247/530] Drop ruby-devel dependency on rubypick, which is pulled in transtitively. --- ruby.spec | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 4a11b3e..40efd21 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 83 +%global release 84 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -174,7 +174,8 @@ straight-forward, and extensible. Summary: A Ruby development environment Group: Development/Languages Requires: %{name}%{?_isa} = %{version}-%{release} -Requires: rubypick +# This would not be needed if ~50 packages depending on -devel used +# --disable-gems Requires: rubygems %description devel @@ -1038,6 +1039,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Fri Sep 08 2017 Vít Ondruch - 2.4.1-84 +- Drop ruby-devel dependency on rubypick, which is pulled in transtitively. + * Fri Aug 11 2017 Vít Ondruch - 2.4.1-83 - Fix "IOError: stream closed" errors affecting Puma. - Temporary disable checksec on PPC64LE (rhbz#1479302). From 535c42e96c117372ef97560a2285b6d2a49412cb Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Mon, 18 Sep 2017 16:45:33 +0200 Subject: [PATCH 248/530] Update to Ruby 2.4.2. Patch10 and Patch11 subsumed. --- ...-do-not-enqueue-redundant-interrupts.patch | 241 ------------------ ...her-suites-in-test_sslctx_set_params.patch | 26 -- ruby.spec | 20 +- sources | 2 +- 4 files changed, 8 insertions(+), 281 deletions(-) delete mode 100644 ruby-2.4.2-IO-close-do-not-enqueue-redundant-interrupts.patch delete mode 100644 ruby-2.5.0-allow-3DES-cipher-suites-in-test_sslctx_set_params.patch diff --git a/ruby-2.4.2-IO-close-do-not-enqueue-redundant-interrupts.patch b/ruby-2.4.2-IO-close-do-not-enqueue-redundant-interrupts.patch deleted file mode 100644 index 263b532..0000000 --- a/ruby-2.4.2-IO-close-do-not-enqueue-redundant-interrupts.patch +++ /dev/null @@ -1,241 +0,0 @@ -From 27251312111b7e25e347773e5777ee6072f9289b Mon Sep 17 00:00:00 2001 -From: nagachika -Date: Sat, 8 Jul 2017 02:21:36 +0000 -Subject: [PATCH] merge revision(s) 58284,58812,59028: [Backport #13632] - - vm_core.h: ruby_error_stream_closed - - * vm_core.h (ruby_special_exceptions): renamed - ruby_error_closed_stream as ruby_error_stream_closed, like the - message. - speed up IO#close with many threads - - Today, it increases IO#close performance with many threads: - - Execution time (sec) - name trunk after - vm_thread_close 4.276 3.018 - - Speedup ratio: compare with the result of `trunk' (greater is better) - name after - vm_thread_close 1.417 - - This speedup comes because rb_notify_fd_close only scans threads - inside rb_thread_io_blocking_region, not all threads in the VM. - - In the future, this type data structure may allow us to notify - waiters of multiple FDs on a single thread (when using - Fibers). - - * thread.c (struct waiting_fd): declare - (rb_thread_io_blocking_region): use on-stack list waiter - (rb_notify_fd_close): walk vm->waiting_fds instead - (call_without_gvl): remove old field setting - (th_init): ditto - * vm_core.h (typedef struct rb_vm_struct): add waiting_fds list - * (typedef struct rb_thread_struct): remove waiting_fd field - (rb_vm_living_threads_init): initialize waiting_fds list - - I am now kicking myself for not thinking about this 3 years ago - when I introduced ccan/list in [Feature #9632] to optimize this - same function :< - IO#close: do not enqueue redundant interrupts (take #2) - - Enqueuing multiple errors for one event causes spurious errors - down the line, as reported by Nikolay Vashchenko in - https://bugs.ruby-lang.org/issues/13632 - - This should fix bad interactions with test_race_gets_and_close - in test/ruby/test_io.rb since we ensure rb_notify_fd_close - continues returning the busy flag after enqueuing the interrupt. - - Backporting changes to 2.4 and earlier releases will be more - challenging... - - * thread.c (rb_notify_fd_close): do not enqueue multiple interrupts - [ruby-core:81581] [Bug #13632] - * test/ruby/test_io.rb (test_single_exception_on_close): - new test based on script from Nikolay - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@59286 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - test/ruby/test_io.rb | 22 ++++++++++++++++++++++ - thread.c | 36 +++++++++++++++++++++++++----------- - vm.c | 1 - - vm_core.h | 6 +++--- - 4 files changed, 50 insertions(+), 15 deletions(-) - -diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb -index 61dfba318042..034dac570ce4 100644 ---- a/test/ruby/test_io.rb -+++ b/test/ruby/test_io.rb -@@ -2809,6 +2809,28 @@ def test_cross_thread_close_stdio - end; - end - -+ def test_single_exception_on_close -+ a = [] -+ t = [] -+ 10.times do -+ r, w = IO.pipe -+ a << [r, w] -+ t << Thread.new do -+ while r.gets -+ end rescue IOError -+ Thread.current.pending_interrupt? -+ end -+ end -+ a.each do |r, w| -+ w.write -"\n" -+ w.close -+ r.close -+ end -+ t.each do |th| -+ assert_equal false, th.value, '[ruby-core:81581] [Bug #13632]' -+ end -+ end -+ - def test_open_mode - feature4742 = "[ruby-core:36338]" - bug6055 = '[ruby-dev:45268]' -diff --git a/thread.c b/thread.c -index 7391cf96d284..2691fd835de4 100644 ---- a/thread.c -+++ b/thread.c -@@ -95,7 +95,11 @@ static int rb_threadptr_pending_interrupt_empty_p(rb_thread_t *th); - #define eTerminateSignal INT2FIX(1) - static volatile int system_working = 1; - --#define closed_stream_error GET_VM()->special_exceptions[ruby_error_closed_stream] -+struct waiting_fd { -+ struct list_node wfd_node; /* <=> vm.waiting_fds */ -+ rb_thread_t *th; -+ int fd; -+}; - - inline static void - st_delete_wrap(st_table *table, st_data_t key) -@@ -1310,7 +1314,6 @@ call_without_gvl(void *(*func)(void *), void *data1, - rb_thread_t *th = GET_THREAD(); - int saved_errno = 0; - -- th->waiting_fd = -1; - if (ubf == RUBY_UBF_IO || ubf == RUBY_UBF_PROCESS) { - ubf = ubf_select; - data2 = th; -@@ -1433,11 +1436,15 @@ VALUE - rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd) - { - volatile VALUE val = Qundef; /* shouldn't be used */ -+ rb_vm_t *vm = GET_VM(); - rb_thread_t *th = GET_THREAD(); - volatile int saved_errno = 0; - int state; -+ struct waiting_fd wfd; - -- th->waiting_fd = fd; -+ wfd.fd = fd; -+ wfd.th = th; -+ list_add(&vm->waiting_fds, &wfd.wfd_node); - - TH_PUSH_TAG(th); - if ((state = EXEC_TAG()) == 0) { -@@ -1448,8 +1455,8 @@ rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd) - } - TH_POP_TAG(); - -- /* clear waiting_fd anytime */ -- th->waiting_fd = -1; -+ /* must be deleted before jump */ -+ list_del(&wfd.wfd_node); - - if (state) { - TH_JUMP_TAG(th, state); -@@ -2195,16 +2202,23 @@ int - rb_notify_fd_close(int fd) - { - rb_vm_t *vm = GET_THREAD()->vm; -- rb_thread_t *th = 0; -+ struct waiting_fd *wfd = 0; - int busy; - - busy = 0; -- list_for_each(&vm->living_threads, th, vmlt_node) { -- if (th->waiting_fd == fd) { -- VALUE err = th->vm->special_exceptions[ruby_error_closed_stream]; -+ list_for_each(&vm->waiting_fds, wfd, wfd_node) { -+ if (wfd->fd == fd) { -+ rb_thread_t *th = wfd->th; -+ VALUE err; -+ -+ busy = 1; -+ if (!th) { -+ continue; -+ } -+ wfd->th = 0; -+ err = th->vm->special_exceptions[ruby_error_stream_closed]; - rb_threadptr_pending_interrupt_enque(th, err); - rb_threadptr_interrupt(th); -- busy = 1; - } - } - return busy; -@@ -4839,7 +4853,7 @@ Init_Thread(void) - rb_define_method(rb_cThread, "name=", rb_thread_setname, 1); - rb_define_method(rb_cThread, "inspect", rb_thread_inspect, 0); - -- rb_vm_register_special_exception(ruby_error_closed_stream, rb_eIOError, "stream closed"); -+ rb_vm_register_special_exception(ruby_error_stream_closed, rb_eIOError, "stream closed"); - - cThGroup = rb_define_class("ThreadGroup", rb_cObject); - rb_define_alloc_func(cThGroup, thgroup_s_alloc); -diff --git a/vm.c b/vm.c -index 0544bcc4e573..c8ed39ad1e47 100644 ---- a/vm.c -+++ b/vm.c -@@ -2477,7 +2477,6 @@ th_init(rb_thread_t *th, VALUE self) - th->status = THREAD_RUNNABLE; - th->errinfo = Qnil; - th->last_status = Qnil; -- th->waiting_fd = -1; - th->root_svar = Qfalse; - th->local_storage_recursive_hash = Qnil; - th->local_storage_recursive_hash_for_trace = Qnil; -diff --git a/vm_core.h b/vm_core.h -index d0385d219f82..8e2b93d8e9b2 100644 ---- a/vm_core.h -+++ b/vm_core.h -@@ -427,7 +427,7 @@ enum ruby_special_exceptions { - ruby_error_reenter, - ruby_error_nomemory, - ruby_error_sysstack, -- ruby_error_closed_stream, -+ ruby_error_stream_closed, - ruby_special_error_count - }; - -@@ -490,6 +490,7 @@ typedef struct rb_vm_struct { - struct rb_thread_struct *main_thread; - struct rb_thread_struct *running_thread; - -+ struct list_head waiting_fds; /* <=> struct waiting_fd */ - struct list_head living_threads; - size_t living_thread_num; - VALUE thgroup_default; -@@ -712,8 +713,6 @@ typedef struct rb_thread_struct { - /* passing state */ - int state; - -- int waiting_fd; -- - /* for rb_iterate */ - VALUE passed_block_handler; - -@@ -1445,6 +1444,7 @@ void rb_thread_wakeup_timer_thread(void); - static inline void - rb_vm_living_threads_init(rb_vm_t *vm) - { -+ list_head_init(&vm->waiting_fds); - list_head_init(&vm->living_threads); - vm->living_thread_num = 0; - } diff --git a/ruby-2.5.0-allow-3DES-cipher-suites-in-test_sslctx_set_params.patch b/ruby-2.5.0-allow-3DES-cipher-suites-in-test_sslctx_set_params.patch deleted file mode 100644 index 9c3e375..0000000 --- a/ruby-2.5.0-allow-3DES-cipher-suites-in-test_sslctx_set_params.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 261353a42d0dc0e7bf73e5a8fb8ecffd04249d42 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Tue, 27 Jun 2017 14:31:09 +0900 -Subject: [PATCH] test/test_ssl: allow 3DES cipher suites in - test_sslctx_set_params - -Fedora's OpenSSL seems to enable 3DES cipher suites by DEFAULT. - -Fixes: https://github.com/ruby/openssl/issues/127 ---- - test/test_ssl.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb -index 19066566..b3efe95a 100644 ---- a/test/openssl/test_ssl.rb -+++ b/test/openssl/test_ssl.rb -@@ -350,7 +350,7 @@ def test_sslctx_set_params - assert_equal OpenSSL::SSL::VERIFY_PEER, ctx.verify_mode - ciphers_names = ctx.ciphers.collect{|v, _, _, _| v } - assert ciphers_names.all?{|v| /A(EC)?DH/ !~ v }, "anon ciphers are disabled" -- assert ciphers_names.all?{|v| /(RC4|MD5|EXP|DES)/ !~ v }, "weak ciphers are disabled" -+ assert ciphers_names.all?{|v| /(RC4|MD5|EXP|DES(?!-EDE|-CBC3))/ !~ v }, "weak ciphers are disabled" - assert_equal 0, ctx.options & OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS - if defined?(OpenSSL::SSL::OP_NO_COMPRESSION) # >= 1.0.0 - assert_equal OpenSSL::SSL::OP_NO_COMPRESSION, diff --git a/ruby.spec b/ruby.spec index 40efd21..5102f76 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 4 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -29,7 +29,7 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 2.6.11 +%global rubygems_version 2.6.13 %global molinillo_version 0.5.7 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. @@ -39,10 +39,10 @@ %global bigdecimal_version 1.3.0 %global did_you_mean_version 1.1.0 %global io_console_version 0.4.6 -%global json_version 2.0.2 +%global json_version 2.0.4 %global minitest_version 5.10.1 %global net_telnet_version 0.1.1 -%global openssl_version 2.0.3 +%global openssl_version 2.0.5 %global power_assert_version 0.4.1 %global psych_version 2.2.2 %global rake_version 12.0.0 @@ -128,13 +128,6 @@ Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch -# Fix OpenSSL::TestSSL#test_sslctx_set_params failures due to recent changes in -# OpenSSL. -# https://github.com/ruby/openssl/issues/127 -Patch10: ruby-2.5.0-allow-3DES-cipher-suites-in-test_sslctx_set_params.patch -# Fix "IOError: stream closed" errors affecting Puma. -# https://bugs.ruby-lang.org/issues/13632 -Patch11: ruby-2.4.2-IO-close-do-not-enqueue-redundant-interrupts.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -515,8 +508,6 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch7 -p1 %patch9 -p1 -%patch10 -p1 -%patch11 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1039,6 +1030,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Mon Sep 18 2017 Pavel Valena - 2.4.2-84 +- Update to Ruby 2.4.2. + * Fri Sep 08 2017 Vít Ondruch - 2.4.1-84 - Drop ruby-devel dependency on rubypick, which is pulled in transtitively. diff --git a/sources b/sources index 49ed326..0ae2520 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.4.1.tar.xz) = e6fd290b6edd166348b70f0f1c56f7ed9d956c4c1eb91d97d0548041ca4196b9b75ec1ad35c745bdbfd4de195899093e7205d7f02b014ecf1c48e6f31cf25903 +SHA512 (ruby-2.4.2.tar.xz) = c1d42272fb0d94b693452e703b0ea4942bf59cbd4b08ba83bf039f54be97ebc88511632413da0164970b4cf97bc302bccb88aab48edfa8fa147498e7ee741595 From 6beb732b5c5bb59f2f72a5aaefe2143107d99a1c Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Tue, 19 Sep 2017 18:26:41 +0200 Subject: [PATCH 249/530] Apply patches cleanly. --- ...o-specify-additional-preludes-by-configuratio.patch | 2 +- ruby-2.1.0-Enable-configuration-of-archlibdir.patch | 2 +- ...-duplicated-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 ++-- ruby-2.3.0-ruby_version.patch | 10 +++++----- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index af8b9a9..3e29d1b 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -39,7 +39,7 @@ diff --git a/configure.in b/configure.in index 0e371e2..d4f1dcb 100644 --- a/configure.in +++ b/configure.in -@@ -4536,6 +4536,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -4563,6 +4563,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index a4e6c28..bc75f5e 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 37d9a62..553d4d0 100644 --- a/configure.in +++ b/configure.in -@@ -3790,6 +3790,11 @@ if test ${multiarch+set}; then +@@ -3823,6 +3823,11 @@ if test ${multiarch+set}; then fi archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index e841569..489a1b8 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.in b/configure.in index db37cd6..ce8d149 100644 --- a/configure.in +++ b/configure.in -@@ -4390,7 +4390,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4417,7 +4417,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index ba358f3..238cd66 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.in b/configure.in index 553d4d0..03a4152 100644 --- a/configure.in +++ b/configure.in -@@ -4454,6 +4454,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4481,6 +4481,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 44fe4a7..1905381 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.in b/configure.in index 03a4152..0e371e2 100644 --- a/configure.in +++ b/configure.in -@@ -4426,6 +4426,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4453,6 +4453,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 03a4152..0e371e2 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4450,6 +4454,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4477,6 +4481,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index b4d6f76..80be728 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.in b/configure.in index db37cd6..6e73fae 100644 --- a/configure.in +++ b/configure.in -@@ -4341,9 +4341,6 @@ AS_CASE(["$target_os"], +@@ -4368,9 +4368,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index db37cd6..6e73fae 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -4366,56 +4363,62 @@ AC_ARG_WITH(ridir, +@@ -4393,56 +4390,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index db37cd6..6e73fae 100644 if test "${LOAD_RELATIVE+set}"; then AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4432,6 +4435,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4459,6 +4462,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -245,7 +245,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index 0428bea..b6e090e 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1101,7 +1101,8 @@ def test_self_use_paths +@@ -1124,7 +1124,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -255,7 +255,7 @@ index 0428bea..b6e090e 100644 assert_equal File.join(parts), Gem.user_dir end -@@ -1228,7 +1229,7 @@ def test_self_user_home_user_drive_and_path +@@ -1251,7 +1252,7 @@ def test_self_user_home_user_drive_and_path def test_self_vendor_dir expected = File.join RbConfig::CONFIG['vendordir'], 'gems', From 26252866ff7d05c23ef253a3094670c8a7436f4b Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Thu, 19 Oct 2017 09:54:36 +0200 Subject: [PATCH 250/530] Add macros to remove systemtap, git and cmake dependencies. --- ruby.spec | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 5102f76..d39f57b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 84 +%global release 85 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -62,6 +62,10 @@ %global with_rubypick 1 %endif +%bcond_without systemtap +%bcond_without git +%bcond_without cmake + Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version} @@ -144,10 +148,16 @@ BuildRequires: libyaml-devel BuildRequires: readline-devel # Needed to pass test_set_program_name(TestRubyOptions) BuildRequires: procps +%if %{with systemtap} BuildRequires: %{_bindir}/dtrace +%endif # RubyGems test suite optional dependencies. +%if %{with git} BuildRequires: git +%endif +%if %{with cmake} BuildRequires: %{_bindir}/cmake +%endif # Required to test hardening. BuildRequires: %{_bindir}/checksec BuildRequires: multilib-rpm-config @@ -713,8 +723,10 @@ touch abrt.rb # runruby, so re-enable them). make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE12}" +%if %{with systemtap} # Check if systemtap is supported. make runruby TESTRUN_SCRIPT=%{SOURCE13} +%endif DISABLE_TESTS="" @@ -1030,6 +1042,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Thu Oct 19 2017 Jun Aruga - 2.4.2-85 +- Add macros to remove systemtap, git and cmake dependencies. + * Mon Sep 18 2017 Pavel Valena - 2.4.2-84 - Update to Ruby 2.4.2. From 9f971e4cf2110aa1b8b6d2b26284972575025d78 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Sat, 21 Oct 2017 13:13:14 +0200 Subject: [PATCH 251/530] Add macro to remove rubypick dependency. Because Fedora Ruby modularity is needed to build without rubypick package. --- ruby.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index d39f57b..ee75e1a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 85 +%global release 86 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -59,7 +59,7 @@ %global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') %if 0%{?fedora} >= 19 -%global with_rubypick 1 +%bcond_without rubypick %endif %bcond_without systemtap @@ -1042,6 +1042,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Sat Oct 21 2017 Jun Aruga - 2.4.2-86 +- Add macro to remove rubypick dependency. + * Thu Oct 19 2017 Jun Aruga - 2.4.2-85 - Add macros to remove systemtap, git and cmake dependencies. From 9bc7bec4a7528c5e4eb140af9f8ca0dab8b40bdf Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 27 Oct 2017 12:56:54 +0200 Subject: [PATCH 252/530] Improve "with" conditional statement as inline. --- ruby.spec | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/ruby.spec b/ruby.spec index ee75e1a..99e7534 100644 --- a/ruby.spec +++ b/ruby.spec @@ -148,16 +148,10 @@ BuildRequires: libyaml-devel BuildRequires: readline-devel # Needed to pass test_set_program_name(TestRubyOptions) BuildRequires: procps -%if %{with systemtap} -BuildRequires: %{_bindir}/dtrace -%endif +%{?with_systemtap:BuildRequires: %{_bindir}/dtrace} # RubyGems test suite optional dependencies. -%if %{with git} -BuildRequires: git -%endif -%if %{with cmake} -BuildRequires: %{_bindir}/cmake -%endif +%{?with_git:BuildRequires: git} +%{?with_cmake:BuildRequires: %{_bindir}/cmake} # Required to test hardening. BuildRequires: %{_bindir}/checksec BuildRequires: multilib-rpm-config @@ -723,10 +717,8 @@ touch abrt.rb # runruby, so re-enable them). make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE12}" -%if %{with systemtap} # Check if systemtap is supported. -make runruby TESTRUN_SCRIPT=%{SOURCE13} -%endif +%{?with_systemtap:make runruby TESTRUN_SCRIPT=%{SOURCE13}} DISABLE_TESTS="" @@ -1042,8 +1034,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog -* Sat Oct 21 2017 Jun Aruga - 2.4.2-86 +* Fri Oct 27 2017 Jun Aruga - 2.4.2-86 - Add macro to remove rubypick dependency. +- Improve "with" conditional statement as inline. * Thu Oct 19 2017 Jun Aruga - 2.4.2-85 - Add macros to remove systemtap, git and cmake dependencies. From 150d4f5dc095ff09760a0eb78bd9c87e6aac0d3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 30 Oct 2017 16:40:19 +0100 Subject: [PATCH 253/530] Drop 'config.h' source. This source is not needed since c467007d. --- config.h | 61 ------------------------------------------------------- ruby.spec | 5 ----- 2 files changed, 66 deletions(-) delete mode 100644 config.h diff --git a/config.h b/config.h deleted file mode 100644 index b44f715..0000000 --- a/config.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This config.h is a wrapper include file for the original ruby/config.h, - * which has been renamed to ruby/config-.h. There are conflicts for the - * original ruby/config.h on multilib systems, which result from arch-specific - * configuration options. Please do not use the arch-specific file directly. - */ - -/* - * This wrapped is addpated from SDL's one: - * http://pkgs.fedoraproject.org/cgit/SDL.git/tree/SDL_config.h - */ - -#ifdef ruby_config_wrapper_h -#error "ruby_config_wrapper_h should not be defined!" -#endif -#define ruby_config_wrapper_h - -#if defined(__i386__) -#include "ruby/config-i386.h" -#elif defined(__ia64__) -#include "ruby/config-ia64.h" -#elif defined(__powerpc64__) -#include -#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -#include "ruby/config-ppc64.h" -#else -#include "ruby/config-ppc64le.h" -#endif -#elif defined(__powerpc__) -#include "ruby/config-ppc.h" -#elif defined(__s390x__) -#include "ruby/config-s390x.h" -#elif defined(__s390__) -#include "ruby/config-s390.h" -#elif defined(__x86_64__) -#include "ruby/config-x86_64.h" -#elif defined(__arm__) -#include "ruby/config-arm.h" -#elif defined(__alpha__) -#include "ruby/config-alpha.h" -#elif defined(__sparc__) && defined (__arch64__) -#include "ruby/config-sparc64.h" -#elif defined(__sparc__) -#include "ruby/config-sparc.h" -#elif defined(__aarch64__) -#include "ruby/config-aarch64.h" -#elif defined(__mips64) && defined(__MIPSEL__) -#include "ruby/config-mips64el.h" -#elif defined(__mips64) -#include "ruby/config-mips64.h" -#elif defined(__mips) && defined(__MIPSEL__) -#include "ruby/config-mipsel.h" -#elif defined(__mips) -#include "ruby/config-mips.h" -#elif defined(__riscv64) -#include "ruby/config-riscv64.h" -#else -#error "The ruby-devel package is not usable with the architecture." -#endif - -#undef ruby_config_wrapper_h diff --git a/ruby.spec b/ruby.spec index 99e7534..1a8fa65 100644 --- a/ruby.spec +++ b/ruby.spec @@ -85,11 +85,6 @@ Source3: ruby-exercise.stp Source4: macros.ruby Source5: macros.rubygems Source6: abrt_prelude.rb -# This wrapper fixes https://bugzilla.redhat.com/show_bug.cgi?id=977941 -# Hopefully, it will get removed soon: -# https://fedorahosted.org/fpc/ticket/312 -# https://bugzilla.redhat.com/show_bug.cgi?id=977941 -Source7: config.h # RPM dependency generators. Source8: rubygems.attr Source9: rubygems.req From ad05a88747a3894aa01ad46dd6728d91e8b98e30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 1 Nov 2017 16:22:02 +0100 Subject: [PATCH 254/530] Check hardening only on Fedora. --- ruby.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 1a8fa65..6fd2e11 100644 --- a/ruby.spec +++ b/ruby.spec @@ -66,6 +66,10 @@ %bcond_without git %bcond_without cmake +%if 0%{?fedora} +%bcond_without hardening_test +%endif + Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version} @@ -148,7 +152,7 @@ BuildRequires: procps %{?with_git:BuildRequires: git} %{?with_cmake:BuildRequires: %{_bindir}/cmake} # Required to test hardening. -BuildRequires: %{_bindir}/checksec +%{?with_hardening_test:BuildRequires: %{_bindir}/checksec} BuildRequires: multilib-rpm-config # This package provides %%{_bindir}/ruby-mri therefore it is marked by this @@ -685,6 +689,7 @@ sed -i 's/^/%doc /' .ruby-doc.* sed -i 's/^/%lang(ja) /' .ruby-doc.ja %check +%if 0%{?with_hardening_test} # Temporary change the hardening check on PPC64LE as long as the checksec is # is providing incorrect output. # https://bugzilla.redhat.com/show_bug.cgi?id=1479302 @@ -696,6 +701,7 @@ checksec -f libruby.so.%{ruby_version} | \ checksec -f libruby.so.%{ruby_version} | \ grep "Full RELRO.*Canary found.*NX enabled.*DSO.*No RPATH.*No RUNPATH.*No.*\d*.*\d*.*libruby.so.%{ruby_version}" %endif +%endif # Check RubyGems version correctness. [ "`make runruby TESTRUN_SCRIPT='bin/gem -v' | tail -1`" == '%{rubygems_version}' ] From c2db65dbc7245bf1e78266ac2c2b1c7e7718dd15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 3 Jan 2018 12:06:40 +0100 Subject: [PATCH 255/530] Upgrade to Ruby 2.5.0. --- operating_system.rb | 37 ++++---- ruby-1.9.3-mkmf-verbose.patch | 2 +- ...-additional-preludes-by-configuratio.patch | 20 ++-- ...0-Enable-configuration-of-archlibdir.patch | 14 +-- ...ed-paths-when-empty-version-string-i.patch | 19 ++-- ruby-2.1.0-always-use-i386.patch | 16 ++-- ruby-2.1.0-custom-rubygems-location.patch | 30 +++--- ...2.3-Generate-preludes-using-miniruby.patch | 2 +- ruby-2.3.0-ruby_version.patch | 44 ++++----- ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch | 5 +- ....0-Add-Gem.operating_system_defaults.patch | 80 ++++++++++++++++ ruby.spec | 92 ++++++++++++------- sources | 2 +- 13 files changed, 232 insertions(+), 131 deletions(-) create mode 100644 ruby-2.5.0-Add-Gem.operating_system_defaults.patch diff --git a/operating_system.rb b/operating_system.rb index 4b2903d..0d4b1f0 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -87,22 +87,33 @@ module Gem # Remove methods we are going to override. This avoids "method redefined;" # warnings otherwise issued by Ruby. + remove_method :operating_system_defaults if method_defined? :operating_system_defaults remove_method :default_dir if method_defined? :default_dir remove_method :default_path if method_defined? :default_path - remove_method :default_bindir if method_defined? :default_bindir remove_method :default_ext_dir_for if method_defined? :default_ext_dir_for + ## + # Regular user installs into user directory, root manages /usr/local. + + def operating_system_defaults + unless opt_build_root? + options = if Process.uid == 0 + "--install-dir=#{Gem.default_dirs[:local][:gem_dir]} --bindir #{Gem.default_dirs[:local][:bin_dir]}" + else + "--user-install --bindir #{File.join [Dir.home, 'bin']}" + end + + {"gem" => options} + else + {} + end + end + ## # RubyGems default overrides. def default_dir - if opt_build_root? - Gem.default_dirs[:system][:gem_dir] - elsif Process.uid == 0 - Gem.default_dirs[:local][:gem_dir] - else - Gem.user_dir - end + Gem.default_dirs[:system][:gem_dir] end def default_path @@ -110,16 +121,6 @@ module Gem path.unshift Gem.user_dir if File.exist? Gem.user_home end - def default_bindir - if opt_build_root? - Gem.default_dirs[:system][:bin_dir] - elsif Process.uid == 0 - Gem.default_dirs[:local][:bin_dir] - else - File.join [Dir.home, 'bin'] - end - end - def default_ext_dir_for base_dir dir = if rpmbuild? build_dir = base_dir.chomp Gem.default_dirs[:system][:gem_dir] diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index d94ef7f..f2a1408 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,7 +11,7 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1897,7 +1897,7 @@ def configuration(srcdir) +@@ -1899,7 +1899,7 @@ def configuration(srcdir) SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index 3e29d1b..66cb565 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -6,14 +6,14 @@ Subject: [PATCH] Allow to specify addition preludes by configuration option. --- Makefile.in | 2 ++ common.mk | 2 +- - configure.in | 7 +++++++ + configure.ac | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index 7e8ed82..7916993 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -116,6 +116,8 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ +@@ -119,6 +119,8 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@ BOOTSTRAPRUBY = @BOOTSTRAPRUBY@ @@ -26,20 +26,20 @@ diff --git a/common.mk b/common.mk index 5cfbc3d..3f0a82e 100644 --- a/common.mk +++ b/common.mk -@@ -144,7 +144,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) +@@ -147,7 +147,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) DEFAULT_PRELUDES = $(GEM_PRELUDE) --PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES) -+PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES) $(OPTIONAL_PRELUDES) +-PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(DEFAULT_PRELUDES) ++PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(DEFAULT_PRELUDES) $(OPTIONAL_PRELUDES) GEM_PRELUDE = $(srcdir)/gem_prelude.rb PRELUDES = {$(srcdir)}prelude.c {$(srcdir)}miniprelude.c GOLFPRELUDES = {$(srcdir)}golf_prelude.c -diff --git a/configure.in b/configure.in -index 0e371e2..d4f1dcb 100644 ---- a/configure.in -+++ b/configure.in -@@ -4563,6 +4563,13 @@ AC_SUBST(rubyarchhdrdir)dnl +diff --git a/configure.ac b/configure.ac +index 028ef7ca3e..cdeff87871 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4395,6 +4395,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index bc75f5e..41444c5 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -4,15 +4,15 @@ Date: Tue, 1 Oct 2013 12:22:40 +0200 Subject: [PATCH] Allow to configure libruby.so placement. --- - configure.in | 5 +++++ + configure.ac | 5 +++++ 1 file changed, 5 insertions(+) -diff --git a/configure.in b/configure.in -index 37d9a62..553d4d0 100644 ---- a/configure.in -+++ b/configure.in -@@ -3823,6 +3823,11 @@ if test ${multiarch+set}; then - fi +diff --git a/configure.ac b/configure.ac +index 11fc237552..b77e88fc37 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3640,6 +3640,11 @@ AS_IF([test ${multiarch+set}], [ + ]) archlibdir='${libdir}/${arch}' +AC_ARG_WITH(archlibdir, diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 489a1b8..bdc074d 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -5,16 +5,16 @@ Subject: [PATCH] Prevent duplicated paths when empty version string is configured. --- - configure.in | 3 ++- + configure.ac | 3 ++- loadpath.c | 12 ++++++++++++ tool/mkconfig.rb | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) -diff --git a/configure.in b/configure.in -index db37cd6..ce8d149 100644 ---- a/configure.in -+++ b/configure.in -@@ -4417,7 +4417,8 @@ AS_CASE(["$ruby_version_dir_name"], +diff --git a/configure.ac b/configure.ac +index 999e2d6d5d..11fc237552 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4250,7 +4250,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then @@ -28,7 +28,7 @@ diff --git a/loadpath.c b/loadpath.c index 9160031..0d4d953 100644 --- a/loadpath.c +++ b/loadpath.c -@@ -65,22 +65,34 @@ const char ruby_initial_load_paths[] = +@@ -65,21 +65,33 @@ const char ruby_initial_load_paths[] = RUBY_SEARCH_PATH "\0" #endif #ifndef NO_RUBY_SITE_LIB @@ -58,16 +58,15 @@ index 9160031..0d4d953 100644 RUBY_VENDOR_ARCH_LIB_FOR(RUBY_SITEARCH) "\0" +#ifndef RUBY_LIB_VERSION_BLANK RUBY_VENDOR_LIB "\0" - #endif +#endif + #endif RUBY_LIB "\0" - #ifdef RUBY_THINARCH diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb index 07076d4..35e6c3c 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -113,7 +113,7 @@ +@@ -111,7 +111,7 @@ val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump case name when /^prefix$/ diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 238cd66..4864741 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -4,22 +4,22 @@ Date: Mon, 19 Nov 2012 14:37:28 +0100 Subject: [PATCH] Always use i386. --- - configure.in | 2 ++ + configure.ac | 2 ++ 1 file changed, 2 insertions(+) -diff --git a/configure.in b/configure.in -index 553d4d0..03a4152 100644 ---- a/configure.in -+++ b/configure.in -@@ -4481,6 +4481,8 @@ AC_SUBST(vendorarchdir)dnl +diff --git a/configure.ac b/configure.ac +index b77e88fc37..6bba453e3c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4314,6 +4314,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl +target_cpu=`echo $target_cpu | sed s/i.86/i386/` + - if test "${universal_binary-no}" = yes ; then + AS_IF([test "${universal_binary-no}" = yes ], [ arch="universal-${target_os}" - if test "${rb_cv_architecture_available}" = yes; then + AS_IF([test "${rb_cv_architecture_available}" = yes], [ -- 1.8.3.1 diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 1905381..cc55c4a 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -5,17 +5,17 @@ Subject: [PATCH] Allow to install RubyGems into custom location, outside of Ruby tree. --- - configure.in | 5 +++++ + configure.ac | 5 +++++ loadpath.c | 4 ++++ template/verconf.h.tmpl | 3 +++ - tool/rbinstall.rb | 9 +++++++++ - 4 files changed, 21 insertions(+) + tool/rbinstall.rb | 7 +++++++ + 4 files changed, 19 insertions(+) -diff --git a/configure.in b/configure.in -index 03a4152..0e371e2 100644 ---- a/configure.in -+++ b/configure.in -@@ -4453,6 +4453,10 @@ AC_ARG_WITH(vendorarchdir, +diff --git a/configure.ac b/configure.ac +index 6bba453e3c..028ef7ca3e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4286,6 +4286,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -23,10 +23,10 @@ index 03a4152..0e371e2 100644 + AS_HELP_STRING([--with-rubygemsdir=DIR], [custom rubygems directory]), + [rubygemsdir=$withval]) + - if test "${LOAD_RELATIVE+set}"; then + AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4477,6 +4481,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4310,6 +4314,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -67,7 +67,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index b47b6e1..0b99408 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -330,6 +330,7 @@ def CONFIG.[](name, mandatory = false) +@@ -331,6 +331,7 @@ def CONFIG.[](name, mandatory = false) sitearchlibdir = CONFIG["sitearchdir"] vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] @@ -75,17 +75,15 @@ index b47b6e1..0b99408 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] configure_args = Shellwords.shellwords(CONFIG["configure_args"]) -@@ -517,7 +518,15 @@ def CONFIG.[](name, mandatory = false) +@@ -537,7 +538,13 @@ def install(src, cmd) install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir - noinst = %w[README* *.txt *.rdoc *.gemspec] -+ noinst += %w[*ubygems.rb rubygems/ datadir.rb] if rubygemsdir + noinst = %w[*.txt *.rdoc *.gemspec] ++ noinst += %w[rubygems.rb rubygems/ datadir.rb] if rubygemsdir install_recursive(File.join(srcdir, "lib"), rubylibdir, :no_install => noinst, :mode => $data_mode) + if rubygemsdir + noinst = %w[obsolete.rb] + install_recursive(File.join(srcdir, "lib", "rubygems"), File.join(rubygemsdir, "rubygems"), :mode => $data_mode) -+ install_recursive(File.join(srcdir, "lib", "rbconfig"), File.join(rubygemsdir, "rbconfig"), :no_install => noinst, :mode => $data_mode) -+ install(File.join(srcdir, "lib", "ubygems.rb"), File.join(rubygemsdir, "ubygems.rb"), :mode => $data_mode) + install(File.join(srcdir, "lib", "rubygems.rb"), File.join(rubygemsdir, "rubygems.rb"), :mode => $data_mode) + end end diff --git a/ruby-2.2.3-Generate-preludes-using-miniruby.patch b/ruby-2.2.3-Generate-preludes-using-miniruby.patch index 6e8adc4..ca66d28 100644 --- a/ruby-2.2.3-Generate-preludes-using-miniruby.patch +++ b/ruby-2.2.3-Generate-preludes-using-miniruby.patch @@ -11,7 +11,7 @@ diff --git a/common.mk b/common.mk index 168dc52..20c218a 100644 --- a/common.mk +++ b/common.mk -@@ -873,9 +873,9 @@ $(MINIPRELUDE_C): $(COMPILE_PRELUDE) +@@ -962,9 +962,9 @@ $(MINIPRELUDE_C): $(COMPILE_PRELUDE) $(srcdir)/template/prelude.c.tmpl $(PRELUDE_C): $(COMPILE_PRELUDE) \ diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 80be728..5e24003 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -12,15 +12,15 @@ ruby_version_dir_name now specifies custom version string for versioned directories, e.g. instead of default X.Y.Z, you can specify whatever string. --- - configure.in | 64 ++++++++++++++++++++++++++++------------------------- + configure.ac | 64 ++++++++++++++++++++++++++++------------------------- template/ruby.pc.in | 1 + 2 files changed, 35 insertions(+), 30 deletions(-) -diff --git a/configure.in b/configure.in -index db37cd6..6e73fae 100644 ---- a/configure.in -+++ b/configure.in -@@ -4368,9 +4368,6 @@ AS_CASE(["$target_os"], +diff --git a/configure.ac b/configure.ac +index 8ea969412f..a00f2b6776 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4201,9 +4201,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index db37cd6..6e73fae 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -4393,56 +4390,62 @@ AC_ARG_WITH(ridir, +@@ -4226,56 +4223,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -43,7 +43,7 @@ index db37cd6..6e73fae 100644 -AS_CASE(["$ruby_version"], - [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], - [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) --if test ${RUBY_LIB_VERSION_STYLE+set}; then +-AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [ - { - echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" - echo '#define STRINGIZE(x) x' @@ -53,11 +53,11 @@ index db37cd6..6e73fae 100644 - } > conftest.c - ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" - eval $ruby_version --elif test -z "${ruby_version}"; then +-], [test -z "${ruby_version}"], [ - AC_MSG_ERROR([No ruby version, No place for bundled libraries]) --else +-], [ - RUBY_LIB_VERSION="${ruby_version}" --fi +-]) +RUBY_LIB_VERSION_STYLE='3 /* full */' +{ +echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" @@ -118,9 +118,9 @@ index db37cd6..6e73fae 100644 - [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) + [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) - if test "${LOAD_RELATIVE+set}"; then + AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4459,6 +4462,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4292,6 +4295,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -137,9 +137,9 @@ index 8a2c066..c81b211 100644 TEENY=@TEENY@ ruby_version=@ruby_version@ +ruby_version_dir_name=@ruby_version_dir_name@ + RUBY_API_VERSION=@RUBY_API_VERSION@ RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@ RUBY_BASE_NAME=@RUBY_BASE_NAME@ - RUBY_VERSION_NAME=@RUBY_VERSION_NAME@ -- 2.1.0 @@ -245,7 +245,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index 0428bea..b6e090e 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1124,7 +1124,8 @@ def test_self_use_paths +@@ -1156,7 +1156,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -255,7 +255,7 @@ index 0428bea..b6e090e 100644 assert_equal File.join(parts), Gem.user_dir end -@@ -1251,7 +1252,7 @@ def test_self_user_home_user_drive_and_path +@@ -1283,7 +1284,7 @@ def test_self_user_home_user_drive_and_path def test_self_vendor_dir expected = File.join RbConfig::CONFIG['vendordir'], 'gems', @@ -275,14 +275,14 @@ Subject: [PATCH 4/4] Let headers directories follow the configured version name. --- - configure.in | 2 +- + configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/configure.in b/configure.in -index 6e73fae..c842725 100644 ---- a/configure.in -+++ b/configure.in -@@ -271,7 +271,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +diff --git a/configure.ac b/configure.ac +index a00f2b6776..999e2d6d5d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -164,7 +164,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) diff --git a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch index 8765d2a..2dc17e3 100644 --- a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +++ b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch @@ -15,7 +15,7 @@ diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb index 1da3d93..65148a1 100644 --- a/test/fiddle/helper.rb +++ b/test/fiddle/helper.rb -@@ -6,98 +6,6 @@ +@@ -6,95 +6,6 @@ libc_so = libm_so = nil @@ -23,9 +23,6 @@ index 1da3d93..65148a1 100644 -when /cygwin/ - libc_so = "cygwin1.dll" - libm_so = "cygwin1.dll" --when /x86_64-linux/ -- libc_so = "/lib64/libc.so.6" -- libm_so = "/lib64/libm.so.6" -when /linux/ - libdir = '/lib' - case [0].pack('L!').size diff --git a/ruby-2.5.0-Add-Gem.operating_system_defaults.patch b/ruby-2.5.0-Add-Gem.operating_system_defaults.patch new file mode 100644 index 0000000..6838701 --- /dev/null +++ b/ruby-2.5.0-Add-Gem.operating_system_defaults.patch @@ -0,0 +1,80 @@ +From 60eb961c25f801ee43ca1be9393ab2f0a0546677 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 19 Dec 2017 14:00:20 +0100 +Subject: [PATCH] Add Gem.operating_system_defaults to allow packagers to + override defaults. + +This change allows Ruby packagers to override defaults and lazily query +them. + +This is very much the same change as #1644 to treat the +operating_system defaults the same way as platform defaults. +--- + lib/rubygems/config_file.rb | 2 +- + lib/rubygems/defaults.rb | 21 ++++++++++++++++++++- + test/rubygems/test_gem.rb | 7 +++++++ + 3 files changed, 28 insertions(+), 2 deletions(-) + +diff --git a/lib/rubygems/config_file.rb b/lib/rubygems/config_file.rb +index a4efed0f5a..deee38e6d9 100644 +--- a/lib/rubygems/config_file.rb ++++ b/lib/rubygems/config_file.rb +@@ -48,7 +48,7 @@ class Gem::ConfigFile + # For Ruby packagers to set configuration defaults. Set in + # rubygems/defaults/operating_system.rb + +- OPERATING_SYSTEM_DEFAULTS = {} ++ OPERATING_SYSTEM_DEFAULTS = Gem.operating_system_defaults + + ## + # For Ruby implementers to set configuration defaults. Set in +diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb +index 43d57fc808..b8222877ae 100644 +--- a/lib/rubygems/defaults.rb ++++ b/lib/rubygems/defaults.rb +@@ -177,7 +177,26 @@ def self.vendor_dir # :nodoc: + end + + ## +- # Default options for gem commands. ++ # Default options for gem commands for Ruby packagers. ++ # ++ # The options here should be structured as an array of string "gem" ++ # command names as keys and a string of the default options as values. ++ # ++ # Example: ++ # ++ # def self.operating_system_defaults ++ # { ++ # 'install' => '--no-rdoc --no-ri --env-shebang', ++ # 'update' => '--no-rdoc --no-ri --env-shebang' ++ # } ++ # end ++ ++ def self.operating_system_defaults ++ {} ++ end ++ ++ ## ++ # Default options for gem commands for Ruby implementers. + # + # The options here should be structured as an array of string "gem" + # command names as keys and a string of the default options as values. +diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb +index 3225a05c6b..62b80c4945 100644 +--- a/test/rubygems/test_gem.rb ++++ b/test/rubygems/test_gem.rb +@@ -1802,6 +1802,13 @@ def test_use_gemdeps_specific + ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps + end + ++ def test_operating_system_defaults ++ operating_system_defaults = Gem.operating_system_defaults ++ ++ assert operating_system_defaults != nil ++ assert operating_system_defaults.is_a? Hash ++ end ++ + def test_platform_defaults + platform_defaults = Gem.platform_defaults + diff --git a/ruby.spec b/ruby.spec index 6fd2e11..8bc9686 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 -%global minor_version 4 -%global teeny_version 2 +%global minor_version 5 +%global teeny_version 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -10,7 +10,7 @@ #%%global milestone rc1 # Keep the revision enabled for pre-releases from SVN. -#%%global revision 57159 +#%%global revision 61414 %global ruby_archive %{name}-%{ruby_version} @@ -29,26 +29,26 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 2.6.13 +%global rubygems_version 2.7.3 %global molinillo_version 0.5.7 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. # http://redmine.ruby-lang.org/issues/5313 %global irb_version %{ruby_version} -%global bigdecimal_version 1.3.0 -%global did_you_mean_version 1.1.0 +%global bigdecimal_version 1.3.4 +%global did_you_mean_version 1.2.0 %global io_console_version 0.4.6 -%global json_version 2.0.4 -%global minitest_version 5.10.1 +%global json_version 2.1.0 +%global minitest_version 5.10.3 %global net_telnet_version 0.1.1 -%global openssl_version 2.0.5 -%global power_assert_version 0.4.1 -%global psych_version 2.2.2 -%global rake_version 12.0.0 -%global rdoc_version 5.0.0 -%global test_unit_version 3.2.3 -%global xmlrpc_version 0.2.1 +%global openssl_version 2.1.0 +%global power_assert_version 1.1.1 +%global psych_version 3.0.2 +%global rake_version 12.3.0 +%global rdoc_version 6.0.1 +%global test_unit_version 3.2.7 +%global xmlrpc_version 0.3.0 # Might not be needed in the future, if we are lucky enough. # https://bugzilla.redhat.com/show_bug.cgi?id=888262 @@ -131,6 +131,9 @@ Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +# Add Gem.operating_system_defaults to allow packagers to override defaults. +# https://github.com/rubygems/rubygems/pull/2116 +Patch10: ruby-2.5.0-Add-Gem.operating_system_defaults.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -216,7 +219,6 @@ Requires: rubygem(psych) >= %{psych_version} Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} # https://github.com/rubygems/rubygems/pull/1189#issuecomment-121600910 -Provides: bundled(rubygem(molinillo)) = %{molinillo_version} Provides: bundled(rubygem-molinillo) = %{molinillo_version} BuildArch: noarch @@ -334,6 +336,7 @@ License: MIT Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(did_you_mean) = %{version}-%{release} +BuildArch: noarch %description -n rubygem-did_you_mean "did you mean?" experience in Ruby: the error message will tell you the right @@ -448,6 +451,7 @@ Group: Development/Libraries Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(net-telnet) = %{version}-%{release} +BuildArch: noarch %description -n rubygem-net-telnet Provides telnet client functionality. @@ -511,6 +515,7 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch7 -p1 %patch9 -p1 +%patch10 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -690,25 +695,24 @@ sed -i 's/^/%lang(ja) /' .ruby-doc.ja %check %if 0%{?with_hardening_test} -# Temporary change the hardening check on PPC64LE as long as the checksec is -# is providing incorrect output. -# https://bugzilla.redhat.com/show_bug.cgi?id=1479302 -%ifnarch ppc64le # Check Ruby hardening. checksec -f libruby.so.%{ruby_version} | \ grep "Full RELRO.*Canary found.*NX enabled.*DSO.*No RPATH.*No RUNPATH.*Yes.*\d*.*\d*.*libruby.so.%{ruby_version}" -%else -checksec -f libruby.so.%{ruby_version} | \ - grep "Full RELRO.*Canary found.*NX enabled.*DSO.*No RPATH.*No RUNPATH.*No.*\d*.*\d*.*libruby.so.%{ruby_version}" -%endif %endif -# Check RubyGems version correctness. +# Check RubyGems version. [ "`make runruby TESTRUN_SCRIPT='bin/gem -v' | tail -1`" == '%{rubygems_version}' ] -# Check Molinillo version correctness. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\"module Gem; module Resolver; end; end; require 'rubygems/resolver/molinillo/lib/molinillo/gem_metadata'; puts Gem::Resolver::Molinillo::VERSION\\\"\" | tail -1`" \ + +# Check Rubygems bundled dependencies versions. + +# Molinillo. +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ + module Gem; module Resolver; end; end; \ + require 'rubygems/resolver/molinillo/lib/molinillo/gem_metadata'; \ + puts Gem::Resolver::Molinillo::VERSION\\\"\" | tail -1`" \ == '%{molinillo_version}' ] + # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing # the test suite). @@ -727,6 +731,11 @@ DISABLE_TESTS="" # Once seen: http://koji.fedoraproject.org/koji/taskinfo?taskID=12556650 DISABLE_TESTS="$DISABLE_TESTS -x test_fork.rb" +# Disable failing TestResolvMDNS#test_mdns_each_address test, +# which fails on Koji. +# https://bugs.ruby-lang.org/issues/14175 +sed -i '/def test_mdns_each_address$/,/^ end$/ s/^/#/' test/resolv/test_mdns.rb + make check TESTS="-v $DISABLE_TESTS" %post libs -p /sbin/ldconfig @@ -789,7 +798,6 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/net %{ruby_libdir}/optparse %{ruby_libdir}/racc -%{ruby_libdir}/rbconfig %{ruby_libdir}/rexml %{ruby_libdir}/rinda %{ruby_libdir}/ripper @@ -886,9 +894,6 @@ make check TESTS="-v $DISABLE_TESTS" %dir %{ruby_libarchdir}/io %{ruby_libarchdir}/io/nonblock.so %{ruby_libarchdir}/io/wait.so -%dir %{ruby_libarchdir}/mathn -%{ruby_libarchdir}/mathn/complex.so -%{ruby_libarchdir}/mathn/rational.so %{ruby_libarchdir}/nkf.so %{ruby_libarchdir}/objspace.so %{ruby_libarchdir}/pathname.so @@ -912,10 +917,8 @@ make check TESTS="-v $DISABLE_TESTS" %files -n rubygems %{_bindir}/gem %dir %{rubygems_dir} -%{rubygems_dir}/rbconfig %{rubygems_dir}/rubygems %{rubygems_dir}/rubygems.rb -%{rubygems_dir}/ubygems.rb # Explicitly include only RubyGems directory strucure to avoid accidentally # packaged content. @@ -932,6 +935,24 @@ make check TESTS="-v $DISABLE_TESTS" %exclude %{gem_dir}/cache/* +# TODO: Gemify these libraries +%{gem_dir}/specifications/default/cmath-1.0.0.gemspec +%{gem_dir}/specifications/default/csv-1.0.0.gemspec +%{gem_dir}/specifications/default/date-1.0.0.gemspec +%{gem_dir}/specifications/default/dbm-1.0.0.gemspec +%{gem_dir}/specifications/default/etc-1.0.0.gemspec +%{gem_dir}/specifications/default/fcntl-1.0.0.gemspec +%{gem_dir}/specifications/default/fiddle-1.0.0.gemspec +%{gem_dir}/specifications/default/fileutils-1.0.2.gemspec +%{gem_dir}/specifications/default/gdbm-2.0.0.gemspec +%{gem_dir}/specifications/default/ipaddr-1.2.0.gemspec +%{gem_dir}/specifications/default/scanf-1.0.0.gemspec +%{gem_dir}/specifications/default/sdbm-1.0.0.gemspec +%{gem_dir}/specifications/default/stringio-0.0.1.gemspec +%{gem_dir}/specifications/default/strscan-1.0.0.gemspec +%{gem_dir}/specifications/default/webrick-1.4.2.gemspec +%{gem_dir}/specifications/default/zlib-1.0.0.gemspec + %files -n rubygems-devel %{_rpmconfigdir}/macros.d/macros.rubygems %{_rpmconfigdir}/fileattrs/rubygems.attr @@ -1027,14 +1048,19 @@ make check TESTS="-v $DISABLE_TESTS" %files -n rubygem-xmlrpc %license %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/LICENSE.txt %dir %{gem_dir}/gems/xmlrpc-%{xmlrpc_version} +%exclude %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/.* %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/Gemfile %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/Rakefile %doc %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/README.md %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/bin %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/lib +%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/xmlrpc.gemspec %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Tue Jan 02 2018 Vít Ondruch - 2.5.0-1 +- Upgrade to Ruby 2.5.0. + * Fri Oct 27 2017 Jun Aruga - 2.4.2-86 - Add macro to remove rubypick dependency. - Improve "with" conditional statement as inline. diff --git a/sources b/sources index 0ae2520..a289e4c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.4.2.tar.xz) = c1d42272fb0d94b693452e703b0ea4942bf59cbd4b08ba83bf039f54be97ebc88511632413da0164970b4cf97bc302bccb88aab48edfa8fa147498e7ee741595 +SHA512 (ruby-2.5.0.tar.xz) = 55714a33d7661fe8b432f73c34fd67b49699f8b79df1cbd680a74899124d31111ab0f444677672aac1ba725820182940d485efb2db0bf2bc96737c5d40c54578 From 45b099cf0563f6cf62878cb379d1159b6c4d6a19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 3 Jan 2018 12:10:23 +0100 Subject: [PATCH 256/530] Temporary bump rubygem-json release. This allow to rebuild independent rubygem-json package, which would have otherwise higher release and caused issues with build of other packages. --- ruby.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/ruby.spec b/ruby.spec index 8bc9686..49e4e2a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -359,6 +359,7 @@ provide higher layer features, such like curses and readline. %package -n rubygem-json Summary: This is a JSON implementation as a Ruby extension in C Version: %{json_version} +Release: 102%{?dist} Group: Development/Libraries # UCD: ext/json/generator/generator.c License: (Ruby or GPLv2) and UCD From 9436f5bc42e722be4f604cb4bd057fcf61db50ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 3 Jan 2018 16:16:03 +0100 Subject: [PATCH 257/530] Revert "Temporary bump rubygem-json release." This reverts commit 45b099cf0563f6cf62878cb379d1159b6c4d6a19. --- ruby.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 49e4e2a..8bc9686 100644 --- a/ruby.spec +++ b/ruby.spec @@ -359,7 +359,6 @@ provide higher layer features, such like curses and readline. %package -n rubygem-json Summary: This is a JSON implementation as a Ruby extension in C Version: %{json_version} -Release: 102%{?dist} Group: Development/Libraries # UCD: ext/json/generator/generator.c License: (Ruby or GPLv2) and UCD From b1741da5b78890dda27bb312dca07fa42dd7356b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 9 Jan 2018 12:49:58 +0100 Subject: [PATCH 258/530] Fix segfaults during generating of documentation. This caused issued during build of rubygem-{webmock,ffi} and was fixed as part of https://bugs.ruby-lang.org/issues/14261. --- ruby-2.5.0-parse.y-assignable_error.patch | 80 +++++++++++++++++++++++ ruby.spec | 9 ++- 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 ruby-2.5.0-parse.y-assignable_error.patch diff --git a/ruby-2.5.0-parse.y-assignable_error.patch b/ruby-2.5.0-parse.y-assignable_error.patch new file mode 100644 index 0000000..ea7dad9 --- /dev/null +++ b/ruby-2.5.0-parse.y-assignable_error.patch @@ -0,0 +1,80 @@ +From: nobu +Date: Sun, 31 Dec 2017 11:25:38 +0000 +Subject: [PATCH] parse.y: assignable_error + +* parse.y (assignable_gen): should return valid NODE always even + on errors. [ruby-core:84565] [Bug #14261] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61523 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + parse.c | 14 ++++---------- + test/ruby/test_parse.rb | 6 ++++++ + 2 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/parse.c b/parse.c +index 08c3461f7096..c260a046dc33 100644 +--- a/parse.c ++++ b/parse.c +@@ -6593,10 +6593,6 @@ + #line 1984 "parse.y" /* yacc.c:1646 */ + { + (yyval.node) = assignable(var_field((yyvsp[0].id)), 0, &(yyloc)); +- /*%%%*/ +- if (!(yyval.node)) (yyval.node) = new_begin(0, &(yyloc)); +- /*% +- %*/ + } + #line 6598 "parse.c" /* yacc.c:1646 */ + break; +@@ -6605,10 +6601,6 @@ + #line 1992 "parse.y" /* yacc.c:1646 */ + { + (yyval.node) = assignable(var_field((yyvsp[0].id)), 0, &(yyloc)); +- /*%%%*/ +- if (!(yyval.node)) (yyval.node) = new_begin(0, &(yyloc)); +- /*% +- %*/ + } + #line 6610 "parse.c" /* yacc.c:1646 */ + break; +@@ -16034,11 +16026,13 @@ + #ifdef RIPPER + ID id = get_id(lhs); + # define assignable_result(x) (lhs) ++# define assignable_error() (lhs) + # define parser_yyerror(parser, x) (lhs = assign_error_gen(parser, lhs)) + #else + # define assignable_result(x) assignable_result0(x, location) ++# define assignable_error() new_begin(0, location) + #endif +- if (!id) return assignable_result(0); ++ if (!id) return assignable_error(); + switch (id) { + case keyword_self: + yyerror0("Can't change the value of self"); +@@ -16101,7 +16095,7 @@ + compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to set", rb_id2str(id)); + } + error: +- return assignable_result(0); ++ return assignable_error(); + #undef assignable_result + #undef parser_yyerror + } +diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb +index e26bcdc07e19..15c6245bac2e 100644 +--- a/test/ruby/test_parse.rb ++++ b/test/ruby/test_parse.rb +@@ -746,6 +746,12 @@ def foo + end + END + end ++ assert_raise(SyntaxError) do ++ eval "#{<<~"begin;"}\n#{<<~'end;'}", nil, __FILE__, __LINE__+1 ++ begin; ++ x, true ++ end; ++ end + end + + def test_block_dup diff --git a/ruby.spec b/ruby.spec index 8bc9686..c8263e5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 86 +%global release 87 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -134,6 +134,9 @@ Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch # Add Gem.operating_system_defaults to allow packagers to override defaults. # https://github.com/rubygems/rubygems/pull/2116 Patch10: ruby-2.5.0-Add-Gem.operating_system_defaults.patch +# Fix segfault during generating documentation. +# https://bugs.ruby-lang.org/issues/14343 +Patch11: ruby-2.5.0-parse.y-assignable_error.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -516,6 +519,7 @@ rm -rf ext/fiddle/libffi* %patch7 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1058,6 +1062,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Tue Jan 09 2018 Vít Ondruch - 2.5.0-87 +- Fix segfaults during generating of documentation. + * Tue Jan 02 2018 Vít Ondruch - 2.5.0-1 - Upgrade to Ruby 2.5.0. From 10a4e45e8985ea6b56df06d353ccfa42a61e53c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 9 Jan 2018 13:09:39 +0100 Subject: [PATCH 259/530] Fix wrong changelog release. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index c8263e5..6eff5d9 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1065,7 +1065,7 @@ make check TESTS="-v $DISABLE_TESTS" * Tue Jan 09 2018 Vít Ondruch - 2.5.0-87 - Fix segfaults during generating of documentation. -* Tue Jan 02 2018 Vít Ondruch - 2.5.0-1 +* Tue Jan 02 2018 Vít Ondruch - 2.5.0-86 - Upgrade to Ruby 2.5.0. * Fri Oct 27 2017 Jun Aruga - 2.4.2-86 From 138a8a192cc62b4f2f4712a5252ad8b24091b521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= Date: Sat, 20 Jan 2018 23:07:50 +0100 Subject: [PATCH 260/530] Rebuilt for switch to libxcrypt --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 6eff5d9..dc2aed6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 87 +%global release 88 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1062,6 +1062,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Sat Jan 20 2018 Björn Esser - 2.5.0-88 +- Rebuilt for switch to libxcrypt + * Tue Jan 09 2018 Vít Ondruch - 2.5.0-87 - Fix segfaults during generating of documentation. From f49edf212fc0d8efce90860a0c4094fb30f173a5 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 9 Feb 2018 13:25:27 +0000 Subject: [PATCH 261/530] - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index dc2aed6..e8cf911 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 88 +%global release 89 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1062,6 +1062,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Fri Feb 09 2018 Fedora Release Engineering - 2.5.0-89 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + * Sat Jan 20 2018 Björn Esser - 2.5.0-88 - Rebuilt for switch to libxcrypt From 72c55bdcb29463642399ea365230a8b11c5c7842 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 30 Jan 2018 08:38:56 +0100 Subject: [PATCH 262/530] Drop obsolete ldconfig scriptlets. https://fedoraproject.org/wiki/Changes/Removing_ldconfig_scriptlets --- ruby.spec | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index e8cf911..ea7abe6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -742,10 +742,6 @@ sed -i '/def test_mdns_each_address$/,/^ end$/ s/^/#/' test/resolv/test_mdns.rb make check TESTS="-v $DISABLE_TESTS" -%post libs -p /sbin/ldconfig - -%postun libs -p /sbin/ldconfig - %files %license BSDL %license COPYING @@ -1062,6 +1058,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Tue Feb 13 2018 Vít Ondruch - 2.5.0-89 +- Drop obsolete ldconfig scriptlets. + * Fri Feb 09 2018 Fedora Release Engineering - 2.5.0-89 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild From 5624addc78a1a8b4a4d5dd31d76624249ce3a46d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 1 Feb 2018 13:53:25 +0100 Subject: [PATCH 263/530] Add GMP dependency. This improves performance of some mathematical operations. https://bugs.ruby-lang.org/issues/8796 --- ruby.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ruby.spec b/ruby.spec index ea7abe6..2ff939f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -65,6 +65,7 @@ %bcond_without systemtap %bcond_without git %bcond_without cmake +%bcond_without gmp %if 0%{?fedora} %bcond_without hardening_test @@ -147,6 +148,7 @@ Recommends: rubygem(openssl) >= %{openssl_version} BuildRequires: autoconf BuildRequires: gdbm-devel +%{?with_hardening_test:BuildRequires: gmp-devel} BuildRequires: libffi-devel BuildRequires: openssl-devel BuildRequires: libyaml-devel @@ -1060,6 +1062,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Tue Feb 13 2018 Vít Ondruch - 2.5.0-89 - Drop obsolete ldconfig scriptlets. +- Add GMP dependency. * Fri Feb 09 2018 Fedora Release Engineering - 2.5.0-89 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild From b15350c441c94446abdc27773e713b624ec257f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 1 Feb 2018 17:27:39 +0100 Subject: [PATCH 264/530] Use 'with' operator in RPM dependency generator. --- ruby.spec | 1 + rubygems.req | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index 2ff939f..9b07aa2 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1063,6 +1063,7 @@ make check TESTS="-v $DISABLE_TESTS" * Tue Feb 13 2018 Vít Ondruch - 2.5.0-89 - Drop obsolete ldconfig scriptlets. - Add GMP dependency. +- Use 'with' operator in RPM dependency generator. * Fri Feb 09 2018 Fedora Release Engineering - 2.5.0-89 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild diff --git a/rubygems.req b/rubygems.req index 4f7a583..64c572b 100644 --- a/rubygems.req +++ b/rubygems.req @@ -52,11 +52,14 @@ module RubyGemsReq # Report all gem dependencies including their version. def self.gem_depenencies(specification) specification.runtime_dependencies.each do |dependency| - Helpers::requirement_versions_to_rpm(dependency.requirement).each do |requirement| - dependency_string = "rubygem(#{dependency.name})" - dependency_string += " #{requirement}" if requirement && requirement.length > 0 - puts dependency_string + dependency_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement| + requirement_string = "rubygem(#{dependency.name})" + requirement_string += " #{requirement}" if requirement && requirement.length > 0 + requirement_string end + dependency_string = dependency_strings.join(' with ') + dependency_string.prepend('(').concat(')') if dependency_strings.length > 1 + puts dependency_string end end From 75ea12f0a3113c75f63f9ec703bf5226e4fec2a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 1 Feb 2018 17:29:46 +0100 Subject: [PATCH 265/530] Use safe navigation operator. This operator is available since Ruby 2.3 and we are not going to use this generator with older Ruby. --- rubygems.req | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rubygems.req b/rubygems.req index 64c572b..8e032c9 100644 --- a/rubygems.req +++ b/rubygems.req @@ -44,7 +44,7 @@ module RubyGemsReq def self.rubygems_dependency(specification) Helpers::requirement_versions_to_rpm(specification.required_rubygems_version).each do |requirement| dependency_string = "ruby(rubygems)" - dependency_string += " #{specification.required_rubygems_version}" if requirement && requirement.length > 0 + dependency_string += " #{specification.required_rubygems_version}" if requirement&.length > 0 puts dependency_string end end @@ -54,7 +54,7 @@ module RubyGemsReq specification.runtime_dependencies.each do |dependency| dependency_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement| requirement_string = "rubygem(#{dependency.name})" - requirement_string += " #{requirement}" if requirement && requirement.length > 0 + requirement_string += " #{requirement}" if requirement&.length > 0 requirement_string end dependency_string = dependency_strings.join(' with ') From 637f46e17d3275b12e017051eab56db2b2c32eb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 1 Feb 2018 19:22:44 +0100 Subject: [PATCH 266/530] Add conflicts RPM generator. This leverages RPM Conflicts instead of expanding the version ranges, which does not work as reliably for this purpose. --- ruby.spec | 12 ++++++++---- rubygems.attr | 1 + rubygems.con | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ rubygems.req | 10 ++-------- 4 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 rubygems.con diff --git a/ruby.spec b/ruby.spec index 9b07aa2..a4fecc0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -94,10 +94,11 @@ Source6: abrt_prelude.rb Source8: rubygems.attr Source9: rubygems.req Source10: rubygems.prov +Source11: rubygems.con # ABRT hoook test case. -Source12: test_abrt.rb +Source13: test_abrt.rb # SystemTap tests. -Source13: test_systemtap.rb +Source14: test_systemtap.rb # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. @@ -599,6 +600,7 @@ mkdir -p %{buildroot}%{_rpmconfigdir}/fileattrs install -m 644 %{SOURCE8} %{buildroot}%{_rpmconfigdir}/fileattrs install -m 755 %{SOURCE9} %{buildroot}%{_rpmconfigdir} install -m 755 %{SOURCE10} %{buildroot}%{_rpmconfigdir} +install -m 755 %{SOURCE11} %{buildroot}%{_rpmconfigdir} # Install custom operating_system.rb. mkdir -p %{buildroot}%{rubygems_dir}/rubygems/defaults @@ -726,10 +728,10 @@ touch abrt.rb # Check if abrt hook is required (RubyGems are disabled by default when using # runruby, so re-enable them). -make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE12}" +make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}" # Check if systemtap is supported. -%{?with_systemtap:make runruby TESTRUN_SCRIPT=%{SOURCE13}} +%{?with_systemtap:make runruby TESTRUN_SCRIPT=%{SOURCE14}} DISABLE_TESTS="" @@ -960,6 +962,7 @@ make check TESTS="-v $DISABLE_TESTS" %{_rpmconfigdir}/fileattrs/rubygems.attr %{_rpmconfigdir}/rubygems.req %{_rpmconfigdir}/rubygems.prov +%{_rpmconfigdir}/rubygems.con %files -n rubygem-rake %{_bindir}/rake @@ -1064,6 +1067,7 @@ make check TESTS="-v $DISABLE_TESTS" - Drop obsolete ldconfig scriptlets. - Add GMP dependency. - Use 'with' operator in RPM dependency generator. +- Add conflicts RPM generator. * Fri Feb 09 2018 Fedora Release Engineering - 2.5.0-89 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild diff --git a/rubygems.attr b/rubygems.attr index f033d43..5793bf7 100644 --- a/rubygems.attr +++ b/rubygems.attr @@ -1,5 +1,6 @@ %__rubygems_requires %{_rpmconfigdir}/rubygems.req %__rubygems_provides %{_rpmconfigdir}/rubygems.prov +%__rubygems_conflicts %{_rpmconfigdir}/rubygems.con # In non-gem packages, the %%{gem_name} macro is not available and the macro # stays unexpanded which leads to "invalid regex" error (rhbz#1154067). %__rubygems_path ^%{?gem_name:%{gem_spec}}%{!?gem_name:this_should_never_match_anything}$ diff --git a/rubygems.con b/rubygems.con new file mode 100644 index 0000000..1a99ed0 --- /dev/null +++ b/rubygems.con @@ -0,0 +1,52 @@ +#!/usr/bin/ruby + +require 'rubygems/package' + +module RubyGemsReq + module Helpers + # Keep only '!=' requirements. + def self.conflicts(requirements) + conflicts = requirements.select {|r| r.first == '!='} + end + + # Converts Gem::Requirement into array of requirements strings compatible + # with RPM .spec file. + def self.requirement_versions_to_rpm(requirement) + self.conflicts(requirement.requirements).map do |op, version| + version == Gem::Version.new(0) ? "" : "= #{version}" + end + end + end + + # Report conflicting gem dependencies including their version. + def self.gem_depenencies(specification) + specification.runtime_dependencies.each do |dependency| + conflict_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement| + requirement_string = "rubygem(#{dependency.name}) #{requirement}" + end + if conflict_strings.length > 0 + conflict_string = conflict_strings.join(' with ') + conflict_string.prepend('(').concat(')') if conflict_strings.length > 1 + puts conflict_string + end + end + end + + # Reports all conflicts specified by all provided .gemspec files. + def self.conflicts + while filename = gets + filename.strip! + begin + specification = Gem::Specification.load filename + + gem_depenencies(specification) + rescue => e + # Ignore all errors. + end + end + end +end + +if __FILE__ == $0 + RubyGemsReq::conflicts +end diff --git a/rubygems.req b/rubygems.req index 8e032c9..6868bdd 100644 --- a/rubygems.req +++ b/rubygems.req @@ -11,11 +11,11 @@ module RubyGemsReq when '~>' expand_pessimistic_requirement(r) when '!=' - expand_not_equal_requirement(r) + [] else [r] end - end + end.reject {|r| r.empty? } end # Expands the pessimistic version operator '~>' into equivalent '>=' and @@ -25,12 +25,6 @@ module RubyGemsReq return ['>=', requirement.last], ['<', next_version] end - # Expands the not equal version operator '!=' into equivalent '<' and - # '>' pair. - def self.expand_not_equal_requirement(requirement) - return ['<', requirement.last], ['>', requirement.last] - end - # Converts Gem::Requirement into array of requirements strings compatible # with RPM .spec file. def self.requirement_versions_to_rpm(requirement) From 2134f5703e5b822da3782112095143450a88aa04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Feb 2018 14:43:58 +0100 Subject: [PATCH 267/530] Disable Tokyo TZ tests. They are broken by recen tzdata update. --- ruby-2.5.0-Disable-Tokyo-TZ-tests.patch | 30 +++++++++++++++++++++++++ ruby.spec | 4 ++++ 2 files changed, 34 insertions(+) create mode 100644 ruby-2.5.0-Disable-Tokyo-TZ-tests.patch diff --git a/ruby-2.5.0-Disable-Tokyo-TZ-tests.patch b/ruby-2.5.0-Disable-Tokyo-TZ-tests.patch new file mode 100644 index 0000000..01632eb --- /dev/null +++ b/ruby-2.5.0-Disable-Tokyo-TZ-tests.patch @@ -0,0 +1,30 @@ +diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb +index 20a57fe7dd..5b9e5a8bde 100644 +--- a/test/ruby/test_time_tz.rb ++++ b/test/ruby/test_time_tz.rb +@@ -126,8 +126,8 @@ def test_asia_singapore + + def test_asia_tokyo + with_tz(tz="Asia/Tokyo") { +- assert_time_constructor(tz, "1951-05-06 03:00:00 +1000", :local, [1951,5,6,2,0,0]) +- assert_time_constructor(tz, "1951-05-06 03:59:59 +1000", :local, [1951,5,6,2,59,59]) ++# assert_time_constructor(tz, "1951-05-06 03:00:00 +1000", :local, [1951,5,6,2,0,0]) ++# assert_time_constructor(tz, "1951-05-06 03:59:59 +1000", :local, [1951,5,6,2,59,59]) + assert_time_constructor(tz, "2010-06-10 06:13:28 +0900", :local, [2010,6,10,6,13,28]) + } + end +@@ -329,10 +329,10 @@ def self.gen_zdump_test(data) + Asia/Singapore Sun Aug 8 16:30:00 1965 UTC = Mon Aug 9 00:00:00 1965 SGT isdst=0 gmtoff=27000 + Asia/Singapore Thu Dec 31 16:29:59 1981 UTC = Thu Dec 31 23:59:59 1981 SGT isdst=0 gmtoff=27000 + Asia/Singapore Thu Dec 31 16:30:00 1981 UTC = Fri Jan 1 00:30:00 1982 SGT isdst=0 gmtoff=28800 +-Asia/Tokyo Sat May 5 16:59:59 1951 UTC = Sun May 6 01:59:59 1951 JST isdst=0 gmtoff=32400 +-Asia/Tokyo Sat May 5 17:00:00 1951 UTC = Sun May 6 03:00:00 1951 JDT isdst=1 gmtoff=36000 +-Asia/Tokyo Fri Sep 7 15:59:59 1951 UTC = Sat Sep 8 01:59:59 1951 JDT isdst=1 gmtoff=36000 +-Asia/Tokyo Fri Sep 7 16:00:00 1951 UTC = Sat Sep 8 01:00:00 1951 JST isdst=0 gmtoff=32400 ++#Asia/Tokyo Sat May 5 16:59:59 1951 UTC = Sun May 6 01:59:59 1951 JST isdst=0 gmtoff=32400 ++#Asia/Tokyo Sat May 5 17:00:00 1951 UTC = Sun May 6 03:00:00 1951 JDT isdst=1 gmtoff=36000 ++#Asia/Tokyo Fri Sep 7 15:59:59 1951 UTC = Sat Sep 8 01:59:59 1951 JDT isdst=1 gmtoff=36000 ++#Asia/Tokyo Fri Sep 7 16:00:00 1951 UTC = Sat Sep 8 01:00:00 1951 JST isdst=0 gmtoff=32400 + America/St_Johns Sun Mar 11 03:30:59 2007 UTC = Sun Mar 11 00:00:59 2007 NST isdst=0 gmtoff=-12600 + America/St_Johns Sun Mar 11 03:31:00 2007 UTC = Sun Mar 11 01:01:00 2007 NDT isdst=1 gmtoff=-9000 + America/St_Johns Sun Nov 4 02:30:59 2007 UTC = Sun Nov 4 00:00:59 2007 NDT isdst=1 gmtoff=-9000 diff --git a/ruby.spec b/ruby.spec index a4fecc0..268aacd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -139,6 +139,9 @@ Patch10: ruby-2.5.0-Add-Gem.operating_system_defaults.patch # Fix segfault during generating documentation. # https://bugs.ruby-lang.org/issues/14343 Patch11: ruby-2.5.0-parse.y-assignable_error.patch +# Recent tzdata change breaks Ruby test suite. +# https://bugs.ruby-lang.org/issues/14438 +Patch12: ruby-2.5.0-Disable-Tokyo-TZ-tests.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -523,6 +526,7 @@ rm -rf ext/fiddle/libffi* %patch9 -p1 %patch10 -p1 %patch11 -p1 +%patch12 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . From faaad7b7c55df8f0f145e9d2ee48257d2ec0a6c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Feb 2018 15:04:28 +0100 Subject: [PATCH 268/530] Fix thread_safe test suite segfaults. --- ...5.0-st.c-retry-operations-if-rebuilt.patch | 602 ++++++++++++++++++ ruby.spec | 5 + 2 files changed, 607 insertions(+) create mode 100644 ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch diff --git a/ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch b/ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch new file mode 100644 index 0000000..1e8e3b6 --- /dev/null +++ b/ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch @@ -0,0 +1,602 @@ +From 4663c224fa6c925ce54af32fd1c1cbac9508f5ec Mon Sep 17 00:00:00 2001 +From: normal +Date: Tue, 13 Feb 2018 10:02:07 +0000 +Subject: [PATCH] st.c: retry operations if rebuilt + +Calling the .eql? and .hash methods during a Hash operation can +result in a thread switch or a signal handler to run: allowing +one execution context to rebuild the hash table while another is +still reading or writing the table. This results in a +use-after-free bug affecting the thread_safe-0.3.6 test suite +and likely other bugs. + +This bug did not affect users of commonly keys (String, Symbol, +Fixnum) as those are optimized to avoid method dispatch +for .eql? and .hash methods. + +A separate version of this change needs to be ported to Ruby 2.3.x +which had a different implementation of st.c but was affected +by the same bug. + +* st.c: Add comment about table rebuilding during comparison. + (DO_PTR_EQUAL_CHECK): New macro. + (REBUILT_TABLE_ENTRY_IND, REBUILT_TABLE_BIN_IND): New macros. + (find_entry, find_table_entry_ind, find_table_bin_ind): Use new + macros. Return the rebuild flag. + (find_table_bin_ptr_and_reserve): Ditto. + (st_lookup, st_get_key, st_insert, st_insert2): Retry the + operation if the table was rebuilt. + (st_general_delete, st_shift, st_update, st_general_foreach): + Ditto. + (st_rehash_linear, st_rehash_indexed): Use DO_PTR_EQUAL_CHECK. + Return the rebuild flag. + (st_rehash): Retry the operation if the table was rebuilt. + [ruby-core:85510] [Ruby trunk Bug#14357] + +Thanks to Vit Ondruch for reporting the bug. + +From: Vladimir Makarov + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62396 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + st.c | 258 ++++++++++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 185 insertions(+), 73 deletions(-) + +diff --git a/st.c b/st.c +index 56ae30ce47..0c52e7a2ef 100644 +--- a/st.c ++++ b/st.c +@@ -90,6 +90,11 @@ + o To save more memory we use 8-, 16-, 32- and 64- bit indexes in + bins depending on the current hash table size. + ++ o The implementation takes into account that the table can be ++ rebuilt during hashing or comparison functions. It can happen if ++ the functions are implemented in Ruby and a thread switch occurs ++ during their execution. ++ + This implementation speeds up the Ruby hash table benchmarks in + average by more 40% on Intel Haswell CPU. + +@@ -174,6 +179,15 @@ static const struct st_hash_type type_strcasehash = { + #define PTR_EQUAL(tab, ptr, hash_val, key_) \ + ((ptr)->hash == (hash_val) && EQUAL((tab), (key_), (ptr)->key)) + ++/* As PRT_EQUAL only its result is returned in RES. REBUILT_P is set ++ up to TRUE if the table is rebuilt during the comparison. */ ++#define DO_PTR_EQUAL_CHECK(tab, ptr, hash_val, key, res, rebuilt_p) \ ++ do { \ ++ unsigned int _old_rebuilds_num = (tab)->rebuilds_num; \ ++ res = PTR_EQUAL(tab, ptr, hash_val, key); \ ++ rebuilt_p = _old_rebuilds_num != (tab)->rebuilds_num; \ ++ } while (FALSE) ++ + /* Features of a table. */ + struct st_features { + /* Power of 2 used for number of allocated entries. */ +@@ -380,6 +394,11 @@ set_bin(st_index_t *bins, int s, st_index_t n, st_index_t v) + #define UNDEFINED_ENTRY_IND (~(st_index_t) 0) + #define UNDEFINED_BIN_IND (~(st_index_t) 0) + ++/* Entry and bin values returned when we found a table rebuild during ++ the search. */ ++#define REBUILT_TABLE_ENTRY_IND (~(st_index_t) 1) ++#define REBUILT_TABLE_BIN_IND (~(st_index_t) 1) ++ + /* Mark I-th bin of table TAB as corresponding to a deleted table + entry. Update number of entries in the table and number of bins + corresponding to deleted entries. */ +@@ -823,17 +842,22 @@ secondary_hash(st_index_t ind, st_table *tab, st_index_t *perterb) + + /* Find an entry with HASH_VALUE and KEY in TABLE using a linear + search. Return the index of the found entry in array `entries`. +- If it is not found, return UNDEFINED_ENTRY_IND. */ ++ If it is not found, return UNDEFINED_ENTRY_IND. If the table was ++ rebuilt during the search, return REBUILT_TABLE_ENTRY_IND. */ + static inline st_index_t + find_entry(st_table *tab, st_hash_t hash_value, st_data_t key) + { ++ int eq_p, rebuilt_p; + st_index_t i, bound; + st_table_entry *entries; + + bound = tab->entries_bound; + entries = tab->entries; + for (i = tab->entries_start; i < bound; i++) { +- if (PTR_EQUAL(tab, &entries[i], hash_value, key)) ++ DO_PTR_EQUAL_CHECK(tab, &entries[i], hash_value, key, eq_p, rebuilt_p); ++ if (EXPECT(rebuilt_p, 0)) ++ return REBUILT_TABLE_ENTRY_IND; ++ if (eq_p) + return i; + } + return UNDEFINED_ENTRY_IND; +@@ -845,10 +869,12 @@ find_entry(st_table *tab, st_hash_t hash_value, st_data_t key) + /*#define QUADRATIC_PROBE*/ + + /* Return index of entry with HASH_VALUE and KEY in table TAB. If +- there is no such entry, return UNDEFINED_ENTRY_IND. */ ++ there is no such entry, return UNDEFINED_ENTRY_IND. If the table ++ was rebuilt during the search, return REBUILT_TABLE_ENTRY_IND. */ + static st_index_t + find_table_entry_ind(st_table *tab, st_hash_t hash_value, st_data_t key) + { ++ int eq_p, rebuilt_p; + st_index_t ind; + #ifdef QUADRATIC_PROBE + st_index_t d; +@@ -869,10 +895,13 @@ find_table_entry_ind(st_table *tab, st_hash_t hash_value, st_data_t key) + FOUND_BIN; + for (;;) { + bin = get_bin(tab->bins, get_size_ind(tab), ind); +- if (! EMPTY_OR_DELETED_BIN_P(bin) +- && PTR_EQUAL(tab, &entries[bin - ENTRY_BASE], hash_value, key)) +- break; +- else if (EMPTY_BIN_P(bin)) ++ if (! EMPTY_OR_DELETED_BIN_P(bin)) { ++ DO_PTR_EQUAL_CHECK(tab, &entries[bin - ENTRY_BASE], hash_value, key, eq_p, rebuilt_p); ++ if (EXPECT(rebuilt_p, 0)) ++ return REBUILT_TABLE_ENTRY_IND; ++ if (eq_p) ++ break; ++ } else if (EMPTY_BIN_P(bin)) + return UNDEFINED_ENTRY_IND; + #ifdef QUADRATIC_PROBE + ind = hash_bin(ind + d, tab); +@@ -887,10 +916,12 @@ find_table_entry_ind(st_table *tab, st_hash_t hash_value, st_data_t key) + + /* Find and return index of table TAB bin corresponding to an entry + with HASH_VALUE and KEY. If there is no such bin, return +- UNDEFINED_BIN_IND. */ ++ UNDEFINED_BIN_IND. If the table was rebuilt during the search, ++ return REBUILT_TABLE_BIN_IND. */ + static st_index_t + find_table_bin_ind(st_table *tab, st_hash_t hash_value, st_data_t key) + { ++ int eq_p, rebuilt_p; + st_index_t ind; + #ifdef QUADRATIC_PROBE + st_index_t d; +@@ -911,10 +942,13 @@ find_table_bin_ind(st_table *tab, st_hash_t hash_value, st_data_t key) + FOUND_BIN; + for (;;) { + bin = get_bin(tab->bins, get_size_ind(tab), ind); +- if (! EMPTY_OR_DELETED_BIN_P(bin) +- && PTR_EQUAL(tab, &entries[bin - ENTRY_BASE], hash_value, key)) +- break; +- else if (EMPTY_BIN_P(bin)) ++ if (! EMPTY_OR_DELETED_BIN_P(bin)) { ++ DO_PTR_EQUAL_CHECK(tab, &entries[bin - ENTRY_BASE], hash_value, key, eq_p, rebuilt_p); ++ if (EXPECT(rebuilt_p, 0)) ++ return REBUILT_TABLE_BIN_IND; ++ if (eq_p) ++ break; ++ } else if (EMPTY_BIN_P(bin)) + return UNDEFINED_BIN_IND; + #ifdef QUADRATIC_PROBE + ind = hash_bin(ind + d, tab); +@@ -955,7 +989,7 @@ find_table_bin_ind_direct(st_table *tab, st_hash_t hash_value, st_data_t key) + bin = get_bin(tab->bins, get_size_ind(tab), ind); + if (EMPTY_OR_DELETED_BIN_P(bin)) + return ind; +- st_assert (! PTR_EQUAL(tab, &entries[bin - ENTRY_BASE], hash_value, key)); ++ st_assert (entries[bin - ENTRY_BASE].hash != hash_value); + #ifdef QUADRATIC_PROBE + ind = hash_bin(ind + d, tab); + d++; +@@ -973,11 +1007,13 @@ find_table_bin_ind_direct(st_table *tab, st_hash_t hash_value, st_data_t key) + bigger entries array. Although we can reuse a deleted bin, the + result bin value is always empty if the table has no entry with + KEY. Return the entries array index of the found entry or +- UNDEFINED_ENTRY_IND if it is not found. */ ++ UNDEFINED_ENTRY_IND if it is not found. If the table was rebuilt ++ during the search, return REBUILT_TABLE_ENTRY_IND. */ + static st_index_t + find_table_bin_ptr_and_reserve(st_table *tab, st_hash_t *hash_value, + st_data_t key, st_index_t *bin_ind) + { ++ int eq_p, rebuilt_p; + st_index_t ind; + st_hash_t curr_hash_value = *hash_value; + #ifdef QUADRATIC_PROBE +@@ -1015,7 +1051,10 @@ find_table_bin_ptr_and_reserve(st_table *tab, st_hash_t *hash_value, + break; + } + else if (! DELETED_BIN_P(entry_index)) { +- if (PTR_EQUAL(tab, &entries[entry_index - ENTRY_BASE], curr_hash_value, key)) ++ DO_PTR_EQUAL_CHECK(tab, &entries[entry_index - ENTRY_BASE], curr_hash_value, key, eq_p, rebuilt_p); ++ if (EXPECT(rebuilt_p, 0)) ++ return REBUILT_TABLE_ENTRY_IND; ++ if (eq_p) + break; + } + else if (first_deleted_bin_ind == UNDEFINED_BIN_IND) +@@ -1040,13 +1079,18 @@ st_lookup(st_table *tab, st_data_t key, st_data_t *value) + st_index_t bin; + st_hash_t hash = do_hash(key, tab); + ++ retry: + if (tab->bins == NULL) { + bin = find_entry(tab, hash, key); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + if (bin == UNDEFINED_ENTRY_IND) + return 0; + } + else { + bin = find_table_entry_ind(tab, hash, key); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + if (bin == UNDEFINED_ENTRY_IND) + return 0; + bin -= ENTRY_BASE; +@@ -1064,13 +1108,18 @@ st_get_key(st_table *tab, st_data_t key, st_data_t *result) + st_index_t bin; + st_hash_t hash = do_hash(key, tab); + ++ retry: + if (tab->bins == NULL) { + bin = find_entry(tab, hash, key); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + if (bin == UNDEFINED_ENTRY_IND) + return 0; + } + else { + bin = find_table_entry_ind(tab, hash, key); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + if (bin == UNDEFINED_ENTRY_IND) + return 0; + bin -= ENTRY_BASE; +@@ -1104,10 +1153,13 @@ st_insert(st_table *tab, st_data_t key, st_data_t value) + st_index_t bin_ind; + int new_p; + +- rebuild_table_if_necessary(tab); + hash_value = do_hash(key, tab); ++ retry: ++ rebuild_table_if_necessary(tab); + if (tab->bins == NULL) { + bin = find_entry(tab, hash_value, key); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + new_p = bin == UNDEFINED_ENTRY_IND; + if (new_p) + tab->num_entries++; +@@ -1116,6 +1168,8 @@ st_insert(st_table *tab, st_data_t key, st_data_t value) + else { + bin = find_table_bin_ptr_and_reserve(tab, &hash_value, + key, &bin_ind); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + new_p = bin == UNDEFINED_ENTRY_IND; + bin -= ENTRY_BASE; + } +@@ -1192,10 +1246,13 @@ st_insert2(st_table *tab, st_data_t key, st_data_t value, + st_index_t bin_ind; + int new_p; + +- rebuild_table_if_necessary (tab); + hash_value = do_hash(key, tab); ++ retry: ++ rebuild_table_if_necessary (tab); + if (tab->bins == NULL) { + bin = find_entry(tab, hash_value, key); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + new_p = bin == UNDEFINED_ENTRY_IND; + if (new_p) + tab->num_entries++; +@@ -1204,6 +1261,8 @@ st_insert2(st_table *tab, st_data_t key, st_data_t value, + else { + bin = find_table_bin_ptr_and_reserve(tab, &hash_value, + key, &bin_ind); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + new_p = bin == UNDEFINED_ENTRY_IND; + bin -= ENTRY_BASE; + } +@@ -1212,7 +1271,6 @@ st_insert2(st_table *tab, st_data_t key, st_data_t value, + check = tab->rebuilds_num; + key = (*func)(key); + st_assert(check == tab->rebuilds_num); +- st_assert(do_hash(key, tab) == hash_value); + ind = tab->entries_bound++; + entry = &tab->entries[ind]; + entry->hash = hash_value; +@@ -1220,6 +1278,7 @@ st_insert2(st_table *tab, st_data_t key, st_data_t value, + entry->record = value; + if (bin_ind != UNDEFINED_BIN_IND) + set_bin(tab->bins, get_size_ind(tab), bin_ind, ind + ENTRY_BASE); ++ st_assert(do_hash(key, tab) == hash_value); + #ifdef ST_DEBUG + st_check(tab); + #endif +@@ -1281,8 +1340,11 @@ st_general_delete(st_table *tab, st_data_t *key, st_data_t *value) + + st_assert(tab != NULL); + hash = do_hash(*key, tab); ++ retry: + if (tab->bins == NULL) { + bin = find_entry(tab, hash, *key); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + if (bin == UNDEFINED_ENTRY_IND) { + if (value != 0) *value = 0; + return 0; +@@ -1290,6 +1352,8 @@ st_general_delete(st_table *tab, st_data_t *key, st_data_t *value) + } + else { + bin_ind = find_table_bin_ind(tab, hash, *key); ++ if (EXPECT(bin_ind == REBUILT_TABLE_BIN_IND, 0)) ++ goto retry; + if (bin_ind == UNDEFINED_BIN_IND) { + if (value != 0) *value = 0; + return 0; +@@ -1344,21 +1408,33 @@ st_shift(st_table *tab, st_data_t *key, st_data_t *value) + for (i = tab->entries_start; i < bound; i++) { + curr_entry_ptr = &entries[i]; + if (! DELETED_ENTRY_P(curr_entry_ptr)) { ++ st_hash_t entry_hash = curr_entry_ptr->hash; ++ st_data_t entry_key = curr_entry_ptr->key; ++ + if (value != 0) *value = curr_entry_ptr->record; +- *key = curr_entry_ptr->key; ++ *key = entry_key; ++ retry: + if (tab->bins == NULL) { +- bin = find_entry(tab, curr_entry_ptr->hash, curr_entry_ptr->key); ++ bin = find_entry(tab, entry_hash, entry_key); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) { ++ entries = tab->entries; ++ goto retry; ++ } + st_assert(bin != UNDEFINED_ENTRY_IND); +- st_assert(&entries[bin] == curr_entry_ptr); ++ curr_entry_ptr = &entries[bin]; + } + else { +- bin_ind = find_table_bin_ind(tab, curr_entry_ptr->hash, +- curr_entry_ptr->key); ++ bin_ind = find_table_bin_ind(tab, entry_hash, entry_key); ++ if (EXPECT(bin_ind == REBUILT_TABLE_BIN_IND, 0)) { ++ entries = tab->entries; ++ goto retry; ++ } + st_assert(bin_ind != UNDEFINED_BIN_IND); +- st_assert(&entries[get_bin(tab->bins, get_size_ind(tab), bin_ind) +- - ENTRY_BASE] == curr_entry_ptr); ++ curr_entry_ptr = &entries[get_bin(tab->bins, get_size_ind(tab), bin_ind) ++ - ENTRY_BASE]; + MARK_BIN_DELETED(tab, bin_ind); + } ++ st_assert(entry_hash != curr_entry_ptr->hash && entry_key == curr_entry_ptr->key); + MARK_ENTRY_DELETED(curr_entry_ptr); + tab->num_entries--; + update_range_for_deleted(tab, i); +@@ -1402,15 +1478,20 @@ st_update(st_table *tab, st_data_t key, + int retval, existing; + st_hash_t hash = do_hash(key, tab); + ++ retry: + entries = tab->entries; + if (tab->bins == NULL) { + bin = find_entry(tab, hash, key); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + existing = bin != UNDEFINED_ENTRY_IND; + entry = &entries[bin]; + bin_ind = UNDEFINED_BIN_IND; + } + else { + bin_ind = find_table_bin_ind(tab, hash, key); ++ if (EXPECT(bin_ind == REBUILT_TABLE_BIN_IND, 0)) ++ goto retry; + existing = bin_ind != UNDEFINED_BIN_IND; + if (existing) { + bin = get_bin(tab->bins, get_size_ind(tab), bin_ind) - ENTRY_BASE; +@@ -1489,14 +1570,19 @@ st_general_foreach(st_table *tab, int (*func)(ANYARGS), st_data_t arg, + hash = curr_entry_ptr->hash; + retval = (*func)(key, curr_entry_ptr->record, arg, 0); + if (rebuilds_num != tab->rebuilds_num) { ++ retry: + entries = tab->entries; + packed_p = tab->bins == NULL; + if (packed_p) { + i = find_entry(tab, hash, key); ++ if (EXPECT(i == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + error_p = i == UNDEFINED_ENTRY_IND; + } + else { + i = find_table_entry_ind(tab, hash, key); ++ if (EXPECT(i == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto retry; + error_p = i == UNDEFINED_ENTRY_IND; + i -= ENTRY_BASE; + } +@@ -1512,36 +1598,44 @@ st_general_foreach(st_table *tab, int (*func)(ANYARGS), st_data_t arg, + } + switch (retval) { + case ST_CONTINUE: +- break; ++ break; + case ST_CHECK: +- if (check_p) +- break; ++ if (check_p) ++ break; + case ST_STOP: + #ifdef ST_DEBUG +- st_check(tab); +-#endif +- return 0; +- case ST_DELETE: +- if (packed_p) { +- bin = find_entry(tab, hash, curr_entry_ptr->key); +- if (bin == UNDEFINED_ENTRY_IND) +- break; +- } +- else { +- bin_ind = find_table_bin_ind(tab, hash, curr_entry_ptr->key); +- if (bin_ind == UNDEFINED_BIN_IND) +- break; +- bin = get_bin(tab->bins, get_size_ind(tab), bin_ind) - ENTRY_BASE; +- MARK_BIN_DELETED(tab, bin_ind); +- } +- st_assert(&entries[bin] == curr_entry_ptr); +- MARK_ENTRY_DELETED(curr_entry_ptr); +- tab->num_entries--; +- update_range_for_deleted(tab, bin); ++ st_check(tab); ++#endif ++ return 0; ++ case ST_DELETE: { ++ st_data_t key = curr_entry_ptr->key; ++ ++ again: ++ if (packed_p) { ++ bin = find_entry(tab, hash, key); ++ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) ++ goto again; ++ if (bin == UNDEFINED_ENTRY_IND) ++ break; ++ } ++ else { ++ bin_ind = find_table_bin_ind(tab, hash, key); ++ if (EXPECT(bin_ind == REBUILT_TABLE_BIN_IND, 0)) ++ goto again; ++ if (bin_ind == UNDEFINED_BIN_IND) ++ break; ++ bin = get_bin(tab->bins, get_size_ind(tab), bin_ind) - ENTRY_BASE; ++ MARK_BIN_DELETED(tab, bin_ind); ++ } ++ curr_entry_ptr = &entries[bin]; ++ MARK_ENTRY_DELETED(curr_entry_ptr); ++ tab->num_entries--; ++ update_range_for_deleted(tab, bin); + #ifdef ST_DEBUG +- st_check(tab); ++ st_check(tab); + #endif +- break; ++ break; ++ } + } + } + #ifdef ST_DEBUG +@@ -2015,10 +2109,12 @@ st_expand_table(st_table *tab, st_index_t siz) + free(tmp); + } + +-/* Rehash using linear search. */ +-static void ++/* Rehash using linear search. Return TRUE if we found that the table ++ was rebuilt. */ ++static int + st_rehash_linear(st_table *tab) + { ++ int eq_p, rebuilt_p; + st_index_t i, j; + st_table_entry *p, *q; + if (tab->bins) { +@@ -2033,7 +2129,10 @@ st_rehash_linear(st_table *tab) + q = &tab->entries[j]; + if (DELETED_ENTRY_P(q)) + continue; +- if (PTR_EQUAL(tab, p, q->hash, q->key)) { ++ DO_PTR_EQUAL_CHECK(tab, p, q->hash, q->key, eq_p, rebuilt_p); ++ if (EXPECT(rebuilt_p, 0)) ++ return TRUE; ++ if (eq_p) { + st_assert(p < q); + *p = *q; + MARK_ENTRY_DELETED(q); +@@ -2042,12 +2141,15 @@ st_rehash_linear(st_table *tab) + } + } + } ++ return FALSE; + } + +-/* Rehash using index */ +-static void ++/* Rehash using index. Return TRUE if we found that the table was ++ rebuilt. */ ++static int + st_rehash_indexed(st_table *tab) + { ++ int eq_p, rebuilt_p; + st_index_t i; + st_index_t const n = bins_size(tab); + unsigned int const size_ind = get_size_ind(tab); +@@ -2076,26 +2178,32 @@ st_rehash_indexed(st_table *tab) + set_bin(bins, size_ind, ind, i + ENTRY_BASE); + break; + } +- else if (PTR_EQUAL(tab, q, p->hash, p->key)) { +- /* duplicated key; delete it */ +- st_assert(q < p); +- q->record = p->record; +- MARK_ENTRY_DELETED(p); +- tab->num_entries--; +- update_range_for_deleted(tab, bin); +- break; +- } + else { +- /* hash collision; skip it */ ++ DO_PTR_EQUAL_CHECK(tab, q, p->hash, p->key, eq_p, rebuilt_p); ++ if (EXPECT(rebuilt_p, 0)) ++ return TRUE; ++ if (eq_p) { ++ /* duplicated key; delete it */ ++ st_assert(q < p); ++ q->record = p->record; ++ MARK_ENTRY_DELETED(p); ++ tab->num_entries--; ++ update_range_for_deleted(tab, bin); ++ break; ++ } ++ else { ++ /* hash collision; skip it */ + #ifdef QUADRATIC_PROBE +- ind = hash_bin(ind + d, tab); +- d++; ++ ind = hash_bin(ind + d, tab); ++ d++; + #else +- ind = secondary_hash(ind, tab, &peterb); ++ ind = secondary_hash(ind, tab, &peterb); + #endif +- } ++ } ++ } + } + } ++ return FALSE; + } + + /* Reconstruct TAB's bins according to TAB's entries. This function +@@ -2104,10 +2212,14 @@ st_rehash_indexed(st_table *tab) + static void + st_rehash(st_table *tab) + { +- if (tab->bin_power <= MAX_POWER2_FOR_TABLES_WITHOUT_BINS) +- st_rehash_linear(tab); +- else +- st_rehash_indexed(tab); ++ int rebuilt_p; ++ ++ do { ++ if (tab->bin_power <= MAX_POWER2_FOR_TABLES_WITHOUT_BINS) ++ rebuilt_p = st_rehash_linear(tab); ++ else ++ rebuilt_p = st_rehash_indexed(tab); ++ } while (rebuilt_p); + } + + #ifdef RUBY +-- +2.16.1 + diff --git a/ruby.spec b/ruby.spec index 268aacd..734d363 100644 --- a/ruby.spec +++ b/ruby.spec @@ -142,6 +142,9 @@ Patch11: ruby-2.5.0-parse.y-assignable_error.patch # Recent tzdata change breaks Ruby test suite. # https://bugs.ruby-lang.org/issues/14438 Patch12: ruby-2.5.0-Disable-Tokyo-TZ-tests.patch +# Fix thread_safe tests suite segfaults. +# https://bugs.ruby-lang.org/issues/14357 +Patch13: ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -527,6 +530,7 @@ rm -rf ext/fiddle/libffi* %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1072,6 +1076,7 @@ make check TESTS="-v $DISABLE_TESTS" - Add GMP dependency. - Use 'with' operator in RPM dependency generator. - Add conflicts RPM generator. +- Fix thread_safe test suite segfaults. * Fri Feb 09 2018 Fedora Release Engineering - 2.5.0-89 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild From d074784f335f06f214a515d4525470dbd60b7fee Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Sun, 18 Feb 2018 20:02:24 +0100 Subject: [PATCH 269/530] Fix invalid licenses. --- ruby.spec | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 734d363..d4399e4 100644 --- a/ruby.spec +++ b/ruby.spec @@ -289,7 +289,7 @@ Summary: A tool to generate HTML and command-line documentation for Ruby proj Version: %{rdoc_version} Group: Development/Libraries # SIL: lib/rdoc/generator/template/darkfish/css/fonts.css -License: GPLv2 and Ruby and MIT and SIL +License: GPLv2 and Ruby and MIT and OFL Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Requires: ruby(irb) = %{irb_version} @@ -322,7 +322,7 @@ This package contains documentation for %{name}. Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic Version: %{bigdecimal_version} Group: Development/Libraries -License: GPL+ or Artistic +License: Ruby or BSD Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(bigdecimal) = %{version}-%{release} @@ -1077,6 +1077,7 @@ make check TESTS="-v $DISABLE_TESTS" - Use 'with' operator in RPM dependency generator. - Add conflicts RPM generator. - Fix thread_safe test suite segfaults. +- Fix invalid licenses. * Fri Feb 09 2018 Fedora Release Engineering - 2.5.0-89 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild From 6ff97769223e5589f444efdc517952b76d47a7d3 Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Wed, 21 Feb 2018 16:41:27 +0100 Subject: [PATCH 270/530] Add gcc to BuildRequires https://fedoraproject.org/wiki/Packaging:C_and_C%2B%2B#BuildRequire s_and_Requies --- ruby.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/ruby.spec b/ruby.spec index d4399e4..32222d1 100644 --- a/ruby.spec +++ b/ruby.spec @@ -169,6 +169,7 @@ BuildRequires: procps # Required to test hardening. %{?with_hardening_test:BuildRequires: %{_bindir}/checksec} BuildRequires: multilib-rpm-config +BuildRequires: gcc # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. From e3ea6478d9f0fc205ea7a33eb0e0affaa56f4266 Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Wed, 21 Feb 2018 18:32:04 +0100 Subject: [PATCH 271/530] Fix: Multiple vulnerabilities in RubyGems https://bugzilla.redhat.com/show_bug.cgi?id=1547431 https://www.ruby-lang.org/en/news/2018/02/17/multiple-vulnerabilities-in-rubygems/ * rubygems-2.5.0-multiple-vulnerabilities.patch --- ruby.spec | 12 +- rubygems-2.5.0-multiple-vulnerabilities.patch | 2349 +++++++++++++++++ 2 files changed, 2360 insertions(+), 1 deletion(-) create mode 100644 rubygems-2.5.0-multiple-vulnerabilities.patch diff --git a/ruby.spec b/ruby.spec index 32222d1..cfd0407 100644 --- a/ruby.spec +++ b/ruby.spec @@ -29,7 +29,7 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 2.7.3 +%global rubygems_version 2.7.6 %global molinillo_version 0.5.7 # TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. @@ -145,6 +145,10 @@ Patch12: ruby-2.5.0-Disable-Tokyo-TZ-tests.patch # Fix thread_safe tests suite segfaults. # https://bugs.ruby-lang.org/issues/14357 Patch13: ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch +# Fix: Multiple vulnerabilities in RubyGems +# https://bugzilla.redhat.com/show_bug.cgi?id=1547431 +# https://www.ruby-lang.org/en/news/2018/02/17/multiple-vulnerabilities-in-rubygems/ +Patch14: rubygems-2.5.0-multiple-vulnerabilities.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -532,6 +536,7 @@ rm -rf ext/fiddle/libffi* %patch11 -p1 %patch12 -p1 %patch13 -p1 +%patch14 -p0 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1072,6 +1077,11 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Wed Feb 23 2018 Pavel Valena - 2.5.0-89 +- Fix: Multiple vulnerabilities in RubyGems + https://bugzilla.redhat.com/show_bug.cgi?id=1547431 + https://www.ruby-lang.org/en/news/2018/02/17/multiple-vulnerabilities-in-rubygems/ + * Tue Feb 13 2018 Vít Ondruch - 2.5.0-89 - Drop obsolete ldconfig scriptlets. - Add GMP dependency. diff --git a/rubygems-2.5.0-multiple-vulnerabilities.patch b/rubygems-2.5.0-multiple-vulnerabilities.patch new file mode 100644 index 0000000..e32926a --- /dev/null +++ b/rubygems-2.5.0-multiple-vulnerabilities.patch @@ -0,0 +1,2349 @@ +diff --git lib/rubygems.rb lib/rubygems.rb +index 0475ced164..2762bfcb88 100644 +--- lib/rubygems.rb ++++ lib/rubygems.rb +@@ -10,7 +10,7 @@ + require 'thread' + + module Gem +- VERSION = "2.7.3" ++ VERSION = "2.7.6" + end + + # Must be first since it unloads the prelude from 1.9.2 +@@ -161,7 +161,7 @@ module Gem + # these are defined in Ruby 1.8.7, hence the need for this convoluted setup. + + READ_BINARY_ERRORS = begin +- read_binary_errors = [Errno::EACCES, Errno::EROFS] ++ read_binary_errors = [Errno::EACCES, Errno::EROFS, Errno::ENOSYS] + read_binary_errors << Errno::ENOTSUP if Errno.const_defined?(:ENOTSUP) + read_binary_errors + end.freeze +@@ -171,7 +171,7 @@ module Gem + # these are defined in Ruby 1.8.7. + + WRITE_BINARY_ERRORS = begin +- write_binary_errors = [] ++ write_binary_errors = [Errno::ENOSYS] + write_binary_errors << Errno::ENOTSUP if Errno.const_defined?(:ENOTSUP) + write_binary_errors + end.freeze +@@ -871,19 +871,19 @@ def self.refresh + # Safely read a file in binary mode on all platforms. + + def self.read_binary(path) +- open path, 'rb+' do |f| ++ File.open path, 'rb+' do |f| + f.flock(File::LOCK_EX) + f.read + end + rescue *READ_BINARY_ERRORS +- open path, 'rb' do |f| ++ File.open path, 'rb' do |f| + f.read + end + rescue Errno::ENOLCK # NFS + if Thread.main != Thread.current + raise + else +- open path, 'rb' do |f| ++ File.open path, 'rb' do |f| + f.read + end + end +diff --git lib/rubygems/commands/generate_index_command.rb lib/rubygems/commands/generate_index_command.rb +index 01f1f88405..0b677b73a9 100644 +--- lib/rubygems/commands/generate_index_command.rb ++++ lib/rubygems/commands/generate_index_command.rb +@@ -68,7 +68,7 @@ def execute + + if not File.exist?(options[:directory]) or + not File.directory?(options[:directory]) then +- alert_error "unknown directory name #{directory}." ++ alert_error "unknown directory name #{options[:directory]}." + terminate_interaction 1 + else + indexer = Gem::Indexer.new options.delete(:directory), options +diff --git lib/rubygems/commands/owner_command.rb lib/rubygems/commands/owner_command.rb +index 8e2271657a..637b5bdc4d 100644 +--- lib/rubygems/commands/owner_command.rb ++++ lib/rubygems/commands/owner_command.rb +@@ -64,7 +64,7 @@ def show_owners name + end + + with_response response do |resp| +- owners = YAML.load resp.body ++ owners = Gem::SafeYAML.load resp.body + + say "Owners for gem: #{name}" + owners.each do |owner| +diff --git lib/rubygems/commands/setup_command.rb lib/rubygems/commands/setup_command.rb +index 5d1414d102..6966cde01a 100644 +--- lib/rubygems/commands/setup_command.rb ++++ lib/rubygems/commands/setup_command.rb +@@ -350,7 +350,9 @@ def fake_spec.full_gem_path + def install_default_bundler_gem + return unless Gem::USE_BUNDLER_FOR_GEMDEPS + +- mkdir_p Gem::Specification.default_specifications_dir ++ specs_dir = Gem::Specification.default_specifications_dir ++ File.join(options[:destdir], specs_dir) unless Gem.win_platform? ++ mkdir_p specs_dir + + # Workaround for non-git environment. + gemspec = File.open('bundler/bundler.gemspec', 'rb'){|f| f.read.gsub(/`git ls-files -z`/, "''") } +@@ -359,23 +361,36 @@ def install_default_bundler_gem + bundler_spec = Gem::Specification.load("bundler/bundler.gemspec") + bundler_spec.files = Dir.chdir("bundler") { Dir["{*.md,{lib,exe,man}/**/*}"] } + bundler_spec.executables -= %w[bundler bundle_ruby] +- Dir.entries(Gem::Specification.default_specifications_dir). ++ ++ # Remove bundler-*.gemspec in default specification directory. ++ Dir.entries(specs_dir). + select {|gs| gs.start_with?("bundler-") }. +- each {|gs| File.delete(File.join(Gem::Specification.default_specifications_dir, gs)) } ++ each {|gs| File.delete(File.join(specs_dir, gs)) } + +- default_spec_path = File.join(Gem::Specification.default_specifications_dir, "#{bundler_spec.full_name}.gemspec") ++ default_spec_path = File.join(specs_dir, "#{bundler_spec.full_name}.gemspec") + Gem.write_binary(default_spec_path, bundler_spec.to_ruby) + + bundler_spec = Gem::Specification.load(default_spec_path) + ++ # Remove gemspec that was same version of vendored bundler. ++ normal_gemspec = File.join(Gem.default_dir, "specifications", "bundler-#{bundler_spec.version}.gemspec") ++ if File.file? normal_gemspec ++ File.delete normal_gemspec ++ end ++ ++ # Remove gem files that were same version of vendored bundler. + if File.directory? bundler_spec.gems_dir + Dir.entries(bundler_spec.gems_dir). +- select {|default_gem| File.basename(default_gem).match(/^bundler-#{Gem::Version::VERSION_PATTERN}$/) }. ++ select {|default_gem| File.basename(default_gem) == "bundler-#{bundler_spec.version}" }. + each {|default_gem| rm_r File.join(bundler_spec.gems_dir, default_gem) } + end + +- mkdir_p bundler_spec.bin_dir +- bundler_spec.executables.each {|e| cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_spec.bin_dir, e) } ++ bundler_bin_dir = File.join(Gem.default_dir, 'gems', bundler_spec.full_name, bundler_spec.bindir) ++ File.join(options[:destdir], bundler_bin_dir) unless Gem.win_platform? ++ mkdir_p bundler_bin_dir ++ bundler_spec.executables.each do |e| ++ cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_bin_dir, e) ++ end + + if Gem.win_platform? + require 'rubygems/installer' +diff --git lib/rubygems/commands/unpack_command.rb lib/rubygems/commands/unpack_command.rb +index eb7f550673..b873f20d28 100644 +--- lib/rubygems/commands/unpack_command.rb ++++ lib/rubygems/commands/unpack_command.rb +@@ -94,7 +94,7 @@ def execute + + spec_file = File.basename spec.spec_file + +- open spec_file, 'w' do |io| ++ File.open spec_file, 'w' do |io| + io.write metadata + end + else +@@ -176,7 +176,7 @@ def get_metadata path, security_policy = nil + + metadata = nil + +- open path, Gem.binary_mode do |io| ++ File.open path, Gem.binary_mode do |io| + tar = Gem::Package::TarReader.new io + tar.each_entry do |entry| + case entry.full_name +diff --git lib/rubygems/config_file.rb lib/rubygems/config_file.rb +index a4efed0f5a..c0d19dbfc2 100644 +--- lib/rubygems/config_file.rb ++++ lib/rubygems/config_file.rb +@@ -458,7 +458,7 @@ def to_yaml # :nodoc: + + # Writes out this config file, replacing its source. + def write +- open config_file_name, 'w' do |io| ++ File.open config_file_name, 'w' do |io| + io.write to_yaml + end + end +diff --git lib/rubygems/ext/builder.rb lib/rubygems/ext/builder.rb +index a1619c97d7..eb9db199d5 100644 +--- lib/rubygems/ext/builder.rb ++++ lib/rubygems/ext/builder.rb +@@ -212,7 +212,7 @@ def write_gem_make_out output # :nodoc: + + FileUtils.mkdir_p @spec.extension_dir + +- open destination, 'wb' do |io| io.puts output end ++ File.open destination, 'wb' do |io| io.puts output end + + destination + end +diff --git lib/rubygems/indexer.rb lib/rubygems/indexer.rb +index 871cc09d8d..3ea994414b 100644 +--- lib/rubygems/indexer.rb ++++ lib/rubygems/indexer.rb +@@ -2,6 +2,7 @@ + require 'rubygems' + require 'rubygems/package' + require 'time' ++require 'tmpdir' + + begin + gem 'builder' +@@ -64,7 +65,7 @@ def initialize(directory, options = {}) + @build_modern = options[:build_modern] + + @dest_directory = directory +- @directory = File.join(Dir.tmpdir, "gem_generate_index_#{$$}") ++ @directory = Dir.mktmpdir 'gem_generate_index' + + marshal_name = "Marshal.#{Gem.marshal_version}" + +@@ -123,7 +124,7 @@ def build_marshal_gemspecs specs + marshal_name = File.join @quick_marshal_dir, spec_file_name + + marshal_zipped = Gem.deflate Marshal.dump(spec) +- open marshal_name, 'wb' do |io| io.write marshal_zipped end ++ File.open marshal_name, 'wb' do |io| io.write marshal_zipped end + + files << marshal_name + +@@ -261,7 +262,7 @@ def compress(filename, extension) + + zipped = Gem.deflate data + +- open "#{filename}.#{extension}", 'wb' do |io| ++ File.open "#{filename}.#{extension}", 'wb' do |io| + io.write zipped + end + end +@@ -427,7 +428,7 @@ def update_specs_index(index, source, dest) + + specs_index = compact_specs specs_index.uniq.sort + +- open dest, 'wb' do |io| ++ File.open dest, 'wb' do |io| + Marshal.dump specs_index, io + end + end +diff --git lib/rubygems/installer.rb lib/rubygems/installer.rb +index 0cbca0791b..ee5fedeb64 100644 +--- lib/rubygems/installer.rb ++++ lib/rubygems/installer.rb +@@ -206,7 +206,7 @@ def check_executable_overwrite filename # :nodoc: + ruby_executable = false + existing = nil + +- open generated_bin, 'rb' do |io| ++ File.open generated_bin, 'rb' do |io| + next unless io.gets =~ /^#!/ # shebang + io.gets # blankline + +@@ -427,7 +427,7 @@ def default_spec_file + # specifications directory. + + def write_spec +- open spec_file, 'w' do |file| ++ File.open spec_file, 'w' do |file| + spec.installed_by_version = Gem.rubygems_version + + file.puts spec.to_ruby_for_cache +@@ -464,7 +464,12 @@ def generate_windows_script(filename, bindir) + def generate_bin # :nodoc: + return if spec.executables.nil? or spec.executables.empty? + +- Dir.mkdir @bin_dir unless File.exist? @bin_dir ++ begin ++ Dir.mkdir @bin_dir ++ rescue SystemCallError ++ raise unless File.directory? @bin_dir ++ end ++ + raise Gem::FilePermissionError.new(@bin_dir) unless File.writable? @bin_dir + + spec.executables.each do |filename| +@@ -863,7 +868,7 @@ def write_build_info_file + + build_info_file = File.join build_info_dir, "#{spec.full_name}.info" + +- open build_info_file, 'w' do |io| ++ File.open build_info_file, 'w' do |io| + @build_args.each do |arg| + io.puts arg + end +diff --git lib/rubygems/package.rb lib/rubygems/package.rb +index 77811ed5ec..b924122827 100644 +--- lib/rubygems/package.rb ++++ lib/rubygems/package.rb +@@ -219,7 +219,7 @@ def add_files tar # :nodoc: + next unless stat.file? + + tar.add_file_simple file, stat.mode, stat.size do |dst_io| +- open file, 'rb' do |src_io| ++ File.open file, 'rb' do |src_io| + dst_io.write src_io.read 16384 until src_io.eof? + end + end +@@ -378,9 +378,9 @@ def extract_tar_gz io, destination_dir, pattern = "*" # :nodoc: + File.dirname destination + end + +- FileUtils.mkdir_p mkdir, mkdir_options ++ mkdir_p_safe mkdir, mkdir_options, destination_dir, entry.full_name + +- open destination, 'wb' do |out| ++ File.open destination, 'wb' do |out| + out.write entry.read + FileUtils.chmod entry.header.mode, destination + end if entry.file? +@@ -416,20 +416,35 @@ def install_location filename, destination_dir # :nodoc: + raise Gem::Package::PathError.new(filename, destination_dir) if + filename.start_with? '/' + +- destination_dir = File.realpath destination_dir if +- File.respond_to? :realpath ++ destination_dir = realpath destination_dir + destination_dir = File.expand_path destination_dir + + destination = File.join destination_dir, filename + destination = File.expand_path destination + + raise Gem::Package::PathError.new(destination, destination_dir) unless +- destination.start_with? destination_dir ++ destination.start_with? destination_dir + '/' + + destination.untaint + destination + end + ++ def mkdir_p_safe mkdir, mkdir_options, destination_dir, file_name ++ destination_dir = realpath File.expand_path(destination_dir) ++ parts = mkdir.split(File::SEPARATOR) ++ parts.reduce do |path, basename| ++ path = realpath path unless path == "" ++ path = File.expand_path(path + File::SEPARATOR + basename) ++ lstat = File.lstat path rescue nil ++ if !lstat || !lstat.directory? ++ unless path.start_with? destination_dir and (FileUtils.mkdir path, mkdir_options rescue false) ++ raise Gem::Package::PathError.new(file_name, destination_dir) ++ end ++ end ++ path ++ end ++ end ++ + ## + # Loads a Gem::Specification from the TarEntry +entry+ + +@@ -603,6 +618,10 @@ def verify_files gem + raise Gem::Package::FormatError.new \ + 'package content (data.tar.gz) is missing', @gem + end ++ ++ if duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first) and duplicates.any? ++ raise Gem::Security::Exception, "duplicate files in the package: (#{duplicates.map(&:inspect).join(', ')})" ++ end + end + + ## +@@ -616,6 +635,16 @@ def verify_gz entry # :nodoc: + raise Gem::Package::FormatError.new(e.message, entry.full_name) + end + ++ if File.respond_to? :realpath ++ def realpath file ++ File.realpath file ++ end ++ else ++ def realpath file ++ file ++ end ++ end ++ + end + + require 'rubygems/package/digest_io' +diff --git lib/rubygems/package/file_source.rb lib/rubygems/package/file_source.rb +index 1a4dc4c824..ecc3a68677 100644 +--- lib/rubygems/package/file_source.rb ++++ lib/rubygems/package/file_source.rb +@@ -23,11 +23,11 @@ def present? + end + + def with_write_io &block +- open path, 'wb', &block ++ File.open path, 'wb', &block + end + + def with_read_io &block +- open path, 'rb', &block ++ File.open path, 'rb', &block + end + + end +diff --git lib/rubygems/package/old.rb lib/rubygems/package/old.rb +index f6e6e67c38..322d682ca8 100644 +--- lib/rubygems/package/old.rb ++++ lib/rubygems/package/old.rb +@@ -80,7 +80,7 @@ def extract_files destination_dir + + FileUtils.mkdir_p File.dirname destination + +- open destination, 'wb', entry['mode'] do |out| ++ File.open destination, 'wb', entry['mode'] do |out| + out.write file_data + end + +diff --git lib/rubygems/package/tar_header.rb lib/rubygems/package/tar_header.rb +index c54bd14d57..d557357114 100644 +--- lib/rubygems/package/tar_header.rb ++++ lib/rubygems/package/tar_header.rb +@@ -104,25 +104,30 @@ def self.from(stream) + fields = header.unpack UNPACK_FORMAT + + new :name => fields.shift, +- :mode => fields.shift.oct, +- :uid => fields.shift.oct, +- :gid => fields.shift.oct, +- :size => fields.shift.oct, +- :mtime => fields.shift.oct, +- :checksum => fields.shift.oct, ++ :mode => strict_oct(fields.shift), ++ :uid => strict_oct(fields.shift), ++ :gid => strict_oct(fields.shift), ++ :size => strict_oct(fields.shift), ++ :mtime => strict_oct(fields.shift), ++ :checksum => strict_oct(fields.shift), + :typeflag => fields.shift, + :linkname => fields.shift, + :magic => fields.shift, +- :version => fields.shift.oct, ++ :version => strict_oct(fields.shift), + :uname => fields.shift, + :gname => fields.shift, +- :devmajor => fields.shift.oct, +- :devminor => fields.shift.oct, ++ :devmajor => strict_oct(fields.shift), ++ :devminor => strict_oct(fields.shift), + :prefix => fields.shift, + + :empty => empty + end + ++ def self.strict_oct(str) ++ return str.oct if str =~ /\A[0-7]*\z/ ++ raise ArgumentError, "#{str.inspect} is not an octal string" ++ end ++ + ## + # Creates a new TarHeader using +vals+ + +diff --git lib/rubygems/package/tar_writer.rb lib/rubygems/package/tar_writer.rb +index f68b8d4c5e..390f7851a3 100644 +--- lib/rubygems/package/tar_writer.rb ++++ lib/rubygems/package/tar_writer.rb +@@ -196,6 +196,8 @@ def add_file_signed name, mode, signer + digest_name == signer.digest_name + end + ++ raise "no #{signer.digest_name} in #{digests.values.compact}" unless signature_digest ++ + if signer.key then + signature = signer.sign signature_digest.digest + +diff --git lib/rubygems/request_set/lockfile.rb lib/rubygems/request_set/lockfile.rb +index 7f6eadb939..76ad17d486 100644 +--- lib/rubygems/request_set/lockfile.rb ++++ lib/rubygems/request_set/lockfile.rb +@@ -223,7 +223,7 @@ def to_s + def write + content = to_s + +- open "#{@gem_deps_file}.lock", 'w' do |io| ++ File.open "#{@gem_deps_file}.lock", 'w' do |io| + io.write content + end + end +diff --git lib/rubygems/security.rb lib/rubygems/security.rb +index 4690dd9230..236577c5a3 100644 +--- lib/rubygems/security.rb ++++ lib/rubygems/security.rb +@@ -578,7 +578,7 @@ def self.trusted_certificates &block + def self.write pemmable, path, permissions = 0600, passphrase = nil, cipher = KEY_CIPHER + path = File.expand_path path + +- open path, 'wb', permissions do |io| ++ File.open path, 'wb', permissions do |io| + if passphrase and cipher + io.write pemmable.to_pem cipher, passphrase + else +diff --git lib/rubygems/security/trust_dir.rb lib/rubygems/security/trust_dir.rb +index bf44975cc6..849cf3cd3e 100644 +--- lib/rubygems/security/trust_dir.rb ++++ lib/rubygems/security/trust_dir.rb +@@ -93,7 +93,7 @@ def trust_cert certificate + + destination = cert_path certificate + +- open destination, 'wb', @permissions[:trusted_cert] do |io| ++ File.open destination, 'wb', @permissions[:trusted_cert] do |io| + io.write certificate.to_pem + end + end +diff --git lib/rubygems/server.rb lib/rubygems/server.rb +index 93b3af36f8..62c3dfe9cf 100644 +--- lib/rubygems/server.rb ++++ lib/rubygems/server.rb +@@ -623,6 +623,18 @@ def root(req, res) + executables = nil if executables.empty? + executables.last["is_last"] = true if executables + ++ # Pre-process spec homepage for safety reasons ++ begin ++ homepage_uri = URI.parse(spec.homepage) ++ if [URI::HTTP, URI::HTTPS].member? homepage_uri.class ++ homepage_uri = spec.homepage ++ else ++ homepage_uri = "." ++ end ++ rescue URI::InvalidURIError ++ homepage_uri = "." ++ end ++ + specs << { + "authors" => spec.authors.sort.join(", "), + "date" => spec.date.to_s, +@@ -632,7 +644,7 @@ def root(req, res) + "only_one_executable" => (executables && executables.size == 1), + "full_name" => spec.full_name, + "has_deps" => !deps.empty?, +- "homepage" => spec.homepage, ++ "homepage" => homepage_uri, + "name" => spec.name, + "rdoc_installed" => Gem::RDoc.new(spec).rdoc_installed?, + "ri_installed" => Gem::RDoc.new(spec).ri_installed?, +diff --git lib/rubygems/source.rb lib/rubygems/source.rb +index bd84c217a7..b28b850660 100644 +--- lib/rubygems/source.rb ++++ lib/rubygems/source.rb +@@ -160,7 +160,7 @@ def fetch_spec name_tuple + if update_cache? then + FileUtils.mkdir_p cache_dir + +- open local_spec, 'wb' do |io| ++ File.open local_spec, 'wb' do |io| + io.write spec + end + end +diff --git lib/rubygems/specification.rb lib/rubygems/specification.rb +index efc08c4738..2560324b7a 100644 +--- lib/rubygems/specification.rb ++++ lib/rubygems/specification.rb +@@ -15,6 +15,7 @@ + require 'rubygems/stub_specification' + require 'rubygems/util/list' + require 'stringio' ++require 'uri' + + ## + # The Specification class contains the information for a Gem. Typically +@@ -2822,10 +2823,16 @@ def validate packaging = true + raise Gem::InvalidSpecificationException, "#{lazy} is not a summary" + end + +- if homepage and not homepage.empty? and +- homepage !~ /\A[a-z][a-z\d+.-]*:/i then +- raise Gem::InvalidSpecificationException, +- "\"#{homepage}\" is not a URI" ++ # Make sure a homepage is valid HTTP/HTTPS URI ++ if homepage and not homepage.empty? ++ begin ++ homepage_uri = URI.parse(homepage) ++ unless [URI::HTTP, URI::HTTPS].member? homepage_uri.class ++ raise Gem::InvalidSpecificationException, "\"#{homepage}\" is not a valid HTTP URI" ++ end ++ rescue URI::InvalidURIError ++ raise Gem::InvalidSpecificationException, "\"#{homepage}\" is not a valid HTTP URI" ++ end + end + + # Warnings +diff --git lib/rubygems/stub_specification.rb lib/rubygems/stub_specification.rb +index 8337375ab4..ae2effbc84 100644 +--- lib/rubygems/stub_specification.rb ++++ lib/rubygems/stub_specification.rb +@@ -113,6 +113,8 @@ def data + unless @data + begin + saved_lineno = $. ++ ++ # TODO It should be use `File.open`, but bundler-1.16.1 example expects Kernel#open. + open loaded_from, OPEN_MODE do |file| + begin + file.readline # discard encoding line +diff --git lib/rubygems/test_case.rb lib/rubygems/test_case.rb +index f7f216e5e3..39aa4fc9a7 100644 +--- lib/rubygems/test_case.rb ++++ lib/rubygems/test_case.rb +@@ -488,7 +488,7 @@ def git_gem name = 'a', version = 1 + + gemspec = "#{name}.gemspec" + +- open File.join(directory, gemspec), 'w' do |io| ++ File.open File.join(directory, gemspec), 'w' do |io| + io.write git_spec.to_ruby + end + +@@ -592,7 +592,7 @@ def mu_pp(obj) + # Reads a Marshal file at +path+ + + def read_cache(path) +- open path.dup.untaint, 'rb' do |io| ++ File.open path.dup.untaint, 'rb' do |io| + Marshal.load io.read + end + end +@@ -612,7 +612,7 @@ def write_file(path) + dir = File.dirname path + FileUtils.mkdir_p dir unless File.directory? dir + +- open path, 'wb' do |io| ++ File.open path, 'wb' do |io| + yield io if block_given? + end + +@@ -727,7 +727,7 @@ def install_default_gems(*specs) + install_default_specs(*specs) + + specs.each do |spec| +- open spec.loaded_from, 'w' do |io| ++ File.open spec.loaded_from, 'w' do |io| + io.write spec.to_ruby_for_cache + end + end +@@ -1363,7 +1363,7 @@ def save_gemspec name = 'a', version = 1, directory = '.' + yield specification if block_given? + end + +- open File.join(directory, "#{name}.gemspec"), 'w' do |io| ++ File.open File.join(directory, "#{name}.gemspec"), 'w' do |io| + io.write vendor_spec.to_ruby + end + +diff --git lib/rubygems/test_utilities.rb lib/rubygems/test_utilities.rb +index 686916ea02..83c9d2d0fe 100644 +--- lib/rubygems/test_utilities.rb ++++ lib/rubygems/test_utilities.rb +@@ -346,7 +346,7 @@ def spec name, version, dependencies = nil, &block + end + + def write_spec spec # :nodoc: +- open spec.spec_file, 'w' do |io| ++ File.open spec.spec_file, 'w' do |io| + io.write spec.to_ruby_for_cache + end + end +diff --git lib/rubygems/util.rb lib/rubygems/util.rb +index 2de45c900b..6c75910004 100644 +--- lib/rubygems/util.rb ++++ lib/rubygems/util.rb +@@ -114,7 +114,8 @@ def self.traverse_parents directory, &block + + here = File.expand_path directory + loop do +- Dir.chdir here, &block ++ Dir.chdir here, &block rescue Errno::EACCES ++ + new_here = File.expand_path('..', here) + return if new_here == here # toplevel + here = new_here +diff --git lib/rubygems/validator.rb lib/rubygems/validator.rb +index 83448229bb..6842e4fa9c 100644 +--- lib/rubygems/validator.rb ++++ lib/rubygems/validator.rb +@@ -34,7 +34,7 @@ def verify_gem(gem_data) + # gem_path:: [String] Path to gem file + + def verify_gem_file(gem_path) +- open gem_path, Gem.binary_mode do |file| ++ File.open gem_path, Gem.binary_mode do |file| + gem_data = file.read + verify_gem gem_data + end +@@ -109,7 +109,7 @@ def alien(gems=[]) + + good, gone, unreadable = nil, nil, nil, nil + +- open gem_path, Gem.binary_mode do |file| ++ File.open gem_path, Gem.binary_mode do |file| + package = Gem::Package.new gem_path + + good, gone = package.contents.partition { |file_name| +@@ -134,7 +134,7 @@ def alien(gems=[]) + + source = File.join gem_directory, entry['path'] + +- open source, Gem.binary_mode do |f| ++ File.open source, Gem.binary_mode do |f| + unless f.read == data then + errors[gem_name][entry['path']] = "Modified from original" + end +diff --git test/rubygems/test_gem.rb test/rubygems/test_gem.rb +index 8a11cc2ecf..183771f0f3 100644 +--- test/rubygems/test_gem.rb ++++ test/rubygems/test_gem.rb +@@ -7,7 +7,7 @@ + require 'tmpdir' + + # TODO: push this up to test_case.rb once battle tested +-$SAFE=1 ++ + $LOAD_PATH.map! do |path| + path.dup.untaint + end +@@ -463,7 +463,7 @@ def test_self_ensure_gem_directories_missing_parents + assert File.directory?(util_cache_dir) + end + +- unless win_platform? then # only for FS that support write protection ++ unless win_platform? || Process.uid.zero? then # only for FS that support write protection + def test_self_ensure_gem_directories_write_protected + gemdir = File.join @tempdir, "egd" + FileUtils.rm_r gemdir rescue nil +@@ -775,7 +775,7 @@ def test_self_prefix_sitelibdir + end + + def test_self_read_binary +- open 'test', 'w' do |io| ++ File.open 'test', 'w' do |io| + io.write "\xCF\x80" + end + +@@ -1643,7 +1643,7 @@ def test_use_gemdeps + spec = Gem::Specification.find { |s| s == spec } + refute spec.activated? + +- open gem_deps_file, 'w' do |io| ++ File.open gem_deps_file, 'w' do |io| + io.write 'gem "a"' + end + +@@ -1662,7 +1662,7 @@ def test_use_gemdeps_ENV + + refute spec.activated? + +- open 'gem.deps.rb', 'w' do |io| ++ File.open 'gem.deps.rb', 'w' do |io| + io.write 'gem "a"' + end + +@@ -1706,7 +1706,7 @@ def test_use_gemdeps_automatic + + refute spec.activated? + +- open 'Gemfile', 'w' do |io| ++ File.open 'Gemfile', 'w' do |io| + io.write 'gem "a"' + end + +@@ -1735,7 +1735,7 @@ def test_use_gemdeps_disabled + + refute spec.activated? + +- open 'gem.deps.rb', 'w' do |io| ++ File.open 'gem.deps.rb', 'w' do |io| + io.write 'gem "a"' + end + +@@ -1750,7 +1750,7 @@ def test_use_gemdeps_missing_gem + skip 'Insecure operation - read' if RUBY_VERSION <= "1.8.7" + rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], 'x' + +- open 'x', 'w' do |io| ++ File.open 'x', 'w' do |io| + io.write 'gem "a"' + end + +@@ -1791,7 +1791,7 @@ def test_use_gemdeps_specific + spec = Gem::Specification.find { |s| s == spec } + refute spec.activated? + +- open 'x', 'w' do |io| ++ File.open 'x', 'w' do |io| + io.write 'gem "a"' + end + +diff --git test/rubygems/test_gem_commands_cleanup_command.rb test/rubygems/test_gem_commands_cleanup_command.rb +index c55e195975..60d208fcc0 100644 +--- test/rubygems/test_gem_commands_cleanup_command.rb ++++ test/rubygems/test_gem_commands_cleanup_command.rb +@@ -158,7 +158,7 @@ def test_execute_all_user_no_sudo + assert_path_exists @a_1_1.gem_dir + ensure + FileUtils.chmod 0755, @gemhome +- end unless win_platform? ++ end unless win_platform? || Process.uid.zero? + + def test_execute_dry_run + @cmd.options[:args] = %w[a] +diff --git test/rubygems/test_gem_commands_install_command.rb test/rubygems/test_gem_commands_install_command.rb +index dd86a85038..822d40e3f3 100644 +--- test/rubygems/test_gem_commands_install_command.rb ++++ test/rubygems/test_gem_commands_install_command.rb +@@ -131,6 +131,7 @@ def test_execute_local_transitive_prerelease + + def test_execute_no_user_install + skip 'skipped on MS Windows (chmod has no effect)' if win_platform? ++ skip 'skipped in root privilege' if Process.uid.zero? + + specs = spec_fetcher do |fetcher| + fetcher.gem 'a', 2 +diff --git test/rubygems/test_gem_commands_owner_command.rb test/rubygems/test_gem_commands_owner_command.rb +index 44652c1093..53cac4ce87 100644 +--- test/rubygems/test_gem_commands_owner_command.rb ++++ test/rubygems/test_gem_commands_owner_command.rb +@@ -43,6 +43,31 @@ def test_show_owners + assert_match %r{- 4}, @ui.output + end + ++ def test_show_owners_dont_load_objects ++ skip "testing a psych-only API" unless defined?(::Psych::DisallowedClass) ++ ++ response = < 0 +- assert Gem::Specification.find_all_by_name('x').length == 0 ++ assert Gem::Specification.find_all_by_name('x').length.zero? + end + + def test_execute_all +diff --git test/rubygems/test_gem_dependency_installer.rb test/rubygems/test_gem_dependency_installer.rb +index e55cc75682..3d76291668 100644 +--- test/rubygems/test_gem_dependency_installer.rb ++++ test/rubygems/test_gem_dependency_installer.rb +@@ -424,7 +424,7 @@ def test_install_dependency_existing_extension + extconf_rb = File.join @gemhome, 'gems', 'e-1', 'extconf.rb' + FileUtils.mkdir_p File.dirname extconf_rb + +- open extconf_rb, 'w' do |io| ++ File.open extconf_rb, 'w' do |io| + io.write <<-EXTCONF_RB + require 'mkmf' + create_makefile 'e' +diff --git test/rubygems/test_gem_doctor.rb test/rubygems/test_gem_doctor.rb +index 39b8a11692..8db65d70ce 100644 +--- test/rubygems/test_gem_doctor.rb ++++ test/rubygems/test_gem_doctor.rb +@@ -24,7 +24,7 @@ def test_doctor + + FileUtils.rm b.spec_file + +- open c.spec_file, 'w' do |io| ++ File.open c.spec_file, 'w' do |io| + io.write 'this will raise an exception when evaluated.' + end + +@@ -77,7 +77,7 @@ def test_doctor_dry_run + + FileUtils.rm b.spec_file + +- open c.spec_file, 'w' do |io| ++ File.open c.spec_file, 'w' do |io| + io.write 'this will raise an exception when evaluated.' + end + +diff --git test/rubygems/test_gem_ext_builder.rb test/rubygems/test_gem_ext_builder.rb +index d142ef28da..3dabd3e350 100644 +--- test/rubygems/test_gem_ext_builder.rb ++++ test/rubygems/test_gem_ext_builder.rb +@@ -32,7 +32,7 @@ def test_class_make + results = [] + + Dir.chdir @ext do +- open 'Makefile', 'w' do |io| ++ File.open 'Makefile', 'w' do |io| + io.puts <<-MAKEFILE + all: + \t@#{Gem.ruby} -e "puts %Q{all: \#{ENV['DESTDIR']}}" +@@ -72,7 +72,7 @@ def test_class_make_no_clean + results = [] + + Dir.chdir @ext do +- open 'Makefile', 'w' do |io| ++ File.open 'Makefile', 'w' do |io| + io.puts <<-MAKEFILE + all: + \t@#{Gem.ruby} -e "puts %Q{all: \#{ENV['DESTDIR']}}" +@@ -107,7 +107,7 @@ def test_build_extensions + + extconf_rb = File.join ext_dir, 'extconf.rb' + +- open extconf_rb, 'w' do |f| ++ File.open extconf_rb, 'w' do |f| + f.write <<-'RUBY' + require 'mkmf' + +@@ -168,7 +168,7 @@ def Gem.install_extension_in_lib + + extconf_rb = File.join ext_dir, 'extconf.rb' + +- open extconf_rb, 'w' do |f| ++ File.open extconf_rb, 'w' do |f| + f.write <<-'RUBY' + require 'mkmf' + +@@ -290,7 +290,7 @@ def test_build_extensions_with_build_args + + FileUtils.mkdir_p @spec.gem_dir + +- open File.join(@spec.gem_dir, "extconf.rb"), "w" do |f| ++ File.open File.join(@spec.gem_dir, "extconf.rb"), "w" do |f| + f.write <<-'RUBY' + puts "IN EXTCONF" + extconf_args = File.join File.dirname(__FILE__), 'extconf_args' +@@ -323,7 +323,7 @@ def test_initialize + + build_info_file = File.join build_info_dir, "#{@spec.full_name}.info" + +- open build_info_file, 'w' do |io| ++ File.open build_info_file, 'w' do |io| + io.puts '--with-foo-dir=/nonexistent' + end + +diff --git test/rubygems/test_gem_gem_runner.rb test/rubygems/test_gem_gem_runner.rb +index 0a1faa404a..d68ac4da81 100644 +--- test/rubygems/test_gem_gem_runner.rb ++++ test/rubygems/test_gem_gem_runner.rb +@@ -1,38 +1,6 @@ + # frozen_string_literal: true + require 'rubygems/test_case' +-begin +- gem_home_files = lambda{ +- if Dir.exist?(ENV["GEM_HOME"]) +- require "find" +- ary = Find.find(ENV["GEM_HOME"]).to_a +- else +- [] +- end +- } +- prev_gem_home = ENV["GEM_HOME"] +- prev_gem_home_files = gem_home_files.call +- prev_threads = Thread.list.map{|e| e.inspect} +- +- require 'rubygems/gem_runner' +-ensure +- if $! +- msg = < 'KEY' } + FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path + +- open Gem.configuration.credentials_path, 'w' do |f| ++ File.open Gem.configuration.credentials_path, 'w' do |f| + f.write keys.to_yaml + end + +@@ -59,7 +59,7 @@ def test_api_key_override + keys = { :rubygems_api_key => 'KEY', :other => 'OTHER' } + FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path + +- open Gem.configuration.credentials_path, 'w' do |f| ++ File.open Gem.configuration.credentials_path, 'w' do |f| + f.write keys.to_yaml + end + +@@ -163,7 +163,7 @@ def test_sign_in_with_other_credentials_doesnt_overwrite_other_keys + other_api_key = 'f46dbb18bb6a9c97cdc61b5b85c186a17403cdcbf' + + FileUtils.mkdir_p File.dirname(Gem.configuration.credentials_path) +- open Gem.configuration.credentials_path, 'w' do |f| ++ File.open Gem.configuration.credentials_path, 'w' do |f| + f.write Hash[:other_api_key, other_api_key].to_yaml + end + util_sign_in [api_key, 200, 'OK'] +diff --git test/rubygems/test_gem_indexer.rb test/rubygems/test_gem_indexer.rb +index a4a966e8de..5a9075e676 100644 +--- test/rubygems/test_gem_indexer.rb ++++ test/rubygems/test_gem_indexer.rb +@@ -39,8 +39,7 @@ def setup + + def test_initialize + assert_equal @tempdir, @indexer.dest_directory +- assert_equal File.join(Dir.tmpdir, "gem_generate_index_#{$$}"), +- @indexer.directory ++ assert_match %r{#{Dir.mktmpdir('gem_generate_index').match(/.*-/)}}, @indexer.directory + + indexer = Gem::Indexer.new @tempdir + assert indexer.build_modern +diff --git test/rubygems/test_gem_install_update_options.rb test/rubygems/test_gem_install_update_options.rb +index e2d546307d..371e408d27 100644 +--- test/rubygems/test_gem_install_update_options.rb ++++ test/rubygems/test_gem_install_update_options.rb +@@ -141,6 +141,8 @@ def test_user_install_enabled + def test_user_install_disabled_read_only + if win_platform? + skip('test_user_install_disabled_read_only test skipped on MS Windows') ++ elsif Process.uid.zero? ++ skip('test_user_install_disabled_read_only test skipped in root privilege') + else + @cmd.handle_options %w[--no-user-install] + +diff --git test/rubygems/test_gem_installer.rb test/rubygems/test_gem_installer.rb +index 39095c7dee..93b0482407 100644 +--- test/rubygems/test_gem_installer.rb ++++ test/rubygems/test_gem_installer.rb +@@ -140,7 +140,7 @@ def test_check_executable_overwrite_format_executable + s.require_path = 'lib' + end + +- open File.join(util_inst_bindir, 'executable'), 'w' do |io| ++ File.open File.join(util_inst_bindir, 'executable'), 'w' do |io| + io.write <<-EXEC + #!/usr/local/bin/ruby + # +@@ -437,6 +437,8 @@ def test_generate_bin_script_no_perms + + if win_platform? + skip('test_generate_bin_script_no_perms skipped on MS Windows') ++ elsif Process.uid.zero? ++ skip('test_generate_bin_script_no_perms skipped in root privilege') + else + FileUtils.chmod 0000, util_inst_bindir + +@@ -529,6 +531,8 @@ def test_generate_bin_symlink_no_perms + + if win_platform? + skip('test_generate_bin_symlink_no_perms skipped on MS Windows') ++ elsif Process.uid.zero? ++ skip('test_user_install_disabled_read_only test skipped in root privilege') + else + FileUtils.chmod 0000, util_inst_bindir + +diff --git test/rubygems/test_gem_package.rb test/rubygems/test_gem_package.rb +index cec1981c4c..d1664cf285 100644 +--- test/rubygems/test_gem_package.rb ++++ test/rubygems/test_gem_package.rb +@@ -24,7 +24,7 @@ def setup + end + + def test_class_new_old_format +- open 'old_format.gem', 'wb' do |io| ++ File.open 'old_format.gem', 'wb' do |io| + io.write SIMPLE_GEM + end + +@@ -45,7 +45,7 @@ def test_add_checksums + + FileUtils.mkdir 'lib' + +- open 'lib/code.rb', 'w' do |io| ++ File.open 'lib/code.rb', 'w' do |io| + io.write '# lib/code.rb' + end + +@@ -110,8 +110,8 @@ def test_add_files + + FileUtils.mkdir_p 'lib/empty' + +- open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end +- open 'lib/extra.rb', 'w' do |io| io.write '# lib/extra.rb' end ++ File.open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end ++ File.open 'lib/extra.rb', 'w' do |io| io.write '# lib/extra.rb' end + + package = Gem::Package.new 'bogus.gem' + package.spec = spec +@@ -140,7 +140,7 @@ def test_add_files_symlink + spec.files = %w[lib/code.rb lib/code_sym.rb] + + FileUtils.mkdir_p 'lib' +- open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end ++ File.open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end + + # NOTE: 'code.rb' is correct, because it's relative to lib/code_sym.rb + File.symlink('code.rb', 'lib/code_sym.rb') +@@ -179,7 +179,7 @@ def test_build + + FileUtils.mkdir 'lib' + +- open 'lib/code.rb', 'w' do |io| ++ File.open 'lib/code.rb', 'w' do |io| + io.write '# lib/code.rb' + end + +@@ -218,7 +218,7 @@ def test_build_auto_signed + + FileUtils.mkdir 'lib' + +- open 'lib/code.rb', 'w' do |io| ++ File.open 'lib/code.rb', 'w' do |io| + io.write '# lib/code.rb' + end + +@@ -261,7 +261,7 @@ def test_build_auto_signed_encrypted_key + + FileUtils.mkdir 'lib' + +- open 'lib/code.rb', 'w' do |io| ++ File.open 'lib/code.rb', 'w' do |io| + io.write '# lib/code.rb' + end + +@@ -311,7 +311,7 @@ def test_build_signed + + FileUtils.mkdir 'lib' + +- open 'lib/code.rb', 'w' do |io| ++ File.open 'lib/code.rb', 'w' do |io| + io.write '# lib/code.rb' + end + +@@ -348,7 +348,7 @@ def test_build_signed_encrypted_key + + FileUtils.mkdir 'lib' + +- open 'lib/code.rb', 'w' do |io| ++ File.open 'lib/code.rb', 'w' do |io| + io.write '# lib/code.rb' + end + +@@ -408,7 +408,7 @@ def test_extract_files_empty + end + end + +- open 'empty.gem', 'wb' do |io| ++ File.open 'empty.gem', 'wb' do |io| + io.write gem.string + end + +@@ -455,6 +455,31 @@ def test_extract_tar_gz_symlink_relative_path + File.read(extracted) + end + ++ def test_extract_symlink_parent ++ skip 'symlink not supported' if Gem.win_platform? ++ ++ package = Gem::Package.new @gem ++ ++ tgz_io = util_tar_gz do |tar| ++ tar.mkdir 'lib', 0755 ++ tar.add_symlink 'lib/link', '../..', 0644 ++ tar.add_file 'lib/link/outside.txt', 0644 do |io| io.write 'hi' end ++ end ++ ++ # Extract into a subdirectory of @destination; if this test fails it writes ++ # a file outside destination_subdir, but we want the file to remain inside ++ # @destination so it will be cleaned up. ++ destination_subdir = File.join @destination, 'subdir' ++ FileUtils.mkdir_p destination_subdir ++ ++ e = assert_raises Gem::Package::PathError do ++ package.extract_tar_gz tgz_io, destination_subdir ++ end ++ ++ assert_equal("installing into parent path lib/link/outside.txt of " + ++ "#{destination_subdir} is not allowed", e.message) ++ end ++ + def test_extract_tar_gz_directory + package = Gem::Package.new @gem + +@@ -566,6 +591,21 @@ def test_install_location_relative + "#{@destination} is not allowed", e.message) + end + ++ def test_install_location_suffix ++ package = Gem::Package.new @gem ++ ++ filename = "../#{File.basename(@destination)}suffix.rb" ++ ++ e = assert_raises Gem::Package::PathError do ++ package.install_location filename, @destination ++ end ++ ++ parent = File.expand_path File.join @destination, filename ++ ++ assert_equal("installing into parent path #{parent} of " + ++ "#{@destination} is not allowed", e.message) ++ end ++ + def test_load_spec + entry = StringIO.new Gem.gzip @spec.to_yaml + def entry.full_name() 'metadata.gz' end +@@ -620,7 +660,7 @@ def test_verify_checksum_bad + end + end + +- open 'mismatch.gem', 'wb' do |io| ++ File.open 'mismatch.gem', 'wb' do |io| + io.write gem.string + end + +@@ -670,7 +710,7 @@ def test_verify_checksum_missing + end + end + +- open 'data_checksum_missing.gem', 'wb' do |io| ++ File.open 'data_checksum_missing.gem', 'wb' do |io| + io.write gem.string + end + +@@ -723,6 +763,32 @@ def test_verify_nonexistent + assert_match %r%nonexistent.gem$%, e.message + end + ++ def test_verify_duplicate_file ++ FileUtils.mkdir_p 'lib' ++ FileUtils.touch 'lib/code.rb' ++ ++ build = Gem::Package.new @gem ++ build.spec = @spec ++ build.setup_signer ++ open @gem, 'wb' do |gem_io| ++ Gem::Package::TarWriter.new gem_io do |gem| ++ build.add_metadata gem ++ build.add_contents gem ++ ++ gem.add_file_simple 'a.sig', 0444, 0 ++ gem.add_file_simple 'a.sig', 0444, 0 ++ end ++ end ++ ++ package = Gem::Package.new @gem ++ ++ e = assert_raises Gem::Security::Exception do ++ package.verify ++ end ++ ++ assert_equal 'duplicate files in the package: ("a.sig")', e.message ++ end ++ + def test_verify_security_policy + skip 'openssl is missing' unless defined?(OpenSSL::SSL) + +@@ -773,14 +839,20 @@ def test_verify_security_policy_checksum_missing + FileUtils.mkdir 'lib' + FileUtils.touch 'lib/code.rb' + +- open @gem, 'wb' do |gem_io| ++ File.open @gem, 'wb' do |gem_io| + Gem::Package::TarWriter.new gem_io do |gem| + build.add_metadata gem + build.add_contents gem + + # write bogus data.tar.gz to foil signature + bogus_data = Gem.gzip 'hello' +- gem.add_file_simple 'data.tar.gz', 0444, bogus_data.length do |io| ++ fake_signer = Class.new do ++ def digest_name; 'SHA512'; end ++ def digest_algorithm; Digest(:SHA512); end ++ def key; 'key'; end ++ def sign(*); 'fake_sig'; end ++ end ++ gem.add_file_signed 'data2.tar.gz', 0444, fake_signer.new do |io| + io.write bogus_data + end + +@@ -804,7 +876,7 @@ def test_verify_security_policy_checksum_missing + end + + def test_verify_truncate +- open 'bad.gem', 'wb' do |io| ++ File.open 'bad.gem', 'wb' do |io| + io.write File.read(@gem, 1024) # don't care about newlines + end + +diff --git test/rubygems/test_gem_package_old.rb test/rubygems/test_gem_package_old.rb +index c15475b0c7..604981b3c1 100644 +--- test/rubygems/test_gem_package_old.rb ++++ test/rubygems/test_gem_package_old.rb +@@ -7,7 +7,7 @@ class TestGemPackageOld < Gem::TestCase + def setup + super + +- open 'old_format.gem', 'wb' do |io| ++ File.open 'old_format.gem', 'wb' do |io| + io.write SIMPLE_GEM + end + +diff --git test/rubygems/test_gem_package_tar_header.rb test/rubygems/test_gem_package_tar_header.rb +index d33877057d..43f508df45 100644 +--- test/rubygems/test_gem_package_tar_header.rb ++++ test/rubygems/test_gem_package_tar_header.rb +@@ -143,5 +143,26 @@ def test_update_checksum + assert_equal '012467', @tar_header.checksum + end + ++ def test_from_bad_octal ++ test_cases = [ ++ "00000006,44\000", # bogus character ++ "00000006789\000", # non-octal digit ++ "+0000001234\000", # positive sign ++ "-0000001000\000", # negative sign ++ "0x000123abc\000", # radix prefix ++ ] ++ ++ test_cases.each do |val| ++ header_s = @tar_header.to_s ++ # overwrite the size field ++ header_s[124, 12] = val ++ io = TempIO.new header_s ++ assert_raises ArgumentError do ++ new_header = Gem::Package::TarHeader.from io ++ end ++ io.close! if io.respond_to? :close! ++ end ++ end ++ + end + +diff --git test/rubygems/test_gem_rdoc.rb test/rubygems/test_gem_rdoc.rb +index 76ca8c45a9..0355883cb3 100644 +--- test/rubygems/test_gem_rdoc.rb ++++ test/rubygems/test_gem_rdoc.rb +@@ -223,6 +223,7 @@ def test_remove + + def test_remove_unwritable + skip 'chmod not supported' if Gem.win_platform? ++ skip 'skipped in root privilege' if Process.uid.zero? + FileUtils.mkdir_p @a.base_dir + FileUtils.chmod 0, @a.base_dir + +@@ -251,6 +252,7 @@ def test_setup + + def test_setup_unwritable + skip 'chmod not supported' if Gem.win_platform? ++ skip 'skipped in root privilege' if Process.uid.zero? + FileUtils.mkdir_p @a.doc_dir + FileUtils.chmod 0, @a.doc_dir + +diff --git test/rubygems/test_gem_remote_fetcher.rb test/rubygems/test_gem_remote_fetcher.rb +index ee5ac77717..20e34e84e1 100644 +--- test/rubygems/test_gem_remote_fetcher.rb ++++ test/rubygems/test_gem_remote_fetcher.rb +@@ -431,7 +431,7 @@ def test_download_install_dir + assert File.exist?(a1_cache_gem) + end + +- unless win_platform? # File.chmod doesn't work ++ unless win_platform? || Process.uid.zero? # File.chmod doesn't work + def test_download_local_read_only + FileUtils.mv @a1_gem, @tempdir + local_path = File.join @tempdir, @a1.file_name +diff --git test/rubygems/test_gem_request_set.rb test/rubygems/test_gem_request_set.rb +index 3a48827481..5dc6c1518d 100644 +--- test/rubygems/test_gem_request_set.rb ++++ test/rubygems/test_gem_request_set.rb +@@ -52,7 +52,7 @@ def test_install_from_gemdeps + rs = Gem::RequestSet.new + installed = [] + +- open 'gem.deps.rb', 'w' do |io| ++ File.open 'gem.deps.rb', 'w' do |io| + io.puts 'gem "a"' + io.flush + +@@ -78,7 +78,7 @@ def test_install_from_gemdeps_explain + + rs = Gem::RequestSet.new + +- open 'gem.deps.rb', 'w' do |io| ++ File.open 'gem.deps.rb', 'w' do |io| + io.puts 'gem "a"' + io.flush + +@@ -104,7 +104,7 @@ def test_install_from_gemdeps_install_dir + rs = Gem::RequestSet.new + installed = [] + +- open 'gem.deps.rb', 'w' do |io| ++ File.open 'gem.deps.rb', 'w' do |io| + io.puts 'gem "a"' + end + +@@ -128,7 +128,7 @@ def test_install_from_gemdeps_local + + rs = Gem::RequestSet.new + +- open 'gem.deps.rb', 'w' do |io| ++ File.open 'gem.deps.rb', 'w' do |io| + io.puts 'gem "a"' + io.flush + +@@ -150,7 +150,7 @@ def test_install_from_gemdeps_lockfile + rs = Gem::RequestSet.new + installed = [] + +- open 'gem.deps.rb.lock', 'w' do |io| ++ File.open 'gem.deps.rb.lock', 'w' do |io| + io.puts <<-LOCKFILE + GEM + remote: #{@gem_repo} +@@ -167,7 +167,7 @@ def test_install_from_gemdeps_lockfile + LOCKFILE + end + +- open 'gem.deps.rb', 'w' do |io| ++ File.open 'gem.deps.rb', 'w' do |io| + io.puts 'gem "b"' + end + +@@ -190,7 +190,7 @@ def test_install_from_gemdeps_version_mismatch + rs = Gem::RequestSet.new + installed = [] + +- open 'gem.deps.rb', 'w' do |io| ++ File.open 'gem.deps.rb', 'w' do |io| + io.puts <<-GEM_DEPS + gem "a" + ruby "0" +diff --git test/rubygems/test_gem_request_set_lockfile.rb test/rubygems/test_gem_request_set_lockfile.rb +index 908f97303e..7460b7efad 100644 +--- test/rubygems/test_gem_request_set_lockfile.rb ++++ test/rubygems/test_gem_request_set_lockfile.rb +@@ -31,7 +31,7 @@ def lockfile + def write_lockfile lockfile + @lock_file = File.expand_path "#{@gem_deps_file}.lock" + +- open @lock_file, 'w' do |io| ++ File.open @lock_file, 'w' do |io| + io.write lockfile + end + end +@@ -387,7 +387,7 @@ def test_to_s_git + s.add_dependency 'c', '~> 1.0' + end + +- open 'b.gemspec', 'w' do |io| ++ File.open 'b.gemspec', 'w' do |io| + io.write b.to_ruby + end + +@@ -400,7 +400,7 @@ def test_to_s_git + Dir.chdir 'c' do + c = Gem::Specification.new 'c', 1 + +- open 'c.gemspec', 'w' do |io| ++ File.open 'c.gemspec', 'w' do |io| + io.write c.to_ruby + end + +@@ -455,7 +455,7 @@ def test_write_error + + gem_deps_lock_file = "#{@gem_deps_file}.lock" + +- open gem_deps_lock_file, 'w' do |io| ++ File.open gem_deps_lock_file, 'w' do |io| + io.write 'hello' + end + +diff --git test/rubygems/test_gem_request_set_lockfile_parser.rb test/rubygems/test_gem_request_set_lockfile_parser.rb +index 9946c522d9..f3517da43a 100644 +--- test/rubygems/test_gem_request_set_lockfile_parser.rb ++++ test/rubygems/test_gem_request_set_lockfile_parser.rb +@@ -536,7 +536,7 @@ def test_parse_missing + end + + def write_lockfile lockfile +- open @lock_file, 'w' do |io| ++ File.open @lock_file, 'w' do |io| + io.write lockfile + end + end +diff --git test/rubygems/test_gem_request_set_lockfile_tokenizer.rb test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +index ab506a14e6..f4aba6d94a 100644 +--- test/rubygems/test_gem_request_set_lockfile_tokenizer.rb ++++ test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +@@ -295,7 +295,7 @@ def test_unget + end + + def write_lockfile lockfile +- open @lock_file, 'w' do |io| ++ File.open @lock_file, 'w' do |io| + io.write lockfile + end + end +diff --git test/rubygems/test_gem_resolver_git_specification.rb test/rubygems/test_gem_resolver_git_specification.rb +index 9e8e2c5715..211757eb20 100644 +--- test/rubygems/test_gem_resolver_git_specification.rb ++++ test/rubygems/test_gem_resolver_git_specification.rb +@@ -70,7 +70,7 @@ def test_install_extension + Dir.chdir 'git/a' do + FileUtils.mkdir_p 'ext/lib' + +- open 'ext/extconf.rb', 'w' do |io| ++ File.open 'ext/extconf.rb', 'w' do |io| + io.puts 'require "mkmf"' + io.puts 'create_makefile "a"' + end +diff --git test/rubygems/test_gem_server.rb test/rubygems/test_gem_server.rb +index 6fe02e480f..a018e65512 100644 +--- test/rubygems/test_gem_server.rb ++++ test/rubygems/test_gem_server.rb +@@ -100,7 +100,7 @@ def test_latest_specs_gemdirs + specs_dir = File.join dir, 'specifications' + FileUtils.mkdir_p specs_dir + +- open File.join(specs_dir, spec.spec_name), 'w' do |io| ++ File.open File.join(specs_dir, spec.spec_name), 'w' do |io| + io.write spec.to_ruby + end + +@@ -198,7 +198,7 @@ def test_quick_gemdirs + + FileUtils.mkdir_p specs_dir + +- open File.join(specs_dir, spec.spec_name), 'w' do |io| ++ File.open File.join(specs_dir, spec.spec_name), 'w' do |io| + io.write spec.to_ruby + end + +@@ -339,7 +339,7 @@ def test_root_gemdirs + specs_dir = File.join dir, 'specifications' + FileUtils.mkdir_p specs_dir + +- open File.join(specs_dir, spec.spec_name), 'w' do |io| ++ File.open File.join(specs_dir, spec.spec_name), 'w' do |io| + io.write spec.to_ruby + end + +@@ -353,6 +353,171 @@ def test_root_gemdirs + assert_match 'z 9', @res.body + end + ++ ++ def test_xss_homepage_fix_289313 ++ data = StringIO.new "GET / HTTP/1.0\r\n\r\n" ++ dir = "#{@gemhome}2" ++ ++ spec = util_spec 'xsshomepagegem', 1 ++ spec.homepage = "javascript:confirm(document.domain)" ++ ++ specs_dir = File.join dir, 'specifications' ++ FileUtils.mkdir_p specs_dir ++ ++ open File.join(specs_dir, spec.spec_name), 'w' do |io| ++ io.write spec.to_ruby ++ end ++ ++ server = Gem::Server.new dir, process_based_port, false ++ ++ @req.parse data ++ ++ server.root @req, @res ++ ++ assert_equal 200, @res.status ++ assert_match 'xsshomepagegem 1', @res.body ++ ++ # This verifies that the homepage for this spec is not displayed and is set to ".", because it's not a ++ # valid HTTP/HTTPS URL and could be unsafe in an HTML context. We would prefer to throw an exception here, ++ # but spec.homepage is currently free form and not currently required to be a URL, this behavior may be ++ # validated in future versions of Gem::Specification. ++ # ++ # There are two variant we're checking here, one where rdoc is not present, and one where rdoc is present in the same regex: ++ # ++ # Variant #1 - rdoc not installed ++ # ++ # xsshomepagegem 1 ++ # ++ # ++ # [rdoc] ++ # ++ # ++ # ++ # [www] ++ # ++ # Variant #2 - rdoc installed ++ # ++ # xsshomepagegem 1 ++ # ++ # ++ # \[rdoc\]<\/a> ++ # ++ # ++ # ++ # [www] ++ regex_match = /xsshomepagegem 1<\/b>[\n\s]+(\[rdoc\]<\/span>|\[rdoc\]<\/a>)[\n\s]+\[www\]<\/a>/ ++ assert_match regex_match, @res.body ++ end ++ ++ def test_invalid_homepage ++ data = StringIO.new "GET / HTTP/1.0\r\n\r\n" ++ dir = "#{@gemhome}2" ++ ++ spec = util_spec 'invalidhomepagegem', 1 ++ spec.homepage = "notavalidhomepageurl" ++ ++ specs_dir = File.join dir, 'specifications' ++ FileUtils.mkdir_p specs_dir ++ ++ open File.join(specs_dir, spec.spec_name), 'w' do |io| ++ io.write spec.to_ruby ++ end ++ ++ server = Gem::Server.new dir, process_based_port, false ++ ++ @req.parse data ++ ++ server.root @req, @res ++ ++ assert_equal 200, @res.status ++ assert_match 'invalidhomepagegem 1', @res.body ++ ++ # This verifies that the homepage for this spec is not displayed and is set to ".", because it's not a ++ # valid HTTP/HTTPS URL and could be unsafe in an HTML context. We would prefer to throw an exception here, ++ # but spec.homepage is currently free form and not currently required to be a URL, this behavior may be ++ # validated in future versions of Gem::Specification. ++ # ++ # There are two variant we're checking here, one where rdoc is not present, and one where rdoc is present in the same regex: ++ # ++ # Variant #1 - rdoc not installed ++ # ++ # invalidhomepagegem 1 ++ # ++ # ++ # [rdoc] ++ # ++ # ++ # ++ # [www] ++ # ++ # Variant #2 - rdoc installed ++ # ++ # invalidhomepagegem 1 ++ # ++ # ++ # \[rdoc\]<\/a> ++ # ++ # ++ # ++ # [www] ++ regex_match = /invalidhomepagegem 1<\/b>[\n\s]+(\[rdoc\]<\/span>|\[rdoc\]<\/a>)[\n\s]+\[www\]<\/a>/ ++ assert_match regex_match, @res.body ++ end ++ ++ def test_valid_homepage_http ++ data = StringIO.new "GET / HTTP/1.0\r\n\r\n" ++ dir = "#{@gemhome}2" ++ ++ spec = util_spec 'validhomepagegemhttp', 1 ++ spec.homepage = "http://rubygems.org" ++ ++ specs_dir = File.join dir, 'specifications' ++ FileUtils.mkdir_p specs_dir ++ ++ open File.join(specs_dir, spec.spec_name), 'w' do |io| ++ io.write spec.to_ruby ++ end ++ ++ server = Gem::Server.new dir, process_based_port, false ++ ++ @req.parse data ++ ++ server.root @req, @res ++ ++ assert_equal 200, @res.status ++ assert_match 'validhomepagegemhttp 1', @res.body ++ ++ regex_match = /validhomepagegemhttp 1<\/b>[\n\s]+(\[rdoc\]<\/span>|\[rdoc\]<\/a>)[\n\s]+\[www\]<\/a>/ ++ assert_match regex_match, @res.body ++ end ++ ++ def test_valid_homepage_https ++ data = StringIO.new "GET / HTTP/1.0\r\n\r\n" ++ dir = "#{@gemhome}2" ++ ++ spec = util_spec 'validhomepagegemhttps', 1 ++ spec.homepage = "https://rubygems.org" ++ ++ specs_dir = File.join dir, 'specifications' ++ FileUtils.mkdir_p specs_dir ++ ++ open File.join(specs_dir, spec.spec_name), 'w' do |io| ++ io.write spec.to_ruby ++ end ++ ++ server = Gem::Server.new dir, process_based_port, false ++ ++ @req.parse data ++ ++ server.root @req, @res ++ ++ assert_equal 200, @res.status ++ assert_match 'validhomepagegemhttps 1', @res.body ++ ++ regex_match = /validhomepagegemhttps 1<\/b>[\n\s]+(\[rdoc\]<\/span>|\[rdoc\]<\/a>)[\n\s]+\[www\]<\/a>/ ++ assert_match regex_match, @res.body ++ end ++ + def test_specs + data = StringIO.new "GET /specs.#{Gem.marshal_version} HTTP/1.0\r\n\r\n" + @req.parse data +@@ -378,7 +543,7 @@ def test_specs_gemdirs + specs_dir = File.join dir, 'specifications' + FileUtils.mkdir_p specs_dir + +- open File.join(specs_dir, spec.spec_name), 'w' do |io| ++ File.open File.join(specs_dir, spec.spec_name), 'w' do |io| + io.write spec.to_ruby + end + +diff --git test/rubygems/test_gem_source.rb test/rubygems/test_gem_source.rb +index 4a93e222f8..8805a9b404 100644 +--- test/rubygems/test_gem_source.rb ++++ test/rubygems/test_gem_source.rb +@@ -110,7 +110,7 @@ def test_fetch_spec_cached + + cache_file = File.join cache_dir, a1.spec_name + +- open cache_file, 'wb' do |io| ++ File.open cache_file, 'wb' do |io| + Marshal.dump a1, io + end + +@@ -163,7 +163,7 @@ def test_load_specs_cached + + cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}" + +- open cache_file, 'wb' do |io| ++ File.open cache_file, 'wb' do |io| + Marshal.dump latest_specs, io + end + +@@ -187,7 +187,7 @@ def test_load_specs_cached_empty + + cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}" + +- open cache_file, 'wb' do |io| ++ File.open cache_file, 'wb' do |io| + # Setup invalid data in the cache: + io.write Marshal.dump(latest_specs)[0, 10] + end +diff --git test/rubygems/test_gem_source_git.rb test/rubygems/test_gem_source_git.rb +index 0e13a11e7e..8f5d3ee745 100644 +--- test/rubygems/test_gem_source_git.rb ++++ test/rubygems/test_gem_source_git.rb +@@ -229,7 +229,7 @@ def test_specs + Dir.chdir 'b' do + b = Gem::Specification.new 'b', 1 + +- open 'b.gemspec', 'w' do |io| ++ File.open 'b.gemspec', 'w' do |io| + io.write b.to_ruby + end + +diff --git test/rubygems/test_gem_specification.rb test/rubygems/test_gem_specification.rb +index bb6acbc7de..badb297eee 100644 +--- test/rubygems/test_gem_specification.rb ++++ test/rubygems/test_gem_specification.rb +@@ -922,7 +922,7 @@ def test_self_load + end + + def test_self_load_relative +- open 'a-2.gemspec', 'w' do |io| ++ File.open 'a-2.gemspec', 'w' do |io| + io.write @a2.to_ruby_for_cache + end + +@@ -948,6 +948,9 @@ def test_self_load_tainted + @a2.files.clear + + assert_equal @a2, spec ++ ++ ensure ++ $SAFE = 0 + end + + def test_self_load_escape_curly +@@ -1111,7 +1114,7 @@ def test_self_remove_spec + end + + def test_self_remove_spec_removed +- open @a1.spec_file, 'w' do |io| ++ File.open @a1.spec_file, 'w' do |io| + io.write @a1.to_ruby + end + +@@ -1363,13 +1366,13 @@ def test_build_args + + assert_empty @ext.build_args + +- open @ext.build_info_file, 'w' do |io| ++ File.open @ext.build_info_file, 'w' do |io| + io.puts + end + + assert_empty @ext.build_args + +- open @ext.build_info_file, 'w' do |io| ++ File.open @ext.build_info_file, 'w' do |io| + io.puts '--with-foo-dir=wherever' + end + +@@ -1385,9 +1388,9 @@ def test_build_extensions + extconf_rb = File.join @ext.gem_dir, @ext.extensions.first + FileUtils.mkdir_p File.dirname extconf_rb + +- open extconf_rb, 'w' do |f| ++ File.open extconf_rb, 'w' do |f| + f.write <<-'RUBY' +- open 'Makefile', 'w' do |f| ++ File.open 'Makefile', 'w' do |f| + f.puts "clean:\n\techo clean" + f.puts "default:\n\techo built" + f.puts "install:\n\techo installed" +@@ -1435,9 +1438,9 @@ def test_build_extensions_default_gem + extconf_rb = File.join spec.gem_dir, spec.extensions.first + FileUtils.mkdir_p File.dirname extconf_rb + +- open extconf_rb, 'w' do |f| ++ File.open extconf_rb, 'w' do |f| + f.write <<-'RUBY' +- open 'Makefile', 'w' do |f| ++ File.open 'Makefile', 'w' do |f| + f.puts "default:\n\techo built" + f.puts "install:\n\techo installed" + end +@@ -1461,6 +1464,7 @@ def test_build_extensions_error + + def test_build_extensions_extensions_dir_unwritable + skip 'chmod not supported' if Gem.win_platform? ++ skip 'skipped in root privilege' if Process.uid.zero? + + ext_spec + +@@ -1469,9 +1473,9 @@ def test_build_extensions_extensions_dir_unwritable + extconf_rb = File.join @ext.gem_dir, @ext.extensions.first + FileUtils.mkdir_p File.dirname extconf_rb + +- open extconf_rb, 'w' do |f| ++ File.open extconf_rb, 'w' do |f| + f.write <<-'RUBY' +- open 'Makefile', 'w' do |f| ++ File.open 'Makefile', 'w' do |f| + f.puts "clean:\n\techo clean" + f.puts "default:\n\techo built" + f.puts "install:\n\techo installed" +@@ -1486,7 +1490,7 @@ def test_build_extensions_extensions_dir_unwritable + @ext.build_extensions + refute_path_exists @ext.extension_dir + ensure +- unless ($DEBUG or win_platform?) then ++ unless ($DEBUG or win_platform? or Process.uid.zero?) then + FileUtils.chmod 0755, File.join(@ext.base_dir, 'extensions') + FileUtils.chmod 0755, @ext.base_dir + end +@@ -1502,9 +1506,9 @@ def test_build_extensions_no_extensions_dir_unwritable + extconf_rb = File.join @ext.gem_dir, @ext.extensions.first + FileUtils.mkdir_p File.dirname extconf_rb + +- open extconf_rb, 'w' do |f| ++ File.open extconf_rb, 'w' do |f| + f.write <<-'RUBY' +- open 'Makefile', 'w' do |f| ++ File.open 'Makefile', 'w' do |f| + f.puts "clean:\n\techo clean" + f.puts "default:\n\techo built" + f.puts "install:\n\techo installed" +@@ -1551,9 +1555,9 @@ def test_build_extensions_preview + extconf_rb = File.join @ext.gem_dir, @ext.extensions.first + FileUtils.mkdir_p File.dirname extconf_rb + +- open extconf_rb, 'w' do |f| ++ File.open extconf_rb, 'w' do |f| + f.write <<-'RUBY' +- open 'Makefile', 'w' do |f| ++ File.open 'Makefile', 'w' do |f| + f.puts "clean:\n\techo clean" + f.puts "default:\n\techo built" + f.puts "install:\n\techo installed" +@@ -2882,7 +2886,22 @@ def test_validate_homepage + @a1.validate + end + +- assert_equal '"over at my cool site" is not a URI', e.message ++ assert_equal '"over at my cool site" is not a valid HTTP URI', e.message ++ ++ @a1.homepage = 'ftp://rubygems.org' ++ ++ e = assert_raises Gem::InvalidSpecificationException do ++ @a1.validate ++ end ++ ++ assert_equal '"ftp://rubygems.org" is not a valid HTTP URI', e.message ++ ++ @a1.homepage = 'http://rubygems.org' ++ assert_equal true, @a1.validate ++ ++ @a1.homepage = 'https://rubygems.org' ++ assert_equal true, @a1.validate ++ + end + end + +@@ -3418,9 +3437,9 @@ def test_missing_extensions_eh + extconf_rb = File.join @ext.gem_dir, @ext.extensions.first + FileUtils.mkdir_p File.dirname extconf_rb + +- open extconf_rb, 'w' do |f| ++ File.open extconf_rb, 'w' do |f| + f.write <<-'RUBY' +- open 'Makefile', 'w' do |f| ++ File.open 'Makefile', 'w' do |f| + f.puts "clean:\n\techo clean" + f.puts "default:\n\techo built" + f.puts "install:\n\techo installed" +diff --git test/rubygems/test_gem_stub_specification.rb test/rubygems/test_gem_stub_specification.rb +index 43680265c7..f9a3a236c0 100644 +--- test/rubygems/test_gem_stub_specification.rb ++++ test/rubygems/test_gem_stub_specification.rb +@@ -127,9 +127,9 @@ def test_missing_extensions_eh + extconf_rb = File.join s.gem_dir, s.extensions.first + FileUtils.mkdir_p File.dirname extconf_rb + +- open extconf_rb, 'w' do |f| ++ File.open extconf_rb, 'w' do |f| + f.write <<-'RUBY' +- open 'Makefile', 'w' do |f| ++ File.open 'Makefile', 'w' do |f| + f.puts "clean:\n\techo clean" + f.puts "default:\n\techo built" + f.puts "install:\n\techo installed" +@@ -149,7 +149,7 @@ def test_missing_extensions_eh_default_gem + spec = new_default_spec 'default', 1 + spec.extensions << 'extconf.rb' + +- open spec.loaded_from, 'w' do |io| ++ File.open spec.loaded_from, 'w' do |io| + io.write spec.to_ruby_for_cache + end + +@@ -198,7 +198,7 @@ def test_to_spec_missing_extensions + + def stub_with_version + spec = File.join @gemhome, 'specifications', 'stub_e-2.gemspec' +- open spec, 'w' do |io| ++ File.open spec, 'w' do |io| + io.write <<-STUB + # -*- encoding: utf-8 -*- + # stub: stub_v 2 ruby lib +@@ -221,7 +221,7 @@ def stub_with_version + + def stub_without_version + spec = File.join @gemhome, 'specifications', 'stub-2.gemspec' +- open spec, 'w' do |io| ++ File.open spec, 'w' do |io| + io.write <<-STUB + # -*- encoding: utf-8 -*- + # stub: stub_v ruby lib +@@ -245,7 +245,7 @@ def stub_without_version + + def stub_with_extension + spec = File.join @gemhome, 'specifications', 'stub_e-2.gemspec' +- open spec, 'w' do |io| ++ File.open spec, 'w' do |io| + io.write <<-STUB + # -*- encoding: utf-8 -*- + # stub: stub_e 2 ruby lib +@@ -271,7 +271,7 @@ def stub_with_extension + + def stub_without_extension + spec = File.join @gemhome, 'specifications', 'stub-2.gemspec' +- open spec, 'w' do |io| ++ File.open spec, 'w' do |io| + io.write <<-STUB + # -*- encoding: utf-8 -*- + # stub: stub 2 ruby lib +diff --git test/rubygems/test_gem_util.rb test/rubygems/test_gem_util.rb +index b85db44d51..3b7887d931 100644 +--- test/rubygems/test_gem_util.rb ++++ test/rubygems/test_gem_util.rb +@@ -5,6 +5,7 @@ + class TestGemUtil < Gem::TestCase + + def test_class_popen ++ skip "MJIT executes process and it's caught by Process.wait(-1)" if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? + assert_equal "0\n", Gem::Util.popen(Gem.ruby, '-e', 'p 0') + + assert_raises Errno::ECHILD do +@@ -29,6 +30,30 @@ def test_traverse_parents + loop { break if enum.next.nil? } # exhaust the enumerator + end + ++ def test_traverse_parents_does_not_crash_on_permissions_error ++ skip 'skipped on MS Windows (chmod has no effect)' if win_platform? ++ ++ FileUtils.mkdir_p 'd/e/f' ++ # remove 'execute' permission from "e" directory and make it ++ # impossible to cd into it and its children ++ FileUtils.chmod(0666, 'd/e') ++ ++ paths = Gem::Util.traverse_parents('d/e/f').to_a ++ ++ assert_equal File.join(@tempdir, 'd'), paths[0] ++ assert_equal @tempdir, paths[1] ++ if File.respond_to?(:realpath) ++ assert_equal File.realpath(Dir.tmpdir), paths[2] ++ assert_equal File.realpath("..", Dir.tmpdir), paths[3] ++ elsif RUBY_PLATFORM !~ /darwin/ ++ assert_equal Dir.tmpdir, paths[2] ++ assert_equal '/', paths[3] ++ end ++ ensure ++ # restore default permissions, allow the directory to be removed ++ FileUtils.chmod(0775, 'd/e') unless win_platform? ++ end ++ + def test_linked_list_find + list = [1,2,3,4,5].inject(Gem::List.new(0)) { |m,o| + Gem::List.new o, m +diff --git test/rubygems/test_gem_version.rb test/rubygems/test_gem_version.rb +index 56c818663e..792ad5f084 100644 +--- test/rubygems/test_gem_version.rb ++++ test/rubygems/test_gem_version.rb +@@ -2,6 +2,8 @@ + require 'rubygems/test_case' + require "rubygems/version" + ++require "minitest/benchmark" ++ + class TestGemVersion < Gem::TestCase + + class V < ::Gem::Version +@@ -102,6 +104,15 @@ def test_initialize_invalid + end + end + ++ def bench_anchored_version_pattern ++ assert_performance_linear 0.5 do |count| ++ version_string = count.times.map {|i| "0" * i.succ }.join(".") << "." ++ version_string =~ Gem::Version::ANCHORED_VERSION_PATTERN ++ end ++ rescue RegexpError ++ skip "It fails to allocate the memory for regex pattern of Gem::Version::ANCHORED_VERSION_PATTERN" ++ end ++ + def test_empty_version + ["", " ", " "].each do |empty| + assert_equal "0", Gem::Version.new(empty).version +diff --git test/rubygems/test_require.rb test/rubygems/test_require.rb +index a846f46833..e292ce226d 100644 +--- test/rubygems/test_require.rb ++++ test/rubygems/test_require.rb +@@ -38,18 +38,6 @@ def assert_require(path) + assert require(path), "'#{path}' was already required" + end + +- def append_latch spec +- dir = spec.gem_dir +- Dir.chdir dir do +- spec.files.each do |file| +- File.open file, 'a' do |fp| +- fp.puts "FILE_ENTERED_LATCH.release" +- fp.puts "FILE_EXIT_LATCH.await" +- end +- end +- end +- end +- + # Providing -I on the commandline should always beat gems + def test_dash_i_beats_gems + a1 = new_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb" +@@ -80,6 +68,17 @@ def test_dash_i_beats_gems + Object.send :remove_const, :HELLO if Object.const_defined? :HELLO + end + ++ def create_sync_thread ++ Thread.new do ++ begin ++ yield ++ ensure ++ FILE_ENTERED_LATCH.release ++ FILE_EXIT_LATCH.await ++ end ++ end ++ end ++ + def test_concurrent_require + skip 'deadlock' if /^1\.8\./ =~ RUBY_VERSION + +@@ -91,11 +90,8 @@ def test_concurrent_require + + install_specs a1, b1 + +- append_latch a1 +- append_latch b1 +- +- t1 = Thread.new { assert_require 'a' } +- t2 = Thread.new { assert_require 'b' } ++ t1 = create_sync_thread{ assert_require 'a' } ++ t2 = create_sync_thread{ assert_require 'b' } + + # wait until both files are waiting on the exit latch + FILE_ENTERED_LATCH.await +@@ -106,10 +102,8 @@ def test_concurrent_require + assert t1.join, "thread 1 should exit" + assert t2.join, "thread 2 should exit" + ensure +- return if $! # skipping +- +- Object.send :remove_const, :FILE_ENTERED_LATCH +- Object.send :remove_const, :FILE_EXIT_LATCH ++ Object.send :remove_const, :FILE_ENTERED_LATCH if Object.const_defined? :FILE_ENTERED_LATCH ++ Object.send :remove_const, :FILE_EXIT_LATCH if Object.const_defined? :FILE_EXIT_LATCH + end + + def test_require_is_not_lazy_with_exact_req From 43a2b51955378d28bfe5f61b3507705f8c4adbb9 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Sat, 24 Feb 2018 18:59:36 +0100 Subject: [PATCH 272/530] Rebuild with new LDFLAGS from redhat-rpm-config --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index cfd0407..46f4b13 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 89 +%global release 90 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1077,6 +1077,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Sat Feb 24 2018 Florian Weimer - 2.5.0-90 +- Rebuild with new LDFLAGS from redhat-rpm-config + * Wed Feb 23 2018 Pavel Valena - 2.5.0-89 - Fix: Multiple vulnerabilities in RubyGems https://bugzilla.redhat.com/show_bug.cgi?id=1547431 From a3207ebb169bacb722745448c114f015d63cd25c Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Sat, 24 Feb 2018 19:11:02 +0100 Subject: [PATCH 273/530] Use --with-setjmp-type=setjmp on aarch64 to work around gcc issue (#1545239) --- ruby.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.spec b/ruby.spec index 46f4b13..de3dd83 100644 --- a/ruby.spec +++ b/ruby.spec @@ -569,6 +569,9 @@ autoconf --with-ruby-version='' \ --enable-multiarch \ --with-prelude=./abrt_prelude.rb \ +%ifarch aarch64 + --with-setjmp-type=setjmp \ +%endif # Q= makes the build output more verbose and allows to check Fedora # compiler options. @@ -1079,6 +1082,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Sat Feb 24 2018 Florian Weimer - 2.5.0-90 - Rebuild with new LDFLAGS from redhat-rpm-config +- Use --with-setjmp-type=setjmp on aarch64 to work around gcc issue (#1545239) * Wed Feb 23 2018 Pavel Valena - 2.5.0-89 - Fix: Multiple vulnerabilities in RubyGems From 7395ebdf85b168839e51f00c0d4c53935ab9beb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 28 Feb 2018 16:32:04 +0100 Subject: [PATCH 274/530] Save some release number. --- ruby.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index de3dd83..d6e46da 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 90 +%global release 89 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1080,11 +1080,11 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog -* Sat Feb 24 2018 Florian Weimer - 2.5.0-90 +* Sat Feb 24 2018 Florian Weimer - 2.5.0-89 - Rebuild with new LDFLAGS from redhat-rpm-config - Use --with-setjmp-type=setjmp on aarch64 to work around gcc issue (#1545239) -* Wed Feb 23 2018 Pavel Valena - 2.5.0-89 +* Wed Feb 21 2018 Pavel Valena - 2.5.0-89 - Fix: Multiple vulnerabilities in RubyGems https://bugzilla.redhat.com/show_bug.cgi?id=1547431 https://www.ruby-lang.org/en/news/2018/02/17/multiple-vulnerabilities-in-rubygems/ From 3733c3cf5d09c23c21f9355582846f272d3288ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 1 Mar 2018 12:17:04 +0100 Subject: [PATCH 275/530] Revert "Add GMP dependency." This causes issues with building other ruby packages, since it would force every package to depend on gmp-devel. Reverting this until this gets resolved upstream: https://bugs.ruby-lang.org/issues/14422#note-6 This reverts commit 5624addc78a1a8b4a4d5dd31d76624249ce3a46d. --- ruby.spec | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index d6e46da..493da79 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 89 +%global release 90 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -65,7 +65,6 @@ %bcond_without systemtap %bcond_without git %bcond_without cmake -%bcond_without gmp %if 0%{?fedora} %bcond_without hardening_test @@ -159,7 +158,6 @@ Recommends: rubygem(openssl) >= %{openssl_version} BuildRequires: autoconf BuildRequires: gdbm-devel -%{?with_hardening_test:BuildRequires: gmp-devel} BuildRequires: libffi-devel BuildRequires: openssl-devel BuildRequires: libyaml-devel @@ -1080,6 +1078,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Thu Mar 01 2018 Vít Ondruch - 2.5.0-90 +- Drop GMP dependency. + * Sat Feb 24 2018 Florian Weimer - 2.5.0-89 - Rebuild with new LDFLAGS from redhat-rpm-config - Use --with-setjmp-type=setjmp on aarch64 to work around gcc issue (#1545239) From d452ecad11c98658bf4b2c6a046cc6efd9f1f9ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 1 Mar 2018 16:50:10 +0100 Subject: [PATCH 276/530] Disable SIGSEV handler tests. SIGSEV does not provide correct output on AArch64. https://bugs.ruby-lang.org/issues/13758 --- ruby.spec | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ruby.spec b/ruby.spec index 493da79..41f5520 100644 --- a/ruby.spec +++ b/ruby.spec @@ -754,6 +754,12 @@ DISABLE_TESTS="" # Once seen: http://koji.fedoraproject.org/koji/taskinfo?taskID=12556650 DISABLE_TESTS="$DISABLE_TESTS -x test_fork.rb" +# SIGSEV handler does not provide correct output on AArch64. +# https://bugs.ruby-lang.org/issues/13758 +%ifarch aarch64 +DISABLE_TESTS="$DISABLE_TESTS -n !/test_segv_\(setproctitle\|test\)/" +%endif + # Disable failing TestResolvMDNS#test_mdns_each_address test, # which fails on Koji. # https://bugs.ruby-lang.org/issues/14175 From ae56326d8dc8d90a3523521b758ffee05567f3dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 5 Mar 2018 15:18:47 +0100 Subject: [PATCH 277/530] Don't force libraries used to build Ruby to its dependencies. This, for example, allows to build Ruby against GMP, but doesn't force libraries using Ruby to depend on GMP as well. --- ruby.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 41f5520..52de795 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 90 +%global release 91 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -148,6 +148,9 @@ Patch13: ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1547431 # https://www.ruby-lang.org/en/news/2018/02/17/multiple-vulnerabilities-in-rubygems/ Patch14: rubygems-2.5.0-multiple-vulnerabilities.patch +# Don't force libraries used to build Ruby to its dependencies. +# https://bugs.ruby-lang.org/issues/14422 +Patch15: ruby-2.6.0-library-options-to-MAINLIBS.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -535,6 +538,7 @@ rm -rf ext/fiddle/libffi* %patch12 -p1 %patch13 -p1 %patch14 -p0 +%patch15 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1084,6 +1088,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Mon Mar 05 2018 Vít Ondruch - 2.5.0-91 +- Don't force libraries used to build Ruby to its dependencies. + * Thu Mar 01 2018 Vít Ondruch - 2.5.0-90 - Drop GMP dependency. From 832679686181e0a4b997f4d7c0955790da0c46b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 5 Mar 2018 15:46:33 +0100 Subject: [PATCH 278/530] Re-enable GMP dependency. --- ruby.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ruby.spec b/ruby.spec index 52de795..c9ff8dc 100644 --- a/ruby.spec +++ b/ruby.spec @@ -65,6 +65,7 @@ %bcond_without systemtap %bcond_without git %bcond_without cmake +%bcond_without gmp %if 0%{?fedora} %bcond_without hardening_test @@ -161,6 +162,7 @@ Recommends: rubygem(openssl) >= %{openssl_version} BuildRequires: autoconf BuildRequires: gdbm-devel +%{?with_gmp:BuildRequires: gmp-devel} BuildRequires: libffi-devel BuildRequires: openssl-devel BuildRequires: libyaml-devel @@ -1090,6 +1092,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Mon Mar 05 2018 Vít Ondruch - 2.5.0-91 - Don't force libraries used to build Ruby to its dependencies. +- Re-enable GMP dependency. * Thu Mar 01 2018 Vít Ondruch - 2.5.0-90 - Drop GMP dependency. From 39d1e08dc7504dc79998eeeb13322a3ee4fdcb03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 6 Mar 2018 10:46:34 +0100 Subject: [PATCH 279/530] Disable additional SIGSEV handler test. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index c9ff8dc..67eb27c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -763,7 +763,7 @@ DISABLE_TESTS="$DISABLE_TESTS -x test_fork.rb" # SIGSEV handler does not provide correct output on AArch64. # https://bugs.ruby-lang.org/issues/13758 %ifarch aarch64 -DISABLE_TESTS="$DISABLE_TESTS -n !/test_segv_\(setproctitle\|test\)/" +DISABLE_TESTS="$DISABLE_TESTS -n !/test_segv_\(setproctitle\|test\|loaded_features\)/" %endif # Disable failing TestResolvMDNS#test_mdns_each_address test, From dcd292bb5ae7ff1e3813029a0a247dc688c6f70a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 9 Mar 2018 09:25:41 +0100 Subject: [PATCH 280/530] Add missing patch15. This patch was introduced by ae56326d8dc8d90a3523521b758ffee05567f3dc commit. --- ruby-2.6.0-library-options-to-MAINLIBS.patch | 177 +++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 ruby-2.6.0-library-options-to-MAINLIBS.patch diff --git a/ruby-2.6.0-library-options-to-MAINLIBS.patch b/ruby-2.6.0-library-options-to-MAINLIBS.patch new file mode 100644 index 0000000..7cc644f --- /dev/null +++ b/ruby-2.6.0-library-options-to-MAINLIBS.patch @@ -0,0 +1,177 @@ +From bb3db69e2a0c210cc3a63940622db96a97eb7947 Mon Sep 17 00:00:00 2001 +From: nobu +Date: Fri, 2 Mar 2018 01:37:53 +0000 +Subject: [PATCH] configure.ac: library options to MAINLIBS + +* configure.ac (MAINLIBS): moved library options for main program + and static libruby, and append MAINLIBS to LIBRUBYARG_STATIC, as + these libraries are not needed for linking to shared libruby. + [ruby-core:85882] [Bug #14422] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62627 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + configure.ac | 33 +++++++++++++++------------------ + template/ruby.pc.in | 1 + + win32/Makefile.sub | 6 ++++-- + 3 files changed, 20 insertions(+), 20 deletions(-) + +diff --git a/configure.ac b/configure.ac +index aebbae1969a5..733a0c992fd7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -10,6 +10,7 @@ AC_DISABLE_OPTION_CHECKING + AC_ARG_VAR([cflags], [additional CFLAGS]) + AC_ARG_VAR([cppflags], [additional CPPFLAGS]) + AC_ARG_VAR([cxxflags], [additional CXXFLAGS]) ++ORIG_LIBS=$LIBS + + AC_DEFUN([RUBY_RM_RECURSIVE], [ + m4_version_prereq([2.70], [-1], [ +@@ -2937,13 +2938,11 @@ AS_IF([test x"$enable_pthread" = xyes], [ + AC_DEFINE(_THREAD_SAFE) + AC_DEFINE(HAVE_LIBPTHREAD) + AC_CHECK_HEADERS(pthread_np.h, [], [], [@%:@include ]) +- AS_CASE([$pthread_lib], +- [c], [], +- [root], [], +- [c_r], [MAINLIBS="-pthread $MAINLIBS"], +- [AS_CASE(["$target_os"], +- [openbsd*|mirbsd*], [LIBS="-pthread $LIBS"], +- [LIBS="-l$pthread_lib $LIBS"])]) ++ AS_CASE(["$pthread_lib:$target_os"], ++ [c:*], [], ++ [root:*], [], ++ [c_r:*|*:openbsd*|*:mirbsd*], [LIBS="-pthread $LIBS"], ++ [LIBS="-l$pthread_lib $LIBS"]) + ], [ + AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled") + ]) +@@ -3622,7 +3621,7 @@ LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a' + LIBRUBY='$(LIBRUBY_A)' + LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static' + LIBRUBYARG='$(LIBRUBYARG_STATIC)' +-SOLIBS= ++SOLIBS='$(MAINLIBS)' + + AS_CASE(["$target_os"], + [cygwin*|mingw*|haiku*|darwin*], [ +@@ -3688,9 +3687,6 @@ AS_CASE("$enable_shared", [yes], [ + LIBRUBY_RELATIVE=no + test -z "$CCDLFLAGS" || CFLAGS="$CFLAGS $CCDLFLAGS" + ENABLE_SHARED=yes +- AS_IF([test "$rb_cv_binary_elf" = yes], [ +- SOLIBS='$(LIBS)' +- ]) + + # libdir can be overridden in config.site file (on OpenSUSE at least). + libdir_basename=lib +@@ -3725,7 +3721,6 @@ AS_CASE("$enable_shared", [yes], [ + ]) + ], + [freebsd*|dragonfly*], [ +- SOLIBS='$(LIBS)' + LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)$(MINOR)' + LIBRUBY_SONAME='$(LIBRUBY_SO)' + AS_IF([test "$rb_cv_binary_elf" != "yes" ], [ +@@ -3734,7 +3729,6 @@ AS_CASE("$enable_shared", [yes], [ + ]) + ], + [netbsd*], [ +- SOLIBS='$(LIBS)' + LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)$(MINOR)' + LIBRUBY_SO="${LIBRUBY_SONAME}"'.$(TEENY)' + RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ['-Wl,-soname,$(LIBRUBY_SONAME)' "$LDFLAGS_OPTDIR"]) +@@ -3745,11 +3739,9 @@ AS_CASE("$enable_shared", [yes], [ + ]) + ], + [openbsd*|mirbsd*], [ +- SOLIBS='$(LIBS)' + LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}` + ], + [solaris*], [ +- SOLIBS='$(LIBS)' + LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)' + LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_PROGRAM_VERSION)' + LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)' +@@ -3767,7 +3759,7 @@ AS_CASE("$enable_shared", [yes], [ + [aix*], [ + RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ["${linker_flag}-bnoentry" "$XLDFLAGS" "$LDFLAGS_OPTDIR"]) + LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}' +- SOLIBS='-lm -lc' ++ LIBS="$LIBS -lm -lc" + ], + [darwin*], [ + LIBRUBY_LDSHARED='$(CC) -dynamiclib' +@@ -3787,7 +3779,6 @@ AS_CASE("$enable_shared", [yes], [ + LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT)' + LIBRUBY_SONAME='lib$(RUBY_BASE_NAME).$(RUBY_API_VERSION).$(SOEXT)' + LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_INSTALL_NAME).$(SOEXT)' +- SOLIBS='$(LIBS)' + ], + [interix*], [ + LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)' +@@ -4030,7 +4021,6 @@ AS_CASE(["$target_os"], + ]) + LIBRUBY_ALIASES='' + FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in +- SOLIBS='$(LIBS)' + AS_IF([test x"$enable_shared" = xyes], [ + LIBRUBY='lib$(RUBY_SO_NAME).dll.a' + ], [ +@@ -4130,6 +4120,13 @@ AS_IF([test "${universal_binary-no}" = yes ], [ + [rb_cv_architecture_available=yes], [rb_cv_architecture_available=no])) + ]) + ++MAINLIBS="$LIBS" ++LIBS=$ORIG_LIBS ++AS_IF([test -n "${LIBS}"], [ ++ libspat=`echo "${LIBS}" | sed 's/[[][|.*$^]]/\\&/g;s/^ */ /;s/^ *$/ /'` ++ MAINFLAGS=`echo " $MAINLIBS " | sed "s|$libspat"'||;s/^ *//;s/ *$//'` ++]) ++LIBRUBYARG_STATIC="${LIBRUBYARG_STATIC} \$(MAINLIBS)" + CPPFLAGS="$CPPFLAGS "'$(DEFS)' + test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}' + AS_IF([test -n "${cflags+set}"], [ +diff --git a/template/ruby.pc.in b/template/ruby.pc.in +index d874f92c3b20..7ce4461c05df 100644 +--- a/template/ruby.pc.in ++++ b/template/ruby.pc.in +@@ -39,6 +39,7 @@ sitehdrdir=@sitehdrdir@ + rubyarchhdrdir=@rubyarchhdrdir@ + vendorarchhdrdir=@vendorarchhdrdir@ + sitearchhdrdir=@sitearchhdrdir@ ++MAINLIBS=@MAINLIBS@ + SOEXT=@SOEXT@ + LIBPATH=@LIBPATH@ + LIBRUBY_A=@LIBRUBY_A@ +diff --git a/win32/Makefile.sub b/win32/Makefile.sub +index 8673c121641e..f8316cccb68e 100644 +--- a/win32/Makefile.sub ++++ b/win32/Makefile.sub +@@ -279,6 +279,7 @@ MJIT_DEBUGFLAGS = $(DEBUGFLAGS) + CPPFLAGS = $(DEFS) $(ARCHDEFS) $(CPPFLAGS) + + DLDFLAGS = $(LDFLAGS) -dll ++MAINLIBS = $(LIBS) + SOLIBS = + RCFILES = $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc + !ifndef RCFLAGS +@@ -821,7 +822,8 @@ s,@CPPFLAGS@,$(CPPFLAGS),;t t + s,@CXXFLAGS@,$(CXXFLAGS),;t t + s,@FFLAGS@,$(FFLAGS),;t t + s,@LDFLAGS@,$(LDFLAGS),;t t +-s,@LIBS@,$(LIBS),;t t ++s,@LIBS@,,;t t ++s,@MAINLIBS@,$(MAINLIBS),;t t + s,@exec_prefix@,$${prefix},;t t + s,@prefix@,$(prefix),;t t + s,@program_transform_name@,s,.*,$(PROGRAM_PREFIX)&$(PROGRAM_SUFFIX),,;t t +@@ -909,7 +911,7 @@ s,@LIBRUBY_SO@,$$(RUBY_SO_NAME).dll,;t t + s,@LIBRUBY_ALIASES@,$(LIBRUBY_ALIASES),;t t + s,@LIBRUBY@,$$(RUBY_SO_NAME).lib,;t t + s,@LIBRUBYARG@,$$(LIBRUBYARG_SHARED),;t t +-s,@LIBRUBYARG_STATIC@,$$(LIBRUBY_A),;t t ++s,@LIBRUBYARG_STATIC@,$$(LIBRUBY_A) $$(MAINLIBS),;t t + s,@LIBRUBYARG_SHARED@,$$(LIBRUBY),;t t + s,@SOLIBS@,$(SOLIBS),;t t + s,@DLDLIBS@,$(DLDLIBS),;t t From 793a1c36126fe96e3dbe8457685b7570b839022d Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Thu, 29 Mar 2018 15:25:06 +0200 Subject: [PATCH 281/530] Update to Ruby 2.5.1. --- ...-additional-preludes-by-configuratio.patch | 2 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 +- ruby-2.3.0-ruby_version.patch | 6 +- ruby-2.5.0-Disable-Tokyo-TZ-tests.patch | 30 - ruby-2.5.0-parse.y-assignable_error.patch | 80 - ...5.0-st.c-retry-operations-if-rebuilt.patch | 602 ----- ...-test-failures-Kiritimati-and-Lisbon.patch | 115 + ruby-2.6.0-library-options-to-MAINLIBS.patch | 20 +- ruby.spec | 30 +- rubygems-2.5.0-multiple-vulnerabilities.patch | 2349 ----------------- sources | 2 +- 14 files changed, 143 insertions(+), 3103 deletions(-) delete mode 100644 ruby-2.5.0-Disable-Tokyo-TZ-tests.patch delete mode 100644 ruby-2.5.0-parse.y-assignable_error.patch delete mode 100644 ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch create mode 100644 ruby-2.5.1-TestTimeTZ-test-failures-Kiritimati-and-Lisbon.patch delete mode 100644 rubygems-2.5.0-multiple-vulnerabilities.patch diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index 66cb565..47bf9bc 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -39,7 +39,7 @@ diff --git a/configure.ac b/configure.ac index 028ef7ca3e..cdeff87871 100644 --- a/configure.ac +++ b/configure.ac -@@ -4395,6 +4395,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -4396,6 +4396,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 41444c5..36ec460 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 11fc237552..b77e88fc37 100644 --- a/configure.ac +++ b/configure.ac -@@ -3640,6 +3640,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3641,6 +3641,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index bdc074d..d0cffab 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index 999e2d6d5d..11fc237552 100644 --- a/configure.ac +++ b/configure.ac -@@ -4250,7 +4250,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4251,7 +4251,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 4864741..555ad45 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index b77e88fc37..6bba453e3c 100644 --- a/configure.ac +++ b/configure.ac -@@ -4314,6 +4314,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4315,6 +4315,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index cc55c4a..cc45741 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.ac b/configure.ac index 6bba453e3c..028ef7ca3e 100644 --- a/configure.ac +++ b/configure.ac -@@ -4286,6 +4286,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4287,6 +4287,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 6bba453e3c..028ef7ca3e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4310,6 +4314,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4311,6 +4315,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 5e24003..8f57319 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 8ea969412f..a00f2b6776 100644 --- a/configure.ac +++ b/configure.ac -@@ -4201,9 +4201,6 @@ AS_CASE(["$target_os"], +@@ -4202,9 +4202,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 8ea969412f..a00f2b6776 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -4226,56 +4223,62 @@ AC_ARG_WITH(ridir, +@@ -4227,56 +4224,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 8ea969412f..a00f2b6776 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4292,6 +4295,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4293,6 +4296,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl diff --git a/ruby-2.5.0-Disable-Tokyo-TZ-tests.patch b/ruby-2.5.0-Disable-Tokyo-TZ-tests.patch deleted file mode 100644 index 01632eb..0000000 --- a/ruby-2.5.0-Disable-Tokyo-TZ-tests.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb -index 20a57fe7dd..5b9e5a8bde 100644 ---- a/test/ruby/test_time_tz.rb -+++ b/test/ruby/test_time_tz.rb -@@ -126,8 +126,8 @@ def test_asia_singapore - - def test_asia_tokyo - with_tz(tz="Asia/Tokyo") { -- assert_time_constructor(tz, "1951-05-06 03:00:00 +1000", :local, [1951,5,6,2,0,0]) -- assert_time_constructor(tz, "1951-05-06 03:59:59 +1000", :local, [1951,5,6,2,59,59]) -+# assert_time_constructor(tz, "1951-05-06 03:00:00 +1000", :local, [1951,5,6,2,0,0]) -+# assert_time_constructor(tz, "1951-05-06 03:59:59 +1000", :local, [1951,5,6,2,59,59]) - assert_time_constructor(tz, "2010-06-10 06:13:28 +0900", :local, [2010,6,10,6,13,28]) - } - end -@@ -329,10 +329,10 @@ def self.gen_zdump_test(data) - Asia/Singapore Sun Aug 8 16:30:00 1965 UTC = Mon Aug 9 00:00:00 1965 SGT isdst=0 gmtoff=27000 - Asia/Singapore Thu Dec 31 16:29:59 1981 UTC = Thu Dec 31 23:59:59 1981 SGT isdst=0 gmtoff=27000 - Asia/Singapore Thu Dec 31 16:30:00 1981 UTC = Fri Jan 1 00:30:00 1982 SGT isdst=0 gmtoff=28800 --Asia/Tokyo Sat May 5 16:59:59 1951 UTC = Sun May 6 01:59:59 1951 JST isdst=0 gmtoff=32400 --Asia/Tokyo Sat May 5 17:00:00 1951 UTC = Sun May 6 03:00:00 1951 JDT isdst=1 gmtoff=36000 --Asia/Tokyo Fri Sep 7 15:59:59 1951 UTC = Sat Sep 8 01:59:59 1951 JDT isdst=1 gmtoff=36000 --Asia/Tokyo Fri Sep 7 16:00:00 1951 UTC = Sat Sep 8 01:00:00 1951 JST isdst=0 gmtoff=32400 -+#Asia/Tokyo Sat May 5 16:59:59 1951 UTC = Sun May 6 01:59:59 1951 JST isdst=0 gmtoff=32400 -+#Asia/Tokyo Sat May 5 17:00:00 1951 UTC = Sun May 6 03:00:00 1951 JDT isdst=1 gmtoff=36000 -+#Asia/Tokyo Fri Sep 7 15:59:59 1951 UTC = Sat Sep 8 01:59:59 1951 JDT isdst=1 gmtoff=36000 -+#Asia/Tokyo Fri Sep 7 16:00:00 1951 UTC = Sat Sep 8 01:00:00 1951 JST isdst=0 gmtoff=32400 - America/St_Johns Sun Mar 11 03:30:59 2007 UTC = Sun Mar 11 00:00:59 2007 NST isdst=0 gmtoff=-12600 - America/St_Johns Sun Mar 11 03:31:00 2007 UTC = Sun Mar 11 01:01:00 2007 NDT isdst=1 gmtoff=-9000 - America/St_Johns Sun Nov 4 02:30:59 2007 UTC = Sun Nov 4 00:00:59 2007 NDT isdst=1 gmtoff=-9000 diff --git a/ruby-2.5.0-parse.y-assignable_error.patch b/ruby-2.5.0-parse.y-assignable_error.patch deleted file mode 100644 index ea7dad9..0000000 --- a/ruby-2.5.0-parse.y-assignable_error.patch +++ /dev/null @@ -1,80 +0,0 @@ -From: nobu -Date: Sun, 31 Dec 2017 11:25:38 +0000 -Subject: [PATCH] parse.y: assignable_error - -* parse.y (assignable_gen): should return valid NODE always even - on errors. [ruby-core:84565] [Bug #14261] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61523 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - parse.c | 14 ++++---------- - test/ruby/test_parse.rb | 6 ++++++ - 2 files changed, 10 insertions(+), 10 deletions(-) - -diff --git a/parse.c b/parse.c -index 08c3461f7096..c260a046dc33 100644 ---- a/parse.c -+++ b/parse.c -@@ -6593,10 +6593,6 @@ - #line 1984 "parse.y" /* yacc.c:1646 */ - { - (yyval.node) = assignable(var_field((yyvsp[0].id)), 0, &(yyloc)); -- /*%%%*/ -- if (!(yyval.node)) (yyval.node) = new_begin(0, &(yyloc)); -- /*% -- %*/ - } - #line 6598 "parse.c" /* yacc.c:1646 */ - break; -@@ -6605,10 +6601,6 @@ - #line 1992 "parse.y" /* yacc.c:1646 */ - { - (yyval.node) = assignable(var_field((yyvsp[0].id)), 0, &(yyloc)); -- /*%%%*/ -- if (!(yyval.node)) (yyval.node) = new_begin(0, &(yyloc)); -- /*% -- %*/ - } - #line 6610 "parse.c" /* yacc.c:1646 */ - break; -@@ -16034,11 +16026,13 @@ - #ifdef RIPPER - ID id = get_id(lhs); - # define assignable_result(x) (lhs) -+# define assignable_error() (lhs) - # define parser_yyerror(parser, x) (lhs = assign_error_gen(parser, lhs)) - #else - # define assignable_result(x) assignable_result0(x, location) -+# define assignable_error() new_begin(0, location) - #endif -- if (!id) return assignable_result(0); -+ if (!id) return assignable_error(); - switch (id) { - case keyword_self: - yyerror0("Can't change the value of self"); -@@ -16101,7 +16095,7 @@ - compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to set", rb_id2str(id)); - } - error: -- return assignable_result(0); -+ return assignable_error(); - #undef assignable_result - #undef parser_yyerror - } -diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb -index e26bcdc07e19..15c6245bac2e 100644 ---- a/test/ruby/test_parse.rb -+++ b/test/ruby/test_parse.rb -@@ -746,6 +746,12 @@ def foo - end - END - end -+ assert_raise(SyntaxError) do -+ eval "#{<<~"begin;"}\n#{<<~'end;'}", nil, __FILE__, __LINE__+1 -+ begin; -+ x, true -+ end; -+ end - end - - def test_block_dup diff --git a/ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch b/ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch deleted file mode 100644 index 1e8e3b6..0000000 --- a/ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch +++ /dev/null @@ -1,602 +0,0 @@ -From 4663c224fa6c925ce54af32fd1c1cbac9508f5ec Mon Sep 17 00:00:00 2001 -From: normal -Date: Tue, 13 Feb 2018 10:02:07 +0000 -Subject: [PATCH] st.c: retry operations if rebuilt - -Calling the .eql? and .hash methods during a Hash operation can -result in a thread switch or a signal handler to run: allowing -one execution context to rebuild the hash table while another is -still reading or writing the table. This results in a -use-after-free bug affecting the thread_safe-0.3.6 test suite -and likely other bugs. - -This bug did not affect users of commonly keys (String, Symbol, -Fixnum) as those are optimized to avoid method dispatch -for .eql? and .hash methods. - -A separate version of this change needs to be ported to Ruby 2.3.x -which had a different implementation of st.c but was affected -by the same bug. - -* st.c: Add comment about table rebuilding during comparison. - (DO_PTR_EQUAL_CHECK): New macro. - (REBUILT_TABLE_ENTRY_IND, REBUILT_TABLE_BIN_IND): New macros. - (find_entry, find_table_entry_ind, find_table_bin_ind): Use new - macros. Return the rebuild flag. - (find_table_bin_ptr_and_reserve): Ditto. - (st_lookup, st_get_key, st_insert, st_insert2): Retry the - operation if the table was rebuilt. - (st_general_delete, st_shift, st_update, st_general_foreach): - Ditto. - (st_rehash_linear, st_rehash_indexed): Use DO_PTR_EQUAL_CHECK. - Return the rebuild flag. - (st_rehash): Retry the operation if the table was rebuilt. - [ruby-core:85510] [Ruby trunk Bug#14357] - -Thanks to Vit Ondruch for reporting the bug. - -From: Vladimir Makarov - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62396 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - st.c | 258 ++++++++++++++++++++++++++++++++++++++++++++++++------------------- - 1 file changed, 185 insertions(+), 73 deletions(-) - -diff --git a/st.c b/st.c -index 56ae30ce47..0c52e7a2ef 100644 ---- a/st.c -+++ b/st.c -@@ -90,6 +90,11 @@ - o To save more memory we use 8-, 16-, 32- and 64- bit indexes in - bins depending on the current hash table size. - -+ o The implementation takes into account that the table can be -+ rebuilt during hashing or comparison functions. It can happen if -+ the functions are implemented in Ruby and a thread switch occurs -+ during their execution. -+ - This implementation speeds up the Ruby hash table benchmarks in - average by more 40% on Intel Haswell CPU. - -@@ -174,6 +179,15 @@ static const struct st_hash_type type_strcasehash = { - #define PTR_EQUAL(tab, ptr, hash_val, key_) \ - ((ptr)->hash == (hash_val) && EQUAL((tab), (key_), (ptr)->key)) - -+/* As PRT_EQUAL only its result is returned in RES. REBUILT_P is set -+ up to TRUE if the table is rebuilt during the comparison. */ -+#define DO_PTR_EQUAL_CHECK(tab, ptr, hash_val, key, res, rebuilt_p) \ -+ do { \ -+ unsigned int _old_rebuilds_num = (tab)->rebuilds_num; \ -+ res = PTR_EQUAL(tab, ptr, hash_val, key); \ -+ rebuilt_p = _old_rebuilds_num != (tab)->rebuilds_num; \ -+ } while (FALSE) -+ - /* Features of a table. */ - struct st_features { - /* Power of 2 used for number of allocated entries. */ -@@ -380,6 +394,11 @@ set_bin(st_index_t *bins, int s, st_index_t n, st_index_t v) - #define UNDEFINED_ENTRY_IND (~(st_index_t) 0) - #define UNDEFINED_BIN_IND (~(st_index_t) 0) - -+/* Entry and bin values returned when we found a table rebuild during -+ the search. */ -+#define REBUILT_TABLE_ENTRY_IND (~(st_index_t) 1) -+#define REBUILT_TABLE_BIN_IND (~(st_index_t) 1) -+ - /* Mark I-th bin of table TAB as corresponding to a deleted table - entry. Update number of entries in the table and number of bins - corresponding to deleted entries. */ -@@ -823,17 +842,22 @@ secondary_hash(st_index_t ind, st_table *tab, st_index_t *perterb) - - /* Find an entry with HASH_VALUE and KEY in TABLE using a linear - search. Return the index of the found entry in array `entries`. -- If it is not found, return UNDEFINED_ENTRY_IND. */ -+ If it is not found, return UNDEFINED_ENTRY_IND. If the table was -+ rebuilt during the search, return REBUILT_TABLE_ENTRY_IND. */ - static inline st_index_t - find_entry(st_table *tab, st_hash_t hash_value, st_data_t key) - { -+ int eq_p, rebuilt_p; - st_index_t i, bound; - st_table_entry *entries; - - bound = tab->entries_bound; - entries = tab->entries; - for (i = tab->entries_start; i < bound; i++) { -- if (PTR_EQUAL(tab, &entries[i], hash_value, key)) -+ DO_PTR_EQUAL_CHECK(tab, &entries[i], hash_value, key, eq_p, rebuilt_p); -+ if (EXPECT(rebuilt_p, 0)) -+ return REBUILT_TABLE_ENTRY_IND; -+ if (eq_p) - return i; - } - return UNDEFINED_ENTRY_IND; -@@ -845,10 +869,12 @@ find_entry(st_table *tab, st_hash_t hash_value, st_data_t key) - /*#define QUADRATIC_PROBE*/ - - /* Return index of entry with HASH_VALUE and KEY in table TAB. If -- there is no such entry, return UNDEFINED_ENTRY_IND. */ -+ there is no such entry, return UNDEFINED_ENTRY_IND. If the table -+ was rebuilt during the search, return REBUILT_TABLE_ENTRY_IND. */ - static st_index_t - find_table_entry_ind(st_table *tab, st_hash_t hash_value, st_data_t key) - { -+ int eq_p, rebuilt_p; - st_index_t ind; - #ifdef QUADRATIC_PROBE - st_index_t d; -@@ -869,10 +895,13 @@ find_table_entry_ind(st_table *tab, st_hash_t hash_value, st_data_t key) - FOUND_BIN; - for (;;) { - bin = get_bin(tab->bins, get_size_ind(tab), ind); -- if (! EMPTY_OR_DELETED_BIN_P(bin) -- && PTR_EQUAL(tab, &entries[bin - ENTRY_BASE], hash_value, key)) -- break; -- else if (EMPTY_BIN_P(bin)) -+ if (! EMPTY_OR_DELETED_BIN_P(bin)) { -+ DO_PTR_EQUAL_CHECK(tab, &entries[bin - ENTRY_BASE], hash_value, key, eq_p, rebuilt_p); -+ if (EXPECT(rebuilt_p, 0)) -+ return REBUILT_TABLE_ENTRY_IND; -+ if (eq_p) -+ break; -+ } else if (EMPTY_BIN_P(bin)) - return UNDEFINED_ENTRY_IND; - #ifdef QUADRATIC_PROBE - ind = hash_bin(ind + d, tab); -@@ -887,10 +916,12 @@ find_table_entry_ind(st_table *tab, st_hash_t hash_value, st_data_t key) - - /* Find and return index of table TAB bin corresponding to an entry - with HASH_VALUE and KEY. If there is no such bin, return -- UNDEFINED_BIN_IND. */ -+ UNDEFINED_BIN_IND. If the table was rebuilt during the search, -+ return REBUILT_TABLE_BIN_IND. */ - static st_index_t - find_table_bin_ind(st_table *tab, st_hash_t hash_value, st_data_t key) - { -+ int eq_p, rebuilt_p; - st_index_t ind; - #ifdef QUADRATIC_PROBE - st_index_t d; -@@ -911,10 +942,13 @@ find_table_bin_ind(st_table *tab, st_hash_t hash_value, st_data_t key) - FOUND_BIN; - for (;;) { - bin = get_bin(tab->bins, get_size_ind(tab), ind); -- if (! EMPTY_OR_DELETED_BIN_P(bin) -- && PTR_EQUAL(tab, &entries[bin - ENTRY_BASE], hash_value, key)) -- break; -- else if (EMPTY_BIN_P(bin)) -+ if (! EMPTY_OR_DELETED_BIN_P(bin)) { -+ DO_PTR_EQUAL_CHECK(tab, &entries[bin - ENTRY_BASE], hash_value, key, eq_p, rebuilt_p); -+ if (EXPECT(rebuilt_p, 0)) -+ return REBUILT_TABLE_BIN_IND; -+ if (eq_p) -+ break; -+ } else if (EMPTY_BIN_P(bin)) - return UNDEFINED_BIN_IND; - #ifdef QUADRATIC_PROBE - ind = hash_bin(ind + d, tab); -@@ -955,7 +989,7 @@ find_table_bin_ind_direct(st_table *tab, st_hash_t hash_value, st_data_t key) - bin = get_bin(tab->bins, get_size_ind(tab), ind); - if (EMPTY_OR_DELETED_BIN_P(bin)) - return ind; -- st_assert (! PTR_EQUAL(tab, &entries[bin - ENTRY_BASE], hash_value, key)); -+ st_assert (entries[bin - ENTRY_BASE].hash != hash_value); - #ifdef QUADRATIC_PROBE - ind = hash_bin(ind + d, tab); - d++; -@@ -973,11 +1007,13 @@ find_table_bin_ind_direct(st_table *tab, st_hash_t hash_value, st_data_t key) - bigger entries array. Although we can reuse a deleted bin, the - result bin value is always empty if the table has no entry with - KEY. Return the entries array index of the found entry or -- UNDEFINED_ENTRY_IND if it is not found. */ -+ UNDEFINED_ENTRY_IND if it is not found. If the table was rebuilt -+ during the search, return REBUILT_TABLE_ENTRY_IND. */ - static st_index_t - find_table_bin_ptr_and_reserve(st_table *tab, st_hash_t *hash_value, - st_data_t key, st_index_t *bin_ind) - { -+ int eq_p, rebuilt_p; - st_index_t ind; - st_hash_t curr_hash_value = *hash_value; - #ifdef QUADRATIC_PROBE -@@ -1015,7 +1051,10 @@ find_table_bin_ptr_and_reserve(st_table *tab, st_hash_t *hash_value, - break; - } - else if (! DELETED_BIN_P(entry_index)) { -- if (PTR_EQUAL(tab, &entries[entry_index - ENTRY_BASE], curr_hash_value, key)) -+ DO_PTR_EQUAL_CHECK(tab, &entries[entry_index - ENTRY_BASE], curr_hash_value, key, eq_p, rebuilt_p); -+ if (EXPECT(rebuilt_p, 0)) -+ return REBUILT_TABLE_ENTRY_IND; -+ if (eq_p) - break; - } - else if (first_deleted_bin_ind == UNDEFINED_BIN_IND) -@@ -1040,13 +1079,18 @@ st_lookup(st_table *tab, st_data_t key, st_data_t *value) - st_index_t bin; - st_hash_t hash = do_hash(key, tab); - -+ retry: - if (tab->bins == NULL) { - bin = find_entry(tab, hash, key); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - if (bin == UNDEFINED_ENTRY_IND) - return 0; - } - else { - bin = find_table_entry_ind(tab, hash, key); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - if (bin == UNDEFINED_ENTRY_IND) - return 0; - bin -= ENTRY_BASE; -@@ -1064,13 +1108,18 @@ st_get_key(st_table *tab, st_data_t key, st_data_t *result) - st_index_t bin; - st_hash_t hash = do_hash(key, tab); - -+ retry: - if (tab->bins == NULL) { - bin = find_entry(tab, hash, key); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - if (bin == UNDEFINED_ENTRY_IND) - return 0; - } - else { - bin = find_table_entry_ind(tab, hash, key); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - if (bin == UNDEFINED_ENTRY_IND) - return 0; - bin -= ENTRY_BASE; -@@ -1104,10 +1153,13 @@ st_insert(st_table *tab, st_data_t key, st_data_t value) - st_index_t bin_ind; - int new_p; - -- rebuild_table_if_necessary(tab); - hash_value = do_hash(key, tab); -+ retry: -+ rebuild_table_if_necessary(tab); - if (tab->bins == NULL) { - bin = find_entry(tab, hash_value, key); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - new_p = bin == UNDEFINED_ENTRY_IND; - if (new_p) - tab->num_entries++; -@@ -1116,6 +1168,8 @@ st_insert(st_table *tab, st_data_t key, st_data_t value) - else { - bin = find_table_bin_ptr_and_reserve(tab, &hash_value, - key, &bin_ind); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - new_p = bin == UNDEFINED_ENTRY_IND; - bin -= ENTRY_BASE; - } -@@ -1192,10 +1246,13 @@ st_insert2(st_table *tab, st_data_t key, st_data_t value, - st_index_t bin_ind; - int new_p; - -- rebuild_table_if_necessary (tab); - hash_value = do_hash(key, tab); -+ retry: -+ rebuild_table_if_necessary (tab); - if (tab->bins == NULL) { - bin = find_entry(tab, hash_value, key); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - new_p = bin == UNDEFINED_ENTRY_IND; - if (new_p) - tab->num_entries++; -@@ -1204,6 +1261,8 @@ st_insert2(st_table *tab, st_data_t key, st_data_t value, - else { - bin = find_table_bin_ptr_and_reserve(tab, &hash_value, - key, &bin_ind); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - new_p = bin == UNDEFINED_ENTRY_IND; - bin -= ENTRY_BASE; - } -@@ -1212,7 +1271,6 @@ st_insert2(st_table *tab, st_data_t key, st_data_t value, - check = tab->rebuilds_num; - key = (*func)(key); - st_assert(check == tab->rebuilds_num); -- st_assert(do_hash(key, tab) == hash_value); - ind = tab->entries_bound++; - entry = &tab->entries[ind]; - entry->hash = hash_value; -@@ -1220,6 +1278,7 @@ st_insert2(st_table *tab, st_data_t key, st_data_t value, - entry->record = value; - if (bin_ind != UNDEFINED_BIN_IND) - set_bin(tab->bins, get_size_ind(tab), bin_ind, ind + ENTRY_BASE); -+ st_assert(do_hash(key, tab) == hash_value); - #ifdef ST_DEBUG - st_check(tab); - #endif -@@ -1281,8 +1340,11 @@ st_general_delete(st_table *tab, st_data_t *key, st_data_t *value) - - st_assert(tab != NULL); - hash = do_hash(*key, tab); -+ retry: - if (tab->bins == NULL) { - bin = find_entry(tab, hash, *key); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - if (bin == UNDEFINED_ENTRY_IND) { - if (value != 0) *value = 0; - return 0; -@@ -1290,6 +1352,8 @@ st_general_delete(st_table *tab, st_data_t *key, st_data_t *value) - } - else { - bin_ind = find_table_bin_ind(tab, hash, *key); -+ if (EXPECT(bin_ind == REBUILT_TABLE_BIN_IND, 0)) -+ goto retry; - if (bin_ind == UNDEFINED_BIN_IND) { - if (value != 0) *value = 0; - return 0; -@@ -1344,21 +1408,33 @@ st_shift(st_table *tab, st_data_t *key, st_data_t *value) - for (i = tab->entries_start; i < bound; i++) { - curr_entry_ptr = &entries[i]; - if (! DELETED_ENTRY_P(curr_entry_ptr)) { -+ st_hash_t entry_hash = curr_entry_ptr->hash; -+ st_data_t entry_key = curr_entry_ptr->key; -+ - if (value != 0) *value = curr_entry_ptr->record; -- *key = curr_entry_ptr->key; -+ *key = entry_key; -+ retry: - if (tab->bins == NULL) { -- bin = find_entry(tab, curr_entry_ptr->hash, curr_entry_ptr->key); -+ bin = find_entry(tab, entry_hash, entry_key); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) { -+ entries = tab->entries; -+ goto retry; -+ } - st_assert(bin != UNDEFINED_ENTRY_IND); -- st_assert(&entries[bin] == curr_entry_ptr); -+ curr_entry_ptr = &entries[bin]; - } - else { -- bin_ind = find_table_bin_ind(tab, curr_entry_ptr->hash, -- curr_entry_ptr->key); -+ bin_ind = find_table_bin_ind(tab, entry_hash, entry_key); -+ if (EXPECT(bin_ind == REBUILT_TABLE_BIN_IND, 0)) { -+ entries = tab->entries; -+ goto retry; -+ } - st_assert(bin_ind != UNDEFINED_BIN_IND); -- st_assert(&entries[get_bin(tab->bins, get_size_ind(tab), bin_ind) -- - ENTRY_BASE] == curr_entry_ptr); -+ curr_entry_ptr = &entries[get_bin(tab->bins, get_size_ind(tab), bin_ind) -+ - ENTRY_BASE]; - MARK_BIN_DELETED(tab, bin_ind); - } -+ st_assert(entry_hash != curr_entry_ptr->hash && entry_key == curr_entry_ptr->key); - MARK_ENTRY_DELETED(curr_entry_ptr); - tab->num_entries--; - update_range_for_deleted(tab, i); -@@ -1402,15 +1478,20 @@ st_update(st_table *tab, st_data_t key, - int retval, existing; - st_hash_t hash = do_hash(key, tab); - -+ retry: - entries = tab->entries; - if (tab->bins == NULL) { - bin = find_entry(tab, hash, key); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - existing = bin != UNDEFINED_ENTRY_IND; - entry = &entries[bin]; - bin_ind = UNDEFINED_BIN_IND; - } - else { - bin_ind = find_table_bin_ind(tab, hash, key); -+ if (EXPECT(bin_ind == REBUILT_TABLE_BIN_IND, 0)) -+ goto retry; - existing = bin_ind != UNDEFINED_BIN_IND; - if (existing) { - bin = get_bin(tab->bins, get_size_ind(tab), bin_ind) - ENTRY_BASE; -@@ -1489,14 +1570,19 @@ st_general_foreach(st_table *tab, int (*func)(ANYARGS), st_data_t arg, - hash = curr_entry_ptr->hash; - retval = (*func)(key, curr_entry_ptr->record, arg, 0); - if (rebuilds_num != tab->rebuilds_num) { -+ retry: - entries = tab->entries; - packed_p = tab->bins == NULL; - if (packed_p) { - i = find_entry(tab, hash, key); -+ if (EXPECT(i == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - error_p = i == UNDEFINED_ENTRY_IND; - } - else { - i = find_table_entry_ind(tab, hash, key); -+ if (EXPECT(i == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto retry; - error_p = i == UNDEFINED_ENTRY_IND; - i -= ENTRY_BASE; - } -@@ -1512,36 +1598,44 @@ st_general_foreach(st_table *tab, int (*func)(ANYARGS), st_data_t arg, - } - switch (retval) { - case ST_CONTINUE: -- break; -+ break; - case ST_CHECK: -- if (check_p) -- break; -+ if (check_p) -+ break; - case ST_STOP: - #ifdef ST_DEBUG -- st_check(tab); --#endif -- return 0; -- case ST_DELETE: -- if (packed_p) { -- bin = find_entry(tab, hash, curr_entry_ptr->key); -- if (bin == UNDEFINED_ENTRY_IND) -- break; -- } -- else { -- bin_ind = find_table_bin_ind(tab, hash, curr_entry_ptr->key); -- if (bin_ind == UNDEFINED_BIN_IND) -- break; -- bin = get_bin(tab->bins, get_size_ind(tab), bin_ind) - ENTRY_BASE; -- MARK_BIN_DELETED(tab, bin_ind); -- } -- st_assert(&entries[bin] == curr_entry_ptr); -- MARK_ENTRY_DELETED(curr_entry_ptr); -- tab->num_entries--; -- update_range_for_deleted(tab, bin); -+ st_check(tab); -+#endif -+ return 0; -+ case ST_DELETE: { -+ st_data_t key = curr_entry_ptr->key; -+ -+ again: -+ if (packed_p) { -+ bin = find_entry(tab, hash, key); -+ if (EXPECT(bin == REBUILT_TABLE_ENTRY_IND, 0)) -+ goto again; -+ if (bin == UNDEFINED_ENTRY_IND) -+ break; -+ } -+ else { -+ bin_ind = find_table_bin_ind(tab, hash, key); -+ if (EXPECT(bin_ind == REBUILT_TABLE_BIN_IND, 0)) -+ goto again; -+ if (bin_ind == UNDEFINED_BIN_IND) -+ break; -+ bin = get_bin(tab->bins, get_size_ind(tab), bin_ind) - ENTRY_BASE; -+ MARK_BIN_DELETED(tab, bin_ind); -+ } -+ curr_entry_ptr = &entries[bin]; -+ MARK_ENTRY_DELETED(curr_entry_ptr); -+ tab->num_entries--; -+ update_range_for_deleted(tab, bin); - #ifdef ST_DEBUG -- st_check(tab); -+ st_check(tab); - #endif -- break; -+ break; -+ } - } - } - #ifdef ST_DEBUG -@@ -2015,10 +2109,12 @@ st_expand_table(st_table *tab, st_index_t siz) - free(tmp); - } - --/* Rehash using linear search. */ --static void -+/* Rehash using linear search. Return TRUE if we found that the table -+ was rebuilt. */ -+static int - st_rehash_linear(st_table *tab) - { -+ int eq_p, rebuilt_p; - st_index_t i, j; - st_table_entry *p, *q; - if (tab->bins) { -@@ -2033,7 +2129,10 @@ st_rehash_linear(st_table *tab) - q = &tab->entries[j]; - if (DELETED_ENTRY_P(q)) - continue; -- if (PTR_EQUAL(tab, p, q->hash, q->key)) { -+ DO_PTR_EQUAL_CHECK(tab, p, q->hash, q->key, eq_p, rebuilt_p); -+ if (EXPECT(rebuilt_p, 0)) -+ return TRUE; -+ if (eq_p) { - st_assert(p < q); - *p = *q; - MARK_ENTRY_DELETED(q); -@@ -2042,12 +2141,15 @@ st_rehash_linear(st_table *tab) - } - } - } -+ return FALSE; - } - --/* Rehash using index */ --static void -+/* Rehash using index. Return TRUE if we found that the table was -+ rebuilt. */ -+static int - st_rehash_indexed(st_table *tab) - { -+ int eq_p, rebuilt_p; - st_index_t i; - st_index_t const n = bins_size(tab); - unsigned int const size_ind = get_size_ind(tab); -@@ -2076,26 +2178,32 @@ st_rehash_indexed(st_table *tab) - set_bin(bins, size_ind, ind, i + ENTRY_BASE); - break; - } -- else if (PTR_EQUAL(tab, q, p->hash, p->key)) { -- /* duplicated key; delete it */ -- st_assert(q < p); -- q->record = p->record; -- MARK_ENTRY_DELETED(p); -- tab->num_entries--; -- update_range_for_deleted(tab, bin); -- break; -- } - else { -- /* hash collision; skip it */ -+ DO_PTR_EQUAL_CHECK(tab, q, p->hash, p->key, eq_p, rebuilt_p); -+ if (EXPECT(rebuilt_p, 0)) -+ return TRUE; -+ if (eq_p) { -+ /* duplicated key; delete it */ -+ st_assert(q < p); -+ q->record = p->record; -+ MARK_ENTRY_DELETED(p); -+ tab->num_entries--; -+ update_range_for_deleted(tab, bin); -+ break; -+ } -+ else { -+ /* hash collision; skip it */ - #ifdef QUADRATIC_PROBE -- ind = hash_bin(ind + d, tab); -- d++; -+ ind = hash_bin(ind + d, tab); -+ d++; - #else -- ind = secondary_hash(ind, tab, &peterb); -+ ind = secondary_hash(ind, tab, &peterb); - #endif -- } -+ } -+ } - } - } -+ return FALSE; - } - - /* Reconstruct TAB's bins according to TAB's entries. This function -@@ -2104,10 +2212,14 @@ st_rehash_indexed(st_table *tab) - static void - st_rehash(st_table *tab) - { -- if (tab->bin_power <= MAX_POWER2_FOR_TABLES_WITHOUT_BINS) -- st_rehash_linear(tab); -- else -- st_rehash_indexed(tab); -+ int rebuilt_p; -+ -+ do { -+ if (tab->bin_power <= MAX_POWER2_FOR_TABLES_WITHOUT_BINS) -+ rebuilt_p = st_rehash_linear(tab); -+ else -+ rebuilt_p = st_rehash_indexed(tab); -+ } while (rebuilt_p); - } - - #ifdef RUBY --- -2.16.1 - diff --git a/ruby-2.5.1-TestTimeTZ-test-failures-Kiritimati-and-Lisbon.patch b/ruby-2.5.1-TestTimeTZ-test-failures-Kiritimati-and-Lisbon.patch new file mode 100644 index 0000000..fa5ad3e --- /dev/null +++ b/ruby-2.5.1-TestTimeTZ-test-failures-Kiritimati-and-Lisbon.patch @@ -0,0 +1,115 @@ +From 584b5929f9b769c4d0b03e322a9fddf2b2dd3454 Mon Sep 17 00:00:00 2001 +From: nobu +Date: Sun, 1 Apr 2018 13:02:11 +0000 +Subject: [PATCH] test_time_tz.rb: Kiritimati tzdata fix + +* test/ruby/test_time_tz.rb (gen_zdump_test): fix the expected + data at the Kiritimati's skip of New Year's Eve 1994. + [Bug #14655] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63055 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + test/ruby/test_time_tz.rb | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb +index dfe139033ed3..ac5f81892878 100644 +--- a/test/ruby/test_time_tz.rb ++++ b/test/ruby/test_time_tz.rb +@@ -364,9 +364,18 @@ def self.gen_zdump_test(data) + Europe/London Sun Aug 10 01:00:00 1947 UTC = Sun Aug 10 02:00:00 1947 BST isdst=1 gmtoff=3600 + Europe/London Sun Nov 2 01:59:59 1947 UTC = Sun Nov 2 02:59:59 1947 BST isdst=1 gmtoff=3600 + Europe/London Sun Nov 2 02:00:00 1947 UTC = Sun Nov 2 02:00:00 1947 GMT isdst=0 gmtoff=0 ++End ++ if CORRECT_KIRITIMATI_SKIP_1994 ++ gen_zdump_test <<'End' ++Pacific/Kiritimati Sat Dec 31 09:59:59 1994 UTC = Fri Dec 30 23:59:59 1994 LINT isdst=0 gmtoff=-36000 ++Pacific/Kiritimati Sat Dec 31 10:00:00 1994 UTC = Sun Jan 1 00:00:00 1995 LINT isdst=0 gmtoff=50400 ++End ++ else ++ gen_zdump_test <<'End' + Pacific/Kiritimati Sun Jan 1 09:59:59 1995 UTC = Sat Dec 31 23:59:59 1994 LINT isdst=0 gmtoff=-36000 + Pacific/Kiritimati Sun Jan 1 10:00:00 1995 UTC = Mon Jan 2 00:00:00 1995 LINT isdst=0 gmtoff=50400 + End ++ end + gen_zdump_test <<'End' if has_right_tz + right/America/Los_Angeles Fri Jun 30 23:59:60 1972 UTC = Fri Jun 30 16:59:60 1972 PDT isdst=1 gmtoff=-25200 + right/America/Los_Angeles Wed Dec 31 23:59:60 2008 UTC = Wed Dec 31 15:59:60 2008 PST isdst=0 gmtoff=-28800 +-- + +From 2965c2d4df78e6f5acf8759f84c88ce14a4e70f1 Mon Sep 17 00:00:00 2001 +From: nobu +Date: Sun, 1 Apr 2018 02:00:36 +0000 +Subject: [PATCH] test_time_tz.rb: Kiritimati tzdata fix + +* test/ruby/test_time_tz.rb (TestTimeTZ#test_pacific_kiritimati): + fix the expected data at the skip of New Year's Eve 1994. + [Bug #14655] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + test/ruby/test_time_tz.rb | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb +index 39b830d28a3d..dfe139033ed3 100644 +--- a/test/ruby/test_time_tz.rb ++++ b/test/ruby/test_time_tz.rb +@@ -89,6 +89,9 @@ def group_by(e, &block) + Time.local(1951, 5, 6, 1, 0, 0).dst? # DST with fixed tzdata + end + } ++ CORRECT_KIRITIMATI_SKIP_1994 = with_tz("Pacific/Kiritimati") { ++ Time.local(1994, 12, 31, 0, 0, 0).year == 1995 ++ } + + def time_to_s(t) + t.to_s +@@ -178,9 +181,17 @@ def test_europe_lisbon + + def test_pacific_kiritimati + with_tz(tz="Pacific/Kiritimati") { +- assert_time_constructor(tz, "1994-12-31 23:59:59 -1000", :local, [1994,12,31,23,59,59]) +- assert_time_constructor(tz, "1995-01-02 00:00:00 +1400", :local, [1995,1,1,0,0,0]) +- assert_time_constructor(tz, "1995-01-02 23:59:59 +1400", :local, [1995,1,1,23,59,59]) ++ assert_time_constructor(tz, "1994-12-30 00:00:00 -1000", :local, [1994,12,30,0,0,0]) ++ assert_time_constructor(tz, "1994-12-30 23:59:59 -1000", :local, [1994,12,30,23,59,59]) ++ if CORRECT_KIRITIMATI_SKIP_1994 ++ assert_time_constructor(tz, "1995-01-01 00:00:00 +1400", :local, [1994,12,31,0,0,0]) ++ assert_time_constructor(tz, "1995-01-01 23:59:59 +1400", :local, [1994,12,31,23,59,59]) ++ assert_time_constructor(tz, "1995-01-01 00:00:00 +1400", :local, [1995,1,1,0,0,0]) ++ else ++ assert_time_constructor(tz, "1994-12-31 23:59:59 -1000", :local, [1994,12,31,23,59,59]) ++ assert_time_constructor(tz, "1995-01-02 00:00:00 +1400", :local, [1995,1,1,0,0,0]) ++ assert_time_constructor(tz, "1995-01-02 23:59:59 +1400", :local, [1995,1,1,23,59,59]) ++ end + assert_time_constructor(tz, "1995-01-02 00:00:00 +1400", :local, [1995,1,2,0,0,0]) + } + end +-- + +From a0e6607a8172f9eaf9a15f03065736deb2035771 Mon Sep 17 00:00:00 2001 +From: nobu +Date: Sun, 1 Apr 2018 13:16:14 +0000 +Subject: [PATCH] test_time_tz.rb: Lisbon tzdata fix + +* test/ruby/test_time_tz.rb (gen_variational_zdump_test): Update + Lisbon zdump data, which fixed the 1912-01-01 transition for + Portugual and its colonies. [Bug #14655] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63056 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + test/ruby/test_time_tz.rb | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb +index ac5f81892878..b32caff9c539 100644 +--- a/test/ruby/test_time_tz.rb ++++ b/test/ruby/test_time_tz.rb +@@ -434,5 +434,6 @@ def self.gen_variational_zdump_test(hint, data) + gen_variational_zdump_test "lisbon", <<'End' if has_lisbon_tz + Europe/Lisbon Mon Jan 1 00:36:31 1912 UTC = Sun Dec 31 23:59:59 1911 LMT isdst=0 gmtoff=-2192 + Europe/Lisbon Mon Jan 1 00:36:44 1912 UT = Sun Dec 31 23:59:59 1911 LMT isdst=0 gmtoff=-2205 ++Europe/Lisbon Sun Dec 31 23:59:59 1911 UT = Sun Dec 31 23:23:14 1911 LMT isdst=0 gmtoff=-2205 + End + end diff --git a/ruby-2.6.0-library-options-to-MAINLIBS.patch b/ruby-2.6.0-library-options-to-MAINLIBS.patch index 7cc644f..199798d 100644 --- a/ruby-2.6.0-library-options-to-MAINLIBS.patch +++ b/ruby-2.6.0-library-options-to-MAINLIBS.patch @@ -27,7 +27,7 @@ index aebbae1969a5..733a0c992fd7 100644 AC_DEFUN([RUBY_RM_RECURSIVE], [ m4_version_prereq([2.70], [-1], [ -@@ -2937,13 +2938,11 @@ AS_IF([test x"$enable_pthread" = xyes], [ +@@ -2938,13 +2939,11 @@ AS_IF([test x"$enable_pthread" = xyes], [ AC_DEFINE(_THREAD_SAFE) AC_DEFINE(HAVE_LIBPTHREAD) AC_CHECK_HEADERS(pthread_np.h, [], [], [@%:@include ]) @@ -46,7 +46,7 @@ index aebbae1969a5..733a0c992fd7 100644 ], [ AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled") ]) -@@ -3622,7 +3621,7 @@ LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a' +@@ -3623,7 +3622,7 @@ LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a' LIBRUBY='$(LIBRUBY_A)' LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static' LIBRUBYARG='$(LIBRUBYARG_STATIC)' @@ -55,7 +55,7 @@ index aebbae1969a5..733a0c992fd7 100644 AS_CASE(["$target_os"], [cygwin*|mingw*|haiku*|darwin*], [ -@@ -3688,9 +3687,6 @@ AS_CASE("$enable_shared", [yes], [ +@@ -3689,9 +3688,6 @@ AS_CASE("$enable_shared", [yes], [ LIBRUBY_RELATIVE=no test -z "$CCDLFLAGS" || CFLAGS="$CFLAGS $CCDLFLAGS" ENABLE_SHARED=yes @@ -65,7 +65,7 @@ index aebbae1969a5..733a0c992fd7 100644 # libdir can be overridden in config.site file (on OpenSUSE at least). libdir_basename=lib -@@ -3725,7 +3721,6 @@ AS_CASE("$enable_shared", [yes], [ +@@ -3726,7 +3722,6 @@ AS_CASE("$enable_shared", [yes], [ ]) ], [freebsd*|dragonfly*], [ @@ -73,7 +73,7 @@ index aebbae1969a5..733a0c992fd7 100644 LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)$(MINOR)' LIBRUBY_SONAME='$(LIBRUBY_SO)' AS_IF([test "$rb_cv_binary_elf" != "yes" ], [ -@@ -3734,7 +3729,6 @@ AS_CASE("$enable_shared", [yes], [ +@@ -3735,7 +3730,6 @@ AS_CASE("$enable_shared", [yes], [ ]) ], [netbsd*], [ @@ -81,7 +81,7 @@ index aebbae1969a5..733a0c992fd7 100644 LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)$(MINOR)' LIBRUBY_SO="${LIBRUBY_SONAME}"'.$(TEENY)' RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ['-Wl,-soname,$(LIBRUBY_SONAME)' "$LDFLAGS_OPTDIR"]) -@@ -3745,11 +3739,9 @@ AS_CASE("$enable_shared", [yes], [ +@@ -3746,11 +3740,9 @@ AS_CASE("$enable_shared", [yes], [ ]) ], [openbsd*|mirbsd*], [ @@ -93,7 +93,7 @@ index aebbae1969a5..733a0c992fd7 100644 LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)' LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_PROGRAM_VERSION)' LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)' -@@ -3767,7 +3759,7 @@ AS_CASE("$enable_shared", [yes], [ +@@ -3768,7 +3760,7 @@ AS_CASE("$enable_shared", [yes], [ [aix*], [ RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ["${linker_flag}-bnoentry" "$XLDFLAGS" "$LDFLAGS_OPTDIR"]) LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}' @@ -102,7 +102,7 @@ index aebbae1969a5..733a0c992fd7 100644 ], [darwin*], [ LIBRUBY_LDSHARED='$(CC) -dynamiclib' -@@ -3787,7 +3779,6 @@ AS_CASE("$enable_shared", [yes], [ +@@ -3788,7 +3780,6 @@ AS_CASE("$enable_shared", [yes], [ LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT)' LIBRUBY_SONAME='lib$(RUBY_BASE_NAME).$(RUBY_API_VERSION).$(SOEXT)' LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_INSTALL_NAME).$(SOEXT)' @@ -110,7 +110,7 @@ index aebbae1969a5..733a0c992fd7 100644 ], [interix*], [ LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)' -@@ -4030,7 +4021,6 @@ AS_CASE(["$target_os"], +@@ -4031,7 +4022,6 @@ AS_CASE(["$target_os"], ]) LIBRUBY_ALIASES='' FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in @@ -118,7 +118,7 @@ index aebbae1969a5..733a0c992fd7 100644 AS_IF([test x"$enable_shared" = xyes], [ LIBRUBY='lib$(RUBY_SO_NAME).dll.a' ], [ -@@ -4130,6 +4120,13 @@ AS_IF([test "${universal_binary-no}" = yes ], [ +@@ -4131,6 +4121,13 @@ AS_IF([test "${universal_binary-no}" = yes ], [ [rb_cv_architecture_available=yes], [rb_cv_architecture_available=no])) ]) diff --git a/ruby.spec b/ruby.spec index 67eb27c..c86034c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 5 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 91 +%global release 92 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -136,19 +136,9 @@ Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch # Add Gem.operating_system_defaults to allow packagers to override defaults. # https://github.com/rubygems/rubygems/pull/2116 Patch10: ruby-2.5.0-Add-Gem.operating_system_defaults.patch -# Fix segfault during generating documentation. -# https://bugs.ruby-lang.org/issues/14343 -Patch11: ruby-2.5.0-parse.y-assignable_error.patch -# Recent tzdata change breaks Ruby test suite. -# https://bugs.ruby-lang.org/issues/14438 -Patch12: ruby-2.5.0-Disable-Tokyo-TZ-tests.patch -# Fix thread_safe tests suite segfaults. -# https://bugs.ruby-lang.org/issues/14357 -Patch13: ruby-2.5.0-st.c-retry-operations-if-rebuilt.patch -# Fix: Multiple vulnerabilities in RubyGems -# https://bugzilla.redhat.com/show_bug.cgi?id=1547431 -# https://www.ruby-lang.org/en/news/2018/02/17/multiple-vulnerabilities-in-rubygems/ -Patch14: rubygems-2.5.0-multiple-vulnerabilities.patch +# TestTimeTZ test failures Kiritimati and Lisbon +# https://bugs.ruby-lang.org/issues/14655 +Patch11: ruby-2.5.1-TestTimeTZ-test-failures-Kiritimati-and-Lisbon.patch # Don't force libraries used to build Ruby to its dependencies. # https://bugs.ruby-lang.org/issues/14422 Patch15: ruby-2.6.0-library-options-to-MAINLIBS.patch @@ -537,9 +527,6 @@ rm -rf ext/fiddle/libffi* %patch9 -p1 %patch10 -p1 %patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p0 %patch15 -p1 # Provide an example of usage of the tapset: @@ -756,10 +743,6 @@ make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}" DISABLE_TESTS="" -# https://bugs.ruby-lang.org/issues/11480 -# Once seen: http://koji.fedoraproject.org/koji/taskinfo?taskID=12556650 -DISABLE_TESTS="$DISABLE_TESTS -x test_fork.rb" - # SIGSEV handler does not provide correct output on AArch64. # https://bugs.ruby-lang.org/issues/13758 %ifarch aarch64 @@ -1090,6 +1073,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Thu Mar 29 2018 Pavel Valena - 2.5.1-92 +- Update to Ruby 2.5.1. + * Mon Mar 05 2018 Vít Ondruch - 2.5.0-91 - Don't force libraries used to build Ruby to its dependencies. - Re-enable GMP dependency. diff --git a/rubygems-2.5.0-multiple-vulnerabilities.patch b/rubygems-2.5.0-multiple-vulnerabilities.patch deleted file mode 100644 index e32926a..0000000 --- a/rubygems-2.5.0-multiple-vulnerabilities.patch +++ /dev/null @@ -1,2349 +0,0 @@ -diff --git lib/rubygems.rb lib/rubygems.rb -index 0475ced164..2762bfcb88 100644 ---- lib/rubygems.rb -+++ lib/rubygems.rb -@@ -10,7 +10,7 @@ - require 'thread' - - module Gem -- VERSION = "2.7.3" -+ VERSION = "2.7.6" - end - - # Must be first since it unloads the prelude from 1.9.2 -@@ -161,7 +161,7 @@ module Gem - # these are defined in Ruby 1.8.7, hence the need for this convoluted setup. - - READ_BINARY_ERRORS = begin -- read_binary_errors = [Errno::EACCES, Errno::EROFS] -+ read_binary_errors = [Errno::EACCES, Errno::EROFS, Errno::ENOSYS] - read_binary_errors << Errno::ENOTSUP if Errno.const_defined?(:ENOTSUP) - read_binary_errors - end.freeze -@@ -171,7 +171,7 @@ module Gem - # these are defined in Ruby 1.8.7. - - WRITE_BINARY_ERRORS = begin -- write_binary_errors = [] -+ write_binary_errors = [Errno::ENOSYS] - write_binary_errors << Errno::ENOTSUP if Errno.const_defined?(:ENOTSUP) - write_binary_errors - end.freeze -@@ -871,19 +871,19 @@ def self.refresh - # Safely read a file in binary mode on all platforms. - - def self.read_binary(path) -- open path, 'rb+' do |f| -+ File.open path, 'rb+' do |f| - f.flock(File::LOCK_EX) - f.read - end - rescue *READ_BINARY_ERRORS -- open path, 'rb' do |f| -+ File.open path, 'rb' do |f| - f.read - end - rescue Errno::ENOLCK # NFS - if Thread.main != Thread.current - raise - else -- open path, 'rb' do |f| -+ File.open path, 'rb' do |f| - f.read - end - end -diff --git lib/rubygems/commands/generate_index_command.rb lib/rubygems/commands/generate_index_command.rb -index 01f1f88405..0b677b73a9 100644 ---- lib/rubygems/commands/generate_index_command.rb -+++ lib/rubygems/commands/generate_index_command.rb -@@ -68,7 +68,7 @@ def execute - - if not File.exist?(options[:directory]) or - not File.directory?(options[:directory]) then -- alert_error "unknown directory name #{directory}." -+ alert_error "unknown directory name #{options[:directory]}." - terminate_interaction 1 - else - indexer = Gem::Indexer.new options.delete(:directory), options -diff --git lib/rubygems/commands/owner_command.rb lib/rubygems/commands/owner_command.rb -index 8e2271657a..637b5bdc4d 100644 ---- lib/rubygems/commands/owner_command.rb -+++ lib/rubygems/commands/owner_command.rb -@@ -64,7 +64,7 @@ def show_owners name - end - - with_response response do |resp| -- owners = YAML.load resp.body -+ owners = Gem::SafeYAML.load resp.body - - say "Owners for gem: #{name}" - owners.each do |owner| -diff --git lib/rubygems/commands/setup_command.rb lib/rubygems/commands/setup_command.rb -index 5d1414d102..6966cde01a 100644 ---- lib/rubygems/commands/setup_command.rb -+++ lib/rubygems/commands/setup_command.rb -@@ -350,7 +350,9 @@ def fake_spec.full_gem_path - def install_default_bundler_gem - return unless Gem::USE_BUNDLER_FOR_GEMDEPS - -- mkdir_p Gem::Specification.default_specifications_dir -+ specs_dir = Gem::Specification.default_specifications_dir -+ File.join(options[:destdir], specs_dir) unless Gem.win_platform? -+ mkdir_p specs_dir - - # Workaround for non-git environment. - gemspec = File.open('bundler/bundler.gemspec', 'rb'){|f| f.read.gsub(/`git ls-files -z`/, "''") } -@@ -359,23 +361,36 @@ def install_default_bundler_gem - bundler_spec = Gem::Specification.load("bundler/bundler.gemspec") - bundler_spec.files = Dir.chdir("bundler") { Dir["{*.md,{lib,exe,man}/**/*}"] } - bundler_spec.executables -= %w[bundler bundle_ruby] -- Dir.entries(Gem::Specification.default_specifications_dir). -+ -+ # Remove bundler-*.gemspec in default specification directory. -+ Dir.entries(specs_dir). - select {|gs| gs.start_with?("bundler-") }. -- each {|gs| File.delete(File.join(Gem::Specification.default_specifications_dir, gs)) } -+ each {|gs| File.delete(File.join(specs_dir, gs)) } - -- default_spec_path = File.join(Gem::Specification.default_specifications_dir, "#{bundler_spec.full_name}.gemspec") -+ default_spec_path = File.join(specs_dir, "#{bundler_spec.full_name}.gemspec") - Gem.write_binary(default_spec_path, bundler_spec.to_ruby) - - bundler_spec = Gem::Specification.load(default_spec_path) - -+ # Remove gemspec that was same version of vendored bundler. -+ normal_gemspec = File.join(Gem.default_dir, "specifications", "bundler-#{bundler_spec.version}.gemspec") -+ if File.file? normal_gemspec -+ File.delete normal_gemspec -+ end -+ -+ # Remove gem files that were same version of vendored bundler. - if File.directory? bundler_spec.gems_dir - Dir.entries(bundler_spec.gems_dir). -- select {|default_gem| File.basename(default_gem).match(/^bundler-#{Gem::Version::VERSION_PATTERN}$/) }. -+ select {|default_gem| File.basename(default_gem) == "bundler-#{bundler_spec.version}" }. - each {|default_gem| rm_r File.join(bundler_spec.gems_dir, default_gem) } - end - -- mkdir_p bundler_spec.bin_dir -- bundler_spec.executables.each {|e| cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_spec.bin_dir, e) } -+ bundler_bin_dir = File.join(Gem.default_dir, 'gems', bundler_spec.full_name, bundler_spec.bindir) -+ File.join(options[:destdir], bundler_bin_dir) unless Gem.win_platform? -+ mkdir_p bundler_bin_dir -+ bundler_spec.executables.each do |e| -+ cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_bin_dir, e) -+ end - - if Gem.win_platform? - require 'rubygems/installer' -diff --git lib/rubygems/commands/unpack_command.rb lib/rubygems/commands/unpack_command.rb -index eb7f550673..b873f20d28 100644 ---- lib/rubygems/commands/unpack_command.rb -+++ lib/rubygems/commands/unpack_command.rb -@@ -94,7 +94,7 @@ def execute - - spec_file = File.basename spec.spec_file - -- open spec_file, 'w' do |io| -+ File.open spec_file, 'w' do |io| - io.write metadata - end - else -@@ -176,7 +176,7 @@ def get_metadata path, security_policy = nil - - metadata = nil - -- open path, Gem.binary_mode do |io| -+ File.open path, Gem.binary_mode do |io| - tar = Gem::Package::TarReader.new io - tar.each_entry do |entry| - case entry.full_name -diff --git lib/rubygems/config_file.rb lib/rubygems/config_file.rb -index a4efed0f5a..c0d19dbfc2 100644 ---- lib/rubygems/config_file.rb -+++ lib/rubygems/config_file.rb -@@ -458,7 +458,7 @@ def to_yaml # :nodoc: - - # Writes out this config file, replacing its source. - def write -- open config_file_name, 'w' do |io| -+ File.open config_file_name, 'w' do |io| - io.write to_yaml - end - end -diff --git lib/rubygems/ext/builder.rb lib/rubygems/ext/builder.rb -index a1619c97d7..eb9db199d5 100644 ---- lib/rubygems/ext/builder.rb -+++ lib/rubygems/ext/builder.rb -@@ -212,7 +212,7 @@ def write_gem_make_out output # :nodoc: - - FileUtils.mkdir_p @spec.extension_dir - -- open destination, 'wb' do |io| io.puts output end -+ File.open destination, 'wb' do |io| io.puts output end - - destination - end -diff --git lib/rubygems/indexer.rb lib/rubygems/indexer.rb -index 871cc09d8d..3ea994414b 100644 ---- lib/rubygems/indexer.rb -+++ lib/rubygems/indexer.rb -@@ -2,6 +2,7 @@ - require 'rubygems' - require 'rubygems/package' - require 'time' -+require 'tmpdir' - - begin - gem 'builder' -@@ -64,7 +65,7 @@ def initialize(directory, options = {}) - @build_modern = options[:build_modern] - - @dest_directory = directory -- @directory = File.join(Dir.tmpdir, "gem_generate_index_#{$$}") -+ @directory = Dir.mktmpdir 'gem_generate_index' - - marshal_name = "Marshal.#{Gem.marshal_version}" - -@@ -123,7 +124,7 @@ def build_marshal_gemspecs specs - marshal_name = File.join @quick_marshal_dir, spec_file_name - - marshal_zipped = Gem.deflate Marshal.dump(spec) -- open marshal_name, 'wb' do |io| io.write marshal_zipped end -+ File.open marshal_name, 'wb' do |io| io.write marshal_zipped end - - files << marshal_name - -@@ -261,7 +262,7 @@ def compress(filename, extension) - - zipped = Gem.deflate data - -- open "#{filename}.#{extension}", 'wb' do |io| -+ File.open "#{filename}.#{extension}", 'wb' do |io| - io.write zipped - end - end -@@ -427,7 +428,7 @@ def update_specs_index(index, source, dest) - - specs_index = compact_specs specs_index.uniq.sort - -- open dest, 'wb' do |io| -+ File.open dest, 'wb' do |io| - Marshal.dump specs_index, io - end - end -diff --git lib/rubygems/installer.rb lib/rubygems/installer.rb -index 0cbca0791b..ee5fedeb64 100644 ---- lib/rubygems/installer.rb -+++ lib/rubygems/installer.rb -@@ -206,7 +206,7 @@ def check_executable_overwrite filename # :nodoc: - ruby_executable = false - existing = nil - -- open generated_bin, 'rb' do |io| -+ File.open generated_bin, 'rb' do |io| - next unless io.gets =~ /^#!/ # shebang - io.gets # blankline - -@@ -427,7 +427,7 @@ def default_spec_file - # specifications directory. - - def write_spec -- open spec_file, 'w' do |file| -+ File.open spec_file, 'w' do |file| - spec.installed_by_version = Gem.rubygems_version - - file.puts spec.to_ruby_for_cache -@@ -464,7 +464,12 @@ def generate_windows_script(filename, bindir) - def generate_bin # :nodoc: - return if spec.executables.nil? or spec.executables.empty? - -- Dir.mkdir @bin_dir unless File.exist? @bin_dir -+ begin -+ Dir.mkdir @bin_dir -+ rescue SystemCallError -+ raise unless File.directory? @bin_dir -+ end -+ - raise Gem::FilePermissionError.new(@bin_dir) unless File.writable? @bin_dir - - spec.executables.each do |filename| -@@ -863,7 +868,7 @@ def write_build_info_file - - build_info_file = File.join build_info_dir, "#{spec.full_name}.info" - -- open build_info_file, 'w' do |io| -+ File.open build_info_file, 'w' do |io| - @build_args.each do |arg| - io.puts arg - end -diff --git lib/rubygems/package.rb lib/rubygems/package.rb -index 77811ed5ec..b924122827 100644 ---- lib/rubygems/package.rb -+++ lib/rubygems/package.rb -@@ -219,7 +219,7 @@ def add_files tar # :nodoc: - next unless stat.file? - - tar.add_file_simple file, stat.mode, stat.size do |dst_io| -- open file, 'rb' do |src_io| -+ File.open file, 'rb' do |src_io| - dst_io.write src_io.read 16384 until src_io.eof? - end - end -@@ -378,9 +378,9 @@ def extract_tar_gz io, destination_dir, pattern = "*" # :nodoc: - File.dirname destination - end - -- FileUtils.mkdir_p mkdir, mkdir_options -+ mkdir_p_safe mkdir, mkdir_options, destination_dir, entry.full_name - -- open destination, 'wb' do |out| -+ File.open destination, 'wb' do |out| - out.write entry.read - FileUtils.chmod entry.header.mode, destination - end if entry.file? -@@ -416,20 +416,35 @@ def install_location filename, destination_dir # :nodoc: - raise Gem::Package::PathError.new(filename, destination_dir) if - filename.start_with? '/' - -- destination_dir = File.realpath destination_dir if -- File.respond_to? :realpath -+ destination_dir = realpath destination_dir - destination_dir = File.expand_path destination_dir - - destination = File.join destination_dir, filename - destination = File.expand_path destination - - raise Gem::Package::PathError.new(destination, destination_dir) unless -- destination.start_with? destination_dir -+ destination.start_with? destination_dir + '/' - - destination.untaint - destination - end - -+ def mkdir_p_safe mkdir, mkdir_options, destination_dir, file_name -+ destination_dir = realpath File.expand_path(destination_dir) -+ parts = mkdir.split(File::SEPARATOR) -+ parts.reduce do |path, basename| -+ path = realpath path unless path == "" -+ path = File.expand_path(path + File::SEPARATOR + basename) -+ lstat = File.lstat path rescue nil -+ if !lstat || !lstat.directory? -+ unless path.start_with? destination_dir and (FileUtils.mkdir path, mkdir_options rescue false) -+ raise Gem::Package::PathError.new(file_name, destination_dir) -+ end -+ end -+ path -+ end -+ end -+ - ## - # Loads a Gem::Specification from the TarEntry +entry+ - -@@ -603,6 +618,10 @@ def verify_files gem - raise Gem::Package::FormatError.new \ - 'package content (data.tar.gz) is missing', @gem - end -+ -+ if duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first) and duplicates.any? -+ raise Gem::Security::Exception, "duplicate files in the package: (#{duplicates.map(&:inspect).join(', ')})" -+ end - end - - ## -@@ -616,6 +635,16 @@ def verify_gz entry # :nodoc: - raise Gem::Package::FormatError.new(e.message, entry.full_name) - end - -+ if File.respond_to? :realpath -+ def realpath file -+ File.realpath file -+ end -+ else -+ def realpath file -+ file -+ end -+ end -+ - end - - require 'rubygems/package/digest_io' -diff --git lib/rubygems/package/file_source.rb lib/rubygems/package/file_source.rb -index 1a4dc4c824..ecc3a68677 100644 ---- lib/rubygems/package/file_source.rb -+++ lib/rubygems/package/file_source.rb -@@ -23,11 +23,11 @@ def present? - end - - def with_write_io &block -- open path, 'wb', &block -+ File.open path, 'wb', &block - end - - def with_read_io &block -- open path, 'rb', &block -+ File.open path, 'rb', &block - end - - end -diff --git lib/rubygems/package/old.rb lib/rubygems/package/old.rb -index f6e6e67c38..322d682ca8 100644 ---- lib/rubygems/package/old.rb -+++ lib/rubygems/package/old.rb -@@ -80,7 +80,7 @@ def extract_files destination_dir - - FileUtils.mkdir_p File.dirname destination - -- open destination, 'wb', entry['mode'] do |out| -+ File.open destination, 'wb', entry['mode'] do |out| - out.write file_data - end - -diff --git lib/rubygems/package/tar_header.rb lib/rubygems/package/tar_header.rb -index c54bd14d57..d557357114 100644 ---- lib/rubygems/package/tar_header.rb -+++ lib/rubygems/package/tar_header.rb -@@ -104,25 +104,30 @@ def self.from(stream) - fields = header.unpack UNPACK_FORMAT - - new :name => fields.shift, -- :mode => fields.shift.oct, -- :uid => fields.shift.oct, -- :gid => fields.shift.oct, -- :size => fields.shift.oct, -- :mtime => fields.shift.oct, -- :checksum => fields.shift.oct, -+ :mode => strict_oct(fields.shift), -+ :uid => strict_oct(fields.shift), -+ :gid => strict_oct(fields.shift), -+ :size => strict_oct(fields.shift), -+ :mtime => strict_oct(fields.shift), -+ :checksum => strict_oct(fields.shift), - :typeflag => fields.shift, - :linkname => fields.shift, - :magic => fields.shift, -- :version => fields.shift.oct, -+ :version => strict_oct(fields.shift), - :uname => fields.shift, - :gname => fields.shift, -- :devmajor => fields.shift.oct, -- :devminor => fields.shift.oct, -+ :devmajor => strict_oct(fields.shift), -+ :devminor => strict_oct(fields.shift), - :prefix => fields.shift, - - :empty => empty - end - -+ def self.strict_oct(str) -+ return str.oct if str =~ /\A[0-7]*\z/ -+ raise ArgumentError, "#{str.inspect} is not an octal string" -+ end -+ - ## - # Creates a new TarHeader using +vals+ - -diff --git lib/rubygems/package/tar_writer.rb lib/rubygems/package/tar_writer.rb -index f68b8d4c5e..390f7851a3 100644 ---- lib/rubygems/package/tar_writer.rb -+++ lib/rubygems/package/tar_writer.rb -@@ -196,6 +196,8 @@ def add_file_signed name, mode, signer - digest_name == signer.digest_name - end - -+ raise "no #{signer.digest_name} in #{digests.values.compact}" unless signature_digest -+ - if signer.key then - signature = signer.sign signature_digest.digest - -diff --git lib/rubygems/request_set/lockfile.rb lib/rubygems/request_set/lockfile.rb -index 7f6eadb939..76ad17d486 100644 ---- lib/rubygems/request_set/lockfile.rb -+++ lib/rubygems/request_set/lockfile.rb -@@ -223,7 +223,7 @@ def to_s - def write - content = to_s - -- open "#{@gem_deps_file}.lock", 'w' do |io| -+ File.open "#{@gem_deps_file}.lock", 'w' do |io| - io.write content - end - end -diff --git lib/rubygems/security.rb lib/rubygems/security.rb -index 4690dd9230..236577c5a3 100644 ---- lib/rubygems/security.rb -+++ lib/rubygems/security.rb -@@ -578,7 +578,7 @@ def self.trusted_certificates &block - def self.write pemmable, path, permissions = 0600, passphrase = nil, cipher = KEY_CIPHER - path = File.expand_path path - -- open path, 'wb', permissions do |io| -+ File.open path, 'wb', permissions do |io| - if passphrase and cipher - io.write pemmable.to_pem cipher, passphrase - else -diff --git lib/rubygems/security/trust_dir.rb lib/rubygems/security/trust_dir.rb -index bf44975cc6..849cf3cd3e 100644 ---- lib/rubygems/security/trust_dir.rb -+++ lib/rubygems/security/trust_dir.rb -@@ -93,7 +93,7 @@ def trust_cert certificate - - destination = cert_path certificate - -- open destination, 'wb', @permissions[:trusted_cert] do |io| -+ File.open destination, 'wb', @permissions[:trusted_cert] do |io| - io.write certificate.to_pem - end - end -diff --git lib/rubygems/server.rb lib/rubygems/server.rb -index 93b3af36f8..62c3dfe9cf 100644 ---- lib/rubygems/server.rb -+++ lib/rubygems/server.rb -@@ -623,6 +623,18 @@ def root(req, res) - executables = nil if executables.empty? - executables.last["is_last"] = true if executables - -+ # Pre-process spec homepage for safety reasons -+ begin -+ homepage_uri = URI.parse(spec.homepage) -+ if [URI::HTTP, URI::HTTPS].member? homepage_uri.class -+ homepage_uri = spec.homepage -+ else -+ homepage_uri = "." -+ end -+ rescue URI::InvalidURIError -+ homepage_uri = "." -+ end -+ - specs << { - "authors" => spec.authors.sort.join(", "), - "date" => spec.date.to_s, -@@ -632,7 +644,7 @@ def root(req, res) - "only_one_executable" => (executables && executables.size == 1), - "full_name" => spec.full_name, - "has_deps" => !deps.empty?, -- "homepage" => spec.homepage, -+ "homepage" => homepage_uri, - "name" => spec.name, - "rdoc_installed" => Gem::RDoc.new(spec).rdoc_installed?, - "ri_installed" => Gem::RDoc.new(spec).ri_installed?, -diff --git lib/rubygems/source.rb lib/rubygems/source.rb -index bd84c217a7..b28b850660 100644 ---- lib/rubygems/source.rb -+++ lib/rubygems/source.rb -@@ -160,7 +160,7 @@ def fetch_spec name_tuple - if update_cache? then - FileUtils.mkdir_p cache_dir - -- open local_spec, 'wb' do |io| -+ File.open local_spec, 'wb' do |io| - io.write spec - end - end -diff --git lib/rubygems/specification.rb lib/rubygems/specification.rb -index efc08c4738..2560324b7a 100644 ---- lib/rubygems/specification.rb -+++ lib/rubygems/specification.rb -@@ -15,6 +15,7 @@ - require 'rubygems/stub_specification' - require 'rubygems/util/list' - require 'stringio' -+require 'uri' - - ## - # The Specification class contains the information for a Gem. Typically -@@ -2822,10 +2823,16 @@ def validate packaging = true - raise Gem::InvalidSpecificationException, "#{lazy} is not a summary" - end - -- if homepage and not homepage.empty? and -- homepage !~ /\A[a-z][a-z\d+.-]*:/i then -- raise Gem::InvalidSpecificationException, -- "\"#{homepage}\" is not a URI" -+ # Make sure a homepage is valid HTTP/HTTPS URI -+ if homepage and not homepage.empty? -+ begin -+ homepage_uri = URI.parse(homepage) -+ unless [URI::HTTP, URI::HTTPS].member? homepage_uri.class -+ raise Gem::InvalidSpecificationException, "\"#{homepage}\" is not a valid HTTP URI" -+ end -+ rescue URI::InvalidURIError -+ raise Gem::InvalidSpecificationException, "\"#{homepage}\" is not a valid HTTP URI" -+ end - end - - # Warnings -diff --git lib/rubygems/stub_specification.rb lib/rubygems/stub_specification.rb -index 8337375ab4..ae2effbc84 100644 ---- lib/rubygems/stub_specification.rb -+++ lib/rubygems/stub_specification.rb -@@ -113,6 +113,8 @@ def data - unless @data - begin - saved_lineno = $. -+ -+ # TODO It should be use `File.open`, but bundler-1.16.1 example expects Kernel#open. - open loaded_from, OPEN_MODE do |file| - begin - file.readline # discard encoding line -diff --git lib/rubygems/test_case.rb lib/rubygems/test_case.rb -index f7f216e5e3..39aa4fc9a7 100644 ---- lib/rubygems/test_case.rb -+++ lib/rubygems/test_case.rb -@@ -488,7 +488,7 @@ def git_gem name = 'a', version = 1 - - gemspec = "#{name}.gemspec" - -- open File.join(directory, gemspec), 'w' do |io| -+ File.open File.join(directory, gemspec), 'w' do |io| - io.write git_spec.to_ruby - end - -@@ -592,7 +592,7 @@ def mu_pp(obj) - # Reads a Marshal file at +path+ - - def read_cache(path) -- open path.dup.untaint, 'rb' do |io| -+ File.open path.dup.untaint, 'rb' do |io| - Marshal.load io.read - end - end -@@ -612,7 +612,7 @@ def write_file(path) - dir = File.dirname path - FileUtils.mkdir_p dir unless File.directory? dir - -- open path, 'wb' do |io| -+ File.open path, 'wb' do |io| - yield io if block_given? - end - -@@ -727,7 +727,7 @@ def install_default_gems(*specs) - install_default_specs(*specs) - - specs.each do |spec| -- open spec.loaded_from, 'w' do |io| -+ File.open spec.loaded_from, 'w' do |io| - io.write spec.to_ruby_for_cache - end - end -@@ -1363,7 +1363,7 @@ def save_gemspec name = 'a', version = 1, directory = '.' - yield specification if block_given? - end - -- open File.join(directory, "#{name}.gemspec"), 'w' do |io| -+ File.open File.join(directory, "#{name}.gemspec"), 'w' do |io| - io.write vendor_spec.to_ruby - end - -diff --git lib/rubygems/test_utilities.rb lib/rubygems/test_utilities.rb -index 686916ea02..83c9d2d0fe 100644 ---- lib/rubygems/test_utilities.rb -+++ lib/rubygems/test_utilities.rb -@@ -346,7 +346,7 @@ def spec name, version, dependencies = nil, &block - end - - def write_spec spec # :nodoc: -- open spec.spec_file, 'w' do |io| -+ File.open spec.spec_file, 'w' do |io| - io.write spec.to_ruby_for_cache - end - end -diff --git lib/rubygems/util.rb lib/rubygems/util.rb -index 2de45c900b..6c75910004 100644 ---- lib/rubygems/util.rb -+++ lib/rubygems/util.rb -@@ -114,7 +114,8 @@ def self.traverse_parents directory, &block - - here = File.expand_path directory - loop do -- Dir.chdir here, &block -+ Dir.chdir here, &block rescue Errno::EACCES -+ - new_here = File.expand_path('..', here) - return if new_here == here # toplevel - here = new_here -diff --git lib/rubygems/validator.rb lib/rubygems/validator.rb -index 83448229bb..6842e4fa9c 100644 ---- lib/rubygems/validator.rb -+++ lib/rubygems/validator.rb -@@ -34,7 +34,7 @@ def verify_gem(gem_data) - # gem_path:: [String] Path to gem file - - def verify_gem_file(gem_path) -- open gem_path, Gem.binary_mode do |file| -+ File.open gem_path, Gem.binary_mode do |file| - gem_data = file.read - verify_gem gem_data - end -@@ -109,7 +109,7 @@ def alien(gems=[]) - - good, gone, unreadable = nil, nil, nil, nil - -- open gem_path, Gem.binary_mode do |file| -+ File.open gem_path, Gem.binary_mode do |file| - package = Gem::Package.new gem_path - - good, gone = package.contents.partition { |file_name| -@@ -134,7 +134,7 @@ def alien(gems=[]) - - source = File.join gem_directory, entry['path'] - -- open source, Gem.binary_mode do |f| -+ File.open source, Gem.binary_mode do |f| - unless f.read == data then - errors[gem_name][entry['path']] = "Modified from original" - end -diff --git test/rubygems/test_gem.rb test/rubygems/test_gem.rb -index 8a11cc2ecf..183771f0f3 100644 ---- test/rubygems/test_gem.rb -+++ test/rubygems/test_gem.rb -@@ -7,7 +7,7 @@ - require 'tmpdir' - - # TODO: push this up to test_case.rb once battle tested --$SAFE=1 -+ - $LOAD_PATH.map! do |path| - path.dup.untaint - end -@@ -463,7 +463,7 @@ def test_self_ensure_gem_directories_missing_parents - assert File.directory?(util_cache_dir) - end - -- unless win_platform? then # only for FS that support write protection -+ unless win_platform? || Process.uid.zero? then # only for FS that support write protection - def test_self_ensure_gem_directories_write_protected - gemdir = File.join @tempdir, "egd" - FileUtils.rm_r gemdir rescue nil -@@ -775,7 +775,7 @@ def test_self_prefix_sitelibdir - end - - def test_self_read_binary -- open 'test', 'w' do |io| -+ File.open 'test', 'w' do |io| - io.write "\xCF\x80" - end - -@@ -1643,7 +1643,7 @@ def test_use_gemdeps - spec = Gem::Specification.find { |s| s == spec } - refute spec.activated? - -- open gem_deps_file, 'w' do |io| -+ File.open gem_deps_file, 'w' do |io| - io.write 'gem "a"' - end - -@@ -1662,7 +1662,7 @@ def test_use_gemdeps_ENV - - refute spec.activated? - -- open 'gem.deps.rb', 'w' do |io| -+ File.open 'gem.deps.rb', 'w' do |io| - io.write 'gem "a"' - end - -@@ -1706,7 +1706,7 @@ def test_use_gemdeps_automatic - - refute spec.activated? - -- open 'Gemfile', 'w' do |io| -+ File.open 'Gemfile', 'w' do |io| - io.write 'gem "a"' - end - -@@ -1735,7 +1735,7 @@ def test_use_gemdeps_disabled - - refute spec.activated? - -- open 'gem.deps.rb', 'w' do |io| -+ File.open 'gem.deps.rb', 'w' do |io| - io.write 'gem "a"' - end - -@@ -1750,7 +1750,7 @@ def test_use_gemdeps_missing_gem - skip 'Insecure operation - read' if RUBY_VERSION <= "1.8.7" - rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], 'x' - -- open 'x', 'w' do |io| -+ File.open 'x', 'w' do |io| - io.write 'gem "a"' - end - -@@ -1791,7 +1791,7 @@ def test_use_gemdeps_specific - spec = Gem::Specification.find { |s| s == spec } - refute spec.activated? - -- open 'x', 'w' do |io| -+ File.open 'x', 'w' do |io| - io.write 'gem "a"' - end - -diff --git test/rubygems/test_gem_commands_cleanup_command.rb test/rubygems/test_gem_commands_cleanup_command.rb -index c55e195975..60d208fcc0 100644 ---- test/rubygems/test_gem_commands_cleanup_command.rb -+++ test/rubygems/test_gem_commands_cleanup_command.rb -@@ -158,7 +158,7 @@ def test_execute_all_user_no_sudo - assert_path_exists @a_1_1.gem_dir - ensure - FileUtils.chmod 0755, @gemhome -- end unless win_platform? -+ end unless win_platform? || Process.uid.zero? - - def test_execute_dry_run - @cmd.options[:args] = %w[a] -diff --git test/rubygems/test_gem_commands_install_command.rb test/rubygems/test_gem_commands_install_command.rb -index dd86a85038..822d40e3f3 100644 ---- test/rubygems/test_gem_commands_install_command.rb -+++ test/rubygems/test_gem_commands_install_command.rb -@@ -131,6 +131,7 @@ def test_execute_local_transitive_prerelease - - def test_execute_no_user_install - skip 'skipped on MS Windows (chmod has no effect)' if win_platform? -+ skip 'skipped in root privilege' if Process.uid.zero? - - specs = spec_fetcher do |fetcher| - fetcher.gem 'a', 2 -diff --git test/rubygems/test_gem_commands_owner_command.rb test/rubygems/test_gem_commands_owner_command.rb -index 44652c1093..53cac4ce87 100644 ---- test/rubygems/test_gem_commands_owner_command.rb -+++ test/rubygems/test_gem_commands_owner_command.rb -@@ -43,6 +43,31 @@ def test_show_owners - assert_match %r{- 4}, @ui.output - end - -+ def test_show_owners_dont_load_objects -+ skip "testing a psych-only API" unless defined?(::Psych::DisallowedClass) -+ -+ response = < 0 -- assert Gem::Specification.find_all_by_name('x').length == 0 -+ assert Gem::Specification.find_all_by_name('x').length.zero? - end - - def test_execute_all -diff --git test/rubygems/test_gem_dependency_installer.rb test/rubygems/test_gem_dependency_installer.rb -index e55cc75682..3d76291668 100644 ---- test/rubygems/test_gem_dependency_installer.rb -+++ test/rubygems/test_gem_dependency_installer.rb -@@ -424,7 +424,7 @@ def test_install_dependency_existing_extension - extconf_rb = File.join @gemhome, 'gems', 'e-1', 'extconf.rb' - FileUtils.mkdir_p File.dirname extconf_rb - -- open extconf_rb, 'w' do |io| -+ File.open extconf_rb, 'w' do |io| - io.write <<-EXTCONF_RB - require 'mkmf' - create_makefile 'e' -diff --git test/rubygems/test_gem_doctor.rb test/rubygems/test_gem_doctor.rb -index 39b8a11692..8db65d70ce 100644 ---- test/rubygems/test_gem_doctor.rb -+++ test/rubygems/test_gem_doctor.rb -@@ -24,7 +24,7 @@ def test_doctor - - FileUtils.rm b.spec_file - -- open c.spec_file, 'w' do |io| -+ File.open c.spec_file, 'w' do |io| - io.write 'this will raise an exception when evaluated.' - end - -@@ -77,7 +77,7 @@ def test_doctor_dry_run - - FileUtils.rm b.spec_file - -- open c.spec_file, 'w' do |io| -+ File.open c.spec_file, 'w' do |io| - io.write 'this will raise an exception when evaluated.' - end - -diff --git test/rubygems/test_gem_ext_builder.rb test/rubygems/test_gem_ext_builder.rb -index d142ef28da..3dabd3e350 100644 ---- test/rubygems/test_gem_ext_builder.rb -+++ test/rubygems/test_gem_ext_builder.rb -@@ -32,7 +32,7 @@ def test_class_make - results = [] - - Dir.chdir @ext do -- open 'Makefile', 'w' do |io| -+ File.open 'Makefile', 'w' do |io| - io.puts <<-MAKEFILE - all: - \t@#{Gem.ruby} -e "puts %Q{all: \#{ENV['DESTDIR']}}" -@@ -72,7 +72,7 @@ def test_class_make_no_clean - results = [] - - Dir.chdir @ext do -- open 'Makefile', 'w' do |io| -+ File.open 'Makefile', 'w' do |io| - io.puts <<-MAKEFILE - all: - \t@#{Gem.ruby} -e "puts %Q{all: \#{ENV['DESTDIR']}}" -@@ -107,7 +107,7 @@ def test_build_extensions - - extconf_rb = File.join ext_dir, 'extconf.rb' - -- open extconf_rb, 'w' do |f| -+ File.open extconf_rb, 'w' do |f| - f.write <<-'RUBY' - require 'mkmf' - -@@ -168,7 +168,7 @@ def Gem.install_extension_in_lib - - extconf_rb = File.join ext_dir, 'extconf.rb' - -- open extconf_rb, 'w' do |f| -+ File.open extconf_rb, 'w' do |f| - f.write <<-'RUBY' - require 'mkmf' - -@@ -290,7 +290,7 @@ def test_build_extensions_with_build_args - - FileUtils.mkdir_p @spec.gem_dir - -- open File.join(@spec.gem_dir, "extconf.rb"), "w" do |f| -+ File.open File.join(@spec.gem_dir, "extconf.rb"), "w" do |f| - f.write <<-'RUBY' - puts "IN EXTCONF" - extconf_args = File.join File.dirname(__FILE__), 'extconf_args' -@@ -323,7 +323,7 @@ def test_initialize - - build_info_file = File.join build_info_dir, "#{@spec.full_name}.info" - -- open build_info_file, 'w' do |io| -+ File.open build_info_file, 'w' do |io| - io.puts '--with-foo-dir=/nonexistent' - end - -diff --git test/rubygems/test_gem_gem_runner.rb test/rubygems/test_gem_gem_runner.rb -index 0a1faa404a..d68ac4da81 100644 ---- test/rubygems/test_gem_gem_runner.rb -+++ test/rubygems/test_gem_gem_runner.rb -@@ -1,38 +1,6 @@ - # frozen_string_literal: true - require 'rubygems/test_case' --begin -- gem_home_files = lambda{ -- if Dir.exist?(ENV["GEM_HOME"]) -- require "find" -- ary = Find.find(ENV["GEM_HOME"]).to_a -- else -- [] -- end -- } -- prev_gem_home = ENV["GEM_HOME"] -- prev_gem_home_files = gem_home_files.call -- prev_threads = Thread.list.map{|e| e.inspect} -- -- require 'rubygems/gem_runner' --ensure -- if $! -- msg = < 'KEY' } - FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path - -- open Gem.configuration.credentials_path, 'w' do |f| -+ File.open Gem.configuration.credentials_path, 'w' do |f| - f.write keys.to_yaml - end - -@@ -59,7 +59,7 @@ def test_api_key_override - keys = { :rubygems_api_key => 'KEY', :other => 'OTHER' } - FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path - -- open Gem.configuration.credentials_path, 'w' do |f| -+ File.open Gem.configuration.credentials_path, 'w' do |f| - f.write keys.to_yaml - end - -@@ -163,7 +163,7 @@ def test_sign_in_with_other_credentials_doesnt_overwrite_other_keys - other_api_key = 'f46dbb18bb6a9c97cdc61b5b85c186a17403cdcbf' - - FileUtils.mkdir_p File.dirname(Gem.configuration.credentials_path) -- open Gem.configuration.credentials_path, 'w' do |f| -+ File.open Gem.configuration.credentials_path, 'w' do |f| - f.write Hash[:other_api_key, other_api_key].to_yaml - end - util_sign_in [api_key, 200, 'OK'] -diff --git test/rubygems/test_gem_indexer.rb test/rubygems/test_gem_indexer.rb -index a4a966e8de..5a9075e676 100644 ---- test/rubygems/test_gem_indexer.rb -+++ test/rubygems/test_gem_indexer.rb -@@ -39,8 +39,7 @@ def setup - - def test_initialize - assert_equal @tempdir, @indexer.dest_directory -- assert_equal File.join(Dir.tmpdir, "gem_generate_index_#{$$}"), -- @indexer.directory -+ assert_match %r{#{Dir.mktmpdir('gem_generate_index').match(/.*-/)}}, @indexer.directory - - indexer = Gem::Indexer.new @tempdir - assert indexer.build_modern -diff --git test/rubygems/test_gem_install_update_options.rb test/rubygems/test_gem_install_update_options.rb -index e2d546307d..371e408d27 100644 ---- test/rubygems/test_gem_install_update_options.rb -+++ test/rubygems/test_gem_install_update_options.rb -@@ -141,6 +141,8 @@ def test_user_install_enabled - def test_user_install_disabled_read_only - if win_platform? - skip('test_user_install_disabled_read_only test skipped on MS Windows') -+ elsif Process.uid.zero? -+ skip('test_user_install_disabled_read_only test skipped in root privilege') - else - @cmd.handle_options %w[--no-user-install] - -diff --git test/rubygems/test_gem_installer.rb test/rubygems/test_gem_installer.rb -index 39095c7dee..93b0482407 100644 ---- test/rubygems/test_gem_installer.rb -+++ test/rubygems/test_gem_installer.rb -@@ -140,7 +140,7 @@ def test_check_executable_overwrite_format_executable - s.require_path = 'lib' - end - -- open File.join(util_inst_bindir, 'executable'), 'w' do |io| -+ File.open File.join(util_inst_bindir, 'executable'), 'w' do |io| - io.write <<-EXEC - #!/usr/local/bin/ruby - # -@@ -437,6 +437,8 @@ def test_generate_bin_script_no_perms - - if win_platform? - skip('test_generate_bin_script_no_perms skipped on MS Windows') -+ elsif Process.uid.zero? -+ skip('test_generate_bin_script_no_perms skipped in root privilege') - else - FileUtils.chmod 0000, util_inst_bindir - -@@ -529,6 +531,8 @@ def test_generate_bin_symlink_no_perms - - if win_platform? - skip('test_generate_bin_symlink_no_perms skipped on MS Windows') -+ elsif Process.uid.zero? -+ skip('test_user_install_disabled_read_only test skipped in root privilege') - else - FileUtils.chmod 0000, util_inst_bindir - -diff --git test/rubygems/test_gem_package.rb test/rubygems/test_gem_package.rb -index cec1981c4c..d1664cf285 100644 ---- test/rubygems/test_gem_package.rb -+++ test/rubygems/test_gem_package.rb -@@ -24,7 +24,7 @@ def setup - end - - def test_class_new_old_format -- open 'old_format.gem', 'wb' do |io| -+ File.open 'old_format.gem', 'wb' do |io| - io.write SIMPLE_GEM - end - -@@ -45,7 +45,7 @@ def test_add_checksums - - FileUtils.mkdir 'lib' - -- open 'lib/code.rb', 'w' do |io| -+ File.open 'lib/code.rb', 'w' do |io| - io.write '# lib/code.rb' - end - -@@ -110,8 +110,8 @@ def test_add_files - - FileUtils.mkdir_p 'lib/empty' - -- open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end -- open 'lib/extra.rb', 'w' do |io| io.write '# lib/extra.rb' end -+ File.open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end -+ File.open 'lib/extra.rb', 'w' do |io| io.write '# lib/extra.rb' end - - package = Gem::Package.new 'bogus.gem' - package.spec = spec -@@ -140,7 +140,7 @@ def test_add_files_symlink - spec.files = %w[lib/code.rb lib/code_sym.rb] - - FileUtils.mkdir_p 'lib' -- open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end -+ File.open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end - - # NOTE: 'code.rb' is correct, because it's relative to lib/code_sym.rb - File.symlink('code.rb', 'lib/code_sym.rb') -@@ -179,7 +179,7 @@ def test_build - - FileUtils.mkdir 'lib' - -- open 'lib/code.rb', 'w' do |io| -+ File.open 'lib/code.rb', 'w' do |io| - io.write '# lib/code.rb' - end - -@@ -218,7 +218,7 @@ def test_build_auto_signed - - FileUtils.mkdir 'lib' - -- open 'lib/code.rb', 'w' do |io| -+ File.open 'lib/code.rb', 'w' do |io| - io.write '# lib/code.rb' - end - -@@ -261,7 +261,7 @@ def test_build_auto_signed_encrypted_key - - FileUtils.mkdir 'lib' - -- open 'lib/code.rb', 'w' do |io| -+ File.open 'lib/code.rb', 'w' do |io| - io.write '# lib/code.rb' - end - -@@ -311,7 +311,7 @@ def test_build_signed - - FileUtils.mkdir 'lib' - -- open 'lib/code.rb', 'w' do |io| -+ File.open 'lib/code.rb', 'w' do |io| - io.write '# lib/code.rb' - end - -@@ -348,7 +348,7 @@ def test_build_signed_encrypted_key - - FileUtils.mkdir 'lib' - -- open 'lib/code.rb', 'w' do |io| -+ File.open 'lib/code.rb', 'w' do |io| - io.write '# lib/code.rb' - end - -@@ -408,7 +408,7 @@ def test_extract_files_empty - end - end - -- open 'empty.gem', 'wb' do |io| -+ File.open 'empty.gem', 'wb' do |io| - io.write gem.string - end - -@@ -455,6 +455,31 @@ def test_extract_tar_gz_symlink_relative_path - File.read(extracted) - end - -+ def test_extract_symlink_parent -+ skip 'symlink not supported' if Gem.win_platform? -+ -+ package = Gem::Package.new @gem -+ -+ tgz_io = util_tar_gz do |tar| -+ tar.mkdir 'lib', 0755 -+ tar.add_symlink 'lib/link', '../..', 0644 -+ tar.add_file 'lib/link/outside.txt', 0644 do |io| io.write 'hi' end -+ end -+ -+ # Extract into a subdirectory of @destination; if this test fails it writes -+ # a file outside destination_subdir, but we want the file to remain inside -+ # @destination so it will be cleaned up. -+ destination_subdir = File.join @destination, 'subdir' -+ FileUtils.mkdir_p destination_subdir -+ -+ e = assert_raises Gem::Package::PathError do -+ package.extract_tar_gz tgz_io, destination_subdir -+ end -+ -+ assert_equal("installing into parent path lib/link/outside.txt of " + -+ "#{destination_subdir} is not allowed", e.message) -+ end -+ - def test_extract_tar_gz_directory - package = Gem::Package.new @gem - -@@ -566,6 +591,21 @@ def test_install_location_relative - "#{@destination} is not allowed", e.message) - end - -+ def test_install_location_suffix -+ package = Gem::Package.new @gem -+ -+ filename = "../#{File.basename(@destination)}suffix.rb" -+ -+ e = assert_raises Gem::Package::PathError do -+ package.install_location filename, @destination -+ end -+ -+ parent = File.expand_path File.join @destination, filename -+ -+ assert_equal("installing into parent path #{parent} of " + -+ "#{@destination} is not allowed", e.message) -+ end -+ - def test_load_spec - entry = StringIO.new Gem.gzip @spec.to_yaml - def entry.full_name() 'metadata.gz' end -@@ -620,7 +660,7 @@ def test_verify_checksum_bad - end - end - -- open 'mismatch.gem', 'wb' do |io| -+ File.open 'mismatch.gem', 'wb' do |io| - io.write gem.string - end - -@@ -670,7 +710,7 @@ def test_verify_checksum_missing - end - end - -- open 'data_checksum_missing.gem', 'wb' do |io| -+ File.open 'data_checksum_missing.gem', 'wb' do |io| - io.write gem.string - end - -@@ -723,6 +763,32 @@ def test_verify_nonexistent - assert_match %r%nonexistent.gem$%, e.message - end - -+ def test_verify_duplicate_file -+ FileUtils.mkdir_p 'lib' -+ FileUtils.touch 'lib/code.rb' -+ -+ build = Gem::Package.new @gem -+ build.spec = @spec -+ build.setup_signer -+ open @gem, 'wb' do |gem_io| -+ Gem::Package::TarWriter.new gem_io do |gem| -+ build.add_metadata gem -+ build.add_contents gem -+ -+ gem.add_file_simple 'a.sig', 0444, 0 -+ gem.add_file_simple 'a.sig', 0444, 0 -+ end -+ end -+ -+ package = Gem::Package.new @gem -+ -+ e = assert_raises Gem::Security::Exception do -+ package.verify -+ end -+ -+ assert_equal 'duplicate files in the package: ("a.sig")', e.message -+ end -+ - def test_verify_security_policy - skip 'openssl is missing' unless defined?(OpenSSL::SSL) - -@@ -773,14 +839,20 @@ def test_verify_security_policy_checksum_missing - FileUtils.mkdir 'lib' - FileUtils.touch 'lib/code.rb' - -- open @gem, 'wb' do |gem_io| -+ File.open @gem, 'wb' do |gem_io| - Gem::Package::TarWriter.new gem_io do |gem| - build.add_metadata gem - build.add_contents gem - - # write bogus data.tar.gz to foil signature - bogus_data = Gem.gzip 'hello' -- gem.add_file_simple 'data.tar.gz', 0444, bogus_data.length do |io| -+ fake_signer = Class.new do -+ def digest_name; 'SHA512'; end -+ def digest_algorithm; Digest(:SHA512); end -+ def key; 'key'; end -+ def sign(*); 'fake_sig'; end -+ end -+ gem.add_file_signed 'data2.tar.gz', 0444, fake_signer.new do |io| - io.write bogus_data - end - -@@ -804,7 +876,7 @@ def test_verify_security_policy_checksum_missing - end - - def test_verify_truncate -- open 'bad.gem', 'wb' do |io| -+ File.open 'bad.gem', 'wb' do |io| - io.write File.read(@gem, 1024) # don't care about newlines - end - -diff --git test/rubygems/test_gem_package_old.rb test/rubygems/test_gem_package_old.rb -index c15475b0c7..604981b3c1 100644 ---- test/rubygems/test_gem_package_old.rb -+++ test/rubygems/test_gem_package_old.rb -@@ -7,7 +7,7 @@ class TestGemPackageOld < Gem::TestCase - def setup - super - -- open 'old_format.gem', 'wb' do |io| -+ File.open 'old_format.gem', 'wb' do |io| - io.write SIMPLE_GEM - end - -diff --git test/rubygems/test_gem_package_tar_header.rb test/rubygems/test_gem_package_tar_header.rb -index d33877057d..43f508df45 100644 ---- test/rubygems/test_gem_package_tar_header.rb -+++ test/rubygems/test_gem_package_tar_header.rb -@@ -143,5 +143,26 @@ def test_update_checksum - assert_equal '012467', @tar_header.checksum - end - -+ def test_from_bad_octal -+ test_cases = [ -+ "00000006,44\000", # bogus character -+ "00000006789\000", # non-octal digit -+ "+0000001234\000", # positive sign -+ "-0000001000\000", # negative sign -+ "0x000123abc\000", # radix prefix -+ ] -+ -+ test_cases.each do |val| -+ header_s = @tar_header.to_s -+ # overwrite the size field -+ header_s[124, 12] = val -+ io = TempIO.new header_s -+ assert_raises ArgumentError do -+ new_header = Gem::Package::TarHeader.from io -+ end -+ io.close! if io.respond_to? :close! -+ end -+ end -+ - end - -diff --git test/rubygems/test_gem_rdoc.rb test/rubygems/test_gem_rdoc.rb -index 76ca8c45a9..0355883cb3 100644 ---- test/rubygems/test_gem_rdoc.rb -+++ test/rubygems/test_gem_rdoc.rb -@@ -223,6 +223,7 @@ def test_remove - - def test_remove_unwritable - skip 'chmod not supported' if Gem.win_platform? -+ skip 'skipped in root privilege' if Process.uid.zero? - FileUtils.mkdir_p @a.base_dir - FileUtils.chmod 0, @a.base_dir - -@@ -251,6 +252,7 @@ def test_setup - - def test_setup_unwritable - skip 'chmod not supported' if Gem.win_platform? -+ skip 'skipped in root privilege' if Process.uid.zero? - FileUtils.mkdir_p @a.doc_dir - FileUtils.chmod 0, @a.doc_dir - -diff --git test/rubygems/test_gem_remote_fetcher.rb test/rubygems/test_gem_remote_fetcher.rb -index ee5ac77717..20e34e84e1 100644 ---- test/rubygems/test_gem_remote_fetcher.rb -+++ test/rubygems/test_gem_remote_fetcher.rb -@@ -431,7 +431,7 @@ def test_download_install_dir - assert File.exist?(a1_cache_gem) - end - -- unless win_platform? # File.chmod doesn't work -+ unless win_platform? || Process.uid.zero? # File.chmod doesn't work - def test_download_local_read_only - FileUtils.mv @a1_gem, @tempdir - local_path = File.join @tempdir, @a1.file_name -diff --git test/rubygems/test_gem_request_set.rb test/rubygems/test_gem_request_set.rb -index 3a48827481..5dc6c1518d 100644 ---- test/rubygems/test_gem_request_set.rb -+++ test/rubygems/test_gem_request_set.rb -@@ -52,7 +52,7 @@ def test_install_from_gemdeps - rs = Gem::RequestSet.new - installed = [] - -- open 'gem.deps.rb', 'w' do |io| -+ File.open 'gem.deps.rb', 'w' do |io| - io.puts 'gem "a"' - io.flush - -@@ -78,7 +78,7 @@ def test_install_from_gemdeps_explain - - rs = Gem::RequestSet.new - -- open 'gem.deps.rb', 'w' do |io| -+ File.open 'gem.deps.rb', 'w' do |io| - io.puts 'gem "a"' - io.flush - -@@ -104,7 +104,7 @@ def test_install_from_gemdeps_install_dir - rs = Gem::RequestSet.new - installed = [] - -- open 'gem.deps.rb', 'w' do |io| -+ File.open 'gem.deps.rb', 'w' do |io| - io.puts 'gem "a"' - end - -@@ -128,7 +128,7 @@ def test_install_from_gemdeps_local - - rs = Gem::RequestSet.new - -- open 'gem.deps.rb', 'w' do |io| -+ File.open 'gem.deps.rb', 'w' do |io| - io.puts 'gem "a"' - io.flush - -@@ -150,7 +150,7 @@ def test_install_from_gemdeps_lockfile - rs = Gem::RequestSet.new - installed = [] - -- open 'gem.deps.rb.lock', 'w' do |io| -+ File.open 'gem.deps.rb.lock', 'w' do |io| - io.puts <<-LOCKFILE - GEM - remote: #{@gem_repo} -@@ -167,7 +167,7 @@ def test_install_from_gemdeps_lockfile - LOCKFILE - end - -- open 'gem.deps.rb', 'w' do |io| -+ File.open 'gem.deps.rb', 'w' do |io| - io.puts 'gem "b"' - end - -@@ -190,7 +190,7 @@ def test_install_from_gemdeps_version_mismatch - rs = Gem::RequestSet.new - installed = [] - -- open 'gem.deps.rb', 'w' do |io| -+ File.open 'gem.deps.rb', 'w' do |io| - io.puts <<-GEM_DEPS - gem "a" - ruby "0" -diff --git test/rubygems/test_gem_request_set_lockfile.rb test/rubygems/test_gem_request_set_lockfile.rb -index 908f97303e..7460b7efad 100644 ---- test/rubygems/test_gem_request_set_lockfile.rb -+++ test/rubygems/test_gem_request_set_lockfile.rb -@@ -31,7 +31,7 @@ def lockfile - def write_lockfile lockfile - @lock_file = File.expand_path "#{@gem_deps_file}.lock" - -- open @lock_file, 'w' do |io| -+ File.open @lock_file, 'w' do |io| - io.write lockfile - end - end -@@ -387,7 +387,7 @@ def test_to_s_git - s.add_dependency 'c', '~> 1.0' - end - -- open 'b.gemspec', 'w' do |io| -+ File.open 'b.gemspec', 'w' do |io| - io.write b.to_ruby - end - -@@ -400,7 +400,7 @@ def test_to_s_git - Dir.chdir 'c' do - c = Gem::Specification.new 'c', 1 - -- open 'c.gemspec', 'w' do |io| -+ File.open 'c.gemspec', 'w' do |io| - io.write c.to_ruby - end - -@@ -455,7 +455,7 @@ def test_write_error - - gem_deps_lock_file = "#{@gem_deps_file}.lock" - -- open gem_deps_lock_file, 'w' do |io| -+ File.open gem_deps_lock_file, 'w' do |io| - io.write 'hello' - end - -diff --git test/rubygems/test_gem_request_set_lockfile_parser.rb test/rubygems/test_gem_request_set_lockfile_parser.rb -index 9946c522d9..f3517da43a 100644 ---- test/rubygems/test_gem_request_set_lockfile_parser.rb -+++ test/rubygems/test_gem_request_set_lockfile_parser.rb -@@ -536,7 +536,7 @@ def test_parse_missing - end - - def write_lockfile lockfile -- open @lock_file, 'w' do |io| -+ File.open @lock_file, 'w' do |io| - io.write lockfile - end - end -diff --git test/rubygems/test_gem_request_set_lockfile_tokenizer.rb test/rubygems/test_gem_request_set_lockfile_tokenizer.rb -index ab506a14e6..f4aba6d94a 100644 ---- test/rubygems/test_gem_request_set_lockfile_tokenizer.rb -+++ test/rubygems/test_gem_request_set_lockfile_tokenizer.rb -@@ -295,7 +295,7 @@ def test_unget - end - - def write_lockfile lockfile -- open @lock_file, 'w' do |io| -+ File.open @lock_file, 'w' do |io| - io.write lockfile - end - end -diff --git test/rubygems/test_gem_resolver_git_specification.rb test/rubygems/test_gem_resolver_git_specification.rb -index 9e8e2c5715..211757eb20 100644 ---- test/rubygems/test_gem_resolver_git_specification.rb -+++ test/rubygems/test_gem_resolver_git_specification.rb -@@ -70,7 +70,7 @@ def test_install_extension - Dir.chdir 'git/a' do - FileUtils.mkdir_p 'ext/lib' - -- open 'ext/extconf.rb', 'w' do |io| -+ File.open 'ext/extconf.rb', 'w' do |io| - io.puts 'require "mkmf"' - io.puts 'create_makefile "a"' - end -diff --git test/rubygems/test_gem_server.rb test/rubygems/test_gem_server.rb -index 6fe02e480f..a018e65512 100644 ---- test/rubygems/test_gem_server.rb -+++ test/rubygems/test_gem_server.rb -@@ -100,7 +100,7 @@ def test_latest_specs_gemdirs - specs_dir = File.join dir, 'specifications' - FileUtils.mkdir_p specs_dir - -- open File.join(specs_dir, spec.spec_name), 'w' do |io| -+ File.open File.join(specs_dir, spec.spec_name), 'w' do |io| - io.write spec.to_ruby - end - -@@ -198,7 +198,7 @@ def test_quick_gemdirs - - FileUtils.mkdir_p specs_dir - -- open File.join(specs_dir, spec.spec_name), 'w' do |io| -+ File.open File.join(specs_dir, spec.spec_name), 'w' do |io| - io.write spec.to_ruby - end - -@@ -339,7 +339,7 @@ def test_root_gemdirs - specs_dir = File.join dir, 'specifications' - FileUtils.mkdir_p specs_dir - -- open File.join(specs_dir, spec.spec_name), 'w' do |io| -+ File.open File.join(specs_dir, spec.spec_name), 'w' do |io| - io.write spec.to_ruby - end - -@@ -353,6 +353,171 @@ def test_root_gemdirs - assert_match 'z 9', @res.body - end - -+ -+ def test_xss_homepage_fix_289313 -+ data = StringIO.new "GET / HTTP/1.0\r\n\r\n" -+ dir = "#{@gemhome}2" -+ -+ spec = util_spec 'xsshomepagegem', 1 -+ spec.homepage = "javascript:confirm(document.domain)" -+ -+ specs_dir = File.join dir, 'specifications' -+ FileUtils.mkdir_p specs_dir -+ -+ open File.join(specs_dir, spec.spec_name), 'w' do |io| -+ io.write spec.to_ruby -+ end -+ -+ server = Gem::Server.new dir, process_based_port, false -+ -+ @req.parse data -+ -+ server.root @req, @res -+ -+ assert_equal 200, @res.status -+ assert_match 'xsshomepagegem 1', @res.body -+ -+ # This verifies that the homepage for this spec is not displayed and is set to ".", because it's not a -+ # valid HTTP/HTTPS URL and could be unsafe in an HTML context. We would prefer to throw an exception here, -+ # but spec.homepage is currently free form and not currently required to be a URL, this behavior may be -+ # validated in future versions of Gem::Specification. -+ # -+ # There are two variant we're checking here, one where rdoc is not present, and one where rdoc is present in the same regex: -+ # -+ # Variant #1 - rdoc not installed -+ # -+ # xsshomepagegem 1 -+ # -+ # -+ # [rdoc] -+ # -+ # -+ # -+ # [www] -+ # -+ # Variant #2 - rdoc installed -+ # -+ # xsshomepagegem 1 -+ # -+ # -+ # \[rdoc\]<\/a> -+ # -+ # -+ # -+ # [www] -+ regex_match = /xsshomepagegem 1<\/b>[\n\s]+(\[rdoc\]<\/span>|\[rdoc\]<\/a>)[\n\s]+\[www\]<\/a>/ -+ assert_match regex_match, @res.body -+ end -+ -+ def test_invalid_homepage -+ data = StringIO.new "GET / HTTP/1.0\r\n\r\n" -+ dir = "#{@gemhome}2" -+ -+ spec = util_spec 'invalidhomepagegem', 1 -+ spec.homepage = "notavalidhomepageurl" -+ -+ specs_dir = File.join dir, 'specifications' -+ FileUtils.mkdir_p specs_dir -+ -+ open File.join(specs_dir, spec.spec_name), 'w' do |io| -+ io.write spec.to_ruby -+ end -+ -+ server = Gem::Server.new dir, process_based_port, false -+ -+ @req.parse data -+ -+ server.root @req, @res -+ -+ assert_equal 200, @res.status -+ assert_match 'invalidhomepagegem 1', @res.body -+ -+ # This verifies that the homepage for this spec is not displayed and is set to ".", because it's not a -+ # valid HTTP/HTTPS URL and could be unsafe in an HTML context. We would prefer to throw an exception here, -+ # but spec.homepage is currently free form and not currently required to be a URL, this behavior may be -+ # validated in future versions of Gem::Specification. -+ # -+ # There are two variant we're checking here, one where rdoc is not present, and one where rdoc is present in the same regex: -+ # -+ # Variant #1 - rdoc not installed -+ # -+ # invalidhomepagegem 1 -+ # -+ # -+ # [rdoc] -+ # -+ # -+ # -+ # [www] -+ # -+ # Variant #2 - rdoc installed -+ # -+ # invalidhomepagegem 1 -+ # -+ # -+ # \[rdoc\]<\/a> -+ # -+ # -+ # -+ # [www] -+ regex_match = /invalidhomepagegem 1<\/b>[\n\s]+(\[rdoc\]<\/span>|\[rdoc\]<\/a>)[\n\s]+\[www\]<\/a>/ -+ assert_match regex_match, @res.body -+ end -+ -+ def test_valid_homepage_http -+ data = StringIO.new "GET / HTTP/1.0\r\n\r\n" -+ dir = "#{@gemhome}2" -+ -+ spec = util_spec 'validhomepagegemhttp', 1 -+ spec.homepage = "http://rubygems.org" -+ -+ specs_dir = File.join dir, 'specifications' -+ FileUtils.mkdir_p specs_dir -+ -+ open File.join(specs_dir, spec.spec_name), 'w' do |io| -+ io.write spec.to_ruby -+ end -+ -+ server = Gem::Server.new dir, process_based_port, false -+ -+ @req.parse data -+ -+ server.root @req, @res -+ -+ assert_equal 200, @res.status -+ assert_match 'validhomepagegemhttp 1', @res.body -+ -+ regex_match = /validhomepagegemhttp 1<\/b>[\n\s]+(\[rdoc\]<\/span>|\[rdoc\]<\/a>)[\n\s]+\[www\]<\/a>/ -+ assert_match regex_match, @res.body -+ end -+ -+ def test_valid_homepage_https -+ data = StringIO.new "GET / HTTP/1.0\r\n\r\n" -+ dir = "#{@gemhome}2" -+ -+ spec = util_spec 'validhomepagegemhttps', 1 -+ spec.homepage = "https://rubygems.org" -+ -+ specs_dir = File.join dir, 'specifications' -+ FileUtils.mkdir_p specs_dir -+ -+ open File.join(specs_dir, spec.spec_name), 'w' do |io| -+ io.write spec.to_ruby -+ end -+ -+ server = Gem::Server.new dir, process_based_port, false -+ -+ @req.parse data -+ -+ server.root @req, @res -+ -+ assert_equal 200, @res.status -+ assert_match 'validhomepagegemhttps 1', @res.body -+ -+ regex_match = /validhomepagegemhttps 1<\/b>[\n\s]+(\[rdoc\]<\/span>|\[rdoc\]<\/a>)[\n\s]+\[www\]<\/a>/ -+ assert_match regex_match, @res.body -+ end -+ - def test_specs - data = StringIO.new "GET /specs.#{Gem.marshal_version} HTTP/1.0\r\n\r\n" - @req.parse data -@@ -378,7 +543,7 @@ def test_specs_gemdirs - specs_dir = File.join dir, 'specifications' - FileUtils.mkdir_p specs_dir - -- open File.join(specs_dir, spec.spec_name), 'w' do |io| -+ File.open File.join(specs_dir, spec.spec_name), 'w' do |io| - io.write spec.to_ruby - end - -diff --git test/rubygems/test_gem_source.rb test/rubygems/test_gem_source.rb -index 4a93e222f8..8805a9b404 100644 ---- test/rubygems/test_gem_source.rb -+++ test/rubygems/test_gem_source.rb -@@ -110,7 +110,7 @@ def test_fetch_spec_cached - - cache_file = File.join cache_dir, a1.spec_name - -- open cache_file, 'wb' do |io| -+ File.open cache_file, 'wb' do |io| - Marshal.dump a1, io - end - -@@ -163,7 +163,7 @@ def test_load_specs_cached - - cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}" - -- open cache_file, 'wb' do |io| -+ File.open cache_file, 'wb' do |io| - Marshal.dump latest_specs, io - end - -@@ -187,7 +187,7 @@ def test_load_specs_cached_empty - - cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}" - -- open cache_file, 'wb' do |io| -+ File.open cache_file, 'wb' do |io| - # Setup invalid data in the cache: - io.write Marshal.dump(latest_specs)[0, 10] - end -diff --git test/rubygems/test_gem_source_git.rb test/rubygems/test_gem_source_git.rb -index 0e13a11e7e..8f5d3ee745 100644 ---- test/rubygems/test_gem_source_git.rb -+++ test/rubygems/test_gem_source_git.rb -@@ -229,7 +229,7 @@ def test_specs - Dir.chdir 'b' do - b = Gem::Specification.new 'b', 1 - -- open 'b.gemspec', 'w' do |io| -+ File.open 'b.gemspec', 'w' do |io| - io.write b.to_ruby - end - -diff --git test/rubygems/test_gem_specification.rb test/rubygems/test_gem_specification.rb -index bb6acbc7de..badb297eee 100644 ---- test/rubygems/test_gem_specification.rb -+++ test/rubygems/test_gem_specification.rb -@@ -922,7 +922,7 @@ def test_self_load - end - - def test_self_load_relative -- open 'a-2.gemspec', 'w' do |io| -+ File.open 'a-2.gemspec', 'w' do |io| - io.write @a2.to_ruby_for_cache - end - -@@ -948,6 +948,9 @@ def test_self_load_tainted - @a2.files.clear - - assert_equal @a2, spec -+ -+ ensure -+ $SAFE = 0 - end - - def test_self_load_escape_curly -@@ -1111,7 +1114,7 @@ def test_self_remove_spec - end - - def test_self_remove_spec_removed -- open @a1.spec_file, 'w' do |io| -+ File.open @a1.spec_file, 'w' do |io| - io.write @a1.to_ruby - end - -@@ -1363,13 +1366,13 @@ def test_build_args - - assert_empty @ext.build_args - -- open @ext.build_info_file, 'w' do |io| -+ File.open @ext.build_info_file, 'w' do |io| - io.puts - end - - assert_empty @ext.build_args - -- open @ext.build_info_file, 'w' do |io| -+ File.open @ext.build_info_file, 'w' do |io| - io.puts '--with-foo-dir=wherever' - end - -@@ -1385,9 +1388,9 @@ def test_build_extensions - extconf_rb = File.join @ext.gem_dir, @ext.extensions.first - FileUtils.mkdir_p File.dirname extconf_rb - -- open extconf_rb, 'w' do |f| -+ File.open extconf_rb, 'w' do |f| - f.write <<-'RUBY' -- open 'Makefile', 'w' do |f| -+ File.open 'Makefile', 'w' do |f| - f.puts "clean:\n\techo clean" - f.puts "default:\n\techo built" - f.puts "install:\n\techo installed" -@@ -1435,9 +1438,9 @@ def test_build_extensions_default_gem - extconf_rb = File.join spec.gem_dir, spec.extensions.first - FileUtils.mkdir_p File.dirname extconf_rb - -- open extconf_rb, 'w' do |f| -+ File.open extconf_rb, 'w' do |f| - f.write <<-'RUBY' -- open 'Makefile', 'w' do |f| -+ File.open 'Makefile', 'w' do |f| - f.puts "default:\n\techo built" - f.puts "install:\n\techo installed" - end -@@ -1461,6 +1464,7 @@ def test_build_extensions_error - - def test_build_extensions_extensions_dir_unwritable - skip 'chmod not supported' if Gem.win_platform? -+ skip 'skipped in root privilege' if Process.uid.zero? - - ext_spec - -@@ -1469,9 +1473,9 @@ def test_build_extensions_extensions_dir_unwritable - extconf_rb = File.join @ext.gem_dir, @ext.extensions.first - FileUtils.mkdir_p File.dirname extconf_rb - -- open extconf_rb, 'w' do |f| -+ File.open extconf_rb, 'w' do |f| - f.write <<-'RUBY' -- open 'Makefile', 'w' do |f| -+ File.open 'Makefile', 'w' do |f| - f.puts "clean:\n\techo clean" - f.puts "default:\n\techo built" - f.puts "install:\n\techo installed" -@@ -1486,7 +1490,7 @@ def test_build_extensions_extensions_dir_unwritable - @ext.build_extensions - refute_path_exists @ext.extension_dir - ensure -- unless ($DEBUG or win_platform?) then -+ unless ($DEBUG or win_platform? or Process.uid.zero?) then - FileUtils.chmod 0755, File.join(@ext.base_dir, 'extensions') - FileUtils.chmod 0755, @ext.base_dir - end -@@ -1502,9 +1506,9 @@ def test_build_extensions_no_extensions_dir_unwritable - extconf_rb = File.join @ext.gem_dir, @ext.extensions.first - FileUtils.mkdir_p File.dirname extconf_rb - -- open extconf_rb, 'w' do |f| -+ File.open extconf_rb, 'w' do |f| - f.write <<-'RUBY' -- open 'Makefile', 'w' do |f| -+ File.open 'Makefile', 'w' do |f| - f.puts "clean:\n\techo clean" - f.puts "default:\n\techo built" - f.puts "install:\n\techo installed" -@@ -1551,9 +1555,9 @@ def test_build_extensions_preview - extconf_rb = File.join @ext.gem_dir, @ext.extensions.first - FileUtils.mkdir_p File.dirname extconf_rb - -- open extconf_rb, 'w' do |f| -+ File.open extconf_rb, 'w' do |f| - f.write <<-'RUBY' -- open 'Makefile', 'w' do |f| -+ File.open 'Makefile', 'w' do |f| - f.puts "clean:\n\techo clean" - f.puts "default:\n\techo built" - f.puts "install:\n\techo installed" -@@ -2882,7 +2886,22 @@ def test_validate_homepage - @a1.validate - end - -- assert_equal '"over at my cool site" is not a URI', e.message -+ assert_equal '"over at my cool site" is not a valid HTTP URI', e.message -+ -+ @a1.homepage = 'ftp://rubygems.org' -+ -+ e = assert_raises Gem::InvalidSpecificationException do -+ @a1.validate -+ end -+ -+ assert_equal '"ftp://rubygems.org" is not a valid HTTP URI', e.message -+ -+ @a1.homepage = 'http://rubygems.org' -+ assert_equal true, @a1.validate -+ -+ @a1.homepage = 'https://rubygems.org' -+ assert_equal true, @a1.validate -+ - end - end - -@@ -3418,9 +3437,9 @@ def test_missing_extensions_eh - extconf_rb = File.join @ext.gem_dir, @ext.extensions.first - FileUtils.mkdir_p File.dirname extconf_rb - -- open extconf_rb, 'w' do |f| -+ File.open extconf_rb, 'w' do |f| - f.write <<-'RUBY' -- open 'Makefile', 'w' do |f| -+ File.open 'Makefile', 'w' do |f| - f.puts "clean:\n\techo clean" - f.puts "default:\n\techo built" - f.puts "install:\n\techo installed" -diff --git test/rubygems/test_gem_stub_specification.rb test/rubygems/test_gem_stub_specification.rb -index 43680265c7..f9a3a236c0 100644 ---- test/rubygems/test_gem_stub_specification.rb -+++ test/rubygems/test_gem_stub_specification.rb -@@ -127,9 +127,9 @@ def test_missing_extensions_eh - extconf_rb = File.join s.gem_dir, s.extensions.first - FileUtils.mkdir_p File.dirname extconf_rb - -- open extconf_rb, 'w' do |f| -+ File.open extconf_rb, 'w' do |f| - f.write <<-'RUBY' -- open 'Makefile', 'w' do |f| -+ File.open 'Makefile', 'w' do |f| - f.puts "clean:\n\techo clean" - f.puts "default:\n\techo built" - f.puts "install:\n\techo installed" -@@ -149,7 +149,7 @@ def test_missing_extensions_eh_default_gem - spec = new_default_spec 'default', 1 - spec.extensions << 'extconf.rb' - -- open spec.loaded_from, 'w' do |io| -+ File.open spec.loaded_from, 'w' do |io| - io.write spec.to_ruby_for_cache - end - -@@ -198,7 +198,7 @@ def test_to_spec_missing_extensions - - def stub_with_version - spec = File.join @gemhome, 'specifications', 'stub_e-2.gemspec' -- open spec, 'w' do |io| -+ File.open spec, 'w' do |io| - io.write <<-STUB - # -*- encoding: utf-8 -*- - # stub: stub_v 2 ruby lib -@@ -221,7 +221,7 @@ def stub_with_version - - def stub_without_version - spec = File.join @gemhome, 'specifications', 'stub-2.gemspec' -- open spec, 'w' do |io| -+ File.open spec, 'w' do |io| - io.write <<-STUB - # -*- encoding: utf-8 -*- - # stub: stub_v ruby lib -@@ -245,7 +245,7 @@ def stub_without_version - - def stub_with_extension - spec = File.join @gemhome, 'specifications', 'stub_e-2.gemspec' -- open spec, 'w' do |io| -+ File.open spec, 'w' do |io| - io.write <<-STUB - # -*- encoding: utf-8 -*- - # stub: stub_e 2 ruby lib -@@ -271,7 +271,7 @@ def stub_with_extension - - def stub_without_extension - spec = File.join @gemhome, 'specifications', 'stub-2.gemspec' -- open spec, 'w' do |io| -+ File.open spec, 'w' do |io| - io.write <<-STUB - # -*- encoding: utf-8 -*- - # stub: stub 2 ruby lib -diff --git test/rubygems/test_gem_util.rb test/rubygems/test_gem_util.rb -index b85db44d51..3b7887d931 100644 ---- test/rubygems/test_gem_util.rb -+++ test/rubygems/test_gem_util.rb -@@ -5,6 +5,7 @@ - class TestGemUtil < Gem::TestCase - - def test_class_popen -+ skip "MJIT executes process and it's caught by Process.wait(-1)" if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? - assert_equal "0\n", Gem::Util.popen(Gem.ruby, '-e', 'p 0') - - assert_raises Errno::ECHILD do -@@ -29,6 +30,30 @@ def test_traverse_parents - loop { break if enum.next.nil? } # exhaust the enumerator - end - -+ def test_traverse_parents_does_not_crash_on_permissions_error -+ skip 'skipped on MS Windows (chmod has no effect)' if win_platform? -+ -+ FileUtils.mkdir_p 'd/e/f' -+ # remove 'execute' permission from "e" directory and make it -+ # impossible to cd into it and its children -+ FileUtils.chmod(0666, 'd/e') -+ -+ paths = Gem::Util.traverse_parents('d/e/f').to_a -+ -+ assert_equal File.join(@tempdir, 'd'), paths[0] -+ assert_equal @tempdir, paths[1] -+ if File.respond_to?(:realpath) -+ assert_equal File.realpath(Dir.tmpdir), paths[2] -+ assert_equal File.realpath("..", Dir.tmpdir), paths[3] -+ elsif RUBY_PLATFORM !~ /darwin/ -+ assert_equal Dir.tmpdir, paths[2] -+ assert_equal '/', paths[3] -+ end -+ ensure -+ # restore default permissions, allow the directory to be removed -+ FileUtils.chmod(0775, 'd/e') unless win_platform? -+ end -+ - def test_linked_list_find - list = [1,2,3,4,5].inject(Gem::List.new(0)) { |m,o| - Gem::List.new o, m -diff --git test/rubygems/test_gem_version.rb test/rubygems/test_gem_version.rb -index 56c818663e..792ad5f084 100644 ---- test/rubygems/test_gem_version.rb -+++ test/rubygems/test_gem_version.rb -@@ -2,6 +2,8 @@ - require 'rubygems/test_case' - require "rubygems/version" - -+require "minitest/benchmark" -+ - class TestGemVersion < Gem::TestCase - - class V < ::Gem::Version -@@ -102,6 +104,15 @@ def test_initialize_invalid - end - end - -+ def bench_anchored_version_pattern -+ assert_performance_linear 0.5 do |count| -+ version_string = count.times.map {|i| "0" * i.succ }.join(".") << "." -+ version_string =~ Gem::Version::ANCHORED_VERSION_PATTERN -+ end -+ rescue RegexpError -+ skip "It fails to allocate the memory for regex pattern of Gem::Version::ANCHORED_VERSION_PATTERN" -+ end -+ - def test_empty_version - ["", " ", " "].each do |empty| - assert_equal "0", Gem::Version.new(empty).version -diff --git test/rubygems/test_require.rb test/rubygems/test_require.rb -index a846f46833..e292ce226d 100644 ---- test/rubygems/test_require.rb -+++ test/rubygems/test_require.rb -@@ -38,18 +38,6 @@ def assert_require(path) - assert require(path), "'#{path}' was already required" - end - -- def append_latch spec -- dir = spec.gem_dir -- Dir.chdir dir do -- spec.files.each do |file| -- File.open file, 'a' do |fp| -- fp.puts "FILE_ENTERED_LATCH.release" -- fp.puts "FILE_EXIT_LATCH.await" -- end -- end -- end -- end -- - # Providing -I on the commandline should always beat gems - def test_dash_i_beats_gems - a1 = new_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb" -@@ -80,6 +68,17 @@ def test_dash_i_beats_gems - Object.send :remove_const, :HELLO if Object.const_defined? :HELLO - end - -+ def create_sync_thread -+ Thread.new do -+ begin -+ yield -+ ensure -+ FILE_ENTERED_LATCH.release -+ FILE_EXIT_LATCH.await -+ end -+ end -+ end -+ - def test_concurrent_require - skip 'deadlock' if /^1\.8\./ =~ RUBY_VERSION - -@@ -91,11 +90,8 @@ def test_concurrent_require - - install_specs a1, b1 - -- append_latch a1 -- append_latch b1 -- -- t1 = Thread.new { assert_require 'a' } -- t2 = Thread.new { assert_require 'b' } -+ t1 = create_sync_thread{ assert_require 'a' } -+ t2 = create_sync_thread{ assert_require 'b' } - - # wait until both files are waiting on the exit latch - FILE_ENTERED_LATCH.await -@@ -106,10 +102,8 @@ def test_concurrent_require - assert t1.join, "thread 1 should exit" - assert t2.join, "thread 2 should exit" - ensure -- return if $! # skipping -- -- Object.send :remove_const, :FILE_ENTERED_LATCH -- Object.send :remove_const, :FILE_EXIT_LATCH -+ Object.send :remove_const, :FILE_ENTERED_LATCH if Object.const_defined? :FILE_ENTERED_LATCH -+ Object.send :remove_const, :FILE_EXIT_LATCH if Object.const_defined? :FILE_EXIT_LATCH - end - - def test_require_is_not_lazy_with_exact_req diff --git a/sources b/sources index a289e4c..7ef486c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.5.0.tar.xz) = 55714a33d7661fe8b432f73c34fd67b49699f8b79df1cbd680a74899124d31111ab0f444677672aac1ba725820182940d485efb2db0bf2bc96737c5d40c54578 +SHA512 (ruby-2.5.1.tar.xz) = 31bacf58469953282cd5d8b51862dcf4b84dedb927c1871bc3fca32fc157fe49187631575a70838705fe246f4555647577a7ecc26894445a7d64de5503dc11b4 From f571c557e21b5573dff83a279088b624f1095748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 10 Apr 2018 09:07:02 +0200 Subject: [PATCH 282/530] Conflict requirement needs to generate dependency. If there is only conflict requirement, this still menas that there is dependency on that package and appropriate requirement must be generated (rhbz#1561487) --- ruby.spec | 3 +++ rubygems.req | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index c86034c..70598d2 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1073,6 +1073,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Tue Apr 10 2018 Vít Ondruch - 2.5.1-92 +- Conflict requirement needs to generate dependency. + * Thu Mar 29 2018 Pavel Valena - 2.5.1-92 - Update to Ruby 2.5.1. diff --git a/rubygems.req b/rubygems.req index 6868bdd..d75247d 100644 --- a/rubygems.req +++ b/rubygems.req @@ -11,7 +11,13 @@ module RubyGemsReq when '~>' expand_pessimistic_requirement(r) when '!=' - [] + # If there is only the conflict requirement, we still need to depend + # on the specified gem. + if requirements.size == 1 + Gem::Requirement.default.requirements + else + [] + end else [r] end From ecbc53b331bd1e2cec6f51a36f4be869a2720630 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 10 Apr 2018 09:09:46 +0200 Subject: [PATCH 283/530] Revert "Use --with-setjmp-type=setjmp on aarch64 to work around gcc issue (#1545239)" This reverts commit a3207ebb169bacb722745448c114f015d63cd25c. This should not be needed, since changes in GCC were reverted. --- ruby.spec | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 70598d2..fb10f6e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -560,9 +560,6 @@ autoconf --with-ruby-version='' \ --enable-multiarch \ --with-prelude=./abrt_prelude.rb \ -%ifarch aarch64 - --with-setjmp-type=setjmp \ -%endif # Q= makes the build output more verbose and allows to check Fedora # compiler options. @@ -1075,6 +1072,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Tue Apr 10 2018 Vít Ondruch - 2.5.1-92 - Conflict requirement needs to generate dependency. +- Stop using --with-setjmp-type=setjmp on aarch64 (rhbz#1545239). * Thu Mar 29 2018 Pavel Valena - 2.5.1-92 - Update to Ruby 2.5.1. From b0274e84e7e7b785de4298225b20f2b7d8638c8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 11 Apr 2018 17:55:12 +0200 Subject: [PATCH 284/530] Remove comment which does not apply anymore. rhbz#1565960 --- ruby.spec | 2 -- 1 file changed, 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index fb10f6e..3adeff0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -292,8 +292,6 @@ Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Requires: ruby(irb) = %{irb_version} Requires: rubygem(io-console) >= %{io_console_version} -# Hardcode the dependency to keep it compatible with dependencies of the -# official rubygem-rdoc gem. Requires: rubygem(json) >= %{json_version} Provides: rdoc = %{version}-%{release} Provides: ri = %{version}-%{release} From bee5851fb0985cbe31515cd2addafec081809b7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 2 May 2018 17:00:36 +0200 Subject: [PATCH 285/530] Make %gemspec_{add,remove}_dep modify .gemspec provided by %setup macro. The macros need to be udpated, since RPM 4.14+ can expand .gem files and also also provide %{gem_name}.gemspec file used to rebuild the gem. However, the .gemspec file is not in current directory, but directly in %{_builddir}. --- macros.rubygems | 4 ++-- ruby.spec | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/macros.rubygems b/macros.rubygems index 0652ec6..2cb96a6 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -60,7 +60,7 @@ gem install \\\ # %gemspec_add_dep(g:s:d) \ read -d '' gemspec_add_dep_script << 'EOR' || : \ - gemspec_file = '%{-s*}%{!?-s:./%{gem_name}.gemspec}' \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}.gemspec}' \ \ name = '%{-g*}' \ requirements = %{*}%{!?1:nil} \ @@ -97,7 +97,7 @@ unset -v gemspec_add_dep_script \ # %gemspec_remove_dep(g:s:d) \ read -d '' gemspec_remove_dep_script << 'EOR' || : \ - gemspec_file = '%{-s*}%{!?-s:./%{gem_name}.gemspec}' \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}.gemspec}' \ \ name = '%{-g*}' \ requirements = %{*}%{!?1:nil} \ diff --git a/ruby.spec b/ruby.spec index 3adeff0..bfde4a1 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 92 +%global release 93 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1068,6 +1068,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Wed May 02 2018 Vít Ondruch - 2.5.1-93 +- Make %%gemspec_{add,remove}_dep modify .gemspec provided by %%setup macro. + * Tue Apr 10 2018 Vít Ondruch - 2.5.1-92 - Conflict requirement needs to generate dependency. - Stop using --with-setjmp-type=setjmp on aarch64 (rhbz#1545239). From 561c76845a4c29e811808e50d259956cbff7ab08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 3 May 2018 15:16:00 +0200 Subject: [PATCH 286/530] Fix typos in macro description. --- macros.rubygems | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/macros.rubygems b/macros.rubygems index 2cb96a6..b4dfc92 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -42,8 +42,8 @@ gem install \\\ } -# The 'read' command in gemspec_add _depand gemspec_remove_dep macros is not -# essential, but it is usefull to make the sript appear in build log. +# The 'read' command in gemspec_add_dep and gemspec_remove_dep macros is not +# essential, but it is usefull to make the script appear in build log. # %gemspec_add_dep - Add dependency into .gemspec. From 8ef3cc0ed4d2f8626492b3f16157ab890017f210 Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Thu, 3 May 2018 14:53:28 +0200 Subject: [PATCH 287/530] Add macros to edit files lists in .gemspec %gemspec_add_file and %gemspec_remove_file. --- macros.rubygems | 69 +++++++++++++++++++++++++++++++++++++++++++++++-- ruby.spec | 4 +++ 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/macros.rubygems b/macros.rubygems index b4dfc92..d2e8514 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -42,8 +42,8 @@ gem install \\\ } -# The 'read' command in gemspec_add_dep and gemspec_remove_dep macros is not -# essential, but it is usefull to make the script appear in build log. +# The 'read' command in %%gemspec_* macros is not essential, but it is usefull +# to make the sript appear in build log. # %gemspec_add_dep - Add dependency into .gemspec. @@ -128,3 +128,68 @@ EOR\ echo "$gemspec_remove_dep_script" | ruby \ unset -v gemspec_remove_dep_script \ %{nil} + + +# %%gemspec_add_file - Add files to various files lists in .gemspec. +# +# Usage: %%gemspec_add_file [options] +# +# Add files to .gemspec file. is expected to be valid Ruby code. +# Path to file is expected. Does not check real files in any way. +# By default, `files` list is edited. +# +# -s Overrides the default .gemspec location. +# -t Edit test_files only. +# -r Edit extra_rdoc_files only. +# +%gemspec_add_file(s:tr) \ +read -d '' gemspec_add_file_script << 'EOR' || : \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}.gemspec}' \ + \ + abort("gemspec_add_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \ + \ + filenames = %{*}%{!?1:nil} \ + filenames = Array(filenames) \ + \ + spec = Gem::Specification.load(gemspec_file) \ + abort("#{gemspec_file} is not accessible.") unless spec \ + \ + spec.%{?-t:test_}%{?-r:extra_rdoc_}files += filenames \ + File.write gemspec_file, spec.to_ruby \ +EOR\ +echo "$gemspec_add_file_script" | ruby \ +unset -v gemspec_add_file_script \ +%{nil} + + +# %%gemspec_remove_file - Remove files from various files lists in .gemspec. +# +# Usage: %%gemspec_remove_file [options] +# +# Remove files from .gemspec file. is expected to be valid Ruby code. +# Path to file is expected. Does not check/remove real files in any way. +# By default, `files` list is edited. File has to be removed from `test_files` +# first in order to be removable from `files`. +# +# -s Overrides the default .gemspec location. +# -t Edit test_files only. +# -r Edit extra_rdoc_files only. +# +%gemspec_remove_file(s:tr) \ +read -d '' gemspec_remove_file_script << 'EOR' || : \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}.gemspec}' \ + \ + abort("gemspec_remove_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \ + \ + filenames = %{*}%{!?1:nil} \ + filenames = Array(filenames) \ + \ + spec = Gem::Specification.load(gemspec_file) \ + abort("#{gemspec_file} is not accessible.") unless spec \ + \ + spec.%{?-t:test_}%{?-r:extra_rdoc_}files -= filenames \ + File.write gemspec_file, spec.to_ruby \ +EOR\ +echo "$gemspec_remove_file_script" | ruby \ +unset -v gemspec_remove_file_script \ +%{nil} diff --git a/ruby.spec b/ruby.spec index bfde4a1..99ef23e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1068,6 +1068,10 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Thu May 10 2018 Pavel Valena - 2.5.1-93 +- Add macros to edit files lists in .gemspec + (gemspec_add_file and gemspec_remove_file). + * Wed May 02 2018 Vít Ondruch - 2.5.1-93 - Make %%gemspec_{add,remove}_dep modify .gemspec provided by %%setup macro. From 9f569993f04ee6a62a62b3ff53f4194fd5430aea Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 14 Jul 2018 03:48:17 +0000 Subject: [PATCH 288/530] - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 99ef23e..57ba92d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 93 +%global release 94 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1068,6 +1068,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Sat Jul 14 2018 Fedora Release Engineering - 2.5.1-94 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + * Thu May 10 2018 Pavel Valena - 2.5.1-93 - Add macros to edit files lists in .gemspec (gemspec_add_file and gemspec_remove_file). From ae55d5722d2a64e28af8ebf6ca033e8af7fbd426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 26 Jul 2018 13:50:18 +0200 Subject: [PATCH 289/530] Avoid need of C++ compiler to pass the test suite. --- ...-C++-compiler-to-pass-the-test-suite.patch | 35 +++++++++++++++++++ ruby.spec | 4 +++ 2 files changed, 39 insertions(+) create mode 100644 ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch diff --git a/ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch b/ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch new file mode 100644 index 0000000..413a1da --- /dev/null +++ b/ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch @@ -0,0 +1,35 @@ +From 51e2c91412a511196e58efea5b87c460b4fa6a20 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 26 Jul 2018 13:17:52 +0200 +Subject: [PATCH] Avoid need of C++ compiler to pass the test suite. + +The test suite fails when C++ compiler is not available on the system: + +~~~ +TestGemExtCmakeBuilder#test_self_build: +Gem::InstallError: cmake failed, exit code 1 + /builddir/build/BUILD/ruby-2.5.1/lib/rubygems/ext/builder.rb:92:in `run' + /builddir/build/BUILD/ruby-2.5.1/lib/rubygems/ext/cmake_builder.rb:10:in `build' + /builddir/build/BUILD/ruby-2.5.1/test/rubygems/test_gem_ext_cmake_builder.rb:37:in `block in test_self_build' + /builddir/build/BUILD/ruby-2.5.1/test/rubygems/test_gem_ext_cmake_builder.rb:36:in `chdir' + /builddir/build/BUILD/ruby-2.5.1/test/rubygems/test_gem_ext_cmake_builder.rb:36:in `test_self_build' +~~~ + +But there is nothing which would realy required C++. It is just CMake +default to check for C++. +--- + test/rubygems/test_gem_ext_cmake_builder.rb | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/test/rubygems/test_gem_ext_cmake_builder.rb b/test/rubygems/test_gem_ext_cmake_builder.rb +index 76d3cb2afe..2d449fc2fd 100644 +--- a/test/rubygems/test_gem_ext_cmake_builder.rb ++++ b/test/rubygems/test_gem_ext_cmake_builder.rb +@@ -25,6 +25,7 @@ def test_self_build + File.open File.join(@ext, 'CMakeLists.txt'), 'w' do |cmakelists| + cmakelists.write <<-eo_cmake + cmake_minimum_required(VERSION 2.6) ++project(self_build LANGUAGES NONE) + install (FILES test.txt DESTINATION bin) + eo_cmake + end diff --git a/ruby.spec b/ruby.spec index 57ba92d..a4c4280 100644 --- a/ruby.spec +++ b/ruby.spec @@ -142,6 +142,9 @@ Patch11: ruby-2.5.1-TestTimeTZ-test-failures-Kiritimati-and-Lisbon.patch # Don't force libraries used to build Ruby to its dependencies. # https://bugs.ruby-lang.org/issues/14422 Patch15: ruby-2.6.0-library-options-to-MAINLIBS.patch +# Do not require C++ compiler. +# https://github.com/rubygems/rubygems/pull/2367 +Patch16: ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -526,6 +529,7 @@ rm -rf ext/fiddle/libffi* %patch10 -p1 %patch11 -p1 %patch15 -p1 +%patch16 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . From 7c494340f9b797e5a8ce2f8dd8fd8ece65fe755e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 26 Jul 2018 18:09:10 +0200 Subject: [PATCH 290/530] Disable some test failing with OpenSSL 1.1.1. --- ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch | 112 ++++++++++++++++++ ruby.spec | 14 +++ 2 files changed, 126 insertions(+) create mode 100644 ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch diff --git a/ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch b/ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch new file mode 100644 index 0000000..919fb00 --- /dev/null +++ b/ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch @@ -0,0 +1,112 @@ +From 71057ca5963108bac1e2c31bd0e8e205ba74cc19 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 11 May 2018 13:43:32 +0900 +Subject: [PATCH 1/2] test/test_pkey_rsa: fix test failure with OpenSSL 1.1.1 + +OpenSSL 1.1.1 raised the minimum size for RSA keys to 512 bits. +--- + test/openssl/test_pkey_rsa.rb | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb +index c1205563..b4393e68 100644 +--- a/test/openssl/test_pkey_rsa.rb ++++ b/test/openssl/test_pkey_rsa.rb +@@ -60,6 +60,13 @@ def test_new_with_exponent + end + end + ++ def test_generate ++ key = OpenSSL::PKey::RSA.generate(512, 17) ++ assert_equal 512, key.n.num_bits ++ assert_equal 17, key.e ++ assert_not_nil key.d ++ end ++ + def test_new_break + assert_nil(OpenSSL::PKey::RSA.new(1024) { break }) + assert_raise(RuntimeError) do +@@ -256,7 +263,7 @@ def test_pem_passwd + end + + def test_dup +- key = OpenSSL::PKey::RSA.generate(256, 17) ++ key = Fixtures.pkey("rsa1024") + key2 = key.dup + assert_equal key.params, key2.params + key2.set_key(key2.n, 3, key2.d) + +From a5e26bc1345fe325bdc619f9b1768b7ad3c94214 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 11 May 2018 14:12:39 +0900 +Subject: [PATCH 2/2] test/test_ssl_session: set client protocol version + explicitly + +Clients that implement TLS 1.3's Middlebox Compatibility Mode will +always provide a non-empty session ID in the ClientHello. This means +the "get" callback for the server-side session caching may be called +for the initial connection. +--- + test/openssl/test_ssl_session.rb | 14 +++++++++----- + 1 file changed, 9 insertions(+), 5 deletions(-) + +diff --git a/test/openssl/test_ssl_session.rb b/test/openssl/test_ssl_session.rb +index af8c65b1..6db0c2d1 100644 +--- a/test/openssl/test_ssl_session.rb ++++ b/test/openssl/test_ssl_session.rb +@@ -198,7 +198,9 @@ def test_server_session_cache + first_session = nil + 10.times do |i| + connections = i +- server_connect_with_session(port, nil, first_session) { |ssl| ++ cctx = OpenSSL::SSL::SSLContext.new ++ cctx.ssl_version = :TLSv1_2 ++ server_connect_with_session(port, cctx, first_session) { |ssl| + ssl.puts("abc"); assert_equal "abc\n", ssl.gets + first_session ||= ssl.session + +@@ -257,6 +259,8 @@ def test_ctx_server_session_cb + + connections = nil + called = {} ++ cctx = OpenSSL::SSL::SSLContext.new ++ cctx.ssl_version = :TLSv1_2 + sctx = nil + ctx_proc = Proc.new { |ctx| + sctx = ctx +@@ -292,7 +296,7 @@ def test_ctx_server_session_cb + } + start_server(ctx_proc: ctx_proc) do |port| + connections = 0 +- sess0 = server_connect_with_session(port, nil, nil) { |ssl| ++ sess0 = server_connect_with_session(port, cctx, nil) { |ssl| + ssl.puts("abc"); assert_equal "abc\n", ssl.gets + assert_equal false, ssl.session_reused? + ssl.session +@@ -307,7 +311,7 @@ def test_ctx_server_session_cb + + # Internal cache hit + connections = 1 +- server_connect_with_session(port, nil, sess0.dup) { |ssl| ++ server_connect_with_session(port, cctx, sess0.dup) { |ssl| + ssl.puts("abc"); assert_equal "abc\n", ssl.gets + assert_equal true, ssl.session_reused? + ssl.session +@@ -328,7 +332,7 @@ def test_ctx_server_session_cb + + # External cache hit + connections = 2 +- sess2 = server_connect_with_session(port, nil, sess0.dup) { |ssl| ++ sess2 = server_connect_with_session(port, cctx, sess0.dup) { |ssl| + ssl.puts("abc"); assert_equal "abc\n", ssl.gets + if !ssl.session_reused? && openssl?(1, 1, 0) && !openssl?(1, 1, 0, 7) + # OpenSSL >= 1.1.0, < 1.1.0g +@@ -355,7 +359,7 @@ def test_ctx_server_session_cb + + # Cache miss + connections = 3 +- sess3 = server_connect_with_session(port, nil, sess0.dup) { |ssl| ++ sess3 = server_connect_with_session(port, cctx, sess0.dup) { |ssl| + ssl.puts("abc"); assert_equal "abc\n", ssl.gets + assert_equal false, ssl.session_reused? + ssl.session diff --git a/ruby.spec b/ruby.spec index a4c4280..036f48b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -145,6 +145,9 @@ Patch15: ruby-2.6.0-library-options-to-MAINLIBS.patch # Do not require C++ compiler. # https://github.com/rubygems/rubygems/pull/2367 Patch16: ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch +# Fix some OpenSSL 1.1.1 test failures. +# https://github.com/ruby/openssl/pull/202 +Patch17: ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -530,6 +533,7 @@ rm -rf ext/fiddle/libffi* %patch11 -p1 %patch15 -p1 %patch16 -p1 +%patch17 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -753,6 +757,13 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/test_segv_\(setproctitle\|test\|loaded_featur # https://bugs.ruby-lang.org/issues/14175 sed -i '/def test_mdns_each_address$/,/^ end$/ s/^/#/' test/resolv/test_mdns.rb +# For now, disable some OpenSSL tests incompatible with OpenSSL 1.1.1: +# https://github.com/ruby/openssl/issues/207 +mv test/openssl/test_ssl.rb{,.disabled} +DISABLE_TESTS="$DISABLE_TESTS -n !/test_resumption/" +DISABLE_TESTS="$DISABLE_TESTS -n !/test_\(identity_verify_failure\|min_version\|session_reuse\)/" +DISABLE_TESTS="$DISABLE_TESTS -n !/test_do_not_allow_invalid_client_cert_auth_connection/" + make check TESTS="-v $DISABLE_TESTS" %files @@ -1072,6 +1083,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Thu Jul 26 2018 Vít Ondruch - 2.5.1-94 +- Disable some test failing with OpenSSL 1.1.1. + * Sat Jul 14 2018 Fedora Release Engineering - 2.5.1-94 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild From 9fef07981c33465d237e3a975460621103e0717e Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Fri, 27 Jul 2018 14:55:22 +0200 Subject: [PATCH 291/530] Rebuild for new binutils Signed-off-by: Igor Gnatenko --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 036f48b..aa5ba19 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 94 +%global release 95 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1083,6 +1083,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Fri Jul 27 2018 Igor Gnatenko - 2.5.1-95 +- Rebuild for new binutils + * Thu Jul 26 2018 Vít Ondruch - 2.5.1-94 - Disable some test failing with OpenSSL 1.1.1. From ab0834da77983aec898c0760aae920a91650e33b Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Tue, 31 Jul 2018 11:16:50 +0200 Subject: [PATCH 292/530] Rebuild with fixed binutils --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index aa5ba19..995855f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 95 +%global release 96 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -1083,6 +1083,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Tue Jul 31 2018 Florian Weimer - 2.5.1-96 +- Rebuild with fixed binutils + * Fri Jul 27 2018 Igor Gnatenko - 2.5.1-95 - Rebuild for new binutils From 91a9a89fabd0e597c15e7e2fc5a2587b3b8805da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 13 Aug 2018 15:16:26 +0200 Subject: [PATCH 293/530] Fix TLS 1.3 issues. --- ...-2.6.0-fix-test-failure-with-TLS-1.3.patch | 203 ++++++++++++++++++ ...-fix-session-resumption-with-TLS-1.3.patch | 157 ++++++++++++++ ruby.spec | 17 +- 3 files changed, 373 insertions(+), 4 deletions(-) create mode 100644 ruby-2.6.0-fix-test-failure-with-TLS-1.3.patch create mode 100644 ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch diff --git a/ruby-2.6.0-fix-test-failure-with-TLS-1.3.patch b/ruby-2.6.0-fix-test-failure-with-TLS-1.3.patch new file mode 100644 index 0000000..3e62a5b --- /dev/null +++ b/ruby-2.6.0-fix-test-failure-with-TLS-1.3.patch @@ -0,0 +1,203 @@ +From 6fcc6c0efc42d1c6325cf4bb0ca16e2a448cdbed Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 6 Aug 2018 20:51:42 +0900 +Subject: [PATCH] test/test_ssl: fix test failure with TLS 1.3 + +SSL_connect() on the client side may return before SSL_accept() on +server side returns. This will fix test failures with OpenSSL's current +master. +--- + test/openssl/test_ssl.rb | 45 ++++++++++++++++++++++++++-------------- + test/openssl/test_ssl_session.rb | 1 + + 2 files changed, 31 insertions(+), 15 deletions(-) + +diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb +index 7bb32adf..408c7d82 100644 +--- a/test/openssl/test_ssl.rb ++++ b/test/openssl/test_ssl.rb +@@ -47,6 +47,8 @@ def test_ssl_with_server_cert + assert_equal 2, ssl.peer_cert_chain.size + assert_equal @svr_cert.to_der, ssl.peer_cert_chain[0].to_der + assert_equal @ca_cert.to_der, ssl.peer_cert_chain[1].to_der ++ ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + ensure + ssl&.close + sock&.close +@@ -157,6 +159,7 @@ def test_sync_close + sock = TCPSocket.new("127.0.0.1", port) + ssl = OpenSSL::SSL::SSLSocket.new(sock) + ssl.connect ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + ssl.close + assert_not_predicate sock, :closed? + ensure +@@ -168,6 +171,7 @@ def test_sync_close + ssl = OpenSSL::SSL::SSLSocket.new(sock) + ssl.sync_close = true # !! + ssl.connect ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + ssl.close + assert_predicate sock, :closed? + ensure +@@ -259,7 +263,10 @@ def test_client_ca + client_ca_from_server = sslconn.client_ca + [@cli_cert, @cli_key] + end +- server_connect(port, ctx) { |ssl| assert_equal([@ca], client_ca_from_server) } ++ server_connect(port, ctx) { |ssl| ++ assert_equal([@ca], client_ca_from_server) ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets ++ } + } + end + +@@ -356,21 +363,16 @@ def test_verify_result + } + + start_server { |port| +- sock = TCPSocket.new("127.0.0.1", port) + ctx = OpenSSL::SSL::SSLContext.new + ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER + ctx.verify_callback = Proc.new do |preverify_ok, store_ctx| + store_ctx.error = OpenSSL::X509::V_OK + true + end +- ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx) +- ssl.sync_close = true +- begin +- ssl.connect ++ server_connect(port, ctx) { |ssl| + assert_equal(OpenSSL::X509::V_OK, ssl.verify_result) +- ensure +- ssl.close +- end ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets ++ } + } + + start_server(ignore_listener_error: true) { |port| +@@ -455,6 +457,8 @@ def test_post_connection_check + + start_server { |port| + server_connect(port) { |ssl| ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets ++ + assert_raise(sslerr){ssl.post_connection_check("localhost.localdomain")} + assert_raise(sslerr){ssl.post_connection_check("127.0.0.1")} + assert(ssl.post_connection_check("localhost")) +@@ -476,6 +482,8 @@ def test_post_connection_check + @svr_cert = issue_cert(@svr, @svr_key, 4, exts, @ca_cert, @ca_key) + start_server { |port| + server_connect(port) { |ssl| ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets ++ + assert(ssl.post_connection_check("localhost.localdomain")) + assert(ssl.post_connection_check("127.0.0.1")) + assert_raise(sslerr){ssl.post_connection_check("localhost")} +@@ -496,6 +502,8 @@ def test_post_connection_check + @svr_cert = issue_cert(@svr, @svr_key, 5, exts, @ca_cert, @ca_key) + start_server { |port| + server_connect(port) { |ssl| ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets ++ + assert(ssl.post_connection_check("localhost.localdomain")) + assert_raise(sslerr){ssl.post_connection_check("127.0.0.1")} + assert_raise(sslerr){ssl.post_connection_check("localhost")} +@@ -722,6 +730,8 @@ def test_tlsext_hostname + ssl.connect + assert_equal @cli_cert.serial, ssl.peer_cert.serial + assert_predicate fooctx, :frozen? ++ ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + ensure + ssl&.close + sock.close +@@ -733,6 +743,8 @@ def test_tlsext_hostname + ssl.hostname = "bar.example.com" + ssl.connect + assert_equal @svr_cert.serial, ssl.peer_cert.serial ++ ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + ensure + ssl&.close + sock.close +@@ -805,7 +817,8 @@ def test_verify_hostname_on_connect + ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx) + ssl.hostname = name + if expected_ok +- assert_nothing_raised { ssl.connect } ++ ssl.connect ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + else + assert_handshake_error { ssl.connect } + end +@@ -1086,6 +1099,7 @@ def test_renegotiation_cb + start_server_version(:SSLv23, ctx_proc) { |port| + server_connect(port) { |ssl| + assert_equal(1, num_handshakes) ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + } + end +@@ -1104,6 +1118,7 @@ def test_alpn_protocol_selection_ary + ctx.alpn_protocols = advertised + server_connect(port, ctx) { |ssl| + assert_equal(advertised.first, ssl.alpn_protocol) ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + } + end +@@ -1226,14 +1241,11 @@ def test_npn_selected_protocol_too_long + end + + def test_close_after_socket_close +- server_proc = proc { |ctx, ssl| +- # Do nothing +- } +- start_server(server_proc: server_proc) { |port| ++ start_server { |port| + sock = TCPSocket.new("127.0.0.1", port) + ssl = OpenSSL::SSL::SSLSocket.new(sock) +- ssl.sync_close = true + ssl.connect ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + sock.close + assert_nothing_raised do + ssl.close +@@ -1298,6 +1310,7 @@ def test_get_ephemeral_key + ctx.ciphers = "DEFAULT:!kRSA:!kEDH" + server_connect(port, ctx) { |ssl| + assert_instance_of OpenSSL::PKey::EC, ssl.tmp_key ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + end + end +@@ -1440,6 +1453,7 @@ def test_ecdh_curves + assert_equal "secp384r1", ssl.tmp_key.group.curve_name + end + end ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + + if openssl?(1, 0, 2) || libressl?(2, 5, 1) +@@ -1455,6 +1469,7 @@ def test_ecdh_curves + + server_connect(port, ctx) { |ssl| + assert_equal "secp521r1", ssl.tmp_key.group.curve_name ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + end + end +diff --git a/test/openssl/test_ssl_session.rb b/test/openssl/test_ssl_session.rb +index 6db0c2d1..78b160ed 100644 +--- a/test/openssl/test_ssl_session.rb ++++ b/test/openssl/test_ssl_session.rb +@@ -113,6 +113,7 @@ def test_resumption + non_resumable = nil + start_server { |port| + server_connect_with_session(port, nil, nil) { |ssl| ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + non_resumable = ssl.session + } + } diff --git a/ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch b/ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch new file mode 100644 index 0000000..707dbd7 --- /dev/null +++ b/ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch @@ -0,0 +1,157 @@ +From 1dfc377ae3b174b043d3f0ed36de57b0296b34d0 Mon Sep 17 00:00:00 2001 +From: rhe +Date: Wed, 8 Aug 2018 14:13:55 +0000 +Subject: [PATCH] net/http, net/ftp: fix session resumption with TLS 1.3 + +When TLS 1.3 is in use, the session ticket may not have been sent yet +even though a handshake has finished. Also, the ticket could change if +multiple session ticket messages are sent by the server. Use +SSLContext#session_new_cb instead of calling SSLSocket#session +immediately after a handshake. This way also works with earlier protocol +versions. + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64234 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + lib/net/ftp.rb | 5 ++++- + lib/net/http.rb | 7 +++++-- + test/net/http/test_https.rb | 35 ++++++++++------------------------- + 3 files changed, 19 insertions(+), 28 deletions(-) + +diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb +index c3ee47ef4d36..9902f9dc657a 100644 +--- a/lib/net/ftp.rb ++++ b/lib/net/ftp.rb +@@ -230,6 +230,10 @@ def initialize(host = nil, user_or_options = {}, passwd = nil, acct = nil) + if defined?(VerifyCallbackProc) + @ssl_context.verify_callback = VerifyCallbackProc + end ++ @ssl_context.session_cache_mode = ++ OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT | ++ OpenSSL::SSL::SSLContext::SESSION_CACHE_NO_INTERNAL_STORE ++ @ssl_context.session_new_cb = proc {|sock, sess| @ssl_session = sess } + @ssl_session = nil + if options[:private_data_connection].nil? + @private_data_connection = true +@@ -349,7 +353,6 @@ def start_tls_session(sock) + if @ssl_context.verify_mode != VERIFY_NONE + ssl_sock.post_connection_check(@host) + end +- @ssl_session = ssl_sock.session + return ssl_sock + end + private :start_tls_session +diff --git a/lib/net/http.rb b/lib/net/http.rb +index 281b15cedff0..683a884f5dbe 100644 +--- a/lib/net/http.rb ++++ b/lib/net/http.rb +@@ -983,6 +983,10 @@ def connect + end + @ssl_context = OpenSSL::SSL::SSLContext.new + @ssl_context.set_params(ssl_parameters) ++ @ssl_context.session_cache_mode = ++ OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT | ++ OpenSSL::SSL::SSLContext::SESSION_CACHE_NO_INTERNAL_STORE ++ @ssl_context.session_new_cb = proc {|sock, sess| @ssl_session = sess } + D "starting SSL for #{conn_address}:#{conn_port}..." + s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context) + s.sync_close = true +@@ -990,13 +994,12 @@ def connect + s.hostname = @address if s.respond_to? :hostname= + if @ssl_session and + Process.clock_gettime(Process::CLOCK_REALTIME) < @ssl_session.time.to_f + @ssl_session.timeout +- s.session = @ssl_session if @ssl_session ++ s.session = @ssl_session + end + ssl_socket_connect(s, @open_timeout) + if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE + s.post_connection_check(@address) + end +- @ssl_session = s.session + D "SSL established" + end + @socket = BufferedIO.new(s, read_timeout: @read_timeout, +diff --git a/test/net/http/test_https.rb b/test/net/http/test_https.rb +index 8004d5c5f29f..a5182a1fe9db 100644 +--- a/test/net/http/test_https.rb ++++ b/test/net/http/test_https.rb +@@ -71,20 +71,11 @@ def test_session_reuse + http.get("/") + http.finish + +- http.start +- http.get("/") +- http.finish # three times due to possible bug in OpenSSL 0.9.8 +- +- sid = http.instance_variable_get(:@ssl_session).id +- + http.start + http.get("/") + + socket = http.instance_variable_get(:@socket).io +- +- assert socket.session_reused? +- +- assert_equal sid, http.instance_variable_get(:@ssl_session).id ++ assert_equal true, socket.session_reused? + + http.finish + rescue SystemCallError +@@ -101,16 +92,12 @@ def test_session_reuse_but_expire + http.get("/") + http.finish + +- sid = http.instance_variable_get(:@ssl_session).id +- + http.start + http.get("/") + + socket = http.instance_variable_get(:@socket).io + assert_equal false, socket.session_reused? + +- assert_not_equal sid, http.instance_variable_get(:@ssl_session).id +- + http.finish + rescue SystemCallError + skip $! +@@ -160,15 +147,16 @@ def test_certificate_verify_failure + end + + def test_identity_verify_failure ++ # the certificate's subject has CN=localhost + http = Net::HTTP.new("127.0.0.1", config("port")) + http.use_ssl = true +- http.verify_callback = Proc.new do |preverify_ok, store_ctx| +- true +- end ++ http.cert_store = TEST_STORE ++ @log_tester = lambda {|_| } + ex = assert_raise(OpenSSL::SSL::SSLError){ + http.request_get("/") {|res| } + } +- assert_match(/hostname \"127.0.0.1\" does not match/, ex.message) ++ re_msg = /certificate verify failed|hostname \"127.0.0.1\" does not match/ ++ assert_match(re_msg, ex.message) + end + + def test_timeout_during_SSL_handshake +@@ -193,16 +181,13 @@ def test_timeout_during_SSL_handshake + end + + def test_min_version +- http = Net::HTTP.new("127.0.0.1", config("port")) ++ http = Net::HTTP.new("localhost", config("port")) + http.use_ssl = true + http.min_version = :TLS1 +- http.verify_callback = Proc.new do |preverify_ok, store_ctx| +- true +- end +- ex = assert_raise(OpenSSL::SSL::SSLError){ +- http.request_get("/") {|res| } ++ http.cert_store = TEST_STORE ++ http.request_get("/") {|res| ++ assert_equal($test_net_http_data, res.body) + } +- assert_match(/hostname \"127.0.0.1\" does not match/, ex.message) + end + + def test_max_version diff --git a/ruby.spec b/ruby.spec index 995855f..2caa398 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 96 +%global release 97 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -148,6 +148,10 @@ Patch16: ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch # Fix some OpenSSL 1.1.1 test failures. # https://github.com/ruby/openssl/pull/202 Patch17: ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch +# https://github.com/ruby/openssl/pull/209 +Patch18: ruby-2.6.0-fix-test-failure-with-TLS-1.3.patch +# https://github.com/ruby/ruby/commit/1dfc377ae3b174b043d3f0ed36de57b0296b34d0 +Patch19: ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -534,6 +538,8 @@ rm -rf ext/fiddle/libffi* %patch15 -p1 %patch16 -p1 %patch17 -p1 +%patch18 -p1 +%patch19 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -759,10 +765,10 @@ sed -i '/def test_mdns_each_address$/,/^ end$/ s/^/#/' test/resolv/test_mdns.rb # For now, disable some OpenSSL tests incompatible with OpenSSL 1.1.1: # https://github.com/ruby/openssl/issues/207 -mv test/openssl/test_ssl.rb{,.disabled} -DISABLE_TESTS="$DISABLE_TESTS -n !/test_resumption/" -DISABLE_TESTS="$DISABLE_TESTS -n !/test_\(identity_verify_failure\|min_version\|session_reuse\)/" +DISABLE_TESTS="$DISABLE_TESTS -n !/test_\(add_certificate\|minmax_version\|options_disable_versions\|set_params_min_version\)/" DISABLE_TESTS="$DISABLE_TESTS -n !/test_do_not_allow_invalid_client_cert_auth_connection/" +# https://github.com/ruby/openssl/issues/208 +DISABLE_TESTS="$DISABLE_TESTS -n !/^test_constants$/" make check TESTS="-v $DISABLE_TESTS" @@ -1083,6 +1089,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Mon Aug 13 2018 Vít Ondruch - 2.5.1-97 +- Fix TLS 1.3 issues. + * Tue Jul 31 2018 Florian Weimer - 2.5.1-96 - Rebuild with fixed binutils From 936827a34bd66c2a71bcec9eb875ec95e9118d7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 13 Aug 2018 16:10:45 +0200 Subject: [PATCH 294/530] Properly execute entire test suite. --- ruby.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 2caa398..61126e9 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 97 +%global release 98 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -768,7 +768,7 @@ sed -i '/def test_mdns_each_address$/,/^ end$/ s/^/#/' test/resolv/test_mdns.rb DISABLE_TESTS="$DISABLE_TESTS -n !/test_\(add_certificate\|minmax_version\|options_disable_versions\|set_params_min_version\)/" DISABLE_TESTS="$DISABLE_TESTS -n !/test_do_not_allow_invalid_client_cert_auth_connection/" # https://github.com/ruby/openssl/issues/208 -DISABLE_TESTS="$DISABLE_TESTS -n !/^test_constants$/" +DISABLE_TESTS="$DISABLE_TESTS -n !/test_constants/" make check TESTS="-v $DISABLE_TESTS" @@ -1089,6 +1089,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Mon Aug 13 2018 Vít Ondruch - 2.5.1-98 +- Properly execute entire test suite. + * Mon Aug 13 2018 Vít Ondruch - 2.5.1-97 - Fix TLS 1.3 issues. From ec97a0708b71b52b2e47fa3732669b8e64cb90de Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Tue, 28 Aug 2018 13:50:33 +0000 Subject: [PATCH 295/530] Fix generated rdoc template issues. --- ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch | 34 +++++++++++++++++++ ruby.spec | 9 ++++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch diff --git a/ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch b/ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch new file mode 100644 index 0000000..e108270 --- /dev/null +++ b/ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch @@ -0,0 +1,34 @@ +From d05e6269d4a4dfd701f5ddb3ae34306cba891511 Mon Sep 17 00:00:00 2001 +From: Jun Aruga +Date: Fri, 3 Aug 2018 11:35:55 +0200 +Subject: [PATCH] Fix indent and typo from moveTimout to moveTimeout. + +--- + lib/rdoc/generator/template/json_index/js/navigation.js | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/lib/rdoc/generator/template/json_index/js/navigation.js b/lib/rdoc/generator/template/json_index/js/navigation.js +index e4126812..43c5118a 100644 +--- a/lib/rdoc/generator/template/json_index/js/navigation.js ++++ b/lib/rdoc/generator/template/json_index/js/navigation.js +@@ -59,9 +59,8 @@ Navigation = new function() { + } + break; + case 13: //Event.KEY_RETURN: +- if (this.$current) +- e.preventDefault(); +- this.select(this.$current); ++ if (this.$current) e.preventDefault(); ++ this.select(this.$current); + break; + } + if (e.ctrlKey && e.shiftKey) this.select(this.$current); +@@ -80,7 +79,7 @@ Navigation = new function() { + var go = function() { + if (!_this.moveTimeout) return; + _this[isDown ? 'moveDown' : 'moveUp'](); +- _this.moveTimout = setTimeout(go, 100); ++ _this.moveTimeout = setTimeout(go, 100); + } + this.moveTimeout = setTimeout(go, 200); + } diff --git a/ruby.spec b/ruby.spec index 61126e9..cc4856d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 98 +%global release 99 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -145,6 +145,9 @@ Patch15: ruby-2.6.0-library-options-to-MAINLIBS.patch # Do not require C++ compiler. # https://github.com/rubygems/rubygems/pull/2367 Patch16: ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch +# https://github.com/ruby/rdoc/commit/d05e6269d4a4dfd701f5ddb3ae34306cba891511 +Patch20: ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch + # Fix some OpenSSL 1.1.1 test failures. # https://github.com/ruby/openssl/pull/202 Patch17: ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch @@ -540,6 +543,7 @@ rm -rf ext/fiddle/libffi* %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1089,6 +1093,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Tue Aug 28 2018 Jun Aruga - 2.5.1-99 +- Fix generated rdoc template issues. + * Mon Aug 13 2018 Vít Ondruch - 2.5.1-98 - Properly execute entire test suite. From b19096d798421258647100d9d688f8b7491a9279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 29 Aug 2018 18:31:47 +0200 Subject: [PATCH 296/530] Cleanly apply patches. --- ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch | 2 +- ...net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch b/ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch index 919fb00..e1edc73 100644 --- a/ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch +++ b/ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch @@ -26,7 +26,7 @@ index c1205563..b4393e68 100644 def test_new_break assert_nil(OpenSSL::PKey::RSA.new(1024) { break }) assert_raise(RuntimeError) do -@@ -256,7 +263,7 @@ def test_pem_passwd +@@ -289,7 +296,7 @@ def test_pem_passwd end def test_dup diff --git a/ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch b/ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch index 707dbd7..b81800e 100644 --- a/ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch +++ b/ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch @@ -44,7 +44,7 @@ diff --git a/lib/net/http.rb b/lib/net/http.rb index 281b15cedff0..683a884f5dbe 100644 --- a/lib/net/http.rb +++ b/lib/net/http.rb -@@ -983,6 +983,10 @@ def connect +@@ -969,6 +969,10 @@ def connect end @ssl_context = OpenSSL::SSL::SSLContext.new @ssl_context.set_params(ssl_parameters) @@ -55,7 +55,7 @@ index 281b15cedff0..683a884f5dbe 100644 D "starting SSL for #{conn_address}:#{conn_port}..." s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context) s.sync_close = true -@@ -990,13 +994,12 @@ def connect +@@ -976,13 +980,12 @@ def connect s.hostname = @address if s.respond_to? :hostname= if @ssl_session and Process.clock_gettime(Process::CLOCK_REALTIME) < @ssl_session.time.to_f + @ssl_session.timeout From e91d1127db42c82e12b5459a3c2c85841ed4d3b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 29 Aug 2018 18:35:17 +0200 Subject: [PATCH 297/530] Additional OpenSSL 1.1.1 fixes. --- ...6.0-config-support-include-directive.patch | 182 +++++++ ...-fix-test-failure-with-TLS-1.3-maint.patch | 78 +++ ...-2.6.0-use-larger-keys-for-SSL-tests.patch | 486 ++++++++++++++++++ ruby.spec | 23 +- 4 files changed, 764 insertions(+), 5 deletions(-) create mode 100644 ruby-2.6.0-config-support-include-directive.patch create mode 100644 ruby-2.6.0-fix-test-failure-with-TLS-1.3-maint.patch create mode 100644 ruby-2.6.0-use-larger-keys-for-SSL-tests.patch diff --git a/ruby-2.6.0-config-support-include-directive.patch b/ruby-2.6.0-config-support-include-directive.patch new file mode 100644 index 0000000..27ef50f --- /dev/null +++ b/ruby-2.6.0-config-support-include-directive.patch @@ -0,0 +1,182 @@ +From f46bac1f3e8634e24c747d06b28e11b874f1e488 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Thu, 16 Aug 2018 19:40:48 +0900 +Subject: [PATCH] config: support .include directive + +OpenSSL 1.1.1 introduces a new '.include' directive. Update our config +parser to support that. + +As mentioned in the referenced GitHub issue, we should use the OpenSSL +API instead of implementing the parsing logic ourselves, but it will +need backwards-incompatible changes which we can't backport to stable +versions. So continue to use the Ruby implementation for now. + +Reference: https://github.com/ruby/openssl/issues/208 +--- + ext/openssl/lib/openssl/config.rb | 54 ++++++++++++++++++++++++++++--------------- + test/openssl/test_config.rb | 54 +++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 90 insertions(+), 18 deletions(-) + +diff --git a/ext/openssl/lib/openssl/config.rb b/ext/openssl/lib/openssl/config.rb +index 88225451..ba3a54c8 100644 +--- a/ext/openssl/lib/openssl/config.rb ++++ b/ext/openssl/lib/openssl/config.rb +@@ -77,29 +77,44 @@ def get_key_string(data, section, key) # :nodoc: + def parse_config_lines(io) + section = 'default' + data = {section => {}} +- while definition = get_definition(io) ++ io_stack = [io] ++ while definition = get_definition(io_stack) + definition = clear_comments(definition) + next if definition.empty? +- if definition[0] == ?[ ++ case definition ++ when /\A\[/ + if /\[([^\]]*)\]/ =~ definition + section = $1.strip + data[section] ||= {} + else + raise ConfigError, "missing close square bracket" + end +- else +- if /\A([^:\s]*)(?:::([^:\s]*))?\s*=(.*)\z/ =~ definition +- if $2 +- section = $1 +- key = $2 +- else +- key = $1 ++ when /\A\.include (.+)\z/ ++ path = $1 ++ if File.directory?(path) ++ files = Dir.glob(File.join(path, "*.{cnf,conf}"), File::FNM_EXTGLOB) ++ else ++ files = [path] ++ end ++ ++ files.each do |filename| ++ begin ++ io_stack << StringIO.new(File.read(filename)) ++ rescue ++ raise ConfigError, "could not include file '%s'" % filename + end +- value = unescape_value(data, section, $3) +- (data[section] ||= {})[key] = value.strip ++ end ++ when /\A([^:\s]*)(?:::([^:\s]*))?\s*=(.*)\z/ ++ if $2 ++ section = $1 ++ key = $2 + else +- raise ConfigError, "missing equal sign" ++ key = $1 + end ++ value = unescape_value(data, section, $3) ++ (data[section] ||= {})[key] = value.strip ++ else ++ raise ConfigError, "missing equal sign" + end + end + data +@@ -212,10 +227,10 @@ def clear_comments(line) + scanned.join + end + +- def get_definition(io) +- if line = get_line(io) ++ def get_definition(io_stack) ++ if line = get_line(io_stack) + while /[^\\]\\\z/ =~ line +- if extra = get_line(io) ++ if extra = get_line(io_stack) + line += extra + else + break +@@ -225,9 +240,12 @@ def get_definition(io) + end + end + +- def get_line(io) +- if line = io.gets +- line.gsub(/[\r\n]*/, '') ++ def get_line(io_stack) ++ while io = io_stack.last ++ if line = io.gets ++ return line.gsub(/[\r\n]*/, '') ++ end ++ io_stack.pop + end + end + end +diff --git a/test/openssl/test_config.rb b/test/openssl/test_config.rb +index 99dcc497..5653b5d0 100644 +--- a/test/openssl/test_config.rb ++++ b/test/openssl/test_config.rb +@@ -120,6 +120,49 @@ def test_s_parse_format + assert_equal("error in line 7: missing close square bracket", excn.message) + end + ++ def test_s_parse_include ++ in_tmpdir("ossl-config-include-test") do |dir| ++ Dir.mkdir("child") ++ File.write("child/a.conf", <<~__EOC__) ++ [default] ++ file-a = a.conf ++ [sec-a] ++ a = 123 ++ __EOC__ ++ File.write("child/b.cnf", <<~__EOC__) ++ [default] ++ file-b = b.cnf ++ [sec-b] ++ b = 123 ++ __EOC__ ++ File.write("include-child.conf", <<~__EOC__) ++ key_outside_section = value_a ++ .include child ++ __EOC__ ++ ++ include_file = <<~__EOC__ ++ [default] ++ file-main = unnamed ++ [sec-main] ++ main = 123 ++ .include include-child.conf ++ __EOC__ ++ ++ # Include a file by relative path ++ c1 = OpenSSL::Config.parse(include_file) ++ assert_equal(["default", "sec-a", "sec-b", "sec-main"], c1.sections.sort) ++ assert_equal(["file-main", "file-a", "file-b"], c1["default"].keys) ++ assert_equal({"a" => "123"}, c1["sec-a"]) ++ assert_equal({"b" => "123"}, c1["sec-b"]) ++ assert_equal({"main" => "123", "key_outside_section" => "value_a"}, c1["sec-main"]) ++ ++ # Relative paths are from the working directory ++ assert_raise(OpenSSL::ConfigError) do ++ Dir.chdir("child") { OpenSSL::Config.parse(include_file) } ++ end ++ end ++ end ++ + def test_s_load + # alias of new + c = OpenSSL::Config.load +@@ -299,6 +342,17 @@ def test_clone + @it['newsection'] = {'a' => 'b'} + assert_not_equal(@it.sections.sort, c.sections.sort) + end ++ ++ private ++ ++ def in_tmpdir(*args) ++ Dir.mktmpdir(*args) do |dir| ++ dir = File.realpath(dir) ++ Dir.chdir(dir) do ++ yield dir ++ end ++ end ++ end + end + + end diff --git a/ruby-2.6.0-fix-test-failure-with-TLS-1.3-maint.patch b/ruby-2.6.0-fix-test-failure-with-TLS-1.3-maint.patch new file mode 100644 index 0000000..91ad89c --- /dev/null +++ b/ruby-2.6.0-fix-test-failure-with-TLS-1.3-maint.patch @@ -0,0 +1,78 @@ +--- a/test/openssl/test_ssl.rb ++++ b/test/openssl/test_ssl.rb +@@ -67,6 +67,8 @@ + assert_equal @svr_cert.subject, ssl.peer_cert.subject + assert_equal [@svr_cert.subject, @ca_cert.subject], + ssl.peer_cert_chain.map(&:subject) ++ ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + end + end +@@ -892,7 +894,9 @@ + } + start_server(ctx_proc: ctx_proc, ignore_listener_error: true) do |port| + begin +- server_connect(port) { } ++ server_connect(port) { |ssl| ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets ++ } + rescue OpenSSL::SSL::SSLError, Errno::ECONNRESET + else + supported << ver +@@ -950,6 +954,7 @@ + if ver == cver + server_connect(port, ctx1) { |ssl| + assert_equal vmap[cver][:name], ssl.ssl_version ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + else + assert_handshake_error { server_connect(port, ctx1) { } } +@@ -963,6 +968,7 @@ + if ver == cver + server_connect(port, ctx2) { |ssl| + assert_equal vmap[cver][:name], ssl.ssl_version ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + else + assert_handshake_error { server_connect(port, ctx2) { } } +@@ -975,6 +981,7 @@ + ctx3.min_version = ctx3.max_version = nil + server_connect(port, ctx3) { |ssl| + assert_equal vmap[ver][:name], ssl.ssl_version ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + } + end +@@ -993,6 +1000,7 @@ + ctx1.min_version = cver + server_connect(port, ctx1) { |ssl| + assert_equal vmap[supported.last][:name], ssl.ssl_version ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + + # Client sets max_version +@@ -1001,6 +1009,7 @@ + if cver >= sver + server_connect(port, ctx2) { |ssl| + assert_equal vmap[cver][:name], ssl.ssl_version ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + else + assert_handshake_error { server_connect(port, ctx2) { } } +@@ -1019,6 +1028,7 @@ + if cver <= sver + server_connect(port, ctx1) { |ssl| + assert_equal vmap[sver][:name], ssl.ssl_version ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + else + assert_handshake_error { server_connect(port, ctx1) { } } +@@ -1033,6 +1043,7 @@ + else + assert_equal vmap[cver][:name], ssl.ssl_version + end ++ ssl.puts "abc"; assert_equal "abc\n", ssl.gets + } + end + } diff --git a/ruby-2.6.0-use-larger-keys-for-SSL-tests.patch b/ruby-2.6.0-use-larger-keys-for-SSL-tests.patch new file mode 100644 index 0000000..62f9488 --- /dev/null +++ b/ruby-2.6.0-use-larger-keys-for-SSL-tests.patch @@ -0,0 +1,486 @@ +From b0bcb19cb4f95d260c5993df0aaa3667522fb99d Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Thu, 16 Aug 2018 20:54:47 +0900 +Subject: [PATCH 1/2] test/openssl/test_pair: fix deadlock in + test_connect_accept_nonblock + +Call IO.select with a timeout value and limit the number of retries to +prevent stacking forever. + +Reference: https://github.com/ruby/openssl/issues/214 +--- + test/openssl/test_pair.rb | 51 ++++++++++++++++++++--------------------------- + 1 file changed, 22 insertions(+), 29 deletions(-) + +diff --git a/test/openssl/test_pair.rb b/test/openssl/test_pair.rb +index ea5f0dcf..eac3655e 100644 +--- a/test/openssl/test_pair.rb ++++ b/test/openssl/test_pair.rb +@@ -442,7 +442,7 @@ def test_connect_accept_nonblock_no_exception + end + + def test_connect_accept_nonblock +- ctx = OpenSSL::SSL::SSLContext.new() ++ ctx = OpenSSL::SSL::SSLContext.new + ctx.cert = @svr_cert + ctx.key = @svr_key + ctx.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey_dh("dh1024") } +@@ -451,45 +451,38 @@ def test_connect_accept_nonblock + + th = Thread.new { + s2 = OpenSSL::SSL::SSLSocket.new(sock2, ctx) +- s2.sync_close = true +- begin ++ 5.times { ++ begin ++ break s2.accept_nonblock ++ rescue IO::WaitReadable ++ IO.select([s2], nil, nil, 1) ++ rescue IO::WaitWritable ++ IO.select(nil, [s2], nil, 1) ++ end + sleep 0.2 +- s2.accept_nonblock ++ } ++ } ++ ++ s1 = OpenSSL::SSL::SSLSocket.new(sock1) ++ 5.times { ++ begin ++ break s1.connect_nonblock + rescue IO::WaitReadable +- IO.select([s2]) +- retry ++ IO.select([s1], nil, nil, 1) + rescue IO::WaitWritable +- IO.select(nil, [s2]) +- retry ++ IO.select(nil, [s1], nil, 1) + end +- s2 +- } +- +- sleep 0.1 +- ctx = OpenSSL::SSL::SSLContext.new() +- s1 = OpenSSL::SSL::SSLSocket.new(sock1, ctx) +- begin + sleep 0.2 +- s1.connect_nonblock +- rescue IO::WaitReadable +- IO.select([s1]) +- retry +- rescue IO::WaitWritable +- IO.select(nil, [s1]) +- retry +- end +- s1.sync_close = true ++ } + + s2 = th.value + + s1.print "a\ndef" + assert_equal("a\n", s2.gets) + ensure +- th.join if th +- s1.close if s1 && !s1.closed? +- s2.close if s2 && !s2.closed? +- sock1.close if sock1 && !sock1.closed? +- sock2.close if sock2 && !sock2.closed? ++ sock1&.close ++ sock2&.close ++ th&.join + end + end + + +From 5ba99ad7ae1267ed964f53906530579299f3fcc6 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Thu, 16 Aug 2018 20:04:13 +0900 +Subject: [PATCH 2/2] test: use larger keys for SSL tests + +Some systems enforce a system-wide policy to restrict key sizes used in +SSL/TLS. Use larger ones if possible so that the test suite runs +successfully. + +New PEM files test/openssl/fixtures/pkey/{dh-1,rsa-1,rsa-2,rsa-3}.pem are added +to the tree, and SSL tests now use them instead of the fixed-size keys. + +Reference: https://github.com/ruby/openssl/issues/215 +--- + test/openssl/fixtures/pkey/dh-1.pem | 13 +++++++++ + test/openssl/fixtures/pkey/rsa-1.pem | 51 ++++++++++++++++++++++++++++++++++++ + test/openssl/fixtures/pkey/rsa-2.pem | 51 ++++++++++++++++++++++++++++++++++++ + test/openssl/fixtures/pkey/rsa-3.pem | 51 ++++++++++++++++++++++++++++++++++++ + test/openssl/test_pair.rb | 8 +++--- + test/openssl/test_pkey_dh.rb | 8 +++--- + test/openssl/test_ssl.rb | 11 ++++---- + test/openssl/utils.rb | 14 +++++----- + 8 files changed, 186 insertions(+), 21 deletions(-) + create mode 100644 test/openssl/fixtures/pkey/dh-1.pem + create mode 100644 test/openssl/fixtures/pkey/rsa-1.pem + create mode 100644 test/openssl/fixtures/pkey/rsa-2.pem + create mode 100644 test/openssl/fixtures/pkey/rsa-3.pem + +diff --git a/test/openssl/fixtures/pkey/dh-1.pem b/test/openssl/fixtures/pkey/dh-1.pem +new file mode 100644 +index 00000000..3340a6a1 +--- /dev/null ++++ b/test/openssl/fixtures/pkey/dh-1.pem +@@ -0,0 +1,13 @@ ++-----BEGIN DH PARAMETERS----- ++MIICCAKCAgEAvRzXYxY6L2DjeYmm1eowtMDu1it3j+VwFr6s6PRWzc1apMtztr9G ++xZ2mYndUAJLgNLO3n2fUDCYVMB6ZkcekW8Siocof3xWiMA6wqZ6uw0dsE3q7ZX+6 ++TLjgSjaXeGvjutvuEwVrFeaUi83bMgfXN8ToxIQVprIF35sYFt6fpbFATKfW7qqi ++P1pQkjmCskU4tztaWvlLh0qg85wuQGnpJaQT3gS30378i0IGbA0EBvJcSpTHYbLa ++nsdI9bfN/ZVgeolVMNMU9/n8R8vRhNPcHuciFwaqS656q+HavCIyxw/LfjSwwFvR ++TngCn0wytRErkzFIXnRKckh8/BpI4S+0+l1NkOwG4WJ55KJ/9OOdZW5o/QCp2bDi ++E0JN1EP/gkSom/prq8JR/yEqtsy99uc5nUxPmzv0IgdcFHZEfiQU7iRggEbx7qfQ ++Ve55XksmmJInmpCy1bSabAEgIKp8Ckt5KLYZ0RgTXUhcEpsxEo6cuAwoSJT5o4Rp ++yG3xow2ozPcqZkvb+d2CHj1sc54w9BVFAjVANEKmRil/9WKz14bu3wxEhOPqC54n ++QojjLcoXSoT66ZUOQnYxTSiLtzoKGPy8cAVPbkBrXz2u2sj5gcvr1JjoGjdHm9/3 ++qnqC8fsTz8UndKNIQC337o4K0833bQMzRGl1/qjbAPit2B7E3b6xTZMCAQI= ++-----END DH PARAMETERS----- +diff --git a/test/openssl/fixtures/pkey/rsa-1.pem b/test/openssl/fixtures/pkey/rsa-1.pem +new file mode 100644 +index 00000000..bd5a624f +--- /dev/null ++++ b/test/openssl/fixtures/pkey/rsa-1.pem +@@ -0,0 +1,51 @@ ++-----BEGIN RSA PRIVATE KEY----- ++MIIJJwIBAAKCAgEArIEJUYZrXhMfUXXdl2gLcXrRB4ciWNEeXt5UVLG0nPhygZwJ ++xis8tOrjXOJEpUXUsfgF35pQiJLD4T9/Vp3zLFtMOOQjOR3AxjIelbH9KPyGFEr9 ++TcPtsJ24zhcG7RbwOGXR4iIcDaTx+bCLSAd7BjG3XHQtyeepGGRZkGyGUvXjPorH ++XP+dQjQnMd09wv0GMZSqQ06PedUUKQ4PJRfMCP+mwjFP+rB3NZuThF0CsNmpoixg ++GdoQ591Yrf5rf2Bs848JrYdqJlKlBL6rTFf2glHiC+mE5YRny7RZtv/qIkyUNotV ++ce1cE0GFrRmCpw9bqulDDcgKjFkhihTg4Voq0UYdJ6Alg7Ur4JerKTfyCaRGF27V ++fh/g2A2/6Vu8xKYYwTAwLn+Tvkx9OTVZ1t15wM7Ma8hHowNoO0g/lWkeltgHLMji ++rmeuIYQ20BQmdx2RRgWKl57D0wO/N0HIR+Bm4vcBoNPgMlk9g5WHA6idHR8TLxOr ++dMMmTiWfefB0/FzGXBv7DuuzHN3+urdCvG1QIMFQ06kHXhr4rC28KbWIxg+PJGM8 ++oGNEGtGWAOvi4Ov+BVsIdbD5Sfyb4nY3L9qqPl6TxRxMWTKsYCYx11jC8civCzOu ++yL1z+wgIICJ6iGzrfYf6C2BiNV3BC1YCtp2XsG+AooIxCwjL2CP/54MuRnUCAwEA ++AQKCAgAP4+8M0HoRd2d6JIZeDRqIwIyCygLy9Yh7qrVP+/KsRwKdR9dqps73x29c ++Pgeexdj67+Lynw9uFT7v/95mBzTAUESsNO+9sizw1OsWVQgB/4kGU4YT5Ml/bHf6 ++nApqSqOkPlTgJM46v4f+vTGHWBEQGAJRBO62250q/wt1D1osSDQ/rZ8BxRYiZBV8 ++NWocDRzF8nDgtFrpGSS7R21DuHZ2Gb6twscgS6MfkA49sieuTM6gfr/3gavu/+fM ++V1Rlrmc65GE61++CSjijQEEdTjkJ9isBd+hjEBhTnnBpOBfEQxOgFqOvU/MYXv/G ++W0Q6yWJjUwt3OIcoOImrY5L3j0vERneA1Alweqsbws3fXXMjA+jhLxlJqjPvSAKc ++POi7xu7QCJjSSLAzHSDPdmGmfzlrbdWS1h0mrC5YZYOyToLajfnmAlXNNrytnePg ++JV9/1136ZFrJyEi1JVN3kyrC+1iVd1E+lWK0U1UQ6/25tJvKFc1I+xToaUbK10UN ++ycXib7p2Zsc/+ZMlPRgCxWmpIHmKhnwbO7vtRunnnc6wzhvlQQNHWlIvkyQukV50 ++6k/bzWw0M6A98B4oCICIcxcpS3njDlHyL7NlkCD+/OfZp6X3RZF/m4grmA2doebz ++glsaNMyGHFrpHkHq19Y63Y4jtBdW/XuBv06Cnr4r3BXdjEzzwQKCAQEA5bj737Nk ++ZLA0UgzVVvY67MTserTOECIt4i37nULjRQwsSFiz0AWFOBwUCBJ5N2qDEelbf0Fa ++t4VzrphryEgzLz/95ZXi+oxw1liqCHi8iHeU2wSclDtx2jKv2q7bFvFSaH4CKC4N ++zBJNfP92kdXuAjXkbK/jWwr64fLNh/2KFWUAmrYmtGfnOjjyL+yZhPxBatztE58q ++/T61pkvP9NiLfrr7Xq8fnzrwqGERhXKueyoK6ig9ZJPZ2VTykMUUvNYJJ7OYQZru ++EYA3zkuEZifqmjgF57Bgg7dkkIh285TzH3CNf3MCMTmjlWVyHjlyeSPYgISB9Mys ++VKKQth+SvYcChQKCAQEAwDyCcolA7+bQBfECs6GXi7RYy2YSlx562S5vhjSlY9Ko ++WiwVJWviF7uSBdZRnGUKoPv4K4LV34o2lJpSSTi5Xgp7FH986VdGePe3p4hcXSIZ ++NtsKImLVLnEjrmkZExfQl7p0MkcU/LheCf/eEZVp0Z84O54WCs6GRm9wHYIUyrag ++9FREqqxTRVNhQQ2EDVGq1slREdwB+aygE76axK/qosk0RaoLzGZiMn4Sb8bpJxXO ++mee+ftq5bayVltfR0DhC8eHkcPPFeQMll1g+ML7HbINwHTr01ONm3cFUO4zOLBOO ++ws/+vtNfiv6S/lO1RQSRoiApbENBLdSc3V8Cy70PMQKCAQBOcZN4uP5gL5c+KWm0 ++T1KhxUDnSdRPyAwY/xC7i7qlullovvlv4GK0XUot03kXBkUJmcEHvF5o6qYtCZlM ++g/MOgHCHtF4Upl5lo1M0n13pz8PB4lpBd+cR1lscdrcTp4Y3bkf4RnmppNpXA7kO ++ZZnnoVWGE620ShSPkWTDuj0rvxisu+SNmClqRUXWPZnSwnzoK9a86443efF3fs3d ++UxCXTuxFUdGfgvXo2XStOBMCtcGSYflM3fv27b4C13mUXhY0O2yTgn8m9LyZsknc ++xGalENpbWmwqrjYl8KOF2+gFZV68FZ67Bm6otkJ4ta80VJw6joT9/eIe6IA34KIw ++G+ktAoIBAFRuPxzvC4ZSaasyX21l25mQbC9pdWDKEkqxCmp3VOyy6R4xnlgBOhwS ++VeAacV2vQyvRfv4dSLIVkkNSRDHEqCWVlNk75TDXFCytIAyE54xAHbLqIVlY7yim ++qHVB07F/FC6PxdkPPziAAU2DA5XVedSHibslg6jbbD4jU6qiJ1+hNrAZEs+jQC+C ++n4Ri20y+Qbp0URb2+icemnARlwgr+3HjzQGL3gK4NQjYNmDBjEWOXl9aWWB90FNL ++KahGwfAhxcVW4W56opCzwR7nsujV4eDXGba83itidRuQfd5pyWOyc1E86TYGwD/b ++79OkEElv6Ea8uXTDVS075GmWATRapQECggEAd9ZAbyT+KouTfi2e6yLOosxSZfns ++eF06QAJi5n9GOtdfK5fqdmHJqJI7wbubCnd0oxPeL71lRjrOAMXufaQRdZtfXSMn ++B1TljteNrh1en5xF451rCPR/Y6tNKBvIKnhy1waO27/vA+ovXrm17iR9rRuGZ29i ++IurlKA6z/96UdrSdpqITTCyTjSOBYg34f49ueGjlpL4+8HJq2wor4Cb1Sbv8ErqA ++bsQ/Jz+KIGUiuFCfNa6d6McPRXIrGgzpprXgfimkV3nj49QyrnuCF/Pc4psGgIaN ++l3EiGXzRt/55K7DQVadtbcjo9zREac8QnDD6dS/gOfJ82L7frQfMpNWgQA== ++-----END RSA PRIVATE KEY----- +diff --git a/test/openssl/fixtures/pkey/rsa-2.pem b/test/openssl/fixtures/pkey/rsa-2.pem +new file mode 100644 +index 00000000..e4fd4f43 +--- /dev/null ++++ b/test/openssl/fixtures/pkey/rsa-2.pem +@@ -0,0 +1,51 @@ ++-----BEGIN RSA PRIVATE KEY----- ++MIIJKAIBAAKCAgEA1HUbx825tG7+/ulC5DpDogzXqM2/KmeCwGXZY4XjiWa+Zj7b ++ECkZwQh7zxFUsPixGqQKJSyFwCogdaPzYTRNtqKKaw/IWS0um1PTn4C4/9atbIsf ++HVKu/fWg4VrZL+ixFIZxa8Z6pvTB2omMcx+uEzbXPsO01i1pHf7MaWBxUDGFyC9P ++lASJBfFZAf2Ar1H99OTS4SP+gxM9Kk5tcc22r8uFiqqbhJmQNSDApdHvT1zSZxAc ++T1BFEZqfmR0B0UegPyJc/9hW0dYpB9JjR29UaZRSta3LUMpqltoOF5bzaKVgMuBm ++Qy79xJ71LjGp8bKhgRaWXyPsDzAC0MQlOW6En0v8LK8fntivJEvw9PNOMcZ8oMTn ++no0NeVt32HiQJW8LIVo7dOLVFtguSBMWUVe8mdKbuIIULD6JlSYke9Ob6andUhzO ++U79m/aRWs2yjD6o5QAktjFBARdPgcpTdWfppc8xpJUkQgRmVhINoIMT9W6Wl898E ++P4aPx6mRV/k05ellN3zRgd9tx5dyNuj3RBaNmR47cAVvGYRQgtH9bQYs6jtf0oer ++A5yIYEKspNRlZZJKKrQdLflQFOEwjQJyZnTk7Mp0y21wOuEGgZBexew55/hUJDC2 ++mQ8CqjV4ki/Mm3z6Cw3jXIMNBJkH7oveBGSX0S9bF8A/73oOCU3W/LkORxECAwEA ++AQKCAgBLK7RMmYmfQbaPUtEMF2FesNSNMV72DfHBSUgFYpYDQ4sSeiLgMOqf1fSY ++azVf+F4RYwED7iDUwRMDDKNMPUlR2WjIQKlOhCH9a0dxJAZQ3xA1W3QC2AJ6cLIf ++ihlWTip5bKgszekPsYH1ZL2A7jCVM84ssuoE7cRHjKOelTUCfsMq9TJe2MvyglZP ++0fX6EjSctWm3pxiiH+iAU4d9wJ9my8fQLFUiMYNIiPIguYrGtbzsIlMh7PDDLcZS ++UmUWOxWDwRDOpSjyzadu0Q23dLiVMpmhFoDdcQENptFdn1c4K2tCFQuZscKwEt4F ++HiVXEzD5j5hcyUT4irA0VXImQ+hAH3oSDmn7wyHvyOg0bDZpUZXEHXb83Vvo54/d ++Fb4AOUva1dwhjci8CTEMxCENMy/CLilRv46AeHbOX8KMPM7BnRSJPptvTTh/qB9C ++HI5hxfkO+EOYnu0kUlxhJfrqG86H4IS+zA8HWiSEGxQteMjUQfgJoBzJ94YChpzo ++ePpKSpjxxl1PNNWKxWM3yUvlKmI2lNl6YNC8JpF2wVg4VvYkG7iVjleeRg21ay89 ++NCVMF98n3MI5jdzfDKACnuYxg7sw+gjMy8PSoFvQ5pvHuBBOpa8tho6vk7bLJixT ++QY5uXMNQaO6OwpkBssKpnuXhIJzDhO48nSjJ5nUEuadPH1nGwQKCAQEA7twrUIMi ++Vqze/X6VyfEBnX+n3ZyQHLGqUv/ww1ZOOHmSW5ceC4GxHa8EPDjoh9NEjYffwGq9 ++bfQh9Gntjk5gFipT/SfPrIhbPt59HthUqVvOGgSErCmn0vhsa0+ROpVi4K2WHS7O ++7SEwnoCWd6p1omon2olVY0ODlMH4neCx/ZuKV8SRMREubABlL8/MLp37AkgKarTY ++tewd0lpaZMvsjOhr1zVCGUUBxy87Fc7OKAcoQY8//0r8VMH7Jlga7F2PKVPzqRKf ++tjeW5jMAuRxTqtEdIeclJZwvUMxvb23BbBE+mtvKpXv69TB3DK8T1YIkhW2CidZW ++lad4MESC+QFNbQKCAQEA47PtULM/0ZFdE+PDDHOa2kJ2arm94sVIqF2168ZLXR69 ++NkvCWfjkUPDeejINCx7XQgk0d/+5BCvrJpcM7lE4XfnYVNtPpct1el6eTfaOcPU8 ++wAMsnq5n9Mxt02U+XRPtEqGk+lt0KLPDDSG88Z7jPmfftigLyPH6i/ZJyRUETlGk ++rGnWSx/LFUxQU5aBa2jUCjKOKa+OOk2jGg50A5Cmk26v9sA/ksOHisMjfdIpZc9P ++r4R0IteDDD5awlkWTF++5u1GpgU2yav4uan0wzY8OWYFzVyceA6+wffEcoplLm82 ++CPd/qJOB5HHkjoM+CJgfumFxlNtdowKvKNUxpoQNtQKCAQEAh3ugofFPp+Q0M4r6 ++gWnPZbuDxsLIR05K8vszYEjy4zup1YO4ygQNJ24fM91/n5Mo/jJEqwqgWd6w58ax ++tRclj00BCMXtGMrbHqTqSXWhR9LH66AGdPTHuXWpYZDnKliTlic/z1u+iWhbAHyl ++XEj2omIeKunc4gnod5cyYrKRouz3omLfi/pX33C19FGkWgjH2HpuViowBbhhDfCr ++9yJoEWC/0njl/hlTMdzLYcpEyxWMMuuC/FZXG+hPgWdWFh3XVzTEL3Fd3+hWEkp5 ++rYWwu2ITaSiHvHaDrAvZZVXW8WoynXnvzr+tECgmTq57zI4eEwSTl4VY5VfxZ0dl ++FsIzXQKCAQBC07GYd6MJPGJWzgeWhe8yk0Lxu6WRAll6oFYd5kqD/9uELePSSAup ++/actsbbGRrziMpVlinWgVctjvf0bjFbArezhqqPLgtTtnwtS0kOnvzGfIM9dms4D ++uGObISGWa5yuVSZ4G5MRxwA9wGMVfo4u6Iltin868FmZ7iRlkXd8DNYJi95KmgAe ++NhF1FrzQ6ykf/QpgDZfuYI63vPorea6JonieMHn39s622OJ3sNBZguheGL+E4j8h ++vsMgOskijQ8X8xdC7lDQC1qqEsk06ZvvNJQLW1zIl3tArhjHjPp5EEaJhym+Ldx3 ++UT3E3Zu9JfhZ2PNevqrShp0lnLw/pI3pAoIBAAUMz5Lj6V9ftsl1pTa8WDFeBJW0 ++Wa5AT1BZg/ip2uq2NLPnA5JWcD+v682fRSvIj1pU0DRi6VsXlzhs+1q3+sgqiXGz ++u2ArFylh8TvC1gXUctXKZz/M3Rqr6aSNoejUGLmvHre+ja/k6Zwmu6ePtB7dL50d ++6+xMTYquS4gLbrbSLcEu3iBAAnvRLreXK4KguPxaBdICB7v7epdpAKe3Z7hp/sst ++eJj1+6KRdlcmt8fh5MPkBBXa6I/9XGmX5UEo7q4wAxeM9nuFWY3watz/EO9LiO6P ++LmqUSWL65m4cX0VZPvhYEsHppKi1eoWGlHqS4Af5+aIXi2alu2iljQFeA+Q= ++-----END RSA PRIVATE KEY----- +diff --git a/test/openssl/fixtures/pkey/rsa-3.pem b/test/openssl/fixtures/pkey/rsa-3.pem +new file mode 100644 +index 00000000..6c9c9ced +--- /dev/null ++++ b/test/openssl/fixtures/pkey/rsa-3.pem +@@ -0,0 +1,51 @@ ++-----BEGIN RSA PRIVATE KEY----- ++MIIJKAIBAAKCAgEAzn+YCcOh7BIRzrb7TEuhQLD545+/Fx/zCYO3l+y/8ogUxMTg ++LG5HrcXlX3JP796ie90/GHIf8/lwczVhP1jk/keYjkwoTYDt477R7KRcJPyGqHRr ++qLp7AnZxtz3JLNboTgO3bAYzlvtsSKU/R3oehBbGHzEWCP2UEYj/Kky0zpcjkhZU ++jiErr9ARPq8+dOGqBf+CE2NLKYC1bu8hZe9AddvvN2SvfMN6uhJtEGZO1k8tScwf ++AyvPJ1Po/6z08pzMAgfBUCE95waAVeYJWIOlnNB4eEievzlXdPB9vEt8OOwtWfQX ++V8xyMsoKeAW05s413E0eTYx1aulFXdWwG2mWEBRtNzKF1iBudlg1a3x1zThWi1pY ++jW5vROvoWZMCbl9bYQ/LxOCVqDoUl86+NPEGeuESMzm5NvOQA2e0Ty5wphnt9M19 ++Wcc8neBhb6iCGqYzxWNvUYXZWUv1+/MrPHKyJuv7MSivwtctfp8SacUGxkd6T+u6 ++V6ntHf3qtN/5pAmni6nzUTgjC65MS0LEhi/RTzwafkIfifeJH7/LqFtjrursuwua +++p9lkACck/J5TpzaAfLroFQuepP8qgeq1cpD5Iii56IJ+FPSnkvesHuRUmZIkhtR ++VVsVqMaNPv/Uzc02bOaRXWP4auUY91mDKx/FDmORa9YCDQxMkKke05SWQ90CAwEA ++AQKCAgA0+B/c6VTgxGXS+7cMhB3yBTOkgva2jNh/6Uyv6Of345ZIPyQt4X/7gFbt ++G9qLcjWFxmQH9kZiA+snclrmr/vVijIE1l5EOz1KfUlGBYcpaal1DqALIQKqyA01 ++buDq4pmmYWesiw6yvP2yyMipohav1VOu7p1zYvCXaufhRtneYICcWaQI7VNSfvHd ++fYBs5PIDJd6M8Jx4Ie7obOjJSAzl7qu3LtmhDFev4Ugeu8+fQ6IfWv/dhWBW+zw6 ++UXhnv3bJUonw7wX8+/rxjdd54BMcXZF5cU9fR+s6MPJf2ZEc3OBpQaa3O9dTVeZH ++kVctGVpRj2qlg9EewoWro0PQVE5Mjah+mdFhPAHWoGl1xht6xJmg0uHYxMCzbUSz ++7NSS3knR0qieFvsp5ESY72i7DnQsbhbn6mTuYdVtm9bphxifAWCP3jFdft/bjtSF ++4yuPI7Qga+3m0B8QhtbWhEzPVon6NyiY7qfa6qllp0opEbw2hE22uGFFNJo2mpPa ++pe9VwARtD0IyfeklE7KrBEwV8NjTaAipZTZODw0w/dt4K3dOiePDl3pPWjmERpVg ++Lkw7XSCMtu5X87I1BbfOYbQhOXksPY+W9Asf6ETBeIZ8bD6Iypuk2ssool1lukqv ++yq1Y8gbR9B2x91ftYwXgzqBSvd8PFNsaXWLD3nrai2G1vb81lQKCAQEA6W02eZcN ++7wJfkqNokcuqhc5OKXH14gVIRV+KocG6f3vg88wrCg5J2GqNhBFuwVrafJjRenm6 ++C8zWdneeyrl6cztgbaySw7kXnqFdTBiuOT8bhiG5NTPjDQ109EucaTbZU9KUXk6k ++ChPlr4G6IPrONpvi/9BvDDZLZkwR6uIg1kFWBy9kZaxFUEIug02hrbkTpPtnEUrO ++r3nG0QL/D0vf+bm4YHIVRMH2O2ZTTWexMw9XlfCe1+WjbJ+PS35QRCRDcRdWHXDb ++HnIFIAajtH5LtaJLgWUYq3B25WkQYtbHmFkm94sp/G4trb8JIJGzVO8cj9t6KeAT ++LG+tk8OqplqsYwKCAQEA4ne81KXx8VNwsKVFqwmiDIoi1q3beNa2hoXdzAMrnYdj ++iLxbfCVgrKPav9hdfXPBncHaNlGsd2G5W1a1UsOr128lTdfBsgm1RVPhVMKvo3fl ++yUnWajtAR1q3tVEUhuFlbJ/RHEtxJaGrzudYCPWQiYhydpDgSckbxD8PuElEgFBX ++O91vnWZEjMsxrABWiZNBxmtBUEv+fjUU/9USYzO4sN79UeD1+ZuBxPFwscsRcjLr ++bPgZWOwiywH6UmQ+DJTzeu0wJ6jgPoy/pgEujsbPDz1wNos6NhA/RQv31QeX33/B ++7/F5XKNmbJ2AFb/B+xTaTQPg0pjT5Exm+HrNU5OivwKCAQEAsLLVi9FG4OiBBHXi ++UItFuChljoYPxVqOTMV4Id6OmLZjoOmqouASElsGaTTxDDkEL1FXMUk4Bnq21dLT ++R06EXPpTknISX0qbkJ9CCrqcGAWnhi+9DYMLmvPW1p7t9c9pUESVv5X0IxTQx7yB ++8zkoJLp4aYGUrj/jb7qhzZYDmWy3/JRpgXWYupp+rzJy8xiowDj22mYwczDRyaJl ++BWVAVL+7zHZPl07kYC6jXHLj9mzktkIBXBkfTriyNkmV5R82VkN+Eqc9l5xkOMwN ++3DHGieYjFf47YHuv5RVVLBy91puWHckgrU+SEHYOKLNidybSDivsHArdOMQJN1Pk ++uCznVQKCAQAYY7DQbfa6eLQAMixomSb8lrvdxueGAgmyPyR93jGKS5Rqm2521ket ++EBB07MZUxmyposDvbKhYSwv9TD9G5I/TKcMouP3BQM5m4vu3dygXQMhcfzk6Q5tO ++k/SI8Gx3gjq8EhIhK/bJiLnKFJwkit3AEhPRtRSSnbgB0JDO1gUslHpwlg55MxRa ++3V9CGN84/cTtq4tjLGwCB5F1Y+sRB/byBXHeqY2UDi1Rmnb6jtYYKGe2WpnQO84b ++cuEUknskO75lFLpE6ykLU3koVaQ/+CVAjOtS1He2btWBiCJurNysU0P9pVHeqjJT ++rDqpHPe1JK/F74783zyir5+/Tuph/9pdAoIBAANPdFRQkJVH8K6iuhxQk6vFqiYB ++MUxpIVeLonD0p9TgMdezVNESht/AIutc0+5wabM45XuDWFRTuonvcE8lckv2Ux3a ++AvSsamjuesxw2YmkEtzZouVqDU0+oxppQJiwBG3MiaHX9F5IfnK6YmQ6xPwZ6MXi ++9feq1jR4KOc1ZrHtRMNgjnBWEFWroGe3FHgV7O133hpMSshRFmwcbE0nAaDr82U9 ++sl8dclDjEKBxaqjAeNajOr+BU0w0AAwWXL7dt/ctG2QClcj9wqbEfsXnOR10h4AI ++rqkcvQrOLbTwcrOD/6R1rQfQXtEHKf1maThxosootAQZXdf6jxU3oonx3tU= ++-----END RSA PRIVATE KEY----- +diff --git a/test/openssl/test_pair.rb b/test/openssl/test_pair.rb +index eac3655e..8d6ca1e9 100644 +--- a/test/openssl/test_pair.rb ++++ b/test/openssl/test_pair.rb +@@ -10,7 +10,7 @@ def setup + ee_exts = [ + ["keyUsage", "keyEncipherment,digitalSignature", true], + ] +- @svr_key = OpenSSL::TestUtils::Fixtures.pkey("rsa1024") ++ @svr_key = OpenSSL::TestUtils::Fixtures.pkey("rsa-1") + @svr_cert = issue_cert(svr_dn, @svr_key, 1, ee_exts, nil, nil) + end + +@@ -23,7 +23,7 @@ def ssl_pair + sctx = OpenSSL::SSL::SSLContext.new + sctx.cert = @svr_cert + sctx.key = @svr_key +- sctx.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey_dh("dh1024") } ++ sctx.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey("dh-1") } + sctx.options |= OpenSSL::SSL::OP_NO_COMPRESSION + ssls = OpenSSL::SSL::SSLServer.new(tcps, sctx) + ns = ssls.accept +@@ -397,7 +397,7 @@ def test_connect_accept_nonblock_no_exception + ctx2 = OpenSSL::SSL::SSLContext.new + ctx2.cert = @svr_cert + ctx2.key = @svr_key +- ctx2.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey_dh("dh1024") } ++ ctx2.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey("dh-1") } + + sock1, sock2 = tcp_pair + +@@ -445,7 +445,7 @@ def test_connect_accept_nonblock + ctx = OpenSSL::SSL::SSLContext.new + ctx.cert = @svr_cert + ctx.key = @svr_key +- ctx.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey_dh("dh1024") } ++ ctx.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey("dh-1") } + + sock1, sock2 = tcp_pair + +diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb +index fb713813..79bf9bb7 100644 +--- a/test/openssl/test_pkey_dh.rb ++++ b/test/openssl/test_pkey_dh.rb +@@ -19,7 +19,7 @@ def test_new_break + end + + def test_DHparams +- dh1024 = Fixtures.pkey_dh("dh1024") ++ dh1024 = Fixtures.pkey("dh1024") + asn1 = OpenSSL::ASN1::Sequence([ + OpenSSL::ASN1::Integer(dh1024.p), + OpenSSL::ASN1::Integer(dh1024.g) +@@ -42,7 +42,7 @@ def test_DHparams + end + + def test_public_key +- dh = Fixtures.pkey_dh("dh1024") ++ dh = Fixtures.pkey("dh1024") + public_key = dh.public_key + assert_no_key(public_key) #implies public_key.public? is false! + assert_equal(dh.to_der, public_key.to_der) +@@ -50,14 +50,14 @@ def test_public_key + end + + def test_generate_key +- dh = Fixtures.pkey_dh("dh1024").public_key # creates a copy ++ dh = Fixtures.pkey("dh1024").public_key # creates a copy + assert_no_key(dh) + dh.generate_key! + assert_key(dh) + end + + def test_key_exchange +- dh = Fixtures.pkey_dh("dh1024") ++ dh = Fixtures.pkey("dh1024") + dh2 = dh.public_key + dh.generate_key! + dh2.generate_key! +diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb +index 408c7d82..2633f7c4 100644 +--- a/test/openssl/test_ssl.rb ++++ b/test/openssl/test_ssl.rb +@@ -708,7 +708,7 @@ def socketpair + + def test_tlsext_hostname + fooctx = OpenSSL::SSL::SSLContext.new +- fooctx.tmp_dh_callback = proc { Fixtures.pkey_dh("dh1024") } ++ fooctx.tmp_dh_callback = proc { Fixtures.pkey("dh-1") } + fooctx.cert = @cli_cert + fooctx.key = @cli_key + +@@ -760,7 +760,7 @@ def test_servername_cb_raises_an_exception_on_unknown_objects + ctx2 = OpenSSL::SSL::SSLContext.new + ctx2.cert = @svr_cert + ctx2.key = @svr_key +- ctx2.tmp_dh_callback = proc { Fixtures.pkey_dh("dh1024") } ++ ctx2.tmp_dh_callback = proc { Fixtures.pkey("dh-1") } + ctx2.servername_cb = lambda { |args| Object.new } + + sock1, sock2 = socketpair +@@ -1140,7 +1140,7 @@ def test_alpn_protocol_selection_cancel + ctx1 = OpenSSL::SSL::SSLContext.new + ctx1.cert = @svr_cert + ctx1.key = @svr_key +- ctx1.tmp_dh_callback = proc { Fixtures.pkey_dh("dh1024") } ++ ctx1.tmp_dh_callback = proc { Fixtures.pkey("dh-1") } + ctx1.alpn_select_cb = -> (protocols) { nil } + ssl1 = OpenSSL::SSL::SSLSocket.new(sock1, ctx1) + +@@ -1382,20 +1382,21 @@ def test_get_ephemeral_key + def test_dh_callback + pend "TLS 1.2 is not supported" unless tls12_supported? + ++ dh = Fixtures.pkey("dh-1") + called = false + ctx_proc = -> ctx { + ctx.ssl_version = :TLSv1_2 + ctx.ciphers = "DH:!NULL" + ctx.tmp_dh_callback = ->(*args) { + called = true +- Fixtures.pkey_dh("dh1024") ++ dh + } + } + start_server(ctx_proc: ctx_proc) do |port| + server_connect(port) { |ssl| + assert called, "dh callback should be called" + if ssl.respond_to?(:tmp_key) +- assert_equal Fixtures.pkey_dh("dh1024").to_der, ssl.tmp_key.to_der ++ assert_equal dh.to_der, ssl.tmp_key.to_der + end + } + end +diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb +index b7ddd891..fe626ade 100644 +--- a/test/openssl/utils.rb ++++ b/test/openssl/utils.rb +@@ -42,10 +42,8 @@ module Fixtures + + def pkey(name) + OpenSSL::PKey.read(read_file("pkey", name)) +- end +- +- def pkey_dh(name) +- # DH parameters can be read by OpenSSL::PKey.read atm ++ rescue OpenSSL::PKey::PKeyError ++ # TODO: DH parameters can be read by OpenSSL::PKey.read atm + OpenSSL::PKey::DH.new(read_file("pkey", name)) + end + +@@ -157,9 +155,9 @@ class OpenSSL::SSLTestCase < OpenSSL::TestCase + + def setup + super +- @ca_key = Fixtures.pkey("rsa2048") +- @svr_key = Fixtures.pkey("rsa1024") +- @cli_key = Fixtures.pkey("rsa2048") ++ @ca_key = Fixtures.pkey("rsa-1") ++ @svr_key = Fixtures.pkey("rsa-2") ++ @cli_key = Fixtures.pkey("rsa-3") + @ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA") + @svr = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=localhost") + @cli = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=localhost") +@@ -200,7 +198,7 @@ def start_server(verify_mode: OpenSSL::SSL::VERIFY_NONE, start_immediately: true + ctx.cert_store = store + ctx.cert = @svr_cert + ctx.key = @svr_key +- ctx.tmp_dh_callback = proc { Fixtures.pkey_dh("dh1024") } ++ ctx.tmp_dh_callback = proc { Fixtures.pkey("dh-1") } + ctx.verify_mode = verify_mode + ctx_proc.call(ctx) if ctx_proc + diff --git a/ruby.spec b/ruby.spec index cc4856d..81cb294 100644 --- a/ruby.spec +++ b/ruby.spec @@ -155,6 +155,16 @@ Patch17: ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch Patch18: ruby-2.6.0-fix-test-failure-with-TLS-1.3.patch # https://github.com/ruby/ruby/commit/1dfc377ae3b174b043d3f0ed36de57b0296b34d0 Patch19: ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch +# Additional test fixes taken from: +# https://github.com/ruby/openssl/issues/207#issuecomment-413454568 +# https://github.com/ruby/openssl/commit/158201f9b66607f380513708e3ab65f1e27694e6 +Patch21: ruby-2.6.0-fix-test-failure-with-TLS-1.3-maint.patch +# Add support for .include directive used by OpenSSL config files. +# https://github.com/ruby/openssl/pull/216 +Patch22: ruby-2.6.0-config-support-include-directive.patch +# Use larger keys to prevent test failures. +# https://github.com/ruby/openssl/pull/217 +Patch23: ruby-2.6.0-use-larger-keys-for-SSL-tests.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -544,6 +554,9 @@ rm -rf ext/fiddle/libffi* %patch18 -p1 %patch19 -p1 %patch20 -p1 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -767,12 +780,9 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/test_segv_\(setproctitle\|test\|loaded_featur # https://bugs.ruby-lang.org/issues/14175 sed -i '/def test_mdns_each_address$/,/^ end$/ s/^/#/' test/resolv/test_mdns.rb -# For now, disable some OpenSSL tests incompatible with OpenSSL 1.1.1: -# https://github.com/ruby/openssl/issues/207 -DISABLE_TESTS="$DISABLE_TESTS -n !/test_\(add_certificate\|minmax_version\|options_disable_versions\|set_params_min_version\)/" +# For now, disable test incompatible with OpenSSL 1.1.1: +# https://github.com/rubygems/rubygems/issues/2388 DISABLE_TESTS="$DISABLE_TESTS -n !/test_do_not_allow_invalid_client_cert_auth_connection/" -# https://github.com/ruby/openssl/issues/208 -DISABLE_TESTS="$DISABLE_TESTS -n !/test_constants/" make check TESTS="-v $DISABLE_TESTS" @@ -1093,6 +1103,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Wed Aug 29 2018 Vít Ondruch - 2.5.1-99 +- Additional OpenSSL 1.1.1 fixes. + * Tue Aug 28 2018 Jun Aruga - 2.5.1-99 - Fix generated rdoc template issues. From d5e84a533c0c6d5b92ea21ee5ba09b49b110dee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 30 Aug 2018 14:01:04 +0200 Subject: [PATCH 298/530] Add --with-cxxflags configuration for %gem_install macro. https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/3LTI2MQVBFNNLGLLA5JTYPNAFP7SQGAI/ --- macros.rubygems | 2 +- ruby.spec | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/macros.rubygems b/macros.rubygems index d2e8514..532ea6c 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -21,7 +21,7 @@ %gem_install(d:n:) \ mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \ \ -CONFIGURE_ARGS="--with-cflags='%{optflags}' $CONFIGURE_ARGS" \\\ +CONFIGURE_ARGS="--with-cflags='%{optflags}' --with-cxxflags='%{optflags}' $CONFIGURE_ARGS" \\\ gem install \\\ -V \\\ --local \\\ diff --git a/ruby.spec b/ruby.spec index 81cb294..f294e77 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1105,6 +1105,7 @@ make check TESTS="-v $DISABLE_TESTS" %changelog * Wed Aug 29 2018 Vít Ondruch - 2.5.1-99 - Additional OpenSSL 1.1.1 fixes. +- Add --with-cxxflags configuration for %%gem_install macro. * Tue Aug 28 2018 Jun Aruga - 2.5.1-99 - Fix generated rdoc template issues. From 7c66ce151d79dbdfe5e8ff62a1f4a2d32bc0a8c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 3 Sep 2018 14:10:56 +0200 Subject: [PATCH 299/530] Properly harden package using -fstack-protector-strong. --- ....0-configure-fstack-protector-strong.patch | 43 +++++++++++++++++++ ruby.spec | 9 +++- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 ruby-2.6.0-configure-fstack-protector-strong.patch diff --git a/ruby-2.6.0-configure-fstack-protector-strong.patch b/ruby-2.6.0-configure-fstack-protector-strong.patch new file mode 100644 index 0000000..e44d9bb --- /dev/null +++ b/ruby-2.6.0-configure-fstack-protector-strong.patch @@ -0,0 +1,43 @@ +From c8ccdbfe1e45cb3b832109d644296c0a3b3e0b59 Mon Sep 17 00:00:00 2001 +From: nobu +Date: Sun, 2 Sep 2018 03:49:31 +0000 +Subject: [PATCH] configure.ac: -fstack-protector-strong + +* configure.ac: use -fstack-protector-strong if available instead of + -fstack-protector conditionally. [ruby-core:88788] [Misc #15053] + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64614 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + configure.ac | 17 ++++++++++------- + 1 file changed, 10 insertions(+), 7 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 9328fa532de0..b8ee57239215 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -837,15 +837,18 @@ AS_IF([test "$GCC" = yes], [ + stack_protector=no + ]) + AS_IF([test -z "${stack_protector+set}"], [ +- RUBY_TRY_CFLAGS(-fstack-protector, [stack_protector=yes], [stack_protector=no]) +- AS_IF([test "x$stack_protector" = xyes], [ +- RUBY_TRY_LDFLAGS(-fstack-protector, [], [stack_protector=broken]) ++ AS_FOR(option, opt, [-fstack-protector-strong -fstack-protector], [ ++ RUBY_TRY_CFLAGS(option, [stack_protector=yes]) ++ AS_IF([test "x$stack_protector" = xyes], [ ++ RUBY_TRY_LDFLAGS(option, [], [stack_protector=]) ++ ]) ++ AS_IF([test "x$stack_protector" = xyes], [stack_protector=option; break]) + ]) + ]) +- AS_IF([test "x$stack_protector" = xyes], [ +- RUBY_APPEND_OPTION(XCFLAGS, -fstack-protector) +- RUBY_APPEND_OPTION(XLDFLAGS, -fstack-protector) +- RUBY_APPEND_OPTION(LDFLAGS, -fstack-protector) ++ AS_CASE(["$stack_protector"], [-*], [ ++ RUBY_APPEND_OPTION(XCFLAGS, $stack_protector) ++ RUBY_APPEND_OPTION(XLDFLAGS, $stack_protector) ++ RUBY_APPEND_OPTION(LDFLAGS, $stack_protector) + ]) + + AS_CASE("${compress_debug_sections:-zlib}", diff --git a/ruby.spec b/ruby.spec index f294e77..fbfe13c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 99 +%global release 100 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -147,6 +147,9 @@ Patch15: ruby-2.6.0-library-options-to-MAINLIBS.patch Patch16: ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch # https://github.com/ruby/rdoc/commit/d05e6269d4a4dfd701f5ddb3ae34306cba891511 Patch20: ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch +# Properly harden package using -fstack-protector-strong. +# https://bugs.ruby-lang.org/issues/15053 +Patch24: ruby-2.6.0-configure-fstack-protector-strong.patch # Fix some OpenSSL 1.1.1 test failures. # https://github.com/ruby/openssl/pull/202 @@ -557,6 +560,7 @@ rm -rf ext/fiddle/libffi* %patch21 -p1 %patch22 -p1 %patch23 -p1 +%patch24 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1103,6 +1107,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Mon Sep 03 2018 Vít Ondruch - 2.5.1-100 +- Properly harden package using -fstack-protector-strong. + * Wed Aug 29 2018 Vít Ondruch - 2.5.1-99 - Additional OpenSSL 1.1.1 fixes. - Add --with-cxxflags configuration for %%gem_install macro. From 32488add5b71c56f2494aed35c8c9937396e3cf1 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 19 Oct 2018 13:58:00 +0200 Subject: [PATCH 300/530] Update to Ruby 2.5.3. --- ruby-1.9.3-mkmf-verbose.patch | 2 +- ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch | 112 ---------- ...-test-failures-Kiritimati-and-Lisbon.patch | 115 ---------- ...-fix-test-failure-with-TLS-1.3-maint.patch | 78 ------- ...-2.6.0-fix-test-failure-with-TLS-1.3.patch | 203 ------------------ ruby.spec | 24 +-- sources | 2 +- 7 files changed, 8 insertions(+), 528 deletions(-) delete mode 100644 ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch delete mode 100644 ruby-2.5.1-TestTimeTZ-test-failures-Kiritimati-and-Lisbon.patch delete mode 100644 ruby-2.6.0-fix-test-failure-with-TLS-1.3-maint.patch delete mode 100644 ruby-2.6.0-fix-test-failure-with-TLS-1.3.patch diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index f2a1408..b523657 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,7 +11,7 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1899,7 +1899,7 @@ def configuration(srcdir) +@@ -1900,7 +1900,7 @@ def configuration(srcdir) SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. diff --git a/ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch b/ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch deleted file mode 100644 index e1edc73..0000000 --- a/ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 71057ca5963108bac1e2c31bd0e8e205ba74cc19 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 11 May 2018 13:43:32 +0900 -Subject: [PATCH 1/2] test/test_pkey_rsa: fix test failure with OpenSSL 1.1.1 - -OpenSSL 1.1.1 raised the minimum size for RSA keys to 512 bits. ---- - test/openssl/test_pkey_rsa.rb | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index c1205563..b4393e68 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -60,6 +60,13 @@ def test_new_with_exponent - end - end - -+ def test_generate -+ key = OpenSSL::PKey::RSA.generate(512, 17) -+ assert_equal 512, key.n.num_bits -+ assert_equal 17, key.e -+ assert_not_nil key.d -+ end -+ - def test_new_break - assert_nil(OpenSSL::PKey::RSA.new(1024) { break }) - assert_raise(RuntimeError) do -@@ -289,7 +296,7 @@ def test_pem_passwd - end - - def test_dup -- key = OpenSSL::PKey::RSA.generate(256, 17) -+ key = Fixtures.pkey("rsa1024") - key2 = key.dup - assert_equal key.params, key2.params - key2.set_key(key2.n, 3, key2.d) - -From a5e26bc1345fe325bdc619f9b1768b7ad3c94214 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 11 May 2018 14:12:39 +0900 -Subject: [PATCH 2/2] test/test_ssl_session: set client protocol version - explicitly - -Clients that implement TLS 1.3's Middlebox Compatibility Mode will -always provide a non-empty session ID in the ClientHello. This means -the "get" callback for the server-side session caching may be called -for the initial connection. ---- - test/openssl/test_ssl_session.rb | 14 +++++++++----- - 1 file changed, 9 insertions(+), 5 deletions(-) - -diff --git a/test/openssl/test_ssl_session.rb b/test/openssl/test_ssl_session.rb -index af8c65b1..6db0c2d1 100644 ---- a/test/openssl/test_ssl_session.rb -+++ b/test/openssl/test_ssl_session.rb -@@ -198,7 +198,9 @@ def test_server_session_cache - first_session = nil - 10.times do |i| - connections = i -- server_connect_with_session(port, nil, first_session) { |ssl| -+ cctx = OpenSSL::SSL::SSLContext.new -+ cctx.ssl_version = :TLSv1_2 -+ server_connect_with_session(port, cctx, first_session) { |ssl| - ssl.puts("abc"); assert_equal "abc\n", ssl.gets - first_session ||= ssl.session - -@@ -257,6 +259,8 @@ def test_ctx_server_session_cb - - connections = nil - called = {} -+ cctx = OpenSSL::SSL::SSLContext.new -+ cctx.ssl_version = :TLSv1_2 - sctx = nil - ctx_proc = Proc.new { |ctx| - sctx = ctx -@@ -292,7 +296,7 @@ def test_ctx_server_session_cb - } - start_server(ctx_proc: ctx_proc) do |port| - connections = 0 -- sess0 = server_connect_with_session(port, nil, nil) { |ssl| -+ sess0 = server_connect_with_session(port, cctx, nil) { |ssl| - ssl.puts("abc"); assert_equal "abc\n", ssl.gets - assert_equal false, ssl.session_reused? - ssl.session -@@ -307,7 +311,7 @@ def test_ctx_server_session_cb - - # Internal cache hit - connections = 1 -- server_connect_with_session(port, nil, sess0.dup) { |ssl| -+ server_connect_with_session(port, cctx, sess0.dup) { |ssl| - ssl.puts("abc"); assert_equal "abc\n", ssl.gets - assert_equal true, ssl.session_reused? - ssl.session -@@ -328,7 +332,7 @@ def test_ctx_server_session_cb - - # External cache hit - connections = 2 -- sess2 = server_connect_with_session(port, nil, sess0.dup) { |ssl| -+ sess2 = server_connect_with_session(port, cctx, sess0.dup) { |ssl| - ssl.puts("abc"); assert_equal "abc\n", ssl.gets - if !ssl.session_reused? && openssl?(1, 1, 0) && !openssl?(1, 1, 0, 7) - # OpenSSL >= 1.1.0, < 1.1.0g -@@ -355,7 +359,7 @@ def test_ctx_server_session_cb - - # Cache miss - connections = 3 -- sess3 = server_connect_with_session(port, nil, sess0.dup) { |ssl| -+ sess3 = server_connect_with_session(port, cctx, sess0.dup) { |ssl| - ssl.puts("abc"); assert_equal "abc\n", ssl.gets - assert_equal false, ssl.session_reused? - ssl.session diff --git a/ruby-2.5.1-TestTimeTZ-test-failures-Kiritimati-and-Lisbon.patch b/ruby-2.5.1-TestTimeTZ-test-failures-Kiritimati-and-Lisbon.patch deleted file mode 100644 index fa5ad3e..0000000 --- a/ruby-2.5.1-TestTimeTZ-test-failures-Kiritimati-and-Lisbon.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 584b5929f9b769c4d0b03e322a9fddf2b2dd3454 Mon Sep 17 00:00:00 2001 -From: nobu -Date: Sun, 1 Apr 2018 13:02:11 +0000 -Subject: [PATCH] test_time_tz.rb: Kiritimati tzdata fix - -* test/ruby/test_time_tz.rb (gen_zdump_test): fix the expected - data at the Kiritimati's skip of New Year's Eve 1994. - [Bug #14655] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63055 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - test/ruby/test_time_tz.rb | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb -index dfe139033ed3..ac5f81892878 100644 ---- a/test/ruby/test_time_tz.rb -+++ b/test/ruby/test_time_tz.rb -@@ -364,9 +364,18 @@ def self.gen_zdump_test(data) - Europe/London Sun Aug 10 01:00:00 1947 UTC = Sun Aug 10 02:00:00 1947 BST isdst=1 gmtoff=3600 - Europe/London Sun Nov 2 01:59:59 1947 UTC = Sun Nov 2 02:59:59 1947 BST isdst=1 gmtoff=3600 - Europe/London Sun Nov 2 02:00:00 1947 UTC = Sun Nov 2 02:00:00 1947 GMT isdst=0 gmtoff=0 -+End -+ if CORRECT_KIRITIMATI_SKIP_1994 -+ gen_zdump_test <<'End' -+Pacific/Kiritimati Sat Dec 31 09:59:59 1994 UTC = Fri Dec 30 23:59:59 1994 LINT isdst=0 gmtoff=-36000 -+Pacific/Kiritimati Sat Dec 31 10:00:00 1994 UTC = Sun Jan 1 00:00:00 1995 LINT isdst=0 gmtoff=50400 -+End -+ else -+ gen_zdump_test <<'End' - Pacific/Kiritimati Sun Jan 1 09:59:59 1995 UTC = Sat Dec 31 23:59:59 1994 LINT isdst=0 gmtoff=-36000 - Pacific/Kiritimati Sun Jan 1 10:00:00 1995 UTC = Mon Jan 2 00:00:00 1995 LINT isdst=0 gmtoff=50400 - End -+ end - gen_zdump_test <<'End' if has_right_tz - right/America/Los_Angeles Fri Jun 30 23:59:60 1972 UTC = Fri Jun 30 16:59:60 1972 PDT isdst=1 gmtoff=-25200 - right/America/Los_Angeles Wed Dec 31 23:59:60 2008 UTC = Wed Dec 31 15:59:60 2008 PST isdst=0 gmtoff=-28800 --- - -From 2965c2d4df78e6f5acf8759f84c88ce14a4e70f1 Mon Sep 17 00:00:00 2001 -From: nobu -Date: Sun, 1 Apr 2018 02:00:36 +0000 -Subject: [PATCH] test_time_tz.rb: Kiritimati tzdata fix - -* test/ruby/test_time_tz.rb (TestTimeTZ#test_pacific_kiritimati): - fix the expected data at the skip of New Year's Eve 1994. - [Bug #14655] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - test/ruby/test_time_tz.rb | 17 ++++++++++++++--- - 1 file changed, 14 insertions(+), 3 deletions(-) - -diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb -index 39b830d28a3d..dfe139033ed3 100644 ---- a/test/ruby/test_time_tz.rb -+++ b/test/ruby/test_time_tz.rb -@@ -89,6 +89,9 @@ def group_by(e, &block) - Time.local(1951, 5, 6, 1, 0, 0).dst? # DST with fixed tzdata - end - } -+ CORRECT_KIRITIMATI_SKIP_1994 = with_tz("Pacific/Kiritimati") { -+ Time.local(1994, 12, 31, 0, 0, 0).year == 1995 -+ } - - def time_to_s(t) - t.to_s -@@ -178,9 +181,17 @@ def test_europe_lisbon - - def test_pacific_kiritimati - with_tz(tz="Pacific/Kiritimati") { -- assert_time_constructor(tz, "1994-12-31 23:59:59 -1000", :local, [1994,12,31,23,59,59]) -- assert_time_constructor(tz, "1995-01-02 00:00:00 +1400", :local, [1995,1,1,0,0,0]) -- assert_time_constructor(tz, "1995-01-02 23:59:59 +1400", :local, [1995,1,1,23,59,59]) -+ assert_time_constructor(tz, "1994-12-30 00:00:00 -1000", :local, [1994,12,30,0,0,0]) -+ assert_time_constructor(tz, "1994-12-30 23:59:59 -1000", :local, [1994,12,30,23,59,59]) -+ if CORRECT_KIRITIMATI_SKIP_1994 -+ assert_time_constructor(tz, "1995-01-01 00:00:00 +1400", :local, [1994,12,31,0,0,0]) -+ assert_time_constructor(tz, "1995-01-01 23:59:59 +1400", :local, [1994,12,31,23,59,59]) -+ assert_time_constructor(tz, "1995-01-01 00:00:00 +1400", :local, [1995,1,1,0,0,0]) -+ else -+ assert_time_constructor(tz, "1994-12-31 23:59:59 -1000", :local, [1994,12,31,23,59,59]) -+ assert_time_constructor(tz, "1995-01-02 00:00:00 +1400", :local, [1995,1,1,0,0,0]) -+ assert_time_constructor(tz, "1995-01-02 23:59:59 +1400", :local, [1995,1,1,23,59,59]) -+ end - assert_time_constructor(tz, "1995-01-02 00:00:00 +1400", :local, [1995,1,2,0,0,0]) - } - end --- - -From a0e6607a8172f9eaf9a15f03065736deb2035771 Mon Sep 17 00:00:00 2001 -From: nobu -Date: Sun, 1 Apr 2018 13:16:14 +0000 -Subject: [PATCH] test_time_tz.rb: Lisbon tzdata fix - -* test/ruby/test_time_tz.rb (gen_variational_zdump_test): Update - Lisbon zdump data, which fixed the 1912-01-01 transition for - Portugual and its colonies. [Bug #14655] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63056 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - test/ruby/test_time_tz.rb | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb -index ac5f81892878..b32caff9c539 100644 ---- a/test/ruby/test_time_tz.rb -+++ b/test/ruby/test_time_tz.rb -@@ -434,5 +434,6 @@ def self.gen_variational_zdump_test(hint, data) - gen_variational_zdump_test "lisbon", <<'End' if has_lisbon_tz - Europe/Lisbon Mon Jan 1 00:36:31 1912 UTC = Sun Dec 31 23:59:59 1911 LMT isdst=0 gmtoff=-2192 - Europe/Lisbon Mon Jan 1 00:36:44 1912 UT = Sun Dec 31 23:59:59 1911 LMT isdst=0 gmtoff=-2205 -+Europe/Lisbon Sun Dec 31 23:59:59 1911 UT = Sun Dec 31 23:23:14 1911 LMT isdst=0 gmtoff=-2205 - End - end diff --git a/ruby-2.6.0-fix-test-failure-with-TLS-1.3-maint.patch b/ruby-2.6.0-fix-test-failure-with-TLS-1.3-maint.patch deleted file mode 100644 index 91ad89c..0000000 --- a/ruby-2.6.0-fix-test-failure-with-TLS-1.3-maint.patch +++ /dev/null @@ -1,78 +0,0 @@ ---- a/test/openssl/test_ssl.rb -+++ b/test/openssl/test_ssl.rb -@@ -67,6 +67,8 @@ - assert_equal @svr_cert.subject, ssl.peer_cert.subject - assert_equal [@svr_cert.subject, @ca_cert.subject], - ssl.peer_cert_chain.map(&:subject) -+ -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - end - end -@@ -892,7 +894,9 @@ - } - start_server(ctx_proc: ctx_proc, ignore_listener_error: true) do |port| - begin -- server_connect(port) { } -+ server_connect(port) { |ssl| -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets -+ } - rescue OpenSSL::SSL::SSLError, Errno::ECONNRESET - else - supported << ver -@@ -950,6 +954,7 @@ - if ver == cver - server_connect(port, ctx1) { |ssl| - assert_equal vmap[cver][:name], ssl.ssl_version -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - else - assert_handshake_error { server_connect(port, ctx1) { } } -@@ -963,6 +968,7 @@ - if ver == cver - server_connect(port, ctx2) { |ssl| - assert_equal vmap[cver][:name], ssl.ssl_version -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - else - assert_handshake_error { server_connect(port, ctx2) { } } -@@ -975,6 +981,7 @@ - ctx3.min_version = ctx3.max_version = nil - server_connect(port, ctx3) { |ssl| - assert_equal vmap[ver][:name], ssl.ssl_version -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - } - end -@@ -993,6 +1000,7 @@ - ctx1.min_version = cver - server_connect(port, ctx1) { |ssl| - assert_equal vmap[supported.last][:name], ssl.ssl_version -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - - # Client sets max_version -@@ -1001,6 +1009,7 @@ - if cver >= sver - server_connect(port, ctx2) { |ssl| - assert_equal vmap[cver][:name], ssl.ssl_version -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - else - assert_handshake_error { server_connect(port, ctx2) { } } -@@ -1019,6 +1028,7 @@ - if cver <= sver - server_connect(port, ctx1) { |ssl| - assert_equal vmap[sver][:name], ssl.ssl_version -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - else - assert_handshake_error { server_connect(port, ctx1) { } } -@@ -1033,6 +1043,7 @@ - else - assert_equal vmap[cver][:name], ssl.ssl_version - end -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - end - } diff --git a/ruby-2.6.0-fix-test-failure-with-TLS-1.3.patch b/ruby-2.6.0-fix-test-failure-with-TLS-1.3.patch deleted file mode 100644 index 3e62a5b..0000000 --- a/ruby-2.6.0-fix-test-failure-with-TLS-1.3.patch +++ /dev/null @@ -1,203 +0,0 @@ -From 6fcc6c0efc42d1c6325cf4bb0ca16e2a448cdbed Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 6 Aug 2018 20:51:42 +0900 -Subject: [PATCH] test/test_ssl: fix test failure with TLS 1.3 - -SSL_connect() on the client side may return before SSL_accept() on -server side returns. This will fix test failures with OpenSSL's current -master. ---- - test/openssl/test_ssl.rb | 45 ++++++++++++++++++++++++++-------------- - test/openssl/test_ssl_session.rb | 1 + - 2 files changed, 31 insertions(+), 15 deletions(-) - -diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb -index 7bb32adf..408c7d82 100644 ---- a/test/openssl/test_ssl.rb -+++ b/test/openssl/test_ssl.rb -@@ -47,6 +47,8 @@ def test_ssl_with_server_cert - assert_equal 2, ssl.peer_cert_chain.size - assert_equal @svr_cert.to_der, ssl.peer_cert_chain[0].to_der - assert_equal @ca_cert.to_der, ssl.peer_cert_chain[1].to_der -+ -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - ensure - ssl&.close - sock&.close -@@ -157,6 +159,7 @@ def test_sync_close - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) - ssl.connect -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - ssl.close - assert_not_predicate sock, :closed? - ensure -@@ -168,6 +171,7 @@ def test_sync_close - ssl = OpenSSL::SSL::SSLSocket.new(sock) - ssl.sync_close = true # !! - ssl.connect -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - ssl.close - assert_predicate sock, :closed? - ensure -@@ -259,7 +263,10 @@ def test_client_ca - client_ca_from_server = sslconn.client_ca - [@cli_cert, @cli_key] - end -- server_connect(port, ctx) { |ssl| assert_equal([@ca], client_ca_from_server) } -+ server_connect(port, ctx) { |ssl| -+ assert_equal([@ca], client_ca_from_server) -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets -+ } - } - end - -@@ -356,21 +363,16 @@ def test_verify_result - } - - start_server { |port| -- sock = TCPSocket.new("127.0.0.1", port) - ctx = OpenSSL::SSL::SSLContext.new - ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER - ctx.verify_callback = Proc.new do |preverify_ok, store_ctx| - store_ctx.error = OpenSSL::X509::V_OK - true - end -- ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx) -- ssl.sync_close = true -- begin -- ssl.connect -+ server_connect(port, ctx) { |ssl| - assert_equal(OpenSSL::X509::V_OK, ssl.verify_result) -- ensure -- ssl.close -- end -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets -+ } - } - - start_server(ignore_listener_error: true) { |port| -@@ -455,6 +457,8 @@ def test_post_connection_check - - start_server { |port| - server_connect(port) { |ssl| -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets -+ - assert_raise(sslerr){ssl.post_connection_check("localhost.localdomain")} - assert_raise(sslerr){ssl.post_connection_check("127.0.0.1")} - assert(ssl.post_connection_check("localhost")) -@@ -476,6 +482,8 @@ def test_post_connection_check - @svr_cert = issue_cert(@svr, @svr_key, 4, exts, @ca_cert, @ca_key) - start_server { |port| - server_connect(port) { |ssl| -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets -+ - assert(ssl.post_connection_check("localhost.localdomain")) - assert(ssl.post_connection_check("127.0.0.1")) - assert_raise(sslerr){ssl.post_connection_check("localhost")} -@@ -496,6 +502,8 @@ def test_post_connection_check - @svr_cert = issue_cert(@svr, @svr_key, 5, exts, @ca_cert, @ca_key) - start_server { |port| - server_connect(port) { |ssl| -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets -+ - assert(ssl.post_connection_check("localhost.localdomain")) - assert_raise(sslerr){ssl.post_connection_check("127.0.0.1")} - assert_raise(sslerr){ssl.post_connection_check("localhost")} -@@ -722,6 +730,8 @@ def test_tlsext_hostname - ssl.connect - assert_equal @cli_cert.serial, ssl.peer_cert.serial - assert_predicate fooctx, :frozen? -+ -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - ensure - ssl&.close - sock.close -@@ -733,6 +743,8 @@ def test_tlsext_hostname - ssl.hostname = "bar.example.com" - ssl.connect - assert_equal @svr_cert.serial, ssl.peer_cert.serial -+ -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - ensure - ssl&.close - sock.close -@@ -805,7 +817,8 @@ def test_verify_hostname_on_connect - ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx) - ssl.hostname = name - if expected_ok -- assert_nothing_raised { ssl.connect } -+ ssl.connect -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - else - assert_handshake_error { ssl.connect } - end -@@ -1086,6 +1099,7 @@ def test_renegotiation_cb - start_server_version(:SSLv23, ctx_proc) { |port| - server_connect(port) { |ssl| - assert_equal(1, num_handshakes) -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - } - end -@@ -1104,6 +1118,7 @@ def test_alpn_protocol_selection_ary - ctx.alpn_protocols = advertised - server_connect(port, ctx) { |ssl| - assert_equal(advertised.first, ssl.alpn_protocol) -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - } - end -@@ -1226,14 +1241,11 @@ def test_npn_selected_protocol_too_long - end - - def test_close_after_socket_close -- server_proc = proc { |ctx, ssl| -- # Do nothing -- } -- start_server(server_proc: server_proc) { |port| -+ start_server { |port| - sock = TCPSocket.new("127.0.0.1", port) - ssl = OpenSSL::SSL::SSLSocket.new(sock) -- ssl.sync_close = true - ssl.connect -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - sock.close - assert_nothing_raised do - ssl.close -@@ -1298,6 +1310,7 @@ def test_get_ephemeral_key - ctx.ciphers = "DEFAULT:!kRSA:!kEDH" - server_connect(port, ctx) { |ssl| - assert_instance_of OpenSSL::PKey::EC, ssl.tmp_key -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - end - end -@@ -1440,6 +1453,7 @@ def test_ecdh_curves - assert_equal "secp384r1", ssl.tmp_key.group.curve_name - end - end -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - - if openssl?(1, 0, 2) || libressl?(2, 5, 1) -@@ -1455,6 +1469,7 @@ def test_ecdh_curves - - server_connect(port, ctx) { |ssl| - assert_equal "secp521r1", ssl.tmp_key.group.curve_name -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - } - end - end -diff --git a/test/openssl/test_ssl_session.rb b/test/openssl/test_ssl_session.rb -index 6db0c2d1..78b160ed 100644 ---- a/test/openssl/test_ssl_session.rb -+++ b/test/openssl/test_ssl_session.rb -@@ -113,6 +113,7 @@ def test_resumption - non_resumable = nil - start_server { |port| - server_connect_with_session(port, nil, nil) { |ssl| -+ ssl.puts "abc"; assert_equal "abc\n", ssl.gets - non_resumable = ssl.session - } - } diff --git a/ruby.spec b/ruby.spec index fbfe13c..c1cdbaf 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 5 -%global teeny_version 1 +%global teeny_version 3 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 100 +%global release 101 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory three, since the @@ -42,7 +42,7 @@ %global json_version 2.1.0 %global minitest_version 5.10.3 %global net_telnet_version 0.1.1 -%global openssl_version 2.1.0 +%global openssl_version 2.1.2 %global power_assert_version 1.1.1 %global psych_version 3.0.2 %global rake_version 12.3.0 @@ -136,9 +136,6 @@ Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch # Add Gem.operating_system_defaults to allow packagers to override defaults. # https://github.com/rubygems/rubygems/pull/2116 Patch10: ruby-2.5.0-Add-Gem.operating_system_defaults.patch -# TestTimeTZ test failures Kiritimati and Lisbon -# https://bugs.ruby-lang.org/issues/14655 -Patch11: ruby-2.5.1-TestTimeTZ-test-failures-Kiritimati-and-Lisbon.patch # Don't force libraries used to build Ruby to its dependencies. # https://bugs.ruby-lang.org/issues/14422 Patch15: ruby-2.6.0-library-options-to-MAINLIBS.patch @@ -152,16 +149,8 @@ Patch20: ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch Patch24: ruby-2.6.0-configure-fstack-protector-strong.patch # Fix some OpenSSL 1.1.1 test failures. -# https://github.com/ruby/openssl/pull/202 -Patch17: ruby-2.5.1-Test-fixes-for-OpenSSL-1.1.1.patch -# https://github.com/ruby/openssl/pull/209 -Patch18: ruby-2.6.0-fix-test-failure-with-TLS-1.3.patch # https://github.com/ruby/ruby/commit/1dfc377ae3b174b043d3f0ed36de57b0296b34d0 Patch19: ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch -# Additional test fixes taken from: -# https://github.com/ruby/openssl/issues/207#issuecomment-413454568 -# https://github.com/ruby/openssl/commit/158201f9b66607f380513708e3ab65f1e27694e6 -Patch21: ruby-2.6.0-fix-test-failure-with-TLS-1.3-maint.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 Patch22: ruby-2.6.0-config-support-include-directive.patch @@ -550,14 +539,10 @@ rm -rf ext/fiddle/libffi* %patch7 -p1 %patch9 -p1 %patch10 -p1 -%patch11 -p1 %patch15 -p1 %patch16 -p1 -%patch17 -p1 -%patch18 -p1 %patch19 -p1 %patch20 -p1 -%patch21 -p1 %patch22 -p1 %patch23 -p1 %patch24 -p1 @@ -1107,6 +1092,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Fri Oct 19 2018 Jun Aruga - 2.5.3-101 +- Update to Ruby 2.5.3. + * Mon Sep 03 2018 Vít Ondruch - 2.5.1-100 - Properly harden package using -fstack-protector-strong. diff --git a/sources b/sources index 7ef486c..5927406 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.5.1.tar.xz) = 31bacf58469953282cd5d8b51862dcf4b84dedb927c1871bc3fca32fc157fe49187631575a70838705fe246f4555647577a7ecc26894445a7d64de5503dc11b4 +SHA512 (ruby-2.5.3.tar.xz) = 6dcae0e8d0bacdb2cbde636e2030596308b5af53f2eb85d3adccb67b02e6f8f9751e8117d12f8484829fdd9d995f6e327f701d9b433bcf94f1f59d13a1fd7518 From 5bf57b1504871230600103083d77ff3502255e2e Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Wed, 18 Jul 2018 18:33:31 +0200 Subject: [PATCH 301/530] Fix: return default path with nonexistent home dir --- operating_system.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/operating_system.rb b/operating_system.rb index 0d4b1f0..d95b303 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -119,6 +119,7 @@ module Gem def default_path path = default_dirs.collect {|location, paths| paths[:gem_dir]} path.unshift Gem.user_dir if File.exist? Gem.user_home + path end def default_ext_dir_for base_dir From 7fa10a167d6eba1b19ddb2c80a9b03cf630370fd Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Fri, 3 Aug 2018 23:16:47 +0200 Subject: [PATCH 302/530] Fix typo. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index c1cdbaf..af62258 100644 --- a/ruby.spec +++ b/ruby.spec @@ -24,7 +24,7 @@ %global release 101 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} -# The RubyGems library has to stay out of Ruby directory three, since the +# The RubyGems library has to stay out of Ruby directory tree, since the # RubyGems should be share by all Ruby implementations. %global rubygems_dir %{_datadir}/rubygems From 5dcc35c709936499acdf5a581f453193419e1081 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 26 Oct 2018 19:15:46 +0200 Subject: [PATCH 303/530] Use official URL for Source0. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index af62258..5d5a40d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -82,7 +82,7 @@ Group: Development/Languages # UCD: some of enc/trans/**/*.src License: (Ruby or BSD) and Public Domain and MIT and CC0 and zlib and UCD URL: http://ruby-lang.org/ -Source0: ftp://ftp.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.xz +Source0: https://cache.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.xz Source1: operating_system.rb # TODO: Try to push SystemTap support upstream. Source2: libruby.stp From c80ecd9db905f328079a9c8afee70a34e1dcc18c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Nov 2018 10:20:09 +0100 Subject: [PATCH 304/530] Fix Tokyo TZ tests. --- ruby-2.6.0-Update-for-tzdata-2018f.patch | 44 ++++++++++++++++++++++++ ruby.spec | 9 ++++- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 ruby-2.6.0-Update-for-tzdata-2018f.patch diff --git a/ruby-2.6.0-Update-for-tzdata-2018f.patch b/ruby-2.6.0-Update-for-tzdata-2018f.patch new file mode 100644 index 0000000..edc58b6 --- /dev/null +++ b/ruby-2.6.0-Update-for-tzdata-2018f.patch @@ -0,0 +1,44 @@ +From e71ca6cdcf108e6a2fa47ec9fadefe7554717908 Mon Sep 17 00:00:00 2001 +From: nobu +Date: Fri, 26 Oct 2018 01:47:09 +0000 +Subject: [PATCH] Update for tzdata-2018f + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65365 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + test/ruby/test_time_tz.rb | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb +index 2da4fd8d9ce4..328fde48fc34 100644 +--- a/test/ruby/test_time_tz.rb ++++ b/test/ruby/test_time_tz.rb +@@ -86,7 +86,9 @@ def group_by(e, &block) + has_lisbon_tz &&= have_tz_offset?("Europe/Lisbon") + CORRECT_TOKYO_DST_1951 = with_tz("Asia/Tokyo") { + if Time.local(1951, 5, 6, 12, 0, 0).dst? # noon, DST +- Time.local(1951, 5, 6, 1, 0, 0).dst? # DST with fixed tzdata ++ if Time.local(1951, 5, 6, 1, 0, 0).dst? # DST with fixed tzdata ++ Time.local(1951, 9, 8, 23, 0, 0).dst? ? "2018f" : "2018e" ++ end + end + } + CORRECT_KIRITIMATI_SKIP_1994 = with_tz("Pacific/Kiritimati") { +@@ -347,12 +349,16 @@ def self.gen_zdump_test(data) + Asia/Singapore Thu Dec 31 16:29:59 1981 UTC = Thu Dec 31 23:59:59 1981 SGT isdst=0 gmtoff=27000 + Asia/Singapore Thu Dec 31 16:30:00 1981 UTC = Fri Jan 1 00:30:00 1982 SGT isdst=0 gmtoff=28800 + End +- gen_zdump_test CORRECT_TOKYO_DST_1951 ? <<'End' : <<'End' ++ gen_zdump_test CORRECT_TOKYO_DST_1951 ? <<'End' + (CORRECT_TOKYO_DST_1951 < "2018f" ? <<'2018e' : <<'2018f') : <<'End' + Asia/Tokyo Sat May 5 14:59:59 1951 UTC = Sat May 5 23:59:59 1951 JST isdst=0 gmtoff=32400 + Asia/Tokyo Sat May 5 15:00:00 1951 UTC = Sun May 6 01:00:00 1951 JDT isdst=1 gmtoff=36000 ++End + Asia/Tokyo Sat Sep 8 13:59:59 1951 UTC = Sat Sep 8 23:59:59 1951 JDT isdst=1 gmtoff=36000 + Asia/Tokyo Sat Sep 8 14:00:00 1951 UTC = Sat Sep 8 23:00:00 1951 JST isdst=0 gmtoff=32400 +-End ++2018e ++Asia/Tokyo Sat Sep 8 14:59:59 1951 UTC = Sun Sep 9 00:59:59 1951 JDT isdst=1 gmtoff=36000 ++Asia/Tokyo Sat Sep 8 15:00:00 1951 UTC = Sun Sep 9 00:00:00 1951 JST isdst=0 gmtoff=32400 ++2018f + Asia/Tokyo Sat May 5 16:59:59 1951 UTC = Sun May 6 01:59:59 1951 JST isdst=0 gmtoff=32400 + Asia/Tokyo Sat May 5 17:00:00 1951 UTC = Sun May 6 03:00:00 1951 JDT isdst=1 gmtoff=36000 + Asia/Tokyo Fri Sep 7 15:59:59 1951 UTC = Sat Sep 8 01:59:59 1951 JDT isdst=1 gmtoff=36000 diff --git a/ruby.spec b/ruby.spec index 5d5a40d..3e0845e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 101 +%global release 102 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -147,6 +147,9 @@ Patch20: ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch # Properly harden package using -fstack-protector-strong. # https://bugs.ruby-lang.org/issues/15053 Patch24: ruby-2.6.0-configure-fstack-protector-strong.patch +# Fix Tokyo TZ tests. +# https://github.com/ruby/ruby/commit/e71ca6cdcf108e6a2fa47ec9fadefe7554717908 +Patch25: ruby-2.6.0-Update-for-tzdata-2018f.patch # Fix some OpenSSL 1.1.1 test failures. # https://github.com/ruby/ruby/commit/1dfc377ae3b174b043d3f0ed36de57b0296b34d0 @@ -546,6 +549,7 @@ rm -rf ext/fiddle/libffi* %patch22 -p1 %patch23 -p1 %patch24 -p1 +%patch25 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1092,6 +1096,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Tue Nov 13 2018 Vít Ondruch - 2.5.3-102 +- Fix Tokyo TZ tests. + * Fri Oct 19 2018 Jun Aruga - 2.5.3-101 - Update to Ruby 2.5.3. From 2506a2faa2fd3cee0cce7d8de2ce893183645f0e Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Thu, 10 Jan 2019 17:05:28 +0100 Subject: [PATCH 305/530] Refresh expired certificates to fix FTBFS. --- ruby-2.6.0-Try-to-update-cert.patch | 502 ++++++++++++++++++++++++++++ ruby.spec | 10 +- 2 files changed, 511 insertions(+), 1 deletion(-) create mode 100644 ruby-2.6.0-Try-to-update-cert.patch diff --git a/ruby-2.6.0-Try-to-update-cert.patch b/ruby-2.6.0-Try-to-update-cert.patch new file mode 100644 index 0000000..013688d --- /dev/null +++ b/ruby-2.6.0-Try-to-update-cert.patch @@ -0,0 +1,502 @@ +From f234e6c3d3170f37508e214cdaef78d4b2584e5a Mon Sep 17 00:00:00 2001 +From: kazu +Date: Wed, 2 Jan 2019 03:08:20 +0000 +Subject: [PATCH 1/2] Try to update cert + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66685 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + test/net/fixtures/cacert.pem | 86 +++++++------------------- + test/net/fixtures/server.crt | 113 +++++++++++++++++++++++------------ + test/net/fixtures/server.key | 43 ++++++++----- + 3 files changed, 124 insertions(+), 118 deletions(-) + +diff --git a/test/net/fixtures/cacert.pem b/test/net/fixtures/cacert.pem +index 7073387877..f623bd62ed 100644 +--- a/test/net/fixtures/cacert.pem ++++ b/test/net/fixtures/cacert.pem +@@ -1,66 +1,24 @@ +-Certificate: +- Data: +- Version: 3 (0x2) +- Serial Number: +- b9:90:a2:bf:62:69:17:9c +- Signature Algorithm: sha1WithRSAEncryption +- Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org +- Validity +- Not Before: Jan 3 01:34:17 2014 GMT +- Not After : Jan 2 01:34:17 2019 GMT +- Subject: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org +- Subject Public Key Info: +- Public Key Algorithm: rsaEncryption +- RSA Public Key: (1024 bit) +- Modulus (1024 bit): +- 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: +- bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: +- 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: +- 9d:7e:eb:a2:06:e2:ea:7d:07:c7:c7:99:c7:fb:d5: +- b8:eb:63:77:62:2b:18:12:c3:53:58:d0:f5:c7:40: +- 0c:01:d1:26:82:34:16:09:e3:dc:65:f4:dc:bb:5d: +- a5:41:60:e7:a9:74:ba:d7:4c:b6:a3:9c:c5:8c:89: +- af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: +- d0:fc:d6:eb:fc:06:82:10:fb +- Exponent: 65537 (0x10001) +- X509v3 extensions: +- X509v3 Subject Key Identifier: +- E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 +- X509v3 Authority Key Identifier: +- keyid:E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 +- DirName:/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org +- serial:B9:90:A2:BF:62:69:17:9C +- +- X509v3 Basic Constraints: +- CA:TRUE +- Signature Algorithm: sha1WithRSAEncryption +- 8f:77:06:4e:31:72:12:ee:68:09:70:27:d4:31:85:ef:10:95: +- f9:0f:2b:66:63:08:37:88:6e:b7:9b:40:3e:18:77:33:86:e8: +- 61:6a:b7:3c:cb:c7:a6:d6:d5:92:6a:1f:56:d0:9f:5c:32:56: +- d3:37:52:fe:0e:20:c2:7a:0d:fe:2d:3c:81:da:b8:7f:4d:6a: +- 08:01:d9:be:7a:a2:15:be:a6:ce:49:64:90:8c:9a:ca:6e:2e: +- 84:48:1d:94:19:56:94:46:aa:25:9b:68:c2:80:60:bf:cb:2e: +- 35:03:ea:0a:65:5a:33:38:c6:cc:81:46:c0:bc:36:86:96:39: +- 10:7d + -----BEGIN CERTIFICATE----- +-MIIDjTCCAvagAwIBAgIJALmQor9iaRecMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD +-VQQGEwJKUDEQMA4GA1UECBMHU2hpbWFuZTEUMBIGA1UEBxMLTWF0ei1lIGNpdHkx +-FzAVBgNVBAoTDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDEwxSdWJ5IFRlc3QgQ0Ex +-JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTQwMTAz +-MDEzNDE3WhcNMTkwMTAyMDEzNDE3WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT +-B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv +-cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz +-ZWN1cml0eUBydWJ5LWxhbmcub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB +-gQDbddBF3rHfv3GgDrCl5rz0HJ3lJWdkxXvL8a/Gvpqq6n4PzAWv70BpBrLJE51+ +-66IG4up9B8fHmcf71bjrY3diKxgSw1NY0PXHQAwB0SaCNBYJ49xl9Ny7XaVBYOep +-dLrXTLajnMWMia/L6J8F/ur+ZCS/5+3j9tD81uv8BoIQ+wIDAQABo4H0MIHxMB0G +-A1UdDgQWBBToflisE3sDIo2erzILhImAgAwewjCBwQYDVR0jBIG5MIG2gBToflis +-E3sDIo2erzILhImAgAwewqGBkqSBjzCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT +-B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv +-cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz +-ZWN1cml0eUBydWJ5LWxhbmcub3JnggkAuZCiv2JpF5wwDAYDVR0TBAUwAwEB/zAN +-BgkqhkiG9w0BAQUFAAOBgQCPdwZOMXIS7mgJcCfUMYXvEJX5DytmYwg3iG63m0A+ +-GHczhuhharc8y8em1tWSah9W0J9cMlbTN1L+DiDCeg3+LTyB2rh/TWoIAdm+eqIV +-vqbOSWSQjJrKbi6ESB2UGVaURqolm2jCgGC/yy41A+oKZVozOMbMgUbAvDaGljkQ +-fQ== ++MIID7TCCAtWgAwIBAgIJAIltvxrFAuSnMA0GCSqGSIb3DQEBCwUAMIGMMQswCQYD ++VQQGEwJKUDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkx ++FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex ++JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTkwMTAy ++MDI1ODI4WhcNMjQwMTAxMDI1ODI4WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgM ++B1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQKDA5SdWJ5IENv ++cmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz ++ZWN1cml0eUBydWJ5LWxhbmcub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB ++CgKCAQEAznlbjRVhz1NlutHVrhcGnK8W0qug2ujKXv1njSC4U6nJF6py7I9EeehV ++SaKePyv+I9z3K1LnfUHOtUbdwdKC77yN66A6q2aqzu5q09/NSykcZGOIF0GuItYI ++3nvW3IqBddff2ffsyR+9pBjfb5AIPP08WowF9q4s1eGULwZc4w2B8PFhtxYANd7d ++BvGLXFlcufv9tDtzyRi4t7eqxCRJkZQIZNZ6DHHIJrNxejOILfHLarI12yk8VK6L ++2LG4WgGqyeePiRyd1o1MbuiAFYqAwpXNUbRKg5NaZGwBHZk8UZ+uFKt1QMBURO5R ++WFy1c349jbWszTqFyL4Lnbg9HhAowQIDAQABo1AwTjAdBgNVHQ4EFgQU9tEiKdU9 ++I9derQyc5nWPnc34nVMwHwYDVR0jBBgwFoAU9tEiKdU9I9derQyc5nWPnc34nVMw ++DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAxj7F/u3C3fgq24N7hGRA ++of7ClFQxGmo/IGT0AISzW3HiVYiFaikKhbO1NwD9aBpD8Zwe62sCqMh8jGV/b0+q ++aOORnWYNy2R6r9FkASAglmdF6xn3bhgGD5ls4pCvcG9FynGnGc24g6MrjFNrBYUS ++2iIZsg36i0IJswo/Dy6HLphCms2BMCD3DeWtfjePUiTmQHJo6HsQIKP/u4N4Fvee ++uMBInei2M4VU74fLXbmKl1F9AEX7JDP3BKSZG19Ch5pnUo4uXM1uNTGsi07P4Y0s ++K44+SKBC0bYEFbDK0eQWMrX3kIhkPxyIWhxdq9/NqPYjShuSEAhA6CSpmRg0pqc+ ++mA== + -----END CERTIFICATE----- +diff --git a/test/net/fixtures/server.crt b/test/net/fixtures/server.crt +index fa4f99493a..817ecc222c 100644 +--- a/test/net/fixtures/server.crt ++++ b/test/net/fixtures/server.crt +@@ -1,48 +1,83 @@ + Certificate: + Data: +- Version: 1 (0x0) +- Serial Number: 0 (0x0) +- Signature Algorithm: sha1WithRSAEncryption ++ Version: 3 (0x2) ++ Serial Number: 1 (0x1) ++ Signature Algorithm: sha256WithRSAEncryption + Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org + Validity +- Not Before: Jan 3 01:34:17 2014 GMT +- Not After : Jan 2 01:34:17 2019 GMT +- Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost ++ Not Before: Jan 2 03:06:53 2019 GMT ++ Not After : Jan 1 03:06:53 2024 GMT ++ Subject: C=JP, ST=Shimane, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org + Subject Public Key Info: + Public Key Algorithm: rsaEncryption +- RSA Public Key: (1024 bit) +- Modulus (1024 bit): +- 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: +- bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: +- 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: +- 9d:7e:eb:a2:06:e2:ea:7d:07:c7:c7:99:c7:fb:d5: +- b8:eb:63:77:62:2b:18:12:c3:53:58:d0:f5:c7:40: +- 0c:01:d1:26:82:34:16:09:e3:dc:65:f4:dc:bb:5d: +- a5:41:60:e7:a9:74:ba:d7:4c:b6:a3:9c:c5:8c:89: +- af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: +- d0:fc:d6:eb:fc:06:82:10:fb ++ Public-Key: (2048 bit) ++ Modulus: ++ 00:c1:a9:64:ef:d3:f2:e1:1a:7f:24:df:7f:65:86: ++ c1:98:55:16:83:91:16:5b:63:6e:26:bb:c0:73:68: ++ 7b:f7:00:ba:37:db:7f:a9:5c:c8:98:aa:43:96:87: ++ e1:a0:63:69:0c:d8:22:90:f5:56:22:b1:57:6e:71: ++ 3b:30:04:d0:64:4d:38:33:a0:ea:c1:16:3d:16:be: ++ c0:49:4c:f0:14:15:af:09:95:da:bf:c7:23:34:c3: ++ 7d:af:b7:70:b3:6d:1b:de:21:93:c0:7c:6c:0e:fd: ++ 0e:e5:ff:f3:80:51:0c:df:80:7c:40:46:c9:ca:57: ++ d4:88:02:0f:f0:1e:14:18:f1:98:0f:c6:42:1d:cc: ++ 90:29:71:1b:af:4a:22:e0:e7:86:fc:dd:d3:d8:84: ++ 0e:5e:f0:9b:93:5f:0a:9a:1d:f8:f5:f3:e7:c7:b0: ++ 7a:0e:25:20:13:02:1a:22:c2:d9:e0:7f:4f:a1:7f: ++ 72:f6:e6:e1:14:7c:c5:93:7f:a6:96:3b:ab:d8:f1: ++ dc:2b:01:d6:e5:fe:5c:cf:08:db:06:e9:fd:7d:bd: ++ fe:2c:f4:8a:7b:9f:15:88:05:2e:f7:ba:c9:86:7e: ++ 14:50:f4:96:a1:84:17:5d:f7:8b:0a:7a:14:2c:de: ++ ca:00:74:f8:23:32:9d:66:af:1c:a6:58:1a:de:82: ++ 96:a9 + Exponent: 65537 (0x10001) +- Signature Algorithm: sha1WithRSAEncryption +- 85:f5:d3:05:8b:8c:f4:43:1c:88:f2:8f:b2:f2:93:77:b7:3d: +- 95:c6:a0:34:bc:33:6a:d8:85:5f:3e:86:08:10:c5:5c:c1:76: +- a3:53:3c:dc:38:98:23:97:e7:da:21:ac:e8:4d:3c:96:70:29: +- ff:ff:1e:4a:9a:17:2b:db:04:62:b9:ef:ab:ea:a7:a5:e8:7c: +- b1:d5:ed:30:a8:6c:78:de:51:7e:e3:8a:c2:a4:64:a8:63:a2: +- bc:fd:43:9c:f3:55:7d:54:c9:6a:d8:53:1c:4b:6b:03:aa:b6: +- 19:e6:a4:4f:47:00:96:c5:42:59:85:4e:c3:4e:cd:41:82:53: +- 10:f8 ++ X509v3 extensions: ++ X509v3 Basic Constraints: ++ CA:FALSE ++ Netscape Comment: ++ OpenSSL Generated Certificate ++ X509v3 Subject Key Identifier: ++ F2:C9:35:05:31:EF:08:EE:EF:B0:FE:1A:72:C2:9E:70:E3:E3:EC:43 ++ X509v3 Authority Key Identifier: ++ keyid:F6:D1:22:29:D5:3D:23:D7:5E:AD:0C:9C:E6:75:8F:9D:CD:F8:9D:53 ++ ++ Signature Algorithm: sha256WithRSAEncryption ++ 02:e7:0a:22:7c:5e:d9:92:d2:b9:fb:4a:bf:75:3f:00:e6:19: ++ 3e:90:a5:9d:38:41:82:4c:6f:b9:f3:f2:58:a1:91:7f:4a:d4: ++ 28:38:9c:7c:4d:6c:2f:2f:95:f5:55:55:25:a1:71:0c:05:42: ++ 08:a3:a6:ab:e3:04:47:9a:42:24:8f:b2:ba:50:55:af:b8:d7: ++ fc:1a:13:92:5d:75:7d:e1:4d:87:5e:57:82:c5:5f:d6:b8:ea: ++ 86:4e:05:b0:7f:07:27:a5:36:1f:1e:54:f1:32:35:7f:9c:75: ++ 26:6a:21:75:37:32:bb:89:01:78:97:cc:d3:de:3a:e8:ce:45: ++ ed:12:24:2e:a8:25:73:b3:cd:70:47:b8:81:f9:06:aa:8d:87: ++ 2f:a9:cd:fe:79:40:cc:c9:47:3d:2f:82:c2:82:bf:5d:8a:06: ++ 5b:a9:90:d3:b0:a7:fc:f3:1a:fb:0e:cb:8f:d8:f2:4e:f4:8d: ++ bb:4b:d5:2d:20:c0:6e:d5:08:2b:81:32:c4:e0:d2:4b:31:27: ++ f1:55:96:0e:d4:b9:92:02:71:98:69:e5:73:cc:52:45:a0:07: ++ fb:28:9e:b0:fc:b1:58:42:5a:08:4a:30:49:e5:f1:a5:c8:d5: ++ 8a:67:f0:ed:9e:3f:1b:71:a6:80:91:81:cb:1a:3d:b5:8e:87: ++ 9d:64:28:ce + -----BEGIN CERTIFICATE----- +-MIICXDCCAcUCAQAwDQYJKoZIhvcNAQEFBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD +-VQQIEwdTaGltYW5lMRQwEgYDVQQHEwtNYXR6LWUgY2l0eTEXMBUGA1UEChMOUnVi +-eSBDb3JlIFRlYW0xFTATBgNVBAMTDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ +-ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0xNDAxMDMwMTM0MTdaFw0xOTAx +-MDIwMTM0MTdaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIEwdTaGltYW5lMRcwFQYD +-VQQKEw5SdWJ5IENvcmUgVGVhbTESMBAGA1UECxMJUnVieSBUZXN0MRIwEAYDVQQD +-Ewlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANt10EXesd+/ +-caAOsKXmvPQcneUlZ2TFe8vxr8a+mqrqfg/MBa/vQGkGsskTnX7rogbi6n0Hx8eZ +-x/vVuOtjd2IrGBLDU1jQ9cdADAHRJoI0Fgnj3GX03LtdpUFg56l0utdMtqOcxYyJ +-r8vonwX+6v5kJL/n7eP20PzW6/wGghD7AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEA +-hfXTBYuM9EMciPKPsvKTd7c9lcagNLwzatiFXz6GCBDFXMF2o1M83DiYI5fn2iGs +-6E08lnAp//8eSpoXK9sEYrnvq+qnpeh8sdXtMKhseN5RfuOKwqRkqGOivP1DnPNV +-fVTJathTHEtrA6q2GeakT0cAlsVCWYVOw07NQYJTEPg= ++MIID+TCCAuGgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSlAx ++EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK ++DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI ++hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTE5MDEwMjAzMDY1M1oX ++DTI0MDEwMTAzMDY1M1owdjELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx ++FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex ++JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwggEiMA0GCSqG ++SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBqWTv0/LhGn8k339lhsGYVRaDkRZbY24m ++u8BzaHv3ALo323+pXMiYqkOWh+GgY2kM2CKQ9VYisVducTswBNBkTTgzoOrBFj0W ++vsBJTPAUFa8Jldq/xyM0w32vt3CzbRveIZPAfGwO/Q7l//OAUQzfgHxARsnKV9SI ++Ag/wHhQY8ZgPxkIdzJApcRuvSiLg54b83dPYhA5e8JuTXwqaHfj18+fHsHoOJSAT ++Ahoiwtngf0+hf3L25uEUfMWTf6aWO6vY8dwrAdbl/lzPCNsG6f19vf4s9Ip7nxWI ++BS73usmGfhRQ9JahhBdd94sKehQs3soAdPgjMp1mrxymWBregpapAgMBAAGjezB5 ++MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENl ++cnRpZmljYXRlMB0GA1UdDgQWBBTyyTUFMe8I7u+w/hpywp5w4+PsQzAfBgNVHSME ++GDAWgBT20SIp1T0j116tDJzmdY+dzfidUzANBgkqhkiG9w0BAQsFAAOCAQEAAucK ++Inxe2ZLSuftKv3U/AOYZPpClnThBgkxvufPyWKGRf0rUKDicfE1sLy+V9VVVJaFx ++DAVCCKOmq+MER5pCJI+yulBVr7jX/BoTkl11feFNh15XgsVf1rjqhk4FsH8HJ6U2 ++Hx5U8TI1f5x1JmohdTcyu4kBeJfM09466M5F7RIkLqglc7PNcEe4gfkGqo2HL6nN ++/nlAzMlHPS+CwoK/XYoGW6mQ07Cn/PMa+w7Lj9jyTvSNu0vVLSDAbtUIK4EyxODS ++SzEn8VWWDtS5kgJxmGnlc8xSRaAH+yiesPyxWEJaCEowSeXxpcjVimfw7Z4/G3Gm ++gJGByxo9tY6HnWQozg== + -----END CERTIFICATE----- +diff --git a/test/net/fixtures/server.key b/test/net/fixtures/server.key +index 7c57546ece..1e73232728 100644 +--- a/test/net/fixtures/server.key ++++ b/test/net/fixtures/server.key +@@ -1,15 +1,28 @@ +------BEGIN RSA PRIVATE KEY----- +-MIICXQIBAAKBgQDbddBF3rHfv3GgDrCl5rz0HJ3lJWdkxXvL8a/Gvpqq6n4PzAWv +-70BpBrLJE51+66IG4up9B8fHmcf71bjrY3diKxgSw1NY0PXHQAwB0SaCNBYJ49xl +-9Ny7XaVBYOepdLrXTLajnMWMia/L6J8F/ur+ZCS/5+3j9tD81uv8BoIQ+wIDAQAB +-AoGAGtYHR+P5gFDaxiXFuCPFC1zMeg7e29XCU6gURIteQnQ2QhxCvcbV64HkLu51 +-HeYWhB0Pa4aeCWxmpgb2e+JH4MEoIjeJSGyZQeqwkQLgWJDdvkgWx5am58QzA60I +-ipkZ9QHcPffSs5RiGx4yfr58KqAmwFphGCY8W7v4LqaENdECQQD9H5VTW9g4gj1c +-j3uNYvSI/D7a9P7gfI+ziczuwMm5xsBx3D/t5TAr3SJKNne3sl1E6ZERCUbzxf+C +-k58EiHx1AkEA3fRLGqDOq7EcQhbjTcA/v/t5MwlGEUsS9+XrqOWn50YuoIwRZJ3v +-qHRQzfQfFNklGtfBvwQ4md3irXjMeGVprwJBAMEAuwiDiHuV+xm/ofKtmE13IKot +-ksYy1BOOp/8IawhHXueyi+BmF/PqOkIiA+jCjNGF0oIN89beizPSQbbgJx0CQG/K +-qL1bu1ys0y/SeWBi8XkP/0aeaCUzq/UiYCTsrzoEll2UzvnftqMhGsXxLGqCyHaR +-r2s3hA6zvIVlL4+AfM8CQQClq+WDrC5VKciLYakZNWJjV1m+H2Ut/0fXdUjKHajE +-FWLcsrOhADf6bkTb71GwPxnKRkkRmud5upP0ZYYTqM4X +------END RSA PRIVATE KEY----- ++-----BEGIN PRIVATE KEY----- ++MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDBqWTv0/LhGn8k ++339lhsGYVRaDkRZbY24mu8BzaHv3ALo323+pXMiYqkOWh+GgY2kM2CKQ9VYisVdu ++cTswBNBkTTgzoOrBFj0WvsBJTPAUFa8Jldq/xyM0w32vt3CzbRveIZPAfGwO/Q7l ++//OAUQzfgHxARsnKV9SIAg/wHhQY8ZgPxkIdzJApcRuvSiLg54b83dPYhA5e8JuT ++XwqaHfj18+fHsHoOJSATAhoiwtngf0+hf3L25uEUfMWTf6aWO6vY8dwrAdbl/lzP ++CNsG6f19vf4s9Ip7nxWIBS73usmGfhRQ9JahhBdd94sKehQs3soAdPgjMp1mrxym ++WBregpapAgMBAAECggEAYQJ20oBMcSBxwknGqlfnkGRHI97A4UScgACa9fTH7EJM ++BgEJIRCeV4Mq2jP0/P/vNoTqQ8zxue02C9fiuzoeHbBkz8/y6Ig4T7V74vwMYzM9 ++fEK50klxxFONGUF9zhOA2zPcrJZnFtcC6InfM07mcOsO0q/jE14N05ec3j5i+N7j ++hDHsHjS3hUiSEGra/U6TRGA26imDUZR5S3h3WMuFmpQgAg0STHc2inYjS9iVhn+T ++uAV2igYR89MOTcH1ZVoxjeYXwhqjWT6Kbw4Er4TWTVzwGf9ktv04EjZjhgUAqw7Q ++8Sc7Olt2q2tA7hQqdgJVgNMaszHqpKAECbAfuxuDtQKBgQD/r0zI9ZcTDQOgezaB ++s9UGbT5O5LruxLc/ExHRL7gpU7UsF/cc3Hp9zmDrzuUsq+UZlGewNnPBLHzaEq1z ++AZD9aa85umzXxcLzyg9ZnvN4kHLKIXhnnTEiShHtpRbqfybBKM7J+iQxXIYUf5tl ++lHTfEqG2/nTt4E50dhniIbIaAwKBgQDB5oS3LGXSn6zAWyUsAJaSeS8/3/O4Vz+x ++u8tZrICSFWBodwg46eHR9I379eayKhMGCsaAWx4ybWJWWEb/nM+fBGxBSnxb9jmm ++gHu93BQjK3sWS8qAGTwO5ehLEy0QRcCc+wb0lyo9hfh1grJioESVsiB9SXrxp8dr ++45JvxCCC4wKBgDGSKQ7lHm8hHMzmVoD6/pgKYgQlsGBOX0CpT9EAsXHBuuRbmRtN ++W6o8cuoE6MWqZfZ5oUi2peaT23jkGiCr8xJOhRxqGmQTAWMGj8dOW+HKD5dEufVM ++spP1TFiIo1K/aCIW6VCbYJz5VT1wKA6fo7EECbpSxxS/YjaOFyKSaddFAoGBAKk3 ++bdcVrf70TqTIZlZSZRWLIMsTvPTBX9rSUxL9Um8qrKo+RzS0F9lNHaQn457UzSlW ++uglGe8HyaAGGpN9qkF7sUzVftcvjxEgklNkKeaB/z7mThzPn0dwGlIUARTGQThox ++kM5gJgLvKfgTiW49A93ISEZOnDbM/2KOhjt35A+VAoGAYsNAMBwjubVo0v1vqry+ ++XG6VvPpgVjMiDQCsTEEcBqgRRuf6R5zndIhIvwmTNiUkGkE3w/vG0uCjtB82/kwE ++bzVheR0vZDN7s52OYRz4j0ddtYCqGSkvkWuEQfQFZUDTyLodwVQAT5aR+mcr4Qml ++uCiVeqoPl+JIg4m8Tz76XWo= ++-----END PRIVATE KEY----- +-- +2.20.1 + + +From 1e0b49a293d3792826c67b7e05c5fcbd09c9ea6e Mon Sep 17 00:00:00 2001 +From: kazu +Date: Wed, 2 Jan 2019 03:29:01 +0000 +Subject: [PATCH 2/2] Try to update cert (2nd try) + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66686 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + test/net/fixtures/server.crt | 115 +++++++++++++++++------------------ + test/net/fixtures/server.key | 52 ++++++++-------- + 2 files changed, 83 insertions(+), 84 deletions(-) + +diff --git a/test/net/fixtures/server.crt b/test/net/fixtures/server.crt +index 817ecc222c..5ca78a6d14 100644 +--- a/test/net/fixtures/server.crt ++++ b/test/net/fixtures/server.crt +@@ -1,35 +1,35 @@ + Certificate: + Data: + Version: 3 (0x2) +- Serial Number: 1 (0x1) ++ Serial Number: 2 (0x2) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org + Validity +- Not Before: Jan 2 03:06:53 2019 GMT +- Not After : Jan 1 03:06:53 2024 GMT +- Subject: C=JP, ST=Shimane, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org ++ Not Before: Jan 2 03:27:13 2019 GMT ++ Not After : Jan 1 03:27:13 2024 GMT ++ Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: +- 00:c1:a9:64:ef:d3:f2:e1:1a:7f:24:df:7f:65:86: +- c1:98:55:16:83:91:16:5b:63:6e:26:bb:c0:73:68: +- 7b:f7:00:ba:37:db:7f:a9:5c:c8:98:aa:43:96:87: +- e1:a0:63:69:0c:d8:22:90:f5:56:22:b1:57:6e:71: +- 3b:30:04:d0:64:4d:38:33:a0:ea:c1:16:3d:16:be: +- c0:49:4c:f0:14:15:af:09:95:da:bf:c7:23:34:c3: +- 7d:af:b7:70:b3:6d:1b:de:21:93:c0:7c:6c:0e:fd: +- 0e:e5:ff:f3:80:51:0c:df:80:7c:40:46:c9:ca:57: +- d4:88:02:0f:f0:1e:14:18:f1:98:0f:c6:42:1d:cc: +- 90:29:71:1b:af:4a:22:e0:e7:86:fc:dd:d3:d8:84: +- 0e:5e:f0:9b:93:5f:0a:9a:1d:f8:f5:f3:e7:c7:b0: +- 7a:0e:25:20:13:02:1a:22:c2:d9:e0:7f:4f:a1:7f: +- 72:f6:e6:e1:14:7c:c5:93:7f:a6:96:3b:ab:d8:f1: +- dc:2b:01:d6:e5:fe:5c:cf:08:db:06:e9:fd:7d:bd: +- fe:2c:f4:8a:7b:9f:15:88:05:2e:f7:ba:c9:86:7e: +- 14:50:f4:96:a1:84:17:5d:f7:8b:0a:7a:14:2c:de: +- ca:00:74:f8:23:32:9d:66:af:1c:a6:58:1a:de:82: +- 96:a9 ++ 00:e8:da:9c:01:2e:2b:10:ec:49:cd:5e:07:13:07: ++ 9c:70:9e:c6:74:bc:13:c2:e1:6f:c6:82:fd:e3:48: ++ e0:2c:a5:68:c7:9e:42:de:60:54:65:e6:6a:14:57: ++ 7a:30:d0:cc:b5:b6:d9:c3:d2:df:c9:25:97:54:67: ++ cf:f6:be:5e:cb:8b:ee:03:c5:e1:e2:f9:e7:f7:d1: ++ 0c:47:f0:b8:da:33:5a:ad:41:ad:e7:b5:a2:7b:b7: ++ bf:30:da:60:f8:e3:54:a2:bc:3a:fd:1b:74:d9:dc: ++ 74:42:e9:29:be:df:ac:b4:4f:eb:32:f4:06:f1:e1: ++ 8c:4b:a8:8b:fb:29:e7:b1:bf:1d:01:ee:73:0f:f9: ++ 40:dc:d5:15:79:d9:c6:73:d0:c0:dd:cb:e4:da:19: ++ 47:80:c6:14:04:72:fd:9a:7c:8f:11:82:76:49:04: ++ 79:cc:f2:5c:31:22:95:13:3e:5d:40:a6:4d:e0:a3: ++ 02:26:7d:52:3b:bb:ed:65:a1:0f:ed:6b:b0:3c:d4: ++ de:61:15:5e:d3:dd:68:09:9f:4a:57:a5:c2:a9:6d: ++ 86:92:c5:f4:a4:d4:b7:13:3b:52:63:24:05:e2:cc: ++ e3:8a:3c:d4:35:34:2b:10:bb:58:72:e7:e1:8d:1d: ++ 74:8c:61:16:20:3d:d0:1c:4e:8f:6e:fd:fe:64:10: ++ 4f:41 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: +@@ -37,47 +37,46 @@ Certificate: + Netscape Comment: + OpenSSL Generated Certificate + X509v3 Subject Key Identifier: +- F2:C9:35:05:31:EF:08:EE:EF:B0:FE:1A:72:C2:9E:70:E3:E3:EC:43 ++ ED:28:C2:7E:AB:4B:C8:E8:FE:55:6D:66:95:31:1C:2D:60:F9:02:36 + X509v3 Authority Key Identifier: + keyid:F6:D1:22:29:D5:3D:23:D7:5E:AD:0C:9C:E6:75:8F:9D:CD:F8:9D:53 + + Signature Algorithm: sha256WithRSAEncryption +- 02:e7:0a:22:7c:5e:d9:92:d2:b9:fb:4a:bf:75:3f:00:e6:19: +- 3e:90:a5:9d:38:41:82:4c:6f:b9:f3:f2:58:a1:91:7f:4a:d4: +- 28:38:9c:7c:4d:6c:2f:2f:95:f5:55:55:25:a1:71:0c:05:42: +- 08:a3:a6:ab:e3:04:47:9a:42:24:8f:b2:ba:50:55:af:b8:d7: +- fc:1a:13:92:5d:75:7d:e1:4d:87:5e:57:82:c5:5f:d6:b8:ea: +- 86:4e:05:b0:7f:07:27:a5:36:1f:1e:54:f1:32:35:7f:9c:75: +- 26:6a:21:75:37:32:bb:89:01:78:97:cc:d3:de:3a:e8:ce:45: +- ed:12:24:2e:a8:25:73:b3:cd:70:47:b8:81:f9:06:aa:8d:87: +- 2f:a9:cd:fe:79:40:cc:c9:47:3d:2f:82:c2:82:bf:5d:8a:06: +- 5b:a9:90:d3:b0:a7:fc:f3:1a:fb:0e:cb:8f:d8:f2:4e:f4:8d: +- bb:4b:d5:2d:20:c0:6e:d5:08:2b:81:32:c4:e0:d2:4b:31:27: +- f1:55:96:0e:d4:b9:92:02:71:98:69:e5:73:cc:52:45:a0:07: +- fb:28:9e:b0:fc:b1:58:42:5a:08:4a:30:49:e5:f1:a5:c8:d5: +- 8a:67:f0:ed:9e:3f:1b:71:a6:80:91:81:cb:1a:3d:b5:8e:87: +- 9d:64:28:ce ++ 1d:b8:c5:8b:72:41:20:65:ad:27:6f:15:63:06:26:12:8d:9c: ++ ad:ca:f4:db:97:b4:90:cb:ff:35:94:bb:2a:a7:a1:ab:1e:35: ++ 2d:a5:3f:c9:24:b0:1a:58:89:75:3e:81:0a:2c:4f:98:f9:51: ++ fb:c0:a3:09:d0:0a:9b:e7:a2:b7:c3:60:40:c8:f4:6d:b2:6a: ++ 56:12:17:4c:00:24:31:df:9c:60:ae:b1:68:54:a9:e6:b5:4a: ++ 04:e6:92:05:86:d9:5a:dc:96:30:a5:58:de:14:99:0f:e5:15: ++ 89:3e:9b:eb:80:e3:bd:83:c3:ea:33:35:4b:3e:2f:d3:0d:64: ++ 93:67:7f:8d:f5:3f:0c:27:bc:37:5a:cc:d6:47:16:af:5a:62: ++ d2:da:51:f8:74:06:6b:24:ad:28:68:08:98:37:7d:ed:0e:ab: ++ 1e:82:61:05:d0:ba:75:a0:ab:21:b0:9a:fd:2b:54:86:1d:0d: ++ 1f:c2:d4:77:1f:72:26:5e:ad:8a:9f:09:36:6d:44:be:74:c2: ++ 5a:3e:ff:5c:9d:75:d6:38:7b:c5:39:f9:44:6e:a1:d1:8e:ff: ++ 63:db:c4:bb:c6:91:92:ca:5c:60:9b:1d:eb:0a:de:08:ee:bf: ++ da:76:03:65:62:29:8b:f8:7f:c7:86:73:1e:f6:1f:2d:89:69: ++ fd:be:bd:6e + -----BEGIN CERTIFICATE----- +-MIID+TCCAuGgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSlAx ++MIID4zCCAsugAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSlAx + EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK + DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI +-hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTE5MDEwMjAzMDY1M1oX +-DTI0MDEwMTAzMDY1M1owdjELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx +-FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex +-JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwggEiMA0GCSqG +-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBqWTv0/LhGn8k339lhsGYVRaDkRZbY24m +-u8BzaHv3ALo323+pXMiYqkOWh+GgY2kM2CKQ9VYisVducTswBNBkTTgzoOrBFj0W +-vsBJTPAUFa8Jldq/xyM0w32vt3CzbRveIZPAfGwO/Q7l//OAUQzfgHxARsnKV9SI +-Ag/wHhQY8ZgPxkIdzJApcRuvSiLg54b83dPYhA5e8JuTXwqaHfj18+fHsHoOJSAT +-Ahoiwtngf0+hf3L25uEUfMWTf6aWO6vY8dwrAdbl/lzPCNsG6f19vf4s9Ip7nxWI +-BS73usmGfhRQ9JahhBdd94sKehQs3soAdPgjMp1mrxymWBregpapAgMBAAGjezB5 +-MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENl +-cnRpZmljYXRlMB0GA1UdDgQWBBTyyTUFMe8I7u+w/hpywp5w4+PsQzAfBgNVHSME +-GDAWgBT20SIp1T0j116tDJzmdY+dzfidUzANBgkqhkiG9w0BAQsFAAOCAQEAAucK +-Inxe2ZLSuftKv3U/AOYZPpClnThBgkxvufPyWKGRf0rUKDicfE1sLy+V9VVVJaFx +-DAVCCKOmq+MER5pCJI+yulBVr7jX/BoTkl11feFNh15XgsVf1rjqhk4FsH8HJ6U2 +-Hx5U8TI1f5x1JmohdTcyu4kBeJfM09466M5F7RIkLqglc7PNcEe4gfkGqo2HL6nN +-/nlAzMlHPS+CwoK/XYoGW6mQ07Cn/PMa+w7Lj9jyTvSNu0vVLSDAbtUIK4EyxODS +-SzEn8VWWDtS5kgJxmGnlc8xSRaAH+yiesPyxWEJaCEowSeXxpcjVimfw7Z4/G3Gm +-gJGByxo9tY6HnWQozg== ++hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTE5MDEwMjAzMjcxM1oX ++DTI0MDEwMTAzMjcxM1owYDELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx ++FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRIwEAYDVQQLDAlSdWJ5IFRlc3QxEjAQ ++BgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB ++AOjanAEuKxDsSc1eBxMHnHCexnS8E8Lhb8aC/eNI4CylaMeeQt5gVGXmahRXejDQ ++zLW22cPS38kll1Rnz/a+XsuL7gPF4eL55/fRDEfwuNozWq1Bree1onu3vzDaYPjj ++VKK8Ov0bdNncdELpKb7frLRP6zL0BvHhjEuoi/sp57G/HQHucw/5QNzVFXnZxnPQ ++wN3L5NoZR4DGFARy/Zp8jxGCdkkEeczyXDEilRM+XUCmTeCjAiZ9Uju77WWhD+1r ++sDzU3mEVXtPdaAmfSlelwqlthpLF9KTUtxM7UmMkBeLM44o81DU0KxC7WHLn4Y0d ++dIxhFiA90BxOj279/mQQT0ECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhC ++AQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFO0o ++wn6rS8jo/lVtZpUxHC1g+QI2MB8GA1UdIwQYMBaAFPbRIinVPSPXXq0MnOZ1j53N +++J1TMA0GCSqGSIb3DQEBCwUAA4IBAQAduMWLckEgZa0nbxVjBiYSjZytyvTbl7SQ ++y/81lLsqp6GrHjUtpT/JJLAaWIl1PoEKLE+Y+VH7wKMJ0Aqb56K3w2BAyPRtsmpW ++EhdMACQx35xgrrFoVKnmtUoE5pIFhtla3JYwpVjeFJkP5RWJPpvrgOO9g8PqMzVL ++Pi/TDWSTZ3+N9T8MJ7w3WszWRxavWmLS2lH4dAZrJK0oaAiYN33tDqsegmEF0Lp1 ++oKshsJr9K1SGHQ0fwtR3H3ImXq2Knwk2bUS+dMJaPv9cnXXWOHvFOflEbqHRjv9j ++28S7xpGSylxgmx3rCt4I7r/adgNlYimL+H/HhnMe9h8tiWn9vr1u + -----END CERTIFICATE----- +diff --git a/test/net/fixtures/server.key b/test/net/fixtures/server.key +index 1e73232728..7f2380e71e 100644 +--- a/test/net/fixtures/server.key ++++ b/test/net/fixtures/server.key +@@ -1,28 +1,28 @@ + -----BEGIN PRIVATE KEY----- +-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDBqWTv0/LhGn8k +-339lhsGYVRaDkRZbY24mu8BzaHv3ALo323+pXMiYqkOWh+GgY2kM2CKQ9VYisVdu +-cTswBNBkTTgzoOrBFj0WvsBJTPAUFa8Jldq/xyM0w32vt3CzbRveIZPAfGwO/Q7l +-//OAUQzfgHxARsnKV9SIAg/wHhQY8ZgPxkIdzJApcRuvSiLg54b83dPYhA5e8JuT +-XwqaHfj18+fHsHoOJSATAhoiwtngf0+hf3L25uEUfMWTf6aWO6vY8dwrAdbl/lzP +-CNsG6f19vf4s9Ip7nxWIBS73usmGfhRQ9JahhBdd94sKehQs3soAdPgjMp1mrxym +-WBregpapAgMBAAECggEAYQJ20oBMcSBxwknGqlfnkGRHI97A4UScgACa9fTH7EJM +-BgEJIRCeV4Mq2jP0/P/vNoTqQ8zxue02C9fiuzoeHbBkz8/y6Ig4T7V74vwMYzM9 +-fEK50klxxFONGUF9zhOA2zPcrJZnFtcC6InfM07mcOsO0q/jE14N05ec3j5i+N7j +-hDHsHjS3hUiSEGra/U6TRGA26imDUZR5S3h3WMuFmpQgAg0STHc2inYjS9iVhn+T +-uAV2igYR89MOTcH1ZVoxjeYXwhqjWT6Kbw4Er4TWTVzwGf9ktv04EjZjhgUAqw7Q +-8Sc7Olt2q2tA7hQqdgJVgNMaszHqpKAECbAfuxuDtQKBgQD/r0zI9ZcTDQOgezaB +-s9UGbT5O5LruxLc/ExHRL7gpU7UsF/cc3Hp9zmDrzuUsq+UZlGewNnPBLHzaEq1z +-AZD9aa85umzXxcLzyg9ZnvN4kHLKIXhnnTEiShHtpRbqfybBKM7J+iQxXIYUf5tl +-lHTfEqG2/nTt4E50dhniIbIaAwKBgQDB5oS3LGXSn6zAWyUsAJaSeS8/3/O4Vz+x +-u8tZrICSFWBodwg46eHR9I379eayKhMGCsaAWx4ybWJWWEb/nM+fBGxBSnxb9jmm +-gHu93BQjK3sWS8qAGTwO5ehLEy0QRcCc+wb0lyo9hfh1grJioESVsiB9SXrxp8dr +-45JvxCCC4wKBgDGSKQ7lHm8hHMzmVoD6/pgKYgQlsGBOX0CpT9EAsXHBuuRbmRtN +-W6o8cuoE6MWqZfZ5oUi2peaT23jkGiCr8xJOhRxqGmQTAWMGj8dOW+HKD5dEufVM +-spP1TFiIo1K/aCIW6VCbYJz5VT1wKA6fo7EECbpSxxS/YjaOFyKSaddFAoGBAKk3 +-bdcVrf70TqTIZlZSZRWLIMsTvPTBX9rSUxL9Um8qrKo+RzS0F9lNHaQn457UzSlW +-uglGe8HyaAGGpN9qkF7sUzVftcvjxEgklNkKeaB/z7mThzPn0dwGlIUARTGQThox +-kM5gJgLvKfgTiW49A93ISEZOnDbM/2KOhjt35A+VAoGAYsNAMBwjubVo0v1vqry+ +-XG6VvPpgVjMiDQCsTEEcBqgRRuf6R5zndIhIvwmTNiUkGkE3w/vG0uCjtB82/kwE +-bzVheR0vZDN7s52OYRz4j0ddtYCqGSkvkWuEQfQFZUDTyLodwVQAT5aR+mcr4Qml +-uCiVeqoPl+JIg4m8Tz76XWo= ++MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDo2pwBLisQ7EnN ++XgcTB5xwnsZ0vBPC4W/Ggv3jSOAspWjHnkLeYFRl5moUV3ow0My1ttnD0t/JJZdU ++Z8/2vl7Li+4DxeHi+ef30QxH8LjaM1qtQa3ntaJ7t78w2mD441SivDr9G3TZ3HRC ++6Sm+36y0T+sy9Abx4YxLqIv7Keexvx0B7nMP+UDc1RV52cZz0MDdy+TaGUeAxhQE ++cv2afI8RgnZJBHnM8lwxIpUTPl1Apk3gowImfVI7u+1loQ/ta7A81N5hFV7T3WgJ ++n0pXpcKpbYaSxfSk1LcTO1JjJAXizOOKPNQ1NCsQu1hy5+GNHXSMYRYgPdAcTo9u ++/f5kEE9BAgMBAAECggEBAOHkwhc7DLh8IhTDNSW26oMu5OP2WU1jmiYAigDmf+OQ ++DBgrZj+JQBci8qINQxL8XLukSZn5hvQCLc7Kbyu1/wyEEUFDxSGGwwzclodr9kho ++LX2LDASPZrOSzD2+fPi2wTKmXKuS6Uc44OjQfZkYMNkz9r4Vkm8xGgOD3VipjIYX ++QXlhhdqkXZcNABsihCV52GKkDFSVm8jv95YJc5xhoYCy/3a4/qPdF0aT2R7oYUej ++hKrxVDskyooe8Zg/JTydZNV5GQEDmW01/K3r6XGT26oPi1AqMU1gtv/jkW56CRQQ ++1got8smnqM+AV7Slf9R6DauIPdQJ2S8wsr/o8ISBsOECgYEA9YrqEP2gAYSGFXRt ++liw0WI2Ant8BqXS6yvq1jLo/qWhLw/ph4Di73OQ2mpycVTpgfGr2wFPQR1XJ+0Fd ++U+Ir/C3Q7FK4VIGHK7B0zNvZr5tEjlFfeRezo2JMVw5YWeSagIFcSwK+KqCTH9qc ++pw/Eb8nB/4XNcpTZu7Fg0Wc+ooUCgYEA8sVaicn1Wxkpb45a4qfrA6wOr5xdJ4cC ++A5qs7vjX2OdPIQOmoQhdI7bCWFXZzF33wA4YCws6j5wRaySLIJqdms8Gl9QnODy1 ++ZlA5gwKToBC/jqPmWAXSKb8EH7cHilaxU9OKnQ7CfwlGLHqjMtjrhR7KHlt3CVRs ++oRmvsjZVXI0CgYAmPedslAO6mMhFSSfULrhMXmV82OCqYrrA6EEkVNGbcdnzAOkD ++gfKIWabDd8bFY10po4Mguy0CHzNhBXIioWQWV5BlbhC1YKMLw+S9DzSdLAKGY9gJ ++xQ4+UQ3wtRQ/k+IYR413RUsW2oFvgZ3KSyNeAb9MK6uuv84VdG/OzVSs/QKBgQDn ++kap//l2EbObiWyaERunckdVcW0lcN+KK75J/TGwPoOwQsLvTpPe65kxRGGrtDsEQ ++uCDk/+v3KkZPLgdrrTAih9FhJ+PVN8tMcb+6IM4SA4fFFr/UPJEwct0LJ3oQ0grJ ++y+HPWFHb/Uurh7t99/4H98uR02sjQh1wOeEmm78mzQKBgQDm+LzGH0se6CXQ6cdZ ++g1JRZeXkDEsrW3hfAsW62xJQmXcWxBoblP9OamMY+A06rM5og3JbDk5Zm6JsOaA8 ++wS2gw4ilp46jors4eQey8ux7kB9LzdBoDBBElnsbjLO8oBNZlVcYXg+6BOl/CUi7 ++2whRF0FEjKA8ehrNhAq+VFfFNw== + -----END PRIVATE KEY----- +-- +2.20.1 + diff --git a/ruby.spec b/ruby.spec index 3e0845e..20b8de2 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 102 +%global release 103 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -150,6 +150,10 @@ Patch24: ruby-2.6.0-configure-fstack-protector-strong.patch # Fix Tokyo TZ tests. # https://github.com/ruby/ruby/commit/e71ca6cdcf108e6a2fa47ec9fadefe7554717908 Patch25: ruby-2.6.0-Update-for-tzdata-2018f.patch +# Refresh expired certificates. +# https://bugs.ruby-lang.org/issues/15502 +# https://github.com/ruby/ruby/commit/6f9b40ea53d8f3fb2a5b1c7ac55c207d42c77ef4 +Patch11: ruby-2.6.0-Try-to-update-cert.patch # Fix some OpenSSL 1.1.1 test failures. # https://github.com/ruby/ruby/commit/1dfc377ae3b174b043d3f0ed36de57b0296b34d0 @@ -542,6 +546,7 @@ rm -rf ext/fiddle/libffi* %patch7 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 %patch15 -p1 %patch16 -p1 %patch19 -p1 @@ -1096,6 +1101,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Fri Jan 11 2019 Jun Aruga - 2.5.3-103 +- Refresh expired certificates to fix FTBFS. + * Tue Nov 13 2018 Vít Ondruch - 2.5.3-102 - Fix Tokyo TZ tests. From bb26a282aa1fb19b9eaea4f8aae740e80c9df007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= Date: Mon, 14 Jan 2019 18:53:16 +0100 Subject: [PATCH 306/530] Rebuilt for libcrypt.so.2 (#1666033) --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 20b8de2..0741d70 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 103 +%global release 104 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1101,6 +1101,9 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec %changelog +* Mon Jan 14 2019 Björn Esser - 2.5.3-104 +- Rebuilt for libcrypt.so.2 (#1666033) + * Fri Jan 11 2019 Jun Aruga - 2.5.3-103 - Refresh expired certificates to fix FTBFS. From 0c8cdc456bea3d321c73c450eadb6ca8116db281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 17 Jan 2019 08:31:01 +0100 Subject: [PATCH 307/530] Upgrade to Ruby 2.6.0. --- ruby-1.9.3-mkmf-verbose.patch | 2 +- ...-additional-preludes-by-configuratio.patch | 10 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 4 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 29 ++- ...2.3-Generate-preludes-using-miniruby.patch | 4 +- ruby-2.3.0-ruby_version.patch | 28 +- ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch | 4 +- ....0-Add-Gem.operating_system_defaults.patch | 80 ------ ...-C++-compiler-to-pass-the-test-suite.patch | 35 --- ruby-2.6.0-No-chdir-for-build.patch | 95 +++++++ ruby-2.6.0-Update-for-tzdata-2018f.patch | 44 ---- ...6.0-config-support-include-directive.patch | 4 +- ....0-configure-fstack-protector-strong.patch | 43 ---- ruby-2.6.0-library-options-to-MAINLIBS.patch | 177 ------------- ...-fix-session-resumption-with-TLS-1.3.patch | 157 ------------ ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch | 34 --- ...-2.6.0-use-larger-keys-for-SSL-tests.patch | 26 +- ruby.spec | 240 ++++++++++++------ rubygems.prov | 4 +- sources | 2 +- 22 files changed, 321 insertions(+), 705 deletions(-) delete mode 100644 ruby-2.5.0-Add-Gem.operating_system_defaults.patch delete mode 100644 ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch create mode 100644 ruby-2.6.0-No-chdir-for-build.patch delete mode 100644 ruby-2.6.0-Update-for-tzdata-2018f.patch delete mode 100644 ruby-2.6.0-configure-fstack-protector-strong.patch delete mode 100644 ruby-2.6.0-library-options-to-MAINLIBS.patch delete mode 100644 ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch delete mode 100644 ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index b523657..dc8e9da 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,7 +11,7 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1900,7 +1900,7 @@ def configuration(srcdir) +@@ -1911,7 +1911,7 @@ def configuration(srcdir) SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index 47bf9bc..7e28791 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -13,9 +13,9 @@ diff --git a/Makefile.in b/Makefile.in index 7e8ed82..7916993 100644 --- a/Makefile.in +++ b/Makefile.in -@@ -119,6 +119,8 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ - XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@ - BOOTSTRAPRUBY = @BOOTSTRAPRUBY@ +@@ -154,6 +154,8 @@ BOOTSTRAPRUBY = @BOOTSTRAPRUBY@ + COROUTINE_H = @X_FIBER_COROUTINE_H@ + COROUTINE_OBJ = $(COROUTINE_H:.h=.@OBJEXT@) +OPTIONAL_PRELUDES = @OPTIONAL_PRELUDES@ + @@ -26,7 +26,7 @@ diff --git a/common.mk b/common.mk index 5cfbc3d..3f0a82e 100644 --- a/common.mk +++ b/common.mk -@@ -147,7 +147,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) +@@ -156,7 +156,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) DEFAULT_PRELUDES = $(GEM_PRELUDE) @@ -39,7 +39,7 @@ diff --git a/configure.ac b/configure.ac index 028ef7ca3e..cdeff87871 100644 --- a/configure.ac +++ b/configure.ac -@@ -4396,6 +4396,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -3854,6 +3854,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 36ec460..1eadc58 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 11fc237552..b77e88fc37 100644 --- a/configure.ac +++ b/configure.ac -@@ -3641,6 +3641,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3084,6 +3084,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index d0cffab..bf25b90 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index 999e2d6d5d..11fc237552 100644 --- a/configure.ac +++ b/configure.ac -@@ -4251,7 +4251,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -3709,7 +3709,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then @@ -66,7 +66,7 @@ diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb index 07076d4..35e6c3c 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -111,7 +111,7 @@ +@@ -114,7 +114,7 @@ val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump case name when /^prefix$/ diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 555ad45..2de29d7 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index b77e88fc37..6bba453e3c 100644 --- a/configure.ac +++ b/configure.ac -@@ -4315,6 +4315,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3773,6 +3773,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index cc45741..ce00c6f 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -5,17 +5,17 @@ Subject: [PATCH] Allow to install RubyGems into custom location, outside of Ruby tree. --- - configure.ac | 5 +++++ - loadpath.c | 4 ++++ - template/verconf.h.tmpl | 3 +++ - tool/rbinstall.rb | 7 +++++++ - 4 files changed, 19 insertions(+) + configure.ac | 5 +++++ + loadpath.c | 4 ++++ + template/verconf.h.tmpl | 3 +++ + tool/rbinstall.rb | 10 ++++++++++ + 4 files changed, 22 insertions(+) diff --git a/configure.ac b/configure.ac index 6bba453e3c..028ef7ca3e 100644 --- a/configure.ac +++ b/configure.ac -@@ -4287,6 +4287,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -3745,6 +3745,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 6bba453e3c..028ef7ca3e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4311,6 +4315,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3769,6 +3773,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -67,24 +67,27 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index b47b6e1..0b99408 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -331,6 +331,7 @@ def CONFIG.[](name, mandatory = false) +@@ -334,6 +334,7 @@ def CONFIG.[](name, mandatory = false) sitearchlibdir = CONFIG["sitearchdir"] vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] +rubygemsdir = CONFIG["rubygemsdir"] mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] - configure_args = Shellwords.shellwords(CONFIG["configure_args"]) -@@ -537,7 +538,13 @@ def install(src, cmd) + enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' +@@ -560,7 +561,16 @@ def stub install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] -+ noinst += %w[rubygems.rb rubygems/ datadir.rb] if rubygemsdir ++ # Bundler carries "rubygems.rb" file, so it must be specialcased :/ ++ noinst += %w[rubygems.rb rubygems/ bundler.rb bundler/] if rubygemsdir install_recursive(File.join(srcdir, "lib"), rubylibdir, :no_install => noinst, :mode => $data_mode) + if rubygemsdir -+ noinst = %w[obsolete.rb] -+ install_recursive(File.join(srcdir, "lib", "rubygems"), File.join(rubygemsdir, "rubygems"), :mode => $data_mode) ++ noinst = %w[*.txt *.rdoc *.gemspec] ++ install_recursive(File.join(srcdir, "lib", "rubygems"), File.join(rubygemsdir, "rubygems"), :no_install => noinst, :mode => $data_mode) + install(File.join(srcdir, "lib", "rubygems.rb"), File.join(rubygemsdir, "rubygems.rb"), :mode => $data_mode) ++ install_recursive(File.join(srcdir, "lib", "bundler"), File.join(rubylibdir, "bundler"), :no_install => noinst, :mode => $data_mode) ++ install(File.join(srcdir, "lib", "bundler.rb"), rubylibdir, :mode => $data_mode) + end end diff --git a/ruby-2.2.3-Generate-preludes-using-miniruby.patch b/ruby-2.2.3-Generate-preludes-using-miniruby.patch index ca66d28..7118a32 100644 --- a/ruby-2.2.3-Generate-preludes-using-miniruby.patch +++ b/ruby-2.2.3-Generate-preludes-using-miniruby.patch @@ -11,7 +11,7 @@ diff --git a/common.mk b/common.mk index 168dc52..20c218a 100644 --- a/common.mk +++ b/common.mk -@@ -962,9 +962,9 @@ $(MINIPRELUDE_C): $(COMPILE_PRELUDE) +@@ -1052,9 +1052,9 @@ $(MINIPRELUDE_C): $(COMPILE_PRELUDE) $(srcdir)/template/prelude.c.tmpl $(PRELUDE_C): $(COMPILE_PRELUDE) \ @@ -22,7 +22,7 @@ index 168dc52..20c218a 100644 + $(Q) $(MINIRUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \ $(srcdir)/template/prelude.c.tmpl $(PRELUDE_SCRIPTS) - {$(VPATH)}golf_prelude.c: $(COMPILE_PRELUDE) {$(srcdir)}golf_prelude.rb + $(GOLF_PRELUDE_C): $(COMPILE_PRELUDE) {$(srcdir)}golf_prelude.rb -- 2.6.3 diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 8f57319..b3353b9 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -12,7 +12,7 @@ ruby_version_dir_name now specifies custom version string for versioned directories, e.g. instead of default X.Y.Z, you can specify whatever string. --- - configure.ac | 64 ++++++++++++++++++++++++++++------------------------- + configure.ac | 64 ++++++++++++++++++++++++--------------------- template/ruby.pc.in | 1 + 2 files changed, 35 insertions(+), 30 deletions(-) @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 8ea969412f..a00f2b6776 100644 --- a/configure.ac +++ b/configure.ac -@@ -4202,9 +4202,6 @@ AS_CASE(["$target_os"], +@@ -3660,9 +3660,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 8ea969412f..a00f2b6776 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -4227,56 +4224,62 @@ AC_ARG_WITH(ridir, +@@ -3685,56 +3682,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 8ea969412f..a00f2b6776 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4293,6 +4296,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -3751,6 +3754,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -171,14 +171,14 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index d4c110e..d39c9a6 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -417,7 +417,7 @@ def CONFIG.[](name, mandatory = false) +@@ -424,7 +424,7 @@ def CONFIG.[](name, mandatory = false) install?(:doc, :rdoc) do if $rdocdir - ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version'], "system") + ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version_dir_name'] || CONFIG['ruby_version'], "system") prepare "rdoc", ridatadir - install_recursive($rdocdir, ridatadir, :mode => $data_mode) + install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode) end -- 2.1.0 @@ -205,12 +205,12 @@ index 55ca080..75eea2b 100644 - RbConfig::CONFIG['ruby_version'] + RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] ] - elsif RbConfig::CONFIG['rubylibprefix'] then + elsif RbConfig::CONFIG['rubylibprefix'] [ - RbConfig::CONFIG['rubylibprefix'], - 'gems', -- RbConfig::CONFIG['ruby_version'] -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + RbConfig::CONFIG['rubylibprefix'], + 'gems', +- RbConfig::CONFIG['ruby_version'] ++ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] ] else [ @@ -245,7 +245,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index 0428bea..b6e090e 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1156,7 +1156,8 @@ def test_self_use_paths +@@ -1280,7 +1280,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -255,7 +255,7 @@ index 0428bea..b6e090e 100644 assert_equal File.join(parts), Gem.user_dir end -@@ -1283,7 +1284,7 @@ def test_self_user_home_user_drive_and_path +@@ -1357,7 +1358,7 @@ def test_self_gzip def test_self_vendor_dir expected = File.join RbConfig::CONFIG['vendordir'], 'gems', @@ -282,7 +282,7 @@ diff --git a/configure.ac b/configure.ac index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -164,7 +164,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -101,7 +101,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) diff --git a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch index 2dc17e3..1e6f83f 100644 --- a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +++ b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch @@ -8,8 +8,8 @@ on Red Hat platforms. This workaround rhbz#1361037 --- - test/fiddle/helper.rb | 92 --------------------------------------------------- - 1 file changed, 92 deletions(-) + test/fiddle/helper.rb | 89 ------------------------------------------- + 1 file changed, 89 deletions(-) diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb index 1da3d93..65148a1 100644 diff --git a/ruby-2.5.0-Add-Gem.operating_system_defaults.patch b/ruby-2.5.0-Add-Gem.operating_system_defaults.patch deleted file mode 100644 index 6838701..0000000 --- a/ruby-2.5.0-Add-Gem.operating_system_defaults.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 60eb961c25f801ee43ca1be9393ab2f0a0546677 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Tue, 19 Dec 2017 14:00:20 +0100 -Subject: [PATCH] Add Gem.operating_system_defaults to allow packagers to - override defaults. - -This change allows Ruby packagers to override defaults and lazily query -them. - -This is very much the same change as #1644 to treat the -operating_system defaults the same way as platform defaults. ---- - lib/rubygems/config_file.rb | 2 +- - lib/rubygems/defaults.rb | 21 ++++++++++++++++++++- - test/rubygems/test_gem.rb | 7 +++++++ - 3 files changed, 28 insertions(+), 2 deletions(-) - -diff --git a/lib/rubygems/config_file.rb b/lib/rubygems/config_file.rb -index a4efed0f5a..deee38e6d9 100644 ---- a/lib/rubygems/config_file.rb -+++ b/lib/rubygems/config_file.rb -@@ -48,7 +48,7 @@ class Gem::ConfigFile - # For Ruby packagers to set configuration defaults. Set in - # rubygems/defaults/operating_system.rb - -- OPERATING_SYSTEM_DEFAULTS = {} -+ OPERATING_SYSTEM_DEFAULTS = Gem.operating_system_defaults - - ## - # For Ruby implementers to set configuration defaults. Set in -diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb -index 43d57fc808..b8222877ae 100644 ---- a/lib/rubygems/defaults.rb -+++ b/lib/rubygems/defaults.rb -@@ -177,7 +177,26 @@ def self.vendor_dir # :nodoc: - end - - ## -- # Default options for gem commands. -+ # Default options for gem commands for Ruby packagers. -+ # -+ # The options here should be structured as an array of string "gem" -+ # command names as keys and a string of the default options as values. -+ # -+ # Example: -+ # -+ # def self.operating_system_defaults -+ # { -+ # 'install' => '--no-rdoc --no-ri --env-shebang', -+ # 'update' => '--no-rdoc --no-ri --env-shebang' -+ # } -+ # end -+ -+ def self.operating_system_defaults -+ {} -+ end -+ -+ ## -+ # Default options for gem commands for Ruby implementers. - # - # The options here should be structured as an array of string "gem" - # command names as keys and a string of the default options as values. -diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb -index 3225a05c6b..62b80c4945 100644 ---- a/test/rubygems/test_gem.rb -+++ b/test/rubygems/test_gem.rb -@@ -1802,6 +1802,13 @@ def test_use_gemdeps_specific - ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps - end - -+ def test_operating_system_defaults -+ operating_system_defaults = Gem.operating_system_defaults -+ -+ assert operating_system_defaults != nil -+ assert operating_system_defaults.is_a? Hash -+ end -+ - def test_platform_defaults - platform_defaults = Gem.platform_defaults - diff --git a/ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch b/ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch deleted file mode 100644 index 413a1da..0000000 --- a/ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 51e2c91412a511196e58efea5b87c460b4fa6a20 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 26 Jul 2018 13:17:52 +0200 -Subject: [PATCH] Avoid need of C++ compiler to pass the test suite. - -The test suite fails when C++ compiler is not available on the system: - -~~~ -TestGemExtCmakeBuilder#test_self_build: -Gem::InstallError: cmake failed, exit code 1 - /builddir/build/BUILD/ruby-2.5.1/lib/rubygems/ext/builder.rb:92:in `run' - /builddir/build/BUILD/ruby-2.5.1/lib/rubygems/ext/cmake_builder.rb:10:in `build' - /builddir/build/BUILD/ruby-2.5.1/test/rubygems/test_gem_ext_cmake_builder.rb:37:in `block in test_self_build' - /builddir/build/BUILD/ruby-2.5.1/test/rubygems/test_gem_ext_cmake_builder.rb:36:in `chdir' - /builddir/build/BUILD/ruby-2.5.1/test/rubygems/test_gem_ext_cmake_builder.rb:36:in `test_self_build' -~~~ - -But there is nothing which would realy required C++. It is just CMake -default to check for C++. ---- - test/rubygems/test_gem_ext_cmake_builder.rb | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/test/rubygems/test_gem_ext_cmake_builder.rb b/test/rubygems/test_gem_ext_cmake_builder.rb -index 76d3cb2afe..2d449fc2fd 100644 ---- a/test/rubygems/test_gem_ext_cmake_builder.rb -+++ b/test/rubygems/test_gem_ext_cmake_builder.rb -@@ -25,6 +25,7 @@ def test_self_build - File.open File.join(@ext, 'CMakeLists.txt'), 'w' do |cmakelists| - cmakelists.write <<-eo_cmake - cmake_minimum_required(VERSION 2.6) -+project(self_build LANGUAGES NONE) - install (FILES test.txt DESTINATION bin) - eo_cmake - end diff --git a/ruby-2.6.0-No-chdir-for-build.patch b/ruby-2.6.0-No-chdir-for-build.patch new file mode 100644 index 0000000..25c6090 --- /dev/null +++ b/ruby-2.6.0-No-chdir-for-build.patch @@ -0,0 +1,95 @@ +From 5168efc9ba0a0644c4fd1dbe09c1799f71301e42 Mon Sep 17 00:00:00 2001 +From: Pavel Valena +Date: Tue, 8 Jan 2019 14:51:46 +0100 +Subject: [PATCH] Revert 90e676886e681e16e34ef58e078bf0a0aae8b54f + +--- + lib/rubygems/commands/build_command.rb | 26 ++++++------- + .../test_gem_commands_build_command.rb | 37 ------------------- + 2 files changed, 12 insertions(+), 51 deletions(-) + +diff --git a/lib/rubygems/commands/build_command.rb b/lib/rubygems/commands/build_command.rb +index e59471e976..3120236f9f 100644 +--- a/lib/rubygems/commands/build_command.rb ++++ b/lib/rubygems/commands/build_command.rb +@@ -60,20 +60,18 @@ def execute + end + + if File.exist? gemspec +- Dir.chdir(File.dirname(gemspec)) do +- spec = Gem::Specification.load File.basename(gemspec) +- +- if spec +- Gem::Package.build( +- spec, +- options[:force], +- options[:strict], +- options[:output] +- ) +- else +- alert_error "Error loading gemspec. Aborting." +- terminate_interaction 1 +- end ++ spec = Gem::Specification.load gemspec ++ ++ if spec ++ Gem::Package.build( ++ spec, ++ options[:force], ++ options[:strict], ++ options[:output] ++ ) ++ else ++ alert_error "Error loading gemspec. Aborting." ++ terminate_interaction 1 + end + else + alert_error "Gemspec file not found: #{gemspec}" +diff --git a/test/rubygems/test_gem_commands_build_command.rb b/test/rubygems/test_gem_commands_build_command.rb +index ac82a408c7..fa5e7454f3 100644 +--- a/test/rubygems/test_gem_commands_build_command.rb ++++ b/test/rubygems/test_gem_commands_build_command.rb +@@ -192,43 +192,6 @@ def test_execute_missing_file + assert_equal "ERROR: Gemspec file not found: some_gem\n", @ui.error + end + +- def test_execute_outside_dir +- gemspec_dir = File.join @tempdir, 'build_command_gem' +- gemspec_file = File.join gemspec_dir, @gem.spec_name +- readme_file = File.join gemspec_dir, 'README.md' +- +- FileUtils.mkdir_p gemspec_dir +- +- File.open readme_file, 'w' do |f| +- f.write "My awesome gem" +- end +- +- File.open gemspec_file, 'w' do |gs| +- gs.write @gem.to_ruby +- end +- +- @cmd.options[:args] = [gemspec_file] +- +- use_ui @ui do +- @cmd.execute +- end +- +- output = @ui.output.split "\n" +- assert_equal " Successfully built RubyGem", output.shift +- assert_equal " Name: some_gem", output.shift +- assert_equal " Version: 2", output.shift +- assert_equal " File: some_gem-2.gem", output.shift +- assert_equal [], output +- +- gem_file = File.join gemspec_dir, File.basename(@gem.cache_file) +- assert File.exist?(gem_file) +- +- spec = Gem::Package.new(gem_file).spec +- +- assert_equal "some_gem", spec.name +- assert_equal "this is a summary", spec.summary +- end +- + def test_can_find_gemspecs_without_dot_gemspec + gemspec_file = File.join(@tempdir, @gem.spec_name) + diff --git a/ruby-2.6.0-Update-for-tzdata-2018f.patch b/ruby-2.6.0-Update-for-tzdata-2018f.patch deleted file mode 100644 index edc58b6..0000000 --- a/ruby-2.6.0-Update-for-tzdata-2018f.patch +++ /dev/null @@ -1,44 +0,0 @@ -From e71ca6cdcf108e6a2fa47ec9fadefe7554717908 Mon Sep 17 00:00:00 2001 -From: nobu -Date: Fri, 26 Oct 2018 01:47:09 +0000 -Subject: [PATCH] Update for tzdata-2018f - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65365 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - test/ruby/test_time_tz.rb | 12 +++++++++--- - 1 file changed, 9 insertions(+), 3 deletions(-) - -diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb -index 2da4fd8d9ce4..328fde48fc34 100644 ---- a/test/ruby/test_time_tz.rb -+++ b/test/ruby/test_time_tz.rb -@@ -86,7 +86,9 @@ def group_by(e, &block) - has_lisbon_tz &&= have_tz_offset?("Europe/Lisbon") - CORRECT_TOKYO_DST_1951 = with_tz("Asia/Tokyo") { - if Time.local(1951, 5, 6, 12, 0, 0).dst? # noon, DST -- Time.local(1951, 5, 6, 1, 0, 0).dst? # DST with fixed tzdata -+ if Time.local(1951, 5, 6, 1, 0, 0).dst? # DST with fixed tzdata -+ Time.local(1951, 9, 8, 23, 0, 0).dst? ? "2018f" : "2018e" -+ end - end - } - CORRECT_KIRITIMATI_SKIP_1994 = with_tz("Pacific/Kiritimati") { -@@ -347,12 +349,16 @@ def self.gen_zdump_test(data) - Asia/Singapore Thu Dec 31 16:29:59 1981 UTC = Thu Dec 31 23:59:59 1981 SGT isdst=0 gmtoff=27000 - Asia/Singapore Thu Dec 31 16:30:00 1981 UTC = Fri Jan 1 00:30:00 1982 SGT isdst=0 gmtoff=28800 - End -- gen_zdump_test CORRECT_TOKYO_DST_1951 ? <<'End' : <<'End' -+ gen_zdump_test CORRECT_TOKYO_DST_1951 ? <<'End' + (CORRECT_TOKYO_DST_1951 < "2018f" ? <<'2018e' : <<'2018f') : <<'End' - Asia/Tokyo Sat May 5 14:59:59 1951 UTC = Sat May 5 23:59:59 1951 JST isdst=0 gmtoff=32400 - Asia/Tokyo Sat May 5 15:00:00 1951 UTC = Sun May 6 01:00:00 1951 JDT isdst=1 gmtoff=36000 -+End - Asia/Tokyo Sat Sep 8 13:59:59 1951 UTC = Sat Sep 8 23:59:59 1951 JDT isdst=1 gmtoff=36000 - Asia/Tokyo Sat Sep 8 14:00:00 1951 UTC = Sat Sep 8 23:00:00 1951 JST isdst=0 gmtoff=32400 --End -+2018e -+Asia/Tokyo Sat Sep 8 14:59:59 1951 UTC = Sun Sep 9 00:59:59 1951 JDT isdst=1 gmtoff=36000 -+Asia/Tokyo Sat Sep 8 15:00:00 1951 UTC = Sun Sep 9 00:00:00 1951 JST isdst=0 gmtoff=32400 -+2018f - Asia/Tokyo Sat May 5 16:59:59 1951 UTC = Sun May 6 01:59:59 1951 JST isdst=0 gmtoff=32400 - Asia/Tokyo Sat May 5 17:00:00 1951 UTC = Sun May 6 03:00:00 1951 JDT isdst=1 gmtoff=36000 - Asia/Tokyo Fri Sep 7 15:59:59 1951 UTC = Sat Sep 8 01:59:59 1951 JDT isdst=1 gmtoff=36000 diff --git a/ruby-2.6.0-config-support-include-directive.patch b/ruby-2.6.0-config-support-include-directive.patch index 27ef50f..37a89d6 100644 --- a/ruby-2.6.0-config-support-include-directive.patch +++ b/ruby-2.6.0-config-support-include-directive.patch @@ -13,8 +13,8 @@ versions. So continue to use the Ruby implementation for now. Reference: https://github.com/ruby/openssl/issues/208 --- - ext/openssl/lib/openssl/config.rb | 54 ++++++++++++++++++++++++++++--------------- - test/openssl/test_config.rb | 54 +++++++++++++++++++++++++++++++++++++++++++ + ext/openssl/lib/openssl/config.rb | 54 ++++++++++++++++++++----------- + test/openssl/test_config.rb | 54 +++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 18 deletions(-) diff --git a/ext/openssl/lib/openssl/config.rb b/ext/openssl/lib/openssl/config.rb diff --git a/ruby-2.6.0-configure-fstack-protector-strong.patch b/ruby-2.6.0-configure-fstack-protector-strong.patch deleted file mode 100644 index e44d9bb..0000000 --- a/ruby-2.6.0-configure-fstack-protector-strong.patch +++ /dev/null @@ -1,43 +0,0 @@ -From c8ccdbfe1e45cb3b832109d644296c0a3b3e0b59 Mon Sep 17 00:00:00 2001 -From: nobu -Date: Sun, 2 Sep 2018 03:49:31 +0000 -Subject: [PATCH] configure.ac: -fstack-protector-strong - -* configure.ac: use -fstack-protector-strong if available instead of - -fstack-protector conditionally. [ruby-core:88788] [Misc #15053] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64614 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - configure.ac | 17 ++++++++++------- - 1 file changed, 10 insertions(+), 7 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 9328fa532de0..b8ee57239215 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -837,15 +837,18 @@ AS_IF([test "$GCC" = yes], [ - stack_protector=no - ]) - AS_IF([test -z "${stack_protector+set}"], [ -- RUBY_TRY_CFLAGS(-fstack-protector, [stack_protector=yes], [stack_protector=no]) -- AS_IF([test "x$stack_protector" = xyes], [ -- RUBY_TRY_LDFLAGS(-fstack-protector, [], [stack_protector=broken]) -+ AS_FOR(option, opt, [-fstack-protector-strong -fstack-protector], [ -+ RUBY_TRY_CFLAGS(option, [stack_protector=yes]) -+ AS_IF([test "x$stack_protector" = xyes], [ -+ RUBY_TRY_LDFLAGS(option, [], [stack_protector=]) -+ ]) -+ AS_IF([test "x$stack_protector" = xyes], [stack_protector=option; break]) - ]) - ]) -- AS_IF([test "x$stack_protector" = xyes], [ -- RUBY_APPEND_OPTION(XCFLAGS, -fstack-protector) -- RUBY_APPEND_OPTION(XLDFLAGS, -fstack-protector) -- RUBY_APPEND_OPTION(LDFLAGS, -fstack-protector) -+ AS_CASE(["$stack_protector"], [-*], [ -+ RUBY_APPEND_OPTION(XCFLAGS, $stack_protector) -+ RUBY_APPEND_OPTION(XLDFLAGS, $stack_protector) -+ RUBY_APPEND_OPTION(LDFLAGS, $stack_protector) - ]) - - AS_CASE("${compress_debug_sections:-zlib}", diff --git a/ruby-2.6.0-library-options-to-MAINLIBS.patch b/ruby-2.6.0-library-options-to-MAINLIBS.patch deleted file mode 100644 index 199798d..0000000 --- a/ruby-2.6.0-library-options-to-MAINLIBS.patch +++ /dev/null @@ -1,177 +0,0 @@ -From bb3db69e2a0c210cc3a63940622db96a97eb7947 Mon Sep 17 00:00:00 2001 -From: nobu -Date: Fri, 2 Mar 2018 01:37:53 +0000 -Subject: [PATCH] configure.ac: library options to MAINLIBS - -* configure.ac (MAINLIBS): moved library options for main program - and static libruby, and append MAINLIBS to LIBRUBYARG_STATIC, as - these libraries are not needed for linking to shared libruby. - [ruby-core:85882] [Bug #14422] - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62627 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - configure.ac | 33 +++++++++++++++------------------ - template/ruby.pc.in | 1 + - win32/Makefile.sub | 6 ++++-- - 3 files changed, 20 insertions(+), 20 deletions(-) - -diff --git a/configure.ac b/configure.ac -index aebbae1969a5..733a0c992fd7 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -10,6 +10,7 @@ AC_DISABLE_OPTION_CHECKING - AC_ARG_VAR([cflags], [additional CFLAGS]) - AC_ARG_VAR([cppflags], [additional CPPFLAGS]) - AC_ARG_VAR([cxxflags], [additional CXXFLAGS]) -+ORIG_LIBS=$LIBS - - AC_DEFUN([RUBY_RM_RECURSIVE], [ - m4_version_prereq([2.70], [-1], [ -@@ -2938,13 +2939,11 @@ AS_IF([test x"$enable_pthread" = xyes], [ - AC_DEFINE(_THREAD_SAFE) - AC_DEFINE(HAVE_LIBPTHREAD) - AC_CHECK_HEADERS(pthread_np.h, [], [], [@%:@include ]) -- AS_CASE([$pthread_lib], -- [c], [], -- [root], [], -- [c_r], [MAINLIBS="-pthread $MAINLIBS"], -- [AS_CASE(["$target_os"], -- [openbsd*|mirbsd*], [LIBS="-pthread $LIBS"], -- [LIBS="-l$pthread_lib $LIBS"])]) -+ AS_CASE(["$pthread_lib:$target_os"], -+ [c:*], [], -+ [root:*], [], -+ [c_r:*|*:openbsd*|*:mirbsd*], [LIBS="-pthread $LIBS"], -+ [LIBS="-l$pthread_lib $LIBS"]) - ], [ - AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled") - ]) -@@ -3623,7 +3622,7 @@ LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a' - LIBRUBY='$(LIBRUBY_A)' - LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static' - LIBRUBYARG='$(LIBRUBYARG_STATIC)' --SOLIBS= -+SOLIBS='$(MAINLIBS)' - - AS_CASE(["$target_os"], - [cygwin*|mingw*|haiku*|darwin*], [ -@@ -3689,9 +3688,6 @@ AS_CASE("$enable_shared", [yes], [ - LIBRUBY_RELATIVE=no - test -z "$CCDLFLAGS" || CFLAGS="$CFLAGS $CCDLFLAGS" - ENABLE_SHARED=yes -- AS_IF([test "$rb_cv_binary_elf" = yes], [ -- SOLIBS='$(LIBS)' -- ]) - - # libdir can be overridden in config.site file (on OpenSUSE at least). - libdir_basename=lib -@@ -3726,7 +3722,6 @@ AS_CASE("$enable_shared", [yes], [ - ]) - ], - [freebsd*|dragonfly*], [ -- SOLIBS='$(LIBS)' - LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)$(MINOR)' - LIBRUBY_SONAME='$(LIBRUBY_SO)' - AS_IF([test "$rb_cv_binary_elf" != "yes" ], [ -@@ -3735,7 +3730,6 @@ AS_CASE("$enable_shared", [yes], [ - ]) - ], - [netbsd*], [ -- SOLIBS='$(LIBS)' - LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)$(MINOR)' - LIBRUBY_SO="${LIBRUBY_SONAME}"'.$(TEENY)' - RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ['-Wl,-soname,$(LIBRUBY_SONAME)' "$LDFLAGS_OPTDIR"]) -@@ -3746,11 +3740,9 @@ AS_CASE("$enable_shared", [yes], [ - ]) - ], - [openbsd*|mirbsd*], [ -- SOLIBS='$(LIBS)' - LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}` - ], - [solaris*], [ -- SOLIBS='$(LIBS)' - LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)' - LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_PROGRAM_VERSION)' - LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)' -@@ -3768,7 +3760,7 @@ AS_CASE("$enable_shared", [yes], [ - [aix*], [ - RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ["${linker_flag}-bnoentry" "$XLDFLAGS" "$LDFLAGS_OPTDIR"]) - LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}' -- SOLIBS='-lm -lc' -+ LIBS="$LIBS -lm -lc" - ], - [darwin*], [ - LIBRUBY_LDSHARED='$(CC) -dynamiclib' -@@ -3788,7 +3780,6 @@ AS_CASE("$enable_shared", [yes], [ - LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT)' - LIBRUBY_SONAME='lib$(RUBY_BASE_NAME).$(RUBY_API_VERSION).$(SOEXT)' - LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_INSTALL_NAME).$(SOEXT)' -- SOLIBS='$(LIBS)' - ], - [interix*], [ - LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)' -@@ -4031,7 +4022,6 @@ AS_CASE(["$target_os"], - ]) - LIBRUBY_ALIASES='' - FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in -- SOLIBS='$(LIBS)' - AS_IF([test x"$enable_shared" = xyes], [ - LIBRUBY='lib$(RUBY_SO_NAME).dll.a' - ], [ -@@ -4131,6 +4121,13 @@ AS_IF([test "${universal_binary-no}" = yes ], [ - [rb_cv_architecture_available=yes], [rb_cv_architecture_available=no])) - ]) - -+MAINLIBS="$LIBS" -+LIBS=$ORIG_LIBS -+AS_IF([test -n "${LIBS}"], [ -+ libspat=`echo "${LIBS}" | sed 's/[[][|.*$^]]/\\&/g;s/^ */ /;s/^ *$/ /'` -+ MAINFLAGS=`echo " $MAINLIBS " | sed "s|$libspat"'||;s/^ *//;s/ *$//'` -+]) -+LIBRUBYARG_STATIC="${LIBRUBYARG_STATIC} \$(MAINLIBS)" - CPPFLAGS="$CPPFLAGS "'$(DEFS)' - test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}' - AS_IF([test -n "${cflags+set}"], [ -diff --git a/template/ruby.pc.in b/template/ruby.pc.in -index d874f92c3b20..7ce4461c05df 100644 ---- a/template/ruby.pc.in -+++ b/template/ruby.pc.in -@@ -39,6 +39,7 @@ sitehdrdir=@sitehdrdir@ - rubyarchhdrdir=@rubyarchhdrdir@ - vendorarchhdrdir=@vendorarchhdrdir@ - sitearchhdrdir=@sitearchhdrdir@ -+MAINLIBS=@MAINLIBS@ - SOEXT=@SOEXT@ - LIBPATH=@LIBPATH@ - LIBRUBY_A=@LIBRUBY_A@ -diff --git a/win32/Makefile.sub b/win32/Makefile.sub -index 8673c121641e..f8316cccb68e 100644 ---- a/win32/Makefile.sub -+++ b/win32/Makefile.sub -@@ -279,6 +279,7 @@ MJIT_DEBUGFLAGS = $(DEBUGFLAGS) - CPPFLAGS = $(DEFS) $(ARCHDEFS) $(CPPFLAGS) - - DLDFLAGS = $(LDFLAGS) -dll -+MAINLIBS = $(LIBS) - SOLIBS = - RCFILES = $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc - !ifndef RCFLAGS -@@ -821,7 +822,8 @@ s,@CPPFLAGS@,$(CPPFLAGS),;t t - s,@CXXFLAGS@,$(CXXFLAGS),;t t - s,@FFLAGS@,$(FFLAGS),;t t - s,@LDFLAGS@,$(LDFLAGS),;t t --s,@LIBS@,$(LIBS),;t t -+s,@LIBS@,,;t t -+s,@MAINLIBS@,$(MAINLIBS),;t t - s,@exec_prefix@,$${prefix},;t t - s,@prefix@,$(prefix),;t t - s,@program_transform_name@,s,.*,$(PROGRAM_PREFIX)&$(PROGRAM_SUFFIX),,;t t -@@ -909,7 +911,7 @@ s,@LIBRUBY_SO@,$$(RUBY_SO_NAME).dll,;t t - s,@LIBRUBY_ALIASES@,$(LIBRUBY_ALIASES),;t t - s,@LIBRUBY@,$$(RUBY_SO_NAME).lib,;t t - s,@LIBRUBYARG@,$$(LIBRUBYARG_SHARED),;t t --s,@LIBRUBYARG_STATIC@,$$(LIBRUBY_A),;t t -+s,@LIBRUBYARG_STATIC@,$$(LIBRUBY_A) $$(MAINLIBS),;t t - s,@LIBRUBYARG_SHARED@,$$(LIBRUBY),;t t - s,@SOLIBS@,$(SOLIBS),;t t - s,@DLDLIBS@,$(DLDLIBS),;t t diff --git a/ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch b/ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch deleted file mode 100644 index b81800e..0000000 --- a/ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch +++ /dev/null @@ -1,157 +0,0 @@ -From 1dfc377ae3b174b043d3f0ed36de57b0296b34d0 Mon Sep 17 00:00:00 2001 -From: rhe -Date: Wed, 8 Aug 2018 14:13:55 +0000 -Subject: [PATCH] net/http, net/ftp: fix session resumption with TLS 1.3 - -When TLS 1.3 is in use, the session ticket may not have been sent yet -even though a handshake has finished. Also, the ticket could change if -multiple session ticket messages are sent by the server. Use -SSLContext#session_new_cb instead of calling SSLSocket#session -immediately after a handshake. This way also works with earlier protocol -versions. - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64234 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - lib/net/ftp.rb | 5 ++++- - lib/net/http.rb | 7 +++++-- - test/net/http/test_https.rb | 35 ++++++++++------------------------- - 3 files changed, 19 insertions(+), 28 deletions(-) - -diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb -index c3ee47ef4d36..9902f9dc657a 100644 ---- a/lib/net/ftp.rb -+++ b/lib/net/ftp.rb -@@ -230,6 +230,10 @@ def initialize(host = nil, user_or_options = {}, passwd = nil, acct = nil) - if defined?(VerifyCallbackProc) - @ssl_context.verify_callback = VerifyCallbackProc - end -+ @ssl_context.session_cache_mode = -+ OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT | -+ OpenSSL::SSL::SSLContext::SESSION_CACHE_NO_INTERNAL_STORE -+ @ssl_context.session_new_cb = proc {|sock, sess| @ssl_session = sess } - @ssl_session = nil - if options[:private_data_connection].nil? - @private_data_connection = true -@@ -349,7 +353,6 @@ def start_tls_session(sock) - if @ssl_context.verify_mode != VERIFY_NONE - ssl_sock.post_connection_check(@host) - end -- @ssl_session = ssl_sock.session - return ssl_sock - end - private :start_tls_session -diff --git a/lib/net/http.rb b/lib/net/http.rb -index 281b15cedff0..683a884f5dbe 100644 ---- a/lib/net/http.rb -+++ b/lib/net/http.rb -@@ -969,6 +969,10 @@ def connect - end - @ssl_context = OpenSSL::SSL::SSLContext.new - @ssl_context.set_params(ssl_parameters) -+ @ssl_context.session_cache_mode = -+ OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT | -+ OpenSSL::SSL::SSLContext::SESSION_CACHE_NO_INTERNAL_STORE -+ @ssl_context.session_new_cb = proc {|sock, sess| @ssl_session = sess } - D "starting SSL for #{conn_address}:#{conn_port}..." - s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context) - s.sync_close = true -@@ -976,13 +980,12 @@ def connect - s.hostname = @address if s.respond_to? :hostname= - if @ssl_session and - Process.clock_gettime(Process::CLOCK_REALTIME) < @ssl_session.time.to_f + @ssl_session.timeout -- s.session = @ssl_session if @ssl_session -+ s.session = @ssl_session - end - ssl_socket_connect(s, @open_timeout) - if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE - s.post_connection_check(@address) - end -- @ssl_session = s.session - D "SSL established" - end - @socket = BufferedIO.new(s, read_timeout: @read_timeout, -diff --git a/test/net/http/test_https.rb b/test/net/http/test_https.rb -index 8004d5c5f29f..a5182a1fe9db 100644 ---- a/test/net/http/test_https.rb -+++ b/test/net/http/test_https.rb -@@ -71,20 +71,11 @@ def test_session_reuse - http.get("/") - http.finish - -- http.start -- http.get("/") -- http.finish # three times due to possible bug in OpenSSL 0.9.8 -- -- sid = http.instance_variable_get(:@ssl_session).id -- - http.start - http.get("/") - - socket = http.instance_variable_get(:@socket).io -- -- assert socket.session_reused? -- -- assert_equal sid, http.instance_variable_get(:@ssl_session).id -+ assert_equal true, socket.session_reused? - - http.finish - rescue SystemCallError -@@ -101,16 +92,12 @@ def test_session_reuse_but_expire - http.get("/") - http.finish - -- sid = http.instance_variable_get(:@ssl_session).id -- - http.start - http.get("/") - - socket = http.instance_variable_get(:@socket).io - assert_equal false, socket.session_reused? - -- assert_not_equal sid, http.instance_variable_get(:@ssl_session).id -- - http.finish - rescue SystemCallError - skip $! -@@ -160,15 +147,16 @@ def test_certificate_verify_failure - end - - def test_identity_verify_failure -+ # the certificate's subject has CN=localhost - http = Net::HTTP.new("127.0.0.1", config("port")) - http.use_ssl = true -- http.verify_callback = Proc.new do |preverify_ok, store_ctx| -- true -- end -+ http.cert_store = TEST_STORE -+ @log_tester = lambda {|_| } - ex = assert_raise(OpenSSL::SSL::SSLError){ - http.request_get("/") {|res| } - } -- assert_match(/hostname \"127.0.0.1\" does not match/, ex.message) -+ re_msg = /certificate verify failed|hostname \"127.0.0.1\" does not match/ -+ assert_match(re_msg, ex.message) - end - - def test_timeout_during_SSL_handshake -@@ -193,16 +181,13 @@ def test_timeout_during_SSL_handshake - end - - def test_min_version -- http = Net::HTTP.new("127.0.0.1", config("port")) -+ http = Net::HTTP.new("localhost", config("port")) - http.use_ssl = true - http.min_version = :TLS1 -- http.verify_callback = Proc.new do |preverify_ok, store_ctx| -- true -- end -- ex = assert_raise(OpenSSL::SSL::SSLError){ -- http.request_get("/") {|res| } -+ http.cert_store = TEST_STORE -+ http.request_get("/") {|res| -+ assert_equal($test_net_http_data, res.body) - } -- assert_match(/hostname \"127.0.0.1\" does not match/, ex.message) - end - - def test_max_version diff --git a/ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch b/ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch deleted file mode 100644 index e108270..0000000 --- a/ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch +++ /dev/null @@ -1,34 +0,0 @@ -From d05e6269d4a4dfd701f5ddb3ae34306cba891511 Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Fri, 3 Aug 2018 11:35:55 +0200 -Subject: [PATCH] Fix indent and typo from moveTimout to moveTimeout. - ---- - lib/rdoc/generator/template/json_index/js/navigation.js | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/lib/rdoc/generator/template/json_index/js/navigation.js b/lib/rdoc/generator/template/json_index/js/navigation.js -index e4126812..43c5118a 100644 ---- a/lib/rdoc/generator/template/json_index/js/navigation.js -+++ b/lib/rdoc/generator/template/json_index/js/navigation.js -@@ -59,9 +59,8 @@ Navigation = new function() { - } - break; - case 13: //Event.KEY_RETURN: -- if (this.$current) -- e.preventDefault(); -- this.select(this.$current); -+ if (this.$current) e.preventDefault(); -+ this.select(this.$current); - break; - } - if (e.ctrlKey && e.shiftKey) this.select(this.$current); -@@ -80,7 +79,7 @@ Navigation = new function() { - var go = function() { - if (!_this.moveTimeout) return; - _this[isDown ? 'moveDown' : 'moveUp'](); -- _this.moveTimout = setTimeout(go, 100); -+ _this.moveTimeout = setTimeout(go, 100); - } - this.moveTimeout = setTimeout(go, 200); - } diff --git a/ruby-2.6.0-use-larger-keys-for-SSL-tests.patch b/ruby-2.6.0-use-larger-keys-for-SSL-tests.patch index 62f9488..6bb8466 100644 --- a/ruby-2.6.0-use-larger-keys-for-SSL-tests.patch +++ b/ruby-2.6.0-use-larger-keys-for-SSL-tests.patch @@ -9,7 +9,7 @@ prevent stacking forever. Reference: https://github.com/ruby/openssl/issues/214 --- - test/openssl/test_pair.rb | 51 ++++++++++++++++++++--------------------------- + test/openssl/test_pair.rb | 51 +++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/test/openssl/test_pair.rb b/test/openssl/test_pair.rb @@ -107,14 +107,14 @@ to the tree, and SSL tests now use them instead of the fixed-size keys. Reference: https://github.com/ruby/openssl/issues/215 --- - test/openssl/fixtures/pkey/dh-1.pem | 13 +++++++++ - test/openssl/fixtures/pkey/rsa-1.pem | 51 ++++++++++++++++++++++++++++++++++++ - test/openssl/fixtures/pkey/rsa-2.pem | 51 ++++++++++++++++++++++++++++++++++++ - test/openssl/fixtures/pkey/rsa-3.pem | 51 ++++++++++++++++++++++++++++++++++++ - test/openssl/test_pair.rb | 8 +++--- - test/openssl/test_pkey_dh.rb | 8 +++--- - test/openssl/test_ssl.rb | 11 ++++---- - test/openssl/utils.rb | 14 +++++----- + test/openssl/fixtures/pkey/dh-1.pem | 13 +++++++ + test/openssl/fixtures/pkey/rsa-1.pem | 51 ++++++++++++++++++++++++++++ + test/openssl/fixtures/pkey/rsa-2.pem | 51 ++++++++++++++++++++++++++++ + test/openssl/fixtures/pkey/rsa-3.pem | 51 ++++++++++++++++++++++++++++ + test/openssl/test_pair.rb | 8 ++--- + test/openssl/test_pkey_dh.rb | 8 ++--- + test/openssl/test_ssl.rb | 11 +++--- + test/openssl/utils.rb | 14 ++++---- 8 files changed, 186 insertions(+), 21 deletions(-) create mode 100644 test/openssl/fixtures/pkey/dh-1.pem create mode 100644 test/openssl/fixtures/pkey/rsa-1.pem @@ -394,7 +394,7 @@ diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb index 408c7d82..2633f7c4 100644 --- a/test/openssl/test_ssl.rb +++ b/test/openssl/test_ssl.rb -@@ -708,7 +708,7 @@ def socketpair +@@ -712,7 +712,7 @@ def socketpair def test_tlsext_hostname fooctx = OpenSSL::SSL::SSLContext.new @@ -403,7 +403,7 @@ index 408c7d82..2633f7c4 100644 fooctx.cert = @cli_cert fooctx.key = @cli_key -@@ -760,7 +760,7 @@ def test_servername_cb_raises_an_exception_on_unknown_objects +@@ -764,7 +764,7 @@ def test_servername_cb_raises_an_exception_on_unknown_objects ctx2 = OpenSSL::SSL::SSLContext.new ctx2.cert = @svr_cert ctx2.key = @svr_key @@ -412,7 +412,7 @@ index 408c7d82..2633f7c4 100644 ctx2.servername_cb = lambda { |args| Object.new } sock1, sock2 = socketpair -@@ -1140,7 +1140,7 @@ def test_alpn_protocol_selection_cancel +@@ -1144,7 +1144,7 @@ def test_alpn_protocol_selection_cancel ctx1 = OpenSSL::SSL::SSLContext.new ctx1.cert = @svr_cert ctx1.key = @svr_key @@ -421,7 +421,7 @@ index 408c7d82..2633f7c4 100644 ctx1.alpn_select_cb = -> (protocols) { nil } ssl1 = OpenSSL::SSL::SSLSocket.new(sock1, ctx1) -@@ -1382,20 +1382,21 @@ def test_get_ephemeral_key +@@ -1386,20 +1386,21 @@ def test_fallback_scsv def test_dh_callback pend "TLS 1.2 is not supported" unless tls12_supported? diff --git a/ruby.spec b/ruby.spec index 0741d70..ec1eea7 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,16 +1,16 @@ %global major_version 2 -%global minor_version 5 -%global teeny_version 3 +%global minor_version 6 +%global teeny_version 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. -#%%global milestone rc1 +#%%global milestone rc2 # Keep the revision enabled for pre-releases from SVN. -#%%global revision 61414 +#%%global revision 66252 %global ruby_archive %{name}-%{ruby_version} @@ -21,7 +21,7 @@ %endif -%global release 104 +%global release 110 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -29,25 +29,31 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 2.7.6 -%global molinillo_version 0.5.7 +%global rubygems_version 3.0.1 +%global rubygems_molinillo_version 0.5.7 -# TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. -# http://redmine.ruby-lang.org/issues/5313 -%global irb_version %{ruby_version} +%global bundler_version 1.17.2 +# FileUtils had not used to have separate versioning from Ruby :/ Lets use +# date of bundling for now. The gemified version of FileUtils has already proper +# version (if it's going to be bundled). +%global bundler_fileutils_version 0.20170425 +%global bundler_molinillo_version 0.6.6 +%global bundler_net_http_persistent_version 2.9.4 +%global bundler_thor_version 0.20.0 -%global bigdecimal_version 1.3.4 -%global did_you_mean_version 1.2.0 -%global io_console_version 0.4.6 +%global bigdecimal_version 1.4.1 +%global did_you_mean_version 1.3.0 +%global io_console_version 0.4.7 +%global irb_version 1.0.0 %global json_version 2.1.0 -%global minitest_version 5.10.3 -%global net_telnet_version 0.1.1 +%global minitest_version 5.11.3 +%global net_telnet_version 0.2.0 %global openssl_version 2.1.2 -%global power_assert_version 1.1.1 -%global psych_version 3.0.2 -%global rake_version 12.3.0 -%global rdoc_version 6.0.1 -%global test_unit_version 3.2.7 +%global power_assert_version 1.1.3 +%global psych_version 3.1.0 +%global rake_version 12.3.2 +%global rdoc_version 6.1.0 +%global test_unit_version 3.2.9 %global xmlrpc_version 0.3.0 # Might not be needed in the future, if we are lucky enough. @@ -62,10 +68,11 @@ %bcond_without rubypick %endif -%bcond_without systemtap -%bcond_without git %bcond_without cmake +%bcond_without git %bcond_without gmp +%bcond_without hostname +%bcond_without systemtap %if 0%{?fedora} %bcond_without hardening_test @@ -127,37 +134,20 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # http://bugs.ruby-lang.org/issues/8566 Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch # Use miniruby to regenerate prelude.c. -# https://bugs.ruby-lang.org/issues/10554 +# https://bugs.ruby-lang.org/issues/15306 Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch # Workaround "an invalid stdio handle" error on PPC, due to recently introduced # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch -# Add Gem.operating_system_defaults to allow packagers to override defaults. -# https://github.com/rubygems/rubygems/pull/2116 -Patch10: ruby-2.5.0-Add-Gem.operating_system_defaults.patch -# Don't force libraries used to build Ruby to its dependencies. -# https://bugs.ruby-lang.org/issues/14422 -Patch15: ruby-2.6.0-library-options-to-MAINLIBS.patch -# Do not require C++ compiler. -# https://github.com/rubygems/rubygems/pull/2367 -Patch16: ruby-2.5.1-Avoid-need-of-C++-compiler-to-pass-the-test-suite.patch -# https://github.com/ruby/rdoc/commit/d05e6269d4a4dfd701f5ddb3ae34306cba891511 -Patch20: ruby-2.6.0-rdoc-6.0.1-fix-template-typo.patch -# Properly harden package using -fstack-protector-strong. -# https://bugs.ruby-lang.org/issues/15053 -Patch24: ruby-2.6.0-configure-fstack-protector-strong.patch -# Fix Tokyo TZ tests. -# https://github.com/ruby/ruby/commit/e71ca6cdcf108e6a2fa47ec9fadefe7554717908 -Patch25: ruby-2.6.0-Update-for-tzdata-2018f.patch # Refresh expired certificates. # https://bugs.ruby-lang.org/issues/15502 -# https://github.com/ruby/ruby/commit/6f9b40ea53d8f3fb2a5b1c7ac55c207d42c77ef4 -Patch11: ruby-2.6.0-Try-to-update-cert.patch +Patch10: ruby-2.6.0-Try-to-update-cert.patch +# `gem build ../foo.gemspec` changes directory, which does not play well with +# gems unpacked by setup macro. +# https://github.com/rubygems/rubygems/issues/2587 +Patch11: ruby-2.6.0-No-chdir-for-build.patch -# Fix some OpenSSL 1.1.1 test failures. -# https://github.com/ruby/ruby/commit/1dfc377ae3b174b043d3f0ed36de57b0296b34d0 -Patch19: ruby-2.6.0-net-http-net-ftp-fix-session-resumption-with-TLS-1.3.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 Patch22: ruby-2.6.0-config-support-include-directive.patch @@ -187,6 +177,7 @@ BuildRequires: procps %{?with_cmake:BuildRequires: %{_bindir}/cmake} # Required to test hardening. %{?with_hardening_test:BuildRequires: %{_bindir}/checksec} +%{?with_hostname:BuildRequires: %{_bindir}/hostname} BuildRequires: multilib-rpm-config BuildRequires: gcc @@ -244,14 +235,16 @@ Version: %{rubygems_version} Group: Development/Libraries License: Ruby or MIT Requires: ruby(release) -Recommends: rubygem(rdoc) >= %{rdoc_version} +# RDoc is hard dependency for now :( +# https://github.com/rubygems/rubygems/issues/2483 +Requires: rubygem(rdoc) >= %{rdoc_version} Recommends: rubygem(io-console) >= %{io_console_version} Requires: rubygem(openssl) >= %{openssl_version} Requires: rubygem(psych) >= %{psych_version} Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} # https://github.com/rubygems/rubygems/pull/1189#issuecomment-121600910 -Provides: bundled(rubygem-molinillo) = %{molinillo_version} +Provides: bundled(rubygem-molinillo) = %{rubygems_molinillo_version} BuildArch: noarch %description -n rubygems @@ -290,16 +283,21 @@ Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax. -%package irb +%package -n rubygem-irb Summary: The Interactive Ruby Version: %{irb_version} Group: Development/Libraries -Requires: %{name}-libs = %{ruby_version} +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} Provides: irb = %{version}-%{release} -Provides: ruby(irb) = %{version}-%{release} +Provides: rubygem(irb) = %{version}-%{release} +# Obsoleted by Ruby 2.6 in F30 timeframe. +Provides: ruby(irb) = %{ruby_version}-%{release} +Provides: ruby-irb = %{ruby_version}-%{release} +Obsoletes: ruby-irb < %{ruby_version}-%{release} BuildArch: noarch -%description irb +%description -n rubygem-irb The irb is acronym for Interactive Ruby. It evaluates ruby expression from the terminal. @@ -312,7 +310,7 @@ Group: Development/Libraries License: GPLv2 and Ruby and MIT and OFL Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} -Requires: ruby(irb) = %{irb_version} +Requires: rubygem(irb) >= %{irb_version} Requires: rubygem(io-console) >= %{io_console_version} Requires: rubygem(json) >= %{json_version} Provides: rdoc = %{version}-%{release} @@ -529,6 +527,27 @@ XMLRPC is a lightweight protocol that enables remote procedure calls over HTTP. +%package -n rubygem-bundler +Summary: Library and utilities to manage a Ruby application's gem dependencies +Version: %{bundler_version} +Group: Development/Libraries +License: MIT +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Requires: rubygem(io-console) +Provides: rubygem(bundler) = %{version}-%{release} +# https://github.com/bundler/bundler/issues/3647 +Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} +Provides: bundled(rubygem-molinillo) = %{bundler_molinillo_version} +Provides: bundled(rubygem-net-http-persisntent) = %{bundler_net_http_persistent_version} +Provides: bundled(rubygem-thor) = %{bundler_thor_version} +BuildArch: noarch + +%description -n rubygem-bundler +Bundler manages an application's dependencies through its entire life, across +many machines, systematically and repeatably. + + %prep %setup -q -n %{ruby_archive} @@ -547,14 +566,8 @@ rm -rf ext/fiddle/libffi* %patch9 -p1 %patch10 -p1 %patch11 -p1 -%patch15 -p1 -%patch16 -p1 -%patch19 -p1 -%patch20 -p1 %patch22 -p1 %patch23 -p1 -%patch24 -p1 -%patch25 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -599,6 +612,9 @@ make install DESTDIR=%{buildroot} # Rename ruby/config.h to ruby/config-.h to avoid file conflicts on # multilib systems and install config.h wrapper %multilib_fix_c_header --file %{_includedir}/%{name}/config.h +# TODO: The correct patch should be %%{_includedir}/%%{name}/rb_mjit_min_header-%{ruby_version}.h +# https://bugs.ruby-lang.org/issues/15425 +%multilib_fix_c_header --file %{_includedir}/rb_mjit_min_header-%{ruby_version}.h # Rename the ruby executable. It is replaced by RubyPick. %{?with_rubypick:mv %{buildroot}%{_bindir}/%{name}{,-mri}} @@ -615,9 +631,13 @@ for cert in \ do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert rm -r $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) + rm %{buildroot}%{ruby_libdir}/bundler/ssl_certs/$cert + rm -r $(dirname %{buildroot}%{ruby_libdir}/bundler/ssl_certs/$cert) done # Ensure there is not forgotten any certificate. test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" +test "$(ls -A %{buildroot}%{ruby_libdir}/bundler/ssl_certs/ 2>/dev/null)" \ + = "certificate_manager.rb" # Move macros file into proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. @@ -649,17 +669,30 @@ mkdir -p %{buildroot}%{_exec_prefix}/lib{,64}/gems/%{name} # Move bundled rubygems to %%gem_dir and %%gem_extdir_mri # make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems +mkdir -p %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib +mv %{buildroot}%{ruby_libdir}/irb* %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib +mv %{buildroot}%{gem_dir}/specifications/default/irb-%{irb_version}.gemspec %{buildroot}%{gem_dir}/specifications + mkdir -p %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib mv %{buildroot}%{gem_dir}/specifications/default/rdoc-%{rdoc_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} +mv %{buildroot}%{ruby_libarchdir}/bigdecimal/util.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal mv %{buildroot}%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so +ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal/util.so %{buildroot}%{ruby_libarchdir}/bigdecimal/util.so + +# TODO: Put help files into proper location. +# https://bugs.ruby-lang.org/issues/15359 +mkdir -p %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib +mv %{buildroot}%{ruby_libdir}/bundler.rb %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib +mv %{buildroot}%{ruby_libdir}/bundler %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib +mv %{buildroot}%{gem_dir}/specifications/default/bundler-%{bundler_version}.gemspec %{buildroot}%{gem_dir}/specifications mkdir -p %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io @@ -750,7 +783,35 @@ checksec -f libruby.so.%{ruby_version} | \ module Gem; module Resolver; end; end; \ require 'rubygems/resolver/molinillo/lib/molinillo/gem_metadata'; \ puts Gem::Resolver::Molinillo::VERSION\\\"\" | tail -1`" \ - == '%{molinillo_version}' ] + == '%{rubygems_molinillo_version}' ] + +# Check Bundler bundled dependencies versions. + +# FileUtils. +# TODO: There is no version in bundled FileUtils yet. +#%%{global bundler_fileutils_version} + +# Molinillo. +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ + module Bundler; end; \ + require 'bundler/vendor/molinillo/lib/molinillo/gem_metadata'; \ + puts Bundler::Molinillo::VERSION\\\"\" | tail -1`" \ + == '%{bundler_molinillo_version}' ] + +# Net::HTTP::Persistent. +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ + module Bundler; module Persistent; module Net; module HTTP; \ + end; end; end; end; \ + require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'; \ + puts Bundler::Persistent::Net::HTTP::Persistent::VERSION\\\"\" | tail -1`" \ + == '%{bundler_net_http_persistent_version}' ] + +# Thor. +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ + module Bundler; end; \ + require 'bundler/vendor/thor/lib/thor/version'; \ + puts Bundler::Thor::VERSION\\\"\" | tail -1`" \ + == '%{bundler_thor_version}' ] # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, @@ -766,6 +827,10 @@ make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}" %{?with_systemtap:make runruby TESTRUN_SCRIPT=%{SOURCE14}} DISABLE_TESTS="" +MSPECOPTS="" + +# Avoid `hostname' dependency. +%{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} # SIGSEV handler does not provide correct output on AArch64. # https://bugs.ruby-lang.org/issues/13758 @@ -778,11 +843,7 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/test_segv_\(setproctitle\|test\|loaded_featur # https://bugs.ruby-lang.org/issues/14175 sed -i '/def test_mdns_each_address$/,/^ end$/ s/^/#/' test/resolv/test_mdns.rb -# For now, disable test incompatible with OpenSSL 1.1.1: -# https://github.com/rubygems/rubygems/issues/2388 -DISABLE_TESTS="$DISABLE_TESTS -n !/test_do_not_allow_invalid_client_cert_auth_connection/" - -make check TESTS="-v $DISABLE_TESTS" +make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %files %license BSDL @@ -826,16 +887,17 @@ make check TESTS="-v $DISABLE_TESTS" # Platform independent libraries. %dir %{ruby_libdir} %{ruby_libdir}/*.rb -%exclude %{ruby_libdir}/irb.rb %exclude %{ruby_libdir}/json.rb %exclude %{ruby_libdir}/openssl.rb %exclude %{ruby_libdir}/psych.rb %{ruby_libdir}/cgi +%{ruby_libdir}/csv %{ruby_libdir}/digest %{ruby_libdir}/drb +%{ruby_libdir}/e2mmap %{ruby_libdir}/fiddle +%{ruby_libdir}/fileutils %{ruby_libdir}/forwardable -%exclude %{ruby_libdir}/irb %{ruby_libdir}/matrix %{ruby_libdir}/net %{ruby_libdir}/optparse @@ -846,6 +908,8 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libdir}/rss %{ruby_libdir}/shell %{ruby_libdir}/syslog +%{ruby_libdir}/thwait +%{ruby_libdir}/tracer %{ruby_libdir}/unicode_normalize %{ruby_libdir}/uri %{ruby_libdir}/webrick @@ -979,19 +1043,32 @@ make check TESTS="-v $DISABLE_TESTS" # TODO: Gemify these libraries %{gem_dir}/specifications/default/cmath-1.0.0.gemspec -%{gem_dir}/specifications/default/csv-1.0.0.gemspec +%{gem_dir}/specifications/default/csv-3.0.2.gemspec %{gem_dir}/specifications/default/date-1.0.0.gemspec %{gem_dir}/specifications/default/dbm-1.0.0.gemspec -%{gem_dir}/specifications/default/etc-1.0.0.gemspec +%{gem_dir}/specifications/default/e2mmap-0.1.0.gemspec +%{gem_dir}/specifications/default/etc-1.0.1.gemspec %{gem_dir}/specifications/default/fcntl-1.0.0.gemspec %{gem_dir}/specifications/default/fiddle-1.0.0.gemspec -%{gem_dir}/specifications/default/fileutils-1.0.2.gemspec +%{gem_dir}/specifications/default/fileutils-1.1.0.gemspec +%{gem_dir}/specifications/default/forwardable-1.2.0.gemspec %{gem_dir}/specifications/default/gdbm-2.0.0.gemspec -%{gem_dir}/specifications/default/ipaddr-1.2.0.gemspec +%{gem_dir}/specifications/default/ipaddr-1.2.2.gemspec +%{gem_dir}/specifications/default/logger-1.3.0.gemspec +%{gem_dir}/specifications/default/matrix-0.1.0.gemspec +%{gem_dir}/specifications/default/mutex_m-0.1.0.gemspec +%{gem_dir}/specifications/default/ostruct-0.1.0.gemspec +%{gem_dir}/specifications/default/prime-0.1.0.gemspec +%{gem_dir}/specifications/default/rexml-3.1.9.gemspec +%{gem_dir}/specifications/default/rss-0.2.7.gemspec %{gem_dir}/specifications/default/scanf-1.0.0.gemspec %{gem_dir}/specifications/default/sdbm-1.0.0.gemspec -%{gem_dir}/specifications/default/stringio-0.0.1.gemspec +%{gem_dir}/specifications/default/shell-0.7.gemspec +%{gem_dir}/specifications/default/stringio-0.0.2.gemspec %{gem_dir}/specifications/default/strscan-1.0.0.gemspec +%{gem_dir}/specifications/default/sync-0.5.0.gemspec +%{gem_dir}/specifications/default/thwait-0.1.0.gemspec +%{gem_dir}/specifications/default/tracer-0.1.0.gemspec %{gem_dir}/specifications/default/webrick-1.4.2.gemspec %{gem_dir}/specifications/default/zlib-1.0.0.gemspec @@ -1008,10 +1085,10 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/specifications/rake-%{rake_version}.gemspec %{_mandir}/man1/rake.1* -%files irb +%files -n rubygem-irb %{_bindir}/irb -%{ruby_libdir}/irb.rb -%{ruby_libdir}/irb +%{gem_dir}/gems/irb-%{irb_version} +%{gem_dir}/specifications/irb-%{irb_version}.gemspec %{_mandir}/man1/irb.1* %files -n rubygem-rdoc @@ -1029,7 +1106,7 @@ make check TESTS="-v $DISABLE_TESTS" %files -n rubygem-bigdecimal %{ruby_libdir}/bigdecimal -%{ruby_libarchdir}/bigdecimal.so +%{ruby_libarchdir}/bigdecimal* %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} %{gem_dir}/gems/bigdecimal-%{bigdecimal_version} %{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec @@ -1100,7 +1177,18 @@ make check TESTS="-v $DISABLE_TESTS" %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/xmlrpc.gemspec %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec +%files -n rubygem-bundler +%{_bindir}/bundle +%{_bindir}/bundler +%{gem_dir}/gems/bundler-%{bundler_version} +%{gem_dir}/specifications/bundler-%{bundler_version}.gemspec +%{_mandir}/man1/bundle*.1* +%{_mandir}/man5/gemfile.5* + %changelog +* Thu Jan 17 2019 Vít Ondruch - 2.6.0-110 +- Upgrade to Ruby 2.6.0. + * Mon Jan 14 2019 Björn Esser - 2.5.3-104 - Rebuilt for libcrypt.so.2 (#1666033) diff --git a/rubygems.prov b/rubygems.prov index b7c9777..f23ec3f 100644 --- a/rubygems.prov +++ b/rubygems.prov @@ -9,9 +9,9 @@ module RubyGemsProv def self.normalize_prerelease(version) if version.prerelease? prerelease = version.version.sub /^#{version.release}\./, '' - "#{version.release}-0.1.#{prerelease}" + "#{version.release}~#{prerelease}" else - "#{version.release}-1" + version.release end end end diff --git a/sources b/sources index 5927406..f9e875e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.5.3.tar.xz) = 6dcae0e8d0bacdb2cbde636e2030596308b5af53f2eb85d3adccb67b02e6f8f9751e8117d12f8484829fdd9d995f6e327f701d9b433bcf94f1f59d13a1fd7518 +SHA512 (ruby-2.6.0.tar.xz) = c56eaf85ef7b79deb34ee4590b143c07f4fc83eb79775290761aee5a7c63374659613538a41f25706ed6e19e49d5c67a1014c24d17f29948294c7abd0b0fcea8 From d66ece5f5d4103074cf7de0e0dbf14b19ace0137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 24 Jan 2019 10:00:57 +0100 Subject: [PATCH 308/530] Properly generate "ruby(rubygems)" versioned dependencies. --- ruby.spec | 5 ++++- rubygems.req | 11 +++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ruby.spec b/ruby.spec index ec1eea7..55db047 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 110 +%global release 111 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1186,6 +1186,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Thu Jan 24 2019 Vít Ondruch - 2.6.0-111 +- Properly generate versioned ruby(rubygems) dependencies. + * Thu Jan 17 2019 Vít Ondruch - 2.6.0-110 - Upgrade to Ruby 2.6.0. diff --git a/rubygems.req b/rubygems.req index d75247d..bc38f66 100644 --- a/rubygems.req +++ b/rubygems.req @@ -42,11 +42,14 @@ module RubyGemsReq # Report RubyGems dependency, versioned if required. def self.rubygems_dependency(specification) - Helpers::requirement_versions_to_rpm(specification.required_rubygems_version).each do |requirement| - dependency_string = "ruby(rubygems)" - dependency_string += " #{specification.required_rubygems_version}" if requirement&.length > 0 - puts dependency_string + dependency_strings = Helpers::requirement_versions_to_rpm(specification.required_rubygems_version).map do |requirement| + requirement_string = "ruby(rubygems)" + requirement_string += " #{requirement}" if requirement&.length > 0 + requirement_string end + dependency_string = dependency_strings.join(' with ') + dependency_string.prepend('(').concat(')') if dependency_strings.length > 1 + puts dependency_string end # Report all gem dependencies including their version. From bb1cbacab5602b40b8b0f79d3a5933204d0bc1c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 24 Jan 2019 10:36:55 +0100 Subject: [PATCH 309/530] Extract composition of dependecy strings into helper. --- rubygems.req | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/rubygems.req b/rubygems.req index bc38f66..38e4a9c 100644 --- a/rubygems.req +++ b/rubygems.req @@ -35,34 +35,35 @@ module RubyGemsReq # with RPM .spec file. def self.requirement_versions_to_rpm(requirement) self.expand_requirement(requirement.requirements).map do |op, version| - version == Gem::Version.new(0) ? "" : "#{op} #{version}" + version == Gem::Version.new(0) ? "" : " #{op} #{version}" end end + + # Compose dependency together with its requirements in RPM rich dependency + # string. + def self.compose_dependency_string(name, requirements) + dependency_strings = requirements.map { |requirement| name + requirement } + dependency_string = dependency_strings.join(' with ') + dependency_string.prepend('(').concat(')') if dependency_strings.length > 1 + dependency_string + end end # Report RubyGems dependency, versioned if required. def self.rubygems_dependency(specification) - dependency_strings = Helpers::requirement_versions_to_rpm(specification.required_rubygems_version).map do |requirement| - requirement_string = "ruby(rubygems)" - requirement_string += " #{requirement}" if requirement&.length > 0 - requirement_string - end - dependency_string = dependency_strings.join(' with ') - dependency_string.prepend('(').concat(')') if dependency_strings.length > 1 - puts dependency_string + dependency_name = "ruby(rubygems)" + requirements = Helpers::requirement_versions_to_rpm(specification.required_rubygems_version) + + puts Helpers::compose_dependency_string(dependency_name, requirements) end # Report all gem dependencies including their version. def self.gem_depenencies(specification) specification.runtime_dependencies.each do |dependency| - dependency_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement| - requirement_string = "rubygem(#{dependency.name})" - requirement_string += " #{requirement}" if requirement&.length > 0 - requirement_string - end - dependency_string = dependency_strings.join(' with ') - dependency_string.prepend('(').concat(')') if dependency_strings.length > 1 - puts dependency_string + dependency_name = "rubygem(#{dependency.name})" + requirements = Helpers::requirement_versions_to_rpm(dependency.requirement) + + puts Helpers::compose_dependency_string(dependency_name, requirements) end end From 1e60df6dc1d874921b88243affeb69a06271ccbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 24 Jan 2019 12:17:38 +0100 Subject: [PATCH 310/530] Loosen RDoc dependency. --- ruby.spec | 9 ++++--- ...when-its-failed-to-load-rdoc-library.patch | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch diff --git a/ruby.spec b/ruby.spec index 55db047..2f1a9e0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -147,6 +147,9 @@ Patch10: ruby-2.6.0-Try-to-update-cert.patch # gems unpacked by setup macro. # https://github.com/rubygems/rubygems/issues/2587 Patch11: ruby-2.6.0-No-chdir-for-build.patch +# This allows to loosen the RDoc dependency again. +# https://github.com/rubygems/rubygems/pull/2604 +Patch12: rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 @@ -235,9 +238,7 @@ Version: %{rubygems_version} Group: Development/Libraries License: Ruby or MIT Requires: ruby(release) -# RDoc is hard dependency for now :( -# https://github.com/rubygems/rubygems/issues/2483 -Requires: rubygem(rdoc) >= %{rdoc_version} +Recommends: rubygem(rdoc) >= %{rdoc_version} Recommends: rubygem(io-console) >= %{io_console_version} Requires: rubygem(openssl) >= %{openssl_version} Requires: rubygem(psych) >= %{psych_version} @@ -566,6 +567,7 @@ rm -rf ext/fiddle/libffi* %patch9 -p1 %patch10 -p1 %patch11 -p1 +%patch12 -p1 %patch22 -p1 %patch23 -p1 @@ -1188,6 +1190,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog * Thu Jan 24 2019 Vít Ondruch - 2.6.0-111 - Properly generate versioned ruby(rubygems) dependencies. +- Loosen RDoc dependency. * Thu Jan 17 2019 Vít Ondruch - 2.6.0-110 - Upgrade to Ruby 2.6.0. diff --git a/rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch b/rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch new file mode 100644 index 0000000..690d245 --- /dev/null +++ b/rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch @@ -0,0 +1,24 @@ +From c16675582a68800ef17b6056110e0a8bcdb38b55 Mon Sep 17 00:00:00 2001 +From: SHIBATA Hiroshi +Date: Tue, 22 Jan 2019 09:37:23 +0900 +Subject: [PATCH] Avoid rdoc hook when it's failed to load rdoc library. + + Fixed #2483 +--- + lib/rubygems/rdoc.rb | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lib/rubygems/rdoc.rb b/lib/rubygems/rdoc.rb +index dfaf7c55bf..4e16fbb86f 100644 +--- a/lib/rubygems/rdoc.rb ++++ b/lib/rubygems/rdoc.rb +@@ -18,7 +18,7 @@ + module Gem + RDoc = ::RDoc::RubygemsHook + end ++ ++ Gem.done_installing(&Gem::RDoc.method(:generation_hook)) + rescue LoadError + end +- +-Gem.done_installing(&Gem::RDoc.method(:generation_hook)) From b610699f354597d2aabc5c8e05caf29f5115301a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 24 Jan 2019 17:18:59 +0100 Subject: [PATCH 311/530] Upstream fix adding -C flag instead of changing directory for gem build. --- ruby-2.6.0-No-chdir-for-build.patch | 95 ------------------- ruby.spec | 2 +- ...nd-introdcue-the-C-flag-to-gem-build.patch | 88 +++++++++++++++++ 3 files changed, 89 insertions(+), 96 deletions(-) delete mode 100644 ruby-2.6.0-No-chdir-for-build.patch create mode 100644 rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-gem-build.patch diff --git a/ruby-2.6.0-No-chdir-for-build.patch b/ruby-2.6.0-No-chdir-for-build.patch deleted file mode 100644 index 25c6090..0000000 --- a/ruby-2.6.0-No-chdir-for-build.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 5168efc9ba0a0644c4fd1dbe09c1799f71301e42 Mon Sep 17 00:00:00 2001 -From: Pavel Valena -Date: Tue, 8 Jan 2019 14:51:46 +0100 -Subject: [PATCH] Revert 90e676886e681e16e34ef58e078bf0a0aae8b54f - ---- - lib/rubygems/commands/build_command.rb | 26 ++++++------- - .../test_gem_commands_build_command.rb | 37 ------------------- - 2 files changed, 12 insertions(+), 51 deletions(-) - -diff --git a/lib/rubygems/commands/build_command.rb b/lib/rubygems/commands/build_command.rb -index e59471e976..3120236f9f 100644 ---- a/lib/rubygems/commands/build_command.rb -+++ b/lib/rubygems/commands/build_command.rb -@@ -60,20 +60,18 @@ def execute - end - - if File.exist? gemspec -- Dir.chdir(File.dirname(gemspec)) do -- spec = Gem::Specification.load File.basename(gemspec) -- -- if spec -- Gem::Package.build( -- spec, -- options[:force], -- options[:strict], -- options[:output] -- ) -- else -- alert_error "Error loading gemspec. Aborting." -- terminate_interaction 1 -- end -+ spec = Gem::Specification.load gemspec -+ -+ if spec -+ Gem::Package.build( -+ spec, -+ options[:force], -+ options[:strict], -+ options[:output] -+ ) -+ else -+ alert_error "Error loading gemspec. Aborting." -+ terminate_interaction 1 - end - else - alert_error "Gemspec file not found: #{gemspec}" -diff --git a/test/rubygems/test_gem_commands_build_command.rb b/test/rubygems/test_gem_commands_build_command.rb -index ac82a408c7..fa5e7454f3 100644 ---- a/test/rubygems/test_gem_commands_build_command.rb -+++ b/test/rubygems/test_gem_commands_build_command.rb -@@ -192,43 +192,6 @@ def test_execute_missing_file - assert_equal "ERROR: Gemspec file not found: some_gem\n", @ui.error - end - -- def test_execute_outside_dir -- gemspec_dir = File.join @tempdir, 'build_command_gem' -- gemspec_file = File.join gemspec_dir, @gem.spec_name -- readme_file = File.join gemspec_dir, 'README.md' -- -- FileUtils.mkdir_p gemspec_dir -- -- File.open readme_file, 'w' do |f| -- f.write "My awesome gem" -- end -- -- File.open gemspec_file, 'w' do |gs| -- gs.write @gem.to_ruby -- end -- -- @cmd.options[:args] = [gemspec_file] -- -- use_ui @ui do -- @cmd.execute -- end -- -- output = @ui.output.split "\n" -- assert_equal " Successfully built RubyGem", output.shift -- assert_equal " Name: some_gem", output.shift -- assert_equal " Version: 2", output.shift -- assert_equal " File: some_gem-2.gem", output.shift -- assert_equal [], output -- -- gem_file = File.join gemspec_dir, File.basename(@gem.cache_file) -- assert File.exist?(gem_file) -- -- spec = Gem::Package.new(gem_file).spec -- -- assert_equal "some_gem", spec.name -- assert_equal "this is a summary", spec.summary -- end -- - def test_can_find_gemspecs_without_dot_gemspec - gemspec_file = File.join(@tempdir, @gem.spec_name) - diff --git a/ruby.spec b/ruby.spec index 2f1a9e0..f841b2a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -146,7 +146,7 @@ Patch10: ruby-2.6.0-Try-to-update-cert.patch # `gem build ../foo.gemspec` changes directory, which does not play well with # gems unpacked by setup macro. # https://github.com/rubygems/rubygems/issues/2587 -Patch11: ruby-2.6.0-No-chdir-for-build.patch +Patch11: rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-gem-build.patch # This allows to loosen the RDoc dependency again. # https://github.com/rubygems/rubygems/pull/2604 Patch12: rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch diff --git a/rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-gem-build.patch b/rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-gem-build.patch new file mode 100644 index 0000000..fa4f0c3 --- /dev/null +++ b/rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-gem-build.patch @@ -0,0 +1,88 @@ +From f4061357d812e9033f07ae3f8f44c4e26839f1e5 Mon Sep 17 00:00:00 2001 +From: bronzdoc +Date: Mon, 14 Jan 2019 09:46:29 -0600 +Subject: [PATCH] Restore gem build behavior and introdcue the "-C" flag to gem + build + +--- + lib/rubygems/commands/build_command.rb | 41 +++++++++++++------ + .../test_gem_commands_build_command.rb | 1 + + 2 files changed, 29 insertions(+), 13 deletions(-) + +diff --git a/lib/rubygems/commands/build_command.rb b/lib/rubygems/commands/build_command.rb +index e59471e976..761b80ee94 100644 +--- a/lib/rubygems/commands/build_command.rb ++++ b/lib/rubygems/commands/build_command.rb +@@ -18,6 +18,10 @@ def initialize + add_option '-o', '--output FILE', 'output gem with the given filename' do |value, options| + options[:output] = value + end ++ ++ add_option '-C PATH', '', 'Run as if gem build was started in instead of the current working directory.' do |value, options| ++ options[:build_path] = value ++ end + end + + def arguments # :nodoc: +@@ -60,25 +64,36 @@ def execute + end + + if File.exist? gemspec +- Dir.chdir(File.dirname(gemspec)) do +- spec = Gem::Specification.load File.basename(gemspec) +- +- if spec +- Gem::Package.build( +- spec, +- options[:force], +- options[:strict], +- options[:output] +- ) +- else +- alert_error "Error loading gemspec. Aborting." +- terminate_interaction 1 ++ spec = Gem::Specification.load(gemspec) ++ ++ if options[:build_path] ++ Dir.chdir(File.dirname(gemspec)) do ++ spec = Gem::Specification.load File.basename(gemspec) ++ build_package(spec) + end ++ else ++ build_package(spec) + end ++ + else + alert_error "Gemspec file not found: #{gemspec}" + terminate_interaction 1 + end + end + ++ private ++ ++ def build_package(spec) ++ if spec ++ Gem::Package.build( ++ spec, ++ options[:force], ++ options[:strict], ++ options[:output] ++ ) ++ else ++ alert_error "Error loading gemspec. Aborting." ++ terminate_interaction 1 ++ end ++ end + end +diff --git a/test/rubygems/test_gem_commands_build_command.rb b/test/rubygems/test_gem_commands_build_command.rb +index ac82a408c7..02d1b98e8f 100644 +--- a/test/rubygems/test_gem_commands_build_command.rb ++++ b/test/rubygems/test_gem_commands_build_command.rb +@@ -207,6 +207,7 @@ def test_execute_outside_dir + gs.write @gem.to_ruby + end + ++ @cmd.options[:build_path] = gemspec_dir + @cmd.options[:args] = [gemspec_file] + + use_ui @ui do From bc094d881119c44d791797ee05d49adf4c91c540 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Mon, 28 Jan 2019 20:18:22 +0100 Subject: [PATCH 312/530] Remove obsolete Group tag References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag --- ruby.spec | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/ruby.spec b/ruby.spec index f841b2a..0384d25 100644 --- a/ruby.spec +++ b/ruby.spec @@ -82,7 +82,6 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version} Release: %{release_string} -Group: Development/Languages # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... # MIT and CCO: ccan/* # zlib: ext/digest/md5/md5.*, ext/nkf/nkf-utf8/nkf.c @@ -197,7 +196,6 @@ straight-forward, and extensible. %package devel Summary: A Ruby development environment -Group: Development/Languages Requires: %{name}%{?_isa} = %{version}-%{release} # This would not be needed if ~50 packages depending on -devel used # --disable-gems @@ -209,7 +207,6 @@ Ruby or an application embedding Ruby. %package libs Summary: Libraries necessary to run Ruby -Group: Development/Libraries License: Ruby or BSD Provides: ruby(release) = %{ruby_release} @@ -235,7 +232,6 @@ This package includes the libruby, necessary to run Ruby. %package -n rubygems Summary: The Ruby standard for packaging ruby libraries Version: %{rubygems_version} -Group: Development/Libraries License: Ruby or MIT Requires: ruby(release) Recommends: rubygem(rdoc) >= %{rdoc_version} @@ -256,7 +252,6 @@ libraries. %package -n rubygems-devel Summary: Macros and development tools for packaging RubyGems Version: %{rubygems_version} -Group: Development/Libraries License: Ruby or MIT Requires: ruby(rubygems) = %{version}-%{release} # Needed for RDoc documentation format generation. @@ -271,7 +266,6 @@ Macros and development tools for packaging RubyGems. %package -n rubygem-rake Summary: Ruby based make-like utility Version: %{rake_version} -Group: Development/Libraries License: MIT Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} @@ -287,7 +281,6 @@ specified in standard Ruby syntax. %package -n rubygem-irb Summary: The Interactive Ruby Version: %{irb_version} -Group: Development/Libraries Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: irb = %{version}-%{release} @@ -306,7 +299,6 @@ from the terminal. %package -n rubygem-rdoc Summary: A tool to generate HTML and command-line documentation for Ruby projects Version: %{rdoc_version} -Group: Development/Libraries # SIL: lib/rdoc/generator/template/darkfish/css/fonts.css License: GPLv2 and Ruby and MIT and OFL Requires: ruby(release) @@ -327,7 +319,6 @@ documentation. %package doc Summary: Documentation for %{name} -Group: Documentation Requires: %{_bindir}/ri BuildArch: noarch @@ -338,7 +329,6 @@ This package contains documentation for %{name}. %package -n rubygem-bigdecimal Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic Version: %{bigdecimal_version} -Group: Development/Libraries License: Ruby or BSD Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} @@ -360,7 +350,6 @@ conversion between base 10 and base 2. %package -n rubygem-did_you_mean Summary: "Did you mean?" experience in Ruby Version: %{did_you_mean_version} -Group: Development/Libraries License: MIT Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} @@ -375,7 +364,6 @@ one when you misspelled something. %package -n rubygem-io-console Summary: IO/Console is a simple console utilizing library Version: %{io_console_version} -Group: Development/Libraries Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(io-console) = %{version}-%{release} @@ -388,7 +376,6 @@ provide higher layer features, such like curses and readline. %package -n rubygem-json Summary: This is a JSON implementation as a Ruby extension in C Version: %{json_version} -Group: Development/Libraries # UCD: ext/json/generator/generator.c License: (Ruby or GPLv2) and UCD Requires: ruby(release) @@ -405,7 +392,6 @@ markup language. %package -n rubygem-minitest Summary: Minitest provides a complete suite of testing facilities Version: %{minitest_version} -Group: Development/Libraries License: MIT Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} @@ -430,7 +416,6 @@ output. %package -n rubygem-openssl Summary: OpenSSL provides SSL, TLS and general purpose cryptography Version: %{openssl_version} -Group: Development/Libraries License: Ruby or BSD Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} @@ -444,7 +429,6 @@ OpenSSL library. %package -n rubygem-power_assert Summary: Power Assert for Ruby Version: %{power_assert_version} -Group: Development/Libraries License: Ruby or BSD Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} @@ -460,7 +444,6 @@ condition is not satisfied. %package -n rubygem-psych Summary: A libyaml wrapper for Ruby Version: %{psych_version} -Group: Development/Libraries License: MIT Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} @@ -476,7 +459,6 @@ serialize and de-serialize most Ruby objects to and from the YAML format. %package -n rubygem-net-telnet Summary: Provides telnet client functionality Version: %{net_telnet_version} -Group: Development/Libraries Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(net-telnet) = %{version}-%{release} @@ -496,7 +478,6 @@ the output through preprocess() to extract telnet command sequences. %package -n rubygem-test-unit Summary: An xUnit family unit testing framework for Ruby Version: %{test_unit_version} -Group: Development/Libraries # lib/test/unit/diff.rb is a double license of the Ruby license and PSF license. # lib/test-unit.rb is a dual license of the Ruby license and LGPLv2.1 or later. License: (Ruby or BSD) and (Ruby or BSD or Python) and (Ruby or BSD or LGPLv2+) @@ -516,7 +497,6 @@ writing tests, checking results and automated testing in Ruby. %package -n rubygem-xmlrpc Summary: XMLRPC is a lightweight protocol that enables remote procedure calls over HTTP Version: %{xmlrpc_version} -Group: Development/Libraries License: Ruby or BSD Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} @@ -531,7 +511,6 @@ HTTP. %package -n rubygem-bundler Summary: Library and utilities to manage a Ruby application's gem dependencies Version: %{bundler_version} -Group: Development/Libraries License: MIT Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} From 17f23f30d6d3f0b0d2535121eade427642c74923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 31 Jan 2019 12:42:22 +0100 Subject: [PATCH 313/530] Upgrade to Ruby 2.6.1. --- ...-additional-preludes-by-configuratio.patch | 2 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 +- ruby-2.3.0-ruby_version.patch | 6 +- ruby-2.6.0-Try-to-update-cert.patch | 502 ------------------ ...-rubyspec-to-follow-IO-ungetbyte-fix.patch | 43 ++ ruby.spec | 20 +- sources | 2 +- 10 files changed, 65 insertions(+), 520 deletions(-) delete mode 100644 ruby-2.6.0-Try-to-update-cert.patch create mode 100644 ruby-2.6.1-Fix-rubyspec-to-follow-IO-ungetbyte-fix.patch diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch index 7e28791..0770723 100644 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch @@ -39,7 +39,7 @@ diff --git a/configure.ac b/configure.ac index 028ef7ca3e..cdeff87871 100644 --- a/configure.ac +++ b/configure.ac -@@ -3854,6 +3854,13 @@ AC_SUBST(rubyarchhdrdir)dnl +@@ -3855,6 +3855,13 @@ AC_SUBST(rubyarchhdrdir)dnl AC_SUBST(sitearchhdrdir)dnl AC_SUBST(vendorarchhdrdir)dnl diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 1eadc58..116bb66 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 11fc237552..b77e88fc37 100644 --- a/configure.ac +++ b/configure.ac -@@ -3084,6 +3084,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3085,6 +3085,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index bf25b90..bfb197f 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index 999e2d6d5d..11fc237552 100644 --- a/configure.ac +++ b/configure.ac -@@ -3709,7 +3709,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -3710,7 +3710,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 2de29d7..d63752a 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index b77e88fc37..6bba453e3c 100644 --- a/configure.ac +++ b/configure.ac -@@ -3773,6 +3773,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3774,6 +3774,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index ce00c6f..c4893da 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.ac b/configure.ac index 6bba453e3c..028ef7ca3e 100644 --- a/configure.ac +++ b/configure.ac -@@ -3745,6 +3745,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -3746,6 +3746,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 6bba453e3c..028ef7ca3e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -3769,6 +3773,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3770,6 +3774,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index b3353b9..7b09e55 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 8ea969412f..a00f2b6776 100644 --- a/configure.ac +++ b/configure.ac -@@ -3660,9 +3660,6 @@ AS_CASE(["$target_os"], +@@ -3661,9 +3661,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 8ea969412f..a00f2b6776 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -3685,56 +3682,62 @@ AC_ARG_WITH(ridir, +@@ -3686,56 +3683,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 8ea969412f..a00f2b6776 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -3751,6 +3754,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -3752,6 +3755,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl diff --git a/ruby-2.6.0-Try-to-update-cert.patch b/ruby-2.6.0-Try-to-update-cert.patch deleted file mode 100644 index 013688d..0000000 --- a/ruby-2.6.0-Try-to-update-cert.patch +++ /dev/null @@ -1,502 +0,0 @@ -From f234e6c3d3170f37508e214cdaef78d4b2584e5a Mon Sep 17 00:00:00 2001 -From: kazu -Date: Wed, 2 Jan 2019 03:08:20 +0000 -Subject: [PATCH 1/2] Try to update cert - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66685 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - test/net/fixtures/cacert.pem | 86 +++++++------------------- - test/net/fixtures/server.crt | 113 +++++++++++++++++++++++------------ - test/net/fixtures/server.key | 43 ++++++++----- - 3 files changed, 124 insertions(+), 118 deletions(-) - -diff --git a/test/net/fixtures/cacert.pem b/test/net/fixtures/cacert.pem -index 7073387877..f623bd62ed 100644 ---- a/test/net/fixtures/cacert.pem -+++ b/test/net/fixtures/cacert.pem -@@ -1,66 +1,24 @@ --Certificate: -- Data: -- Version: 3 (0x2) -- Serial Number: -- b9:90:a2:bf:62:69:17:9c -- Signature Algorithm: sha1WithRSAEncryption -- Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org -- Validity -- Not Before: Jan 3 01:34:17 2014 GMT -- Not After : Jan 2 01:34:17 2019 GMT -- Subject: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org -- Subject Public Key Info: -- Public Key Algorithm: rsaEncryption -- RSA Public Key: (1024 bit) -- Modulus (1024 bit): -- 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: -- bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: -- 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: -- 9d:7e:eb:a2:06:e2:ea:7d:07:c7:c7:99:c7:fb:d5: -- b8:eb:63:77:62:2b:18:12:c3:53:58:d0:f5:c7:40: -- 0c:01:d1:26:82:34:16:09:e3:dc:65:f4:dc:bb:5d: -- a5:41:60:e7:a9:74:ba:d7:4c:b6:a3:9c:c5:8c:89: -- af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: -- d0:fc:d6:eb:fc:06:82:10:fb -- Exponent: 65537 (0x10001) -- X509v3 extensions: -- X509v3 Subject Key Identifier: -- E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 -- X509v3 Authority Key Identifier: -- keyid:E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 -- DirName:/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org -- serial:B9:90:A2:BF:62:69:17:9C -- -- X509v3 Basic Constraints: -- CA:TRUE -- Signature Algorithm: sha1WithRSAEncryption -- 8f:77:06:4e:31:72:12:ee:68:09:70:27:d4:31:85:ef:10:95: -- f9:0f:2b:66:63:08:37:88:6e:b7:9b:40:3e:18:77:33:86:e8: -- 61:6a:b7:3c:cb:c7:a6:d6:d5:92:6a:1f:56:d0:9f:5c:32:56: -- d3:37:52:fe:0e:20:c2:7a:0d:fe:2d:3c:81:da:b8:7f:4d:6a: -- 08:01:d9:be:7a:a2:15:be:a6:ce:49:64:90:8c:9a:ca:6e:2e: -- 84:48:1d:94:19:56:94:46:aa:25:9b:68:c2:80:60:bf:cb:2e: -- 35:03:ea:0a:65:5a:33:38:c6:cc:81:46:c0:bc:36:86:96:39: -- 10:7d - -----BEGIN CERTIFICATE----- --MIIDjTCCAvagAwIBAgIJALmQor9iaRecMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD --VQQGEwJKUDEQMA4GA1UECBMHU2hpbWFuZTEUMBIGA1UEBxMLTWF0ei1lIGNpdHkx --FzAVBgNVBAoTDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDEwxSdWJ5IFRlc3QgQ0Ex --JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTQwMTAz --MDEzNDE3WhcNMTkwMTAyMDEzNDE3WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT --B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv --cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz --ZWN1cml0eUBydWJ5LWxhbmcub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB --gQDbddBF3rHfv3GgDrCl5rz0HJ3lJWdkxXvL8a/Gvpqq6n4PzAWv70BpBrLJE51+ --66IG4up9B8fHmcf71bjrY3diKxgSw1NY0PXHQAwB0SaCNBYJ49xl9Ny7XaVBYOep --dLrXTLajnMWMia/L6J8F/ur+ZCS/5+3j9tD81uv8BoIQ+wIDAQABo4H0MIHxMB0G --A1UdDgQWBBToflisE3sDIo2erzILhImAgAwewjCBwQYDVR0jBIG5MIG2gBToflis --E3sDIo2erzILhImAgAwewqGBkqSBjzCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT --B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv --cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz --ZWN1cml0eUBydWJ5LWxhbmcub3JnggkAuZCiv2JpF5wwDAYDVR0TBAUwAwEB/zAN --BgkqhkiG9w0BAQUFAAOBgQCPdwZOMXIS7mgJcCfUMYXvEJX5DytmYwg3iG63m0A+ --GHczhuhharc8y8em1tWSah9W0J9cMlbTN1L+DiDCeg3+LTyB2rh/TWoIAdm+eqIV --vqbOSWSQjJrKbi6ESB2UGVaURqolm2jCgGC/yy41A+oKZVozOMbMgUbAvDaGljkQ --fQ== -+MIID7TCCAtWgAwIBAgIJAIltvxrFAuSnMA0GCSqGSIb3DQEBCwUAMIGMMQswCQYD -+VQQGEwJKUDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkx -+FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex -+JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTkwMTAy -+MDI1ODI4WhcNMjQwMTAxMDI1ODI4WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgM -+B1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQKDA5SdWJ5IENv -+cmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz -+ZWN1cml0eUBydWJ5LWxhbmcub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -+CgKCAQEAznlbjRVhz1NlutHVrhcGnK8W0qug2ujKXv1njSC4U6nJF6py7I9EeehV -+SaKePyv+I9z3K1LnfUHOtUbdwdKC77yN66A6q2aqzu5q09/NSykcZGOIF0GuItYI -+3nvW3IqBddff2ffsyR+9pBjfb5AIPP08WowF9q4s1eGULwZc4w2B8PFhtxYANd7d -+BvGLXFlcufv9tDtzyRi4t7eqxCRJkZQIZNZ6DHHIJrNxejOILfHLarI12yk8VK6L -+2LG4WgGqyeePiRyd1o1MbuiAFYqAwpXNUbRKg5NaZGwBHZk8UZ+uFKt1QMBURO5R -+WFy1c349jbWszTqFyL4Lnbg9HhAowQIDAQABo1AwTjAdBgNVHQ4EFgQU9tEiKdU9 -+I9derQyc5nWPnc34nVMwHwYDVR0jBBgwFoAU9tEiKdU9I9derQyc5nWPnc34nVMw -+DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAxj7F/u3C3fgq24N7hGRA -+of7ClFQxGmo/IGT0AISzW3HiVYiFaikKhbO1NwD9aBpD8Zwe62sCqMh8jGV/b0+q -+aOORnWYNy2R6r9FkASAglmdF6xn3bhgGD5ls4pCvcG9FynGnGc24g6MrjFNrBYUS -+2iIZsg36i0IJswo/Dy6HLphCms2BMCD3DeWtfjePUiTmQHJo6HsQIKP/u4N4Fvee -+uMBInei2M4VU74fLXbmKl1F9AEX7JDP3BKSZG19Ch5pnUo4uXM1uNTGsi07P4Y0s -+K44+SKBC0bYEFbDK0eQWMrX3kIhkPxyIWhxdq9/NqPYjShuSEAhA6CSpmRg0pqc+ -+mA== - -----END CERTIFICATE----- -diff --git a/test/net/fixtures/server.crt b/test/net/fixtures/server.crt -index fa4f99493a..817ecc222c 100644 ---- a/test/net/fixtures/server.crt -+++ b/test/net/fixtures/server.crt -@@ -1,48 +1,83 @@ - Certificate: - Data: -- Version: 1 (0x0) -- Serial Number: 0 (0x0) -- Signature Algorithm: sha1WithRSAEncryption -+ Version: 3 (0x2) -+ Serial Number: 1 (0x1) -+ Signature Algorithm: sha256WithRSAEncryption - Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Validity -- Not Before: Jan 3 01:34:17 2014 GMT -- Not After : Jan 2 01:34:17 2019 GMT -- Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost -+ Not Before: Jan 2 03:06:53 2019 GMT -+ Not After : Jan 1 03:06:53 2024 GMT -+ Subject: C=JP, ST=Shimane, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Subject Public Key Info: - Public Key Algorithm: rsaEncryption -- RSA Public Key: (1024 bit) -- Modulus (1024 bit): -- 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: -- bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: -- 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: -- 9d:7e:eb:a2:06:e2:ea:7d:07:c7:c7:99:c7:fb:d5: -- b8:eb:63:77:62:2b:18:12:c3:53:58:d0:f5:c7:40: -- 0c:01:d1:26:82:34:16:09:e3:dc:65:f4:dc:bb:5d: -- a5:41:60:e7:a9:74:ba:d7:4c:b6:a3:9c:c5:8c:89: -- af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: -- d0:fc:d6:eb:fc:06:82:10:fb -+ Public-Key: (2048 bit) -+ Modulus: -+ 00:c1:a9:64:ef:d3:f2:e1:1a:7f:24:df:7f:65:86: -+ c1:98:55:16:83:91:16:5b:63:6e:26:bb:c0:73:68: -+ 7b:f7:00:ba:37:db:7f:a9:5c:c8:98:aa:43:96:87: -+ e1:a0:63:69:0c:d8:22:90:f5:56:22:b1:57:6e:71: -+ 3b:30:04:d0:64:4d:38:33:a0:ea:c1:16:3d:16:be: -+ c0:49:4c:f0:14:15:af:09:95:da:bf:c7:23:34:c3: -+ 7d:af:b7:70:b3:6d:1b:de:21:93:c0:7c:6c:0e:fd: -+ 0e:e5:ff:f3:80:51:0c:df:80:7c:40:46:c9:ca:57: -+ d4:88:02:0f:f0:1e:14:18:f1:98:0f:c6:42:1d:cc: -+ 90:29:71:1b:af:4a:22:e0:e7:86:fc:dd:d3:d8:84: -+ 0e:5e:f0:9b:93:5f:0a:9a:1d:f8:f5:f3:e7:c7:b0: -+ 7a:0e:25:20:13:02:1a:22:c2:d9:e0:7f:4f:a1:7f: -+ 72:f6:e6:e1:14:7c:c5:93:7f:a6:96:3b:ab:d8:f1: -+ dc:2b:01:d6:e5:fe:5c:cf:08:db:06:e9:fd:7d:bd: -+ fe:2c:f4:8a:7b:9f:15:88:05:2e:f7:ba:c9:86:7e: -+ 14:50:f4:96:a1:84:17:5d:f7:8b:0a:7a:14:2c:de: -+ ca:00:74:f8:23:32:9d:66:af:1c:a6:58:1a:de:82: -+ 96:a9 - Exponent: 65537 (0x10001) -- Signature Algorithm: sha1WithRSAEncryption -- 85:f5:d3:05:8b:8c:f4:43:1c:88:f2:8f:b2:f2:93:77:b7:3d: -- 95:c6:a0:34:bc:33:6a:d8:85:5f:3e:86:08:10:c5:5c:c1:76: -- a3:53:3c:dc:38:98:23:97:e7:da:21:ac:e8:4d:3c:96:70:29: -- ff:ff:1e:4a:9a:17:2b:db:04:62:b9:ef:ab:ea:a7:a5:e8:7c: -- b1:d5:ed:30:a8:6c:78:de:51:7e:e3:8a:c2:a4:64:a8:63:a2: -- bc:fd:43:9c:f3:55:7d:54:c9:6a:d8:53:1c:4b:6b:03:aa:b6: -- 19:e6:a4:4f:47:00:96:c5:42:59:85:4e:c3:4e:cd:41:82:53: -- 10:f8 -+ X509v3 extensions: -+ X509v3 Basic Constraints: -+ CA:FALSE -+ Netscape Comment: -+ OpenSSL Generated Certificate -+ X509v3 Subject Key Identifier: -+ F2:C9:35:05:31:EF:08:EE:EF:B0:FE:1A:72:C2:9E:70:E3:E3:EC:43 -+ X509v3 Authority Key Identifier: -+ keyid:F6:D1:22:29:D5:3D:23:D7:5E:AD:0C:9C:E6:75:8F:9D:CD:F8:9D:53 -+ -+ Signature Algorithm: sha256WithRSAEncryption -+ 02:e7:0a:22:7c:5e:d9:92:d2:b9:fb:4a:bf:75:3f:00:e6:19: -+ 3e:90:a5:9d:38:41:82:4c:6f:b9:f3:f2:58:a1:91:7f:4a:d4: -+ 28:38:9c:7c:4d:6c:2f:2f:95:f5:55:55:25:a1:71:0c:05:42: -+ 08:a3:a6:ab:e3:04:47:9a:42:24:8f:b2:ba:50:55:af:b8:d7: -+ fc:1a:13:92:5d:75:7d:e1:4d:87:5e:57:82:c5:5f:d6:b8:ea: -+ 86:4e:05:b0:7f:07:27:a5:36:1f:1e:54:f1:32:35:7f:9c:75: -+ 26:6a:21:75:37:32:bb:89:01:78:97:cc:d3:de:3a:e8:ce:45: -+ ed:12:24:2e:a8:25:73:b3:cd:70:47:b8:81:f9:06:aa:8d:87: -+ 2f:a9:cd:fe:79:40:cc:c9:47:3d:2f:82:c2:82:bf:5d:8a:06: -+ 5b:a9:90:d3:b0:a7:fc:f3:1a:fb:0e:cb:8f:d8:f2:4e:f4:8d: -+ bb:4b:d5:2d:20:c0:6e:d5:08:2b:81:32:c4:e0:d2:4b:31:27: -+ f1:55:96:0e:d4:b9:92:02:71:98:69:e5:73:cc:52:45:a0:07: -+ fb:28:9e:b0:fc:b1:58:42:5a:08:4a:30:49:e5:f1:a5:c8:d5: -+ 8a:67:f0:ed:9e:3f:1b:71:a6:80:91:81:cb:1a:3d:b5:8e:87: -+ 9d:64:28:ce - -----BEGIN CERTIFICATE----- --MIICXDCCAcUCAQAwDQYJKoZIhvcNAQEFBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD --VQQIEwdTaGltYW5lMRQwEgYDVQQHEwtNYXR6LWUgY2l0eTEXMBUGA1UEChMOUnVi --eSBDb3JlIFRlYW0xFTATBgNVBAMTDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ --ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0xNDAxMDMwMTM0MTdaFw0xOTAx --MDIwMTM0MTdaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIEwdTaGltYW5lMRcwFQYD --VQQKEw5SdWJ5IENvcmUgVGVhbTESMBAGA1UECxMJUnVieSBUZXN0MRIwEAYDVQQD --Ewlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANt10EXesd+/ --caAOsKXmvPQcneUlZ2TFe8vxr8a+mqrqfg/MBa/vQGkGsskTnX7rogbi6n0Hx8eZ --x/vVuOtjd2IrGBLDU1jQ9cdADAHRJoI0Fgnj3GX03LtdpUFg56l0utdMtqOcxYyJ --r8vonwX+6v5kJL/n7eP20PzW6/wGghD7AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEA --hfXTBYuM9EMciPKPsvKTd7c9lcagNLwzatiFXz6GCBDFXMF2o1M83DiYI5fn2iGs --6E08lnAp//8eSpoXK9sEYrnvq+qnpeh8sdXtMKhseN5RfuOKwqRkqGOivP1DnPNV --fVTJathTHEtrA6q2GeakT0cAlsVCWYVOw07NQYJTEPg= -+MIID+TCCAuGgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSlAx -+EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK -+DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI -+hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTE5MDEwMjAzMDY1M1oX -+DTI0MDEwMTAzMDY1M1owdjELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx -+FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex -+JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwggEiMA0GCSqG -+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBqWTv0/LhGn8k339lhsGYVRaDkRZbY24m -+u8BzaHv3ALo323+pXMiYqkOWh+GgY2kM2CKQ9VYisVducTswBNBkTTgzoOrBFj0W -+vsBJTPAUFa8Jldq/xyM0w32vt3CzbRveIZPAfGwO/Q7l//OAUQzfgHxARsnKV9SI -+Ag/wHhQY8ZgPxkIdzJApcRuvSiLg54b83dPYhA5e8JuTXwqaHfj18+fHsHoOJSAT -+Ahoiwtngf0+hf3L25uEUfMWTf6aWO6vY8dwrAdbl/lzPCNsG6f19vf4s9Ip7nxWI -+BS73usmGfhRQ9JahhBdd94sKehQs3soAdPgjMp1mrxymWBregpapAgMBAAGjezB5 -+MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENl -+cnRpZmljYXRlMB0GA1UdDgQWBBTyyTUFMe8I7u+w/hpywp5w4+PsQzAfBgNVHSME -+GDAWgBT20SIp1T0j116tDJzmdY+dzfidUzANBgkqhkiG9w0BAQsFAAOCAQEAAucK -+Inxe2ZLSuftKv3U/AOYZPpClnThBgkxvufPyWKGRf0rUKDicfE1sLy+V9VVVJaFx -+DAVCCKOmq+MER5pCJI+yulBVr7jX/BoTkl11feFNh15XgsVf1rjqhk4FsH8HJ6U2 -+Hx5U8TI1f5x1JmohdTcyu4kBeJfM09466M5F7RIkLqglc7PNcEe4gfkGqo2HL6nN -+/nlAzMlHPS+CwoK/XYoGW6mQ07Cn/PMa+w7Lj9jyTvSNu0vVLSDAbtUIK4EyxODS -+SzEn8VWWDtS5kgJxmGnlc8xSRaAH+yiesPyxWEJaCEowSeXxpcjVimfw7Z4/G3Gm -+gJGByxo9tY6HnWQozg== - -----END CERTIFICATE----- -diff --git a/test/net/fixtures/server.key b/test/net/fixtures/server.key -index 7c57546ece..1e73232728 100644 ---- a/test/net/fixtures/server.key -+++ b/test/net/fixtures/server.key -@@ -1,15 +1,28 @@ -------BEGIN RSA PRIVATE KEY----- --MIICXQIBAAKBgQDbddBF3rHfv3GgDrCl5rz0HJ3lJWdkxXvL8a/Gvpqq6n4PzAWv --70BpBrLJE51+66IG4up9B8fHmcf71bjrY3diKxgSw1NY0PXHQAwB0SaCNBYJ49xl --9Ny7XaVBYOepdLrXTLajnMWMia/L6J8F/ur+ZCS/5+3j9tD81uv8BoIQ+wIDAQAB --AoGAGtYHR+P5gFDaxiXFuCPFC1zMeg7e29XCU6gURIteQnQ2QhxCvcbV64HkLu51 --HeYWhB0Pa4aeCWxmpgb2e+JH4MEoIjeJSGyZQeqwkQLgWJDdvkgWx5am58QzA60I --ipkZ9QHcPffSs5RiGx4yfr58KqAmwFphGCY8W7v4LqaENdECQQD9H5VTW9g4gj1c --j3uNYvSI/D7a9P7gfI+ziczuwMm5xsBx3D/t5TAr3SJKNne3sl1E6ZERCUbzxf+C --k58EiHx1AkEA3fRLGqDOq7EcQhbjTcA/v/t5MwlGEUsS9+XrqOWn50YuoIwRZJ3v --qHRQzfQfFNklGtfBvwQ4md3irXjMeGVprwJBAMEAuwiDiHuV+xm/ofKtmE13IKot --ksYy1BOOp/8IawhHXueyi+BmF/PqOkIiA+jCjNGF0oIN89beizPSQbbgJx0CQG/K --qL1bu1ys0y/SeWBi8XkP/0aeaCUzq/UiYCTsrzoEll2UzvnftqMhGsXxLGqCyHaR --r2s3hA6zvIVlL4+AfM8CQQClq+WDrC5VKciLYakZNWJjV1m+H2Ut/0fXdUjKHajE --FWLcsrOhADf6bkTb71GwPxnKRkkRmud5upP0ZYYTqM4X -------END RSA PRIVATE KEY----- -+-----BEGIN PRIVATE KEY----- -+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDBqWTv0/LhGn8k -+339lhsGYVRaDkRZbY24mu8BzaHv3ALo323+pXMiYqkOWh+GgY2kM2CKQ9VYisVdu -+cTswBNBkTTgzoOrBFj0WvsBJTPAUFa8Jldq/xyM0w32vt3CzbRveIZPAfGwO/Q7l -+//OAUQzfgHxARsnKV9SIAg/wHhQY8ZgPxkIdzJApcRuvSiLg54b83dPYhA5e8JuT -+XwqaHfj18+fHsHoOJSATAhoiwtngf0+hf3L25uEUfMWTf6aWO6vY8dwrAdbl/lzP -+CNsG6f19vf4s9Ip7nxWIBS73usmGfhRQ9JahhBdd94sKehQs3soAdPgjMp1mrxym -+WBregpapAgMBAAECggEAYQJ20oBMcSBxwknGqlfnkGRHI97A4UScgACa9fTH7EJM -+BgEJIRCeV4Mq2jP0/P/vNoTqQ8zxue02C9fiuzoeHbBkz8/y6Ig4T7V74vwMYzM9 -+fEK50klxxFONGUF9zhOA2zPcrJZnFtcC6InfM07mcOsO0q/jE14N05ec3j5i+N7j -+hDHsHjS3hUiSEGra/U6TRGA26imDUZR5S3h3WMuFmpQgAg0STHc2inYjS9iVhn+T -+uAV2igYR89MOTcH1ZVoxjeYXwhqjWT6Kbw4Er4TWTVzwGf9ktv04EjZjhgUAqw7Q -+8Sc7Olt2q2tA7hQqdgJVgNMaszHqpKAECbAfuxuDtQKBgQD/r0zI9ZcTDQOgezaB -+s9UGbT5O5LruxLc/ExHRL7gpU7UsF/cc3Hp9zmDrzuUsq+UZlGewNnPBLHzaEq1z -+AZD9aa85umzXxcLzyg9ZnvN4kHLKIXhnnTEiShHtpRbqfybBKM7J+iQxXIYUf5tl -+lHTfEqG2/nTt4E50dhniIbIaAwKBgQDB5oS3LGXSn6zAWyUsAJaSeS8/3/O4Vz+x -+u8tZrICSFWBodwg46eHR9I379eayKhMGCsaAWx4ybWJWWEb/nM+fBGxBSnxb9jmm -+gHu93BQjK3sWS8qAGTwO5ehLEy0QRcCc+wb0lyo9hfh1grJioESVsiB9SXrxp8dr -+45JvxCCC4wKBgDGSKQ7lHm8hHMzmVoD6/pgKYgQlsGBOX0CpT9EAsXHBuuRbmRtN -+W6o8cuoE6MWqZfZ5oUi2peaT23jkGiCr8xJOhRxqGmQTAWMGj8dOW+HKD5dEufVM -+spP1TFiIo1K/aCIW6VCbYJz5VT1wKA6fo7EECbpSxxS/YjaOFyKSaddFAoGBAKk3 -+bdcVrf70TqTIZlZSZRWLIMsTvPTBX9rSUxL9Um8qrKo+RzS0F9lNHaQn457UzSlW -+uglGe8HyaAGGpN9qkF7sUzVftcvjxEgklNkKeaB/z7mThzPn0dwGlIUARTGQThox -+kM5gJgLvKfgTiW49A93ISEZOnDbM/2KOhjt35A+VAoGAYsNAMBwjubVo0v1vqry+ -+XG6VvPpgVjMiDQCsTEEcBqgRRuf6R5zndIhIvwmTNiUkGkE3w/vG0uCjtB82/kwE -+bzVheR0vZDN7s52OYRz4j0ddtYCqGSkvkWuEQfQFZUDTyLodwVQAT5aR+mcr4Qml -+uCiVeqoPl+JIg4m8Tz76XWo= -+-----END PRIVATE KEY----- --- -2.20.1 - - -From 1e0b49a293d3792826c67b7e05c5fcbd09c9ea6e Mon Sep 17 00:00:00 2001 -From: kazu -Date: Wed, 2 Jan 2019 03:29:01 +0000 -Subject: [PATCH 2/2] Try to update cert (2nd try) - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66686 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - test/net/fixtures/server.crt | 115 +++++++++++++++++------------------ - test/net/fixtures/server.key | 52 ++++++++-------- - 2 files changed, 83 insertions(+), 84 deletions(-) - -diff --git a/test/net/fixtures/server.crt b/test/net/fixtures/server.crt -index 817ecc222c..5ca78a6d14 100644 ---- a/test/net/fixtures/server.crt -+++ b/test/net/fixtures/server.crt -@@ -1,35 +1,35 @@ - Certificate: - Data: - Version: 3 (0x2) -- Serial Number: 1 (0x1) -+ Serial Number: 2 (0x2) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Validity -- Not Before: Jan 2 03:06:53 2019 GMT -- Not After : Jan 1 03:06:53 2024 GMT -- Subject: C=JP, ST=Shimane, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org -+ Not Before: Jan 2 03:27:13 2019 GMT -+ Not After : Jan 1 03:27:13 2024 GMT -+ Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: -- 00:c1:a9:64:ef:d3:f2:e1:1a:7f:24:df:7f:65:86: -- c1:98:55:16:83:91:16:5b:63:6e:26:bb:c0:73:68: -- 7b:f7:00:ba:37:db:7f:a9:5c:c8:98:aa:43:96:87: -- e1:a0:63:69:0c:d8:22:90:f5:56:22:b1:57:6e:71: -- 3b:30:04:d0:64:4d:38:33:a0:ea:c1:16:3d:16:be: -- c0:49:4c:f0:14:15:af:09:95:da:bf:c7:23:34:c3: -- 7d:af:b7:70:b3:6d:1b:de:21:93:c0:7c:6c:0e:fd: -- 0e:e5:ff:f3:80:51:0c:df:80:7c:40:46:c9:ca:57: -- d4:88:02:0f:f0:1e:14:18:f1:98:0f:c6:42:1d:cc: -- 90:29:71:1b:af:4a:22:e0:e7:86:fc:dd:d3:d8:84: -- 0e:5e:f0:9b:93:5f:0a:9a:1d:f8:f5:f3:e7:c7:b0: -- 7a:0e:25:20:13:02:1a:22:c2:d9:e0:7f:4f:a1:7f: -- 72:f6:e6:e1:14:7c:c5:93:7f:a6:96:3b:ab:d8:f1: -- dc:2b:01:d6:e5:fe:5c:cf:08:db:06:e9:fd:7d:bd: -- fe:2c:f4:8a:7b:9f:15:88:05:2e:f7:ba:c9:86:7e: -- 14:50:f4:96:a1:84:17:5d:f7:8b:0a:7a:14:2c:de: -- ca:00:74:f8:23:32:9d:66:af:1c:a6:58:1a:de:82: -- 96:a9 -+ 00:e8:da:9c:01:2e:2b:10:ec:49:cd:5e:07:13:07: -+ 9c:70:9e:c6:74:bc:13:c2:e1:6f:c6:82:fd:e3:48: -+ e0:2c:a5:68:c7:9e:42:de:60:54:65:e6:6a:14:57: -+ 7a:30:d0:cc:b5:b6:d9:c3:d2:df:c9:25:97:54:67: -+ cf:f6:be:5e:cb:8b:ee:03:c5:e1:e2:f9:e7:f7:d1: -+ 0c:47:f0:b8:da:33:5a:ad:41:ad:e7:b5:a2:7b:b7: -+ bf:30:da:60:f8:e3:54:a2:bc:3a:fd:1b:74:d9:dc: -+ 74:42:e9:29:be:df:ac:b4:4f:eb:32:f4:06:f1:e1: -+ 8c:4b:a8:8b:fb:29:e7:b1:bf:1d:01:ee:73:0f:f9: -+ 40:dc:d5:15:79:d9:c6:73:d0:c0:dd:cb:e4:da:19: -+ 47:80:c6:14:04:72:fd:9a:7c:8f:11:82:76:49:04: -+ 79:cc:f2:5c:31:22:95:13:3e:5d:40:a6:4d:e0:a3: -+ 02:26:7d:52:3b:bb:ed:65:a1:0f:ed:6b:b0:3c:d4: -+ de:61:15:5e:d3:dd:68:09:9f:4a:57:a5:c2:a9:6d: -+ 86:92:c5:f4:a4:d4:b7:13:3b:52:63:24:05:e2:cc: -+ e3:8a:3c:d4:35:34:2b:10:bb:58:72:e7:e1:8d:1d: -+ 74:8c:61:16:20:3d:d0:1c:4e:8f:6e:fd:fe:64:10: -+ 4f:41 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: -@@ -37,47 +37,46 @@ Certificate: - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: -- F2:C9:35:05:31:EF:08:EE:EF:B0:FE:1A:72:C2:9E:70:E3:E3:EC:43 -+ ED:28:C2:7E:AB:4B:C8:E8:FE:55:6D:66:95:31:1C:2D:60:F9:02:36 - X509v3 Authority Key Identifier: - keyid:F6:D1:22:29:D5:3D:23:D7:5E:AD:0C:9C:E6:75:8F:9D:CD:F8:9D:53 - - Signature Algorithm: sha256WithRSAEncryption -- 02:e7:0a:22:7c:5e:d9:92:d2:b9:fb:4a:bf:75:3f:00:e6:19: -- 3e:90:a5:9d:38:41:82:4c:6f:b9:f3:f2:58:a1:91:7f:4a:d4: -- 28:38:9c:7c:4d:6c:2f:2f:95:f5:55:55:25:a1:71:0c:05:42: -- 08:a3:a6:ab:e3:04:47:9a:42:24:8f:b2:ba:50:55:af:b8:d7: -- fc:1a:13:92:5d:75:7d:e1:4d:87:5e:57:82:c5:5f:d6:b8:ea: -- 86:4e:05:b0:7f:07:27:a5:36:1f:1e:54:f1:32:35:7f:9c:75: -- 26:6a:21:75:37:32:bb:89:01:78:97:cc:d3:de:3a:e8:ce:45: -- ed:12:24:2e:a8:25:73:b3:cd:70:47:b8:81:f9:06:aa:8d:87: -- 2f:a9:cd:fe:79:40:cc:c9:47:3d:2f:82:c2:82:bf:5d:8a:06: -- 5b:a9:90:d3:b0:a7:fc:f3:1a:fb:0e:cb:8f:d8:f2:4e:f4:8d: -- bb:4b:d5:2d:20:c0:6e:d5:08:2b:81:32:c4:e0:d2:4b:31:27: -- f1:55:96:0e:d4:b9:92:02:71:98:69:e5:73:cc:52:45:a0:07: -- fb:28:9e:b0:fc:b1:58:42:5a:08:4a:30:49:e5:f1:a5:c8:d5: -- 8a:67:f0:ed:9e:3f:1b:71:a6:80:91:81:cb:1a:3d:b5:8e:87: -- 9d:64:28:ce -+ 1d:b8:c5:8b:72:41:20:65:ad:27:6f:15:63:06:26:12:8d:9c: -+ ad:ca:f4:db:97:b4:90:cb:ff:35:94:bb:2a:a7:a1:ab:1e:35: -+ 2d:a5:3f:c9:24:b0:1a:58:89:75:3e:81:0a:2c:4f:98:f9:51: -+ fb:c0:a3:09:d0:0a:9b:e7:a2:b7:c3:60:40:c8:f4:6d:b2:6a: -+ 56:12:17:4c:00:24:31:df:9c:60:ae:b1:68:54:a9:e6:b5:4a: -+ 04:e6:92:05:86:d9:5a:dc:96:30:a5:58:de:14:99:0f:e5:15: -+ 89:3e:9b:eb:80:e3:bd:83:c3:ea:33:35:4b:3e:2f:d3:0d:64: -+ 93:67:7f:8d:f5:3f:0c:27:bc:37:5a:cc:d6:47:16:af:5a:62: -+ d2:da:51:f8:74:06:6b:24:ad:28:68:08:98:37:7d:ed:0e:ab: -+ 1e:82:61:05:d0:ba:75:a0:ab:21:b0:9a:fd:2b:54:86:1d:0d: -+ 1f:c2:d4:77:1f:72:26:5e:ad:8a:9f:09:36:6d:44:be:74:c2: -+ 5a:3e:ff:5c:9d:75:d6:38:7b:c5:39:f9:44:6e:a1:d1:8e:ff: -+ 63:db:c4:bb:c6:91:92:ca:5c:60:9b:1d:eb:0a:de:08:ee:bf: -+ da:76:03:65:62:29:8b:f8:7f:c7:86:73:1e:f6:1f:2d:89:69: -+ fd:be:bd:6e - -----BEGIN CERTIFICATE----- --MIID+TCCAuGgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSlAx -+MIID4zCCAsugAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSlAx - EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK - DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI --hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTE5MDEwMjAzMDY1M1oX --DTI0MDEwMTAzMDY1M1owdjELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx --FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex --JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwggEiMA0GCSqG --SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBqWTv0/LhGn8k339lhsGYVRaDkRZbY24m --u8BzaHv3ALo323+pXMiYqkOWh+GgY2kM2CKQ9VYisVducTswBNBkTTgzoOrBFj0W --vsBJTPAUFa8Jldq/xyM0w32vt3CzbRveIZPAfGwO/Q7l//OAUQzfgHxARsnKV9SI --Ag/wHhQY8ZgPxkIdzJApcRuvSiLg54b83dPYhA5e8JuTXwqaHfj18+fHsHoOJSAT --Ahoiwtngf0+hf3L25uEUfMWTf6aWO6vY8dwrAdbl/lzPCNsG6f19vf4s9Ip7nxWI --BS73usmGfhRQ9JahhBdd94sKehQs3soAdPgjMp1mrxymWBregpapAgMBAAGjezB5 --MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENl --cnRpZmljYXRlMB0GA1UdDgQWBBTyyTUFMe8I7u+w/hpywp5w4+PsQzAfBgNVHSME --GDAWgBT20SIp1T0j116tDJzmdY+dzfidUzANBgkqhkiG9w0BAQsFAAOCAQEAAucK --Inxe2ZLSuftKv3U/AOYZPpClnThBgkxvufPyWKGRf0rUKDicfE1sLy+V9VVVJaFx --DAVCCKOmq+MER5pCJI+yulBVr7jX/BoTkl11feFNh15XgsVf1rjqhk4FsH8HJ6U2 --Hx5U8TI1f5x1JmohdTcyu4kBeJfM09466M5F7RIkLqglc7PNcEe4gfkGqo2HL6nN --/nlAzMlHPS+CwoK/XYoGW6mQ07Cn/PMa+w7Lj9jyTvSNu0vVLSDAbtUIK4EyxODS --SzEn8VWWDtS5kgJxmGnlc8xSRaAH+yiesPyxWEJaCEowSeXxpcjVimfw7Z4/G3Gm --gJGByxo9tY6HnWQozg== -+hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTE5MDEwMjAzMjcxM1oX -+DTI0MDEwMTAzMjcxM1owYDELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx -+FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRIwEAYDVQQLDAlSdWJ5IFRlc3QxEjAQ -+BgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -+AOjanAEuKxDsSc1eBxMHnHCexnS8E8Lhb8aC/eNI4CylaMeeQt5gVGXmahRXejDQ -+zLW22cPS38kll1Rnz/a+XsuL7gPF4eL55/fRDEfwuNozWq1Bree1onu3vzDaYPjj -+VKK8Ov0bdNncdELpKb7frLRP6zL0BvHhjEuoi/sp57G/HQHucw/5QNzVFXnZxnPQ -+wN3L5NoZR4DGFARy/Zp8jxGCdkkEeczyXDEilRM+XUCmTeCjAiZ9Uju77WWhD+1r -+sDzU3mEVXtPdaAmfSlelwqlthpLF9KTUtxM7UmMkBeLM44o81DU0KxC7WHLn4Y0d -+dIxhFiA90BxOj279/mQQT0ECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhC -+AQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFO0o -+wn6rS8jo/lVtZpUxHC1g+QI2MB8GA1UdIwQYMBaAFPbRIinVPSPXXq0MnOZ1j53N -++J1TMA0GCSqGSIb3DQEBCwUAA4IBAQAduMWLckEgZa0nbxVjBiYSjZytyvTbl7SQ -+y/81lLsqp6GrHjUtpT/JJLAaWIl1PoEKLE+Y+VH7wKMJ0Aqb56K3w2BAyPRtsmpW -+EhdMACQx35xgrrFoVKnmtUoE5pIFhtla3JYwpVjeFJkP5RWJPpvrgOO9g8PqMzVL -+Pi/TDWSTZ3+N9T8MJ7w3WszWRxavWmLS2lH4dAZrJK0oaAiYN33tDqsegmEF0Lp1 -+oKshsJr9K1SGHQ0fwtR3H3ImXq2Knwk2bUS+dMJaPv9cnXXWOHvFOflEbqHRjv9j -+28S7xpGSylxgmx3rCt4I7r/adgNlYimL+H/HhnMe9h8tiWn9vr1u - -----END CERTIFICATE----- -diff --git a/test/net/fixtures/server.key b/test/net/fixtures/server.key -index 1e73232728..7f2380e71e 100644 ---- a/test/net/fixtures/server.key -+++ b/test/net/fixtures/server.key -@@ -1,28 +1,28 @@ - -----BEGIN PRIVATE KEY----- --MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDBqWTv0/LhGn8k --339lhsGYVRaDkRZbY24mu8BzaHv3ALo323+pXMiYqkOWh+GgY2kM2CKQ9VYisVdu --cTswBNBkTTgzoOrBFj0WvsBJTPAUFa8Jldq/xyM0w32vt3CzbRveIZPAfGwO/Q7l --//OAUQzfgHxARsnKV9SIAg/wHhQY8ZgPxkIdzJApcRuvSiLg54b83dPYhA5e8JuT --XwqaHfj18+fHsHoOJSATAhoiwtngf0+hf3L25uEUfMWTf6aWO6vY8dwrAdbl/lzP --CNsG6f19vf4s9Ip7nxWIBS73usmGfhRQ9JahhBdd94sKehQs3soAdPgjMp1mrxym --WBregpapAgMBAAECggEAYQJ20oBMcSBxwknGqlfnkGRHI97A4UScgACa9fTH7EJM --BgEJIRCeV4Mq2jP0/P/vNoTqQ8zxue02C9fiuzoeHbBkz8/y6Ig4T7V74vwMYzM9 --fEK50klxxFONGUF9zhOA2zPcrJZnFtcC6InfM07mcOsO0q/jE14N05ec3j5i+N7j --hDHsHjS3hUiSEGra/U6TRGA26imDUZR5S3h3WMuFmpQgAg0STHc2inYjS9iVhn+T --uAV2igYR89MOTcH1ZVoxjeYXwhqjWT6Kbw4Er4TWTVzwGf9ktv04EjZjhgUAqw7Q --8Sc7Olt2q2tA7hQqdgJVgNMaszHqpKAECbAfuxuDtQKBgQD/r0zI9ZcTDQOgezaB --s9UGbT5O5LruxLc/ExHRL7gpU7UsF/cc3Hp9zmDrzuUsq+UZlGewNnPBLHzaEq1z --AZD9aa85umzXxcLzyg9ZnvN4kHLKIXhnnTEiShHtpRbqfybBKM7J+iQxXIYUf5tl --lHTfEqG2/nTt4E50dhniIbIaAwKBgQDB5oS3LGXSn6zAWyUsAJaSeS8/3/O4Vz+x --u8tZrICSFWBodwg46eHR9I379eayKhMGCsaAWx4ybWJWWEb/nM+fBGxBSnxb9jmm --gHu93BQjK3sWS8qAGTwO5ehLEy0QRcCc+wb0lyo9hfh1grJioESVsiB9SXrxp8dr --45JvxCCC4wKBgDGSKQ7lHm8hHMzmVoD6/pgKYgQlsGBOX0CpT9EAsXHBuuRbmRtN --W6o8cuoE6MWqZfZ5oUi2peaT23jkGiCr8xJOhRxqGmQTAWMGj8dOW+HKD5dEufVM --spP1TFiIo1K/aCIW6VCbYJz5VT1wKA6fo7EECbpSxxS/YjaOFyKSaddFAoGBAKk3 --bdcVrf70TqTIZlZSZRWLIMsTvPTBX9rSUxL9Um8qrKo+RzS0F9lNHaQn457UzSlW --uglGe8HyaAGGpN9qkF7sUzVftcvjxEgklNkKeaB/z7mThzPn0dwGlIUARTGQThox --kM5gJgLvKfgTiW49A93ISEZOnDbM/2KOhjt35A+VAoGAYsNAMBwjubVo0v1vqry+ --XG6VvPpgVjMiDQCsTEEcBqgRRuf6R5zndIhIvwmTNiUkGkE3w/vG0uCjtB82/kwE --bzVheR0vZDN7s52OYRz4j0ddtYCqGSkvkWuEQfQFZUDTyLodwVQAT5aR+mcr4Qml --uCiVeqoPl+JIg4m8Tz76XWo= -+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDo2pwBLisQ7EnN -+XgcTB5xwnsZ0vBPC4W/Ggv3jSOAspWjHnkLeYFRl5moUV3ow0My1ttnD0t/JJZdU -+Z8/2vl7Li+4DxeHi+ef30QxH8LjaM1qtQa3ntaJ7t78w2mD441SivDr9G3TZ3HRC -+6Sm+36y0T+sy9Abx4YxLqIv7Keexvx0B7nMP+UDc1RV52cZz0MDdy+TaGUeAxhQE -+cv2afI8RgnZJBHnM8lwxIpUTPl1Apk3gowImfVI7u+1loQ/ta7A81N5hFV7T3WgJ -+n0pXpcKpbYaSxfSk1LcTO1JjJAXizOOKPNQ1NCsQu1hy5+GNHXSMYRYgPdAcTo9u -+/f5kEE9BAgMBAAECggEBAOHkwhc7DLh8IhTDNSW26oMu5OP2WU1jmiYAigDmf+OQ -+DBgrZj+JQBci8qINQxL8XLukSZn5hvQCLc7Kbyu1/wyEEUFDxSGGwwzclodr9kho -+LX2LDASPZrOSzD2+fPi2wTKmXKuS6Uc44OjQfZkYMNkz9r4Vkm8xGgOD3VipjIYX -+QXlhhdqkXZcNABsihCV52GKkDFSVm8jv95YJc5xhoYCy/3a4/qPdF0aT2R7oYUej -+hKrxVDskyooe8Zg/JTydZNV5GQEDmW01/K3r6XGT26oPi1AqMU1gtv/jkW56CRQQ -+1got8smnqM+AV7Slf9R6DauIPdQJ2S8wsr/o8ISBsOECgYEA9YrqEP2gAYSGFXRt -+liw0WI2Ant8BqXS6yvq1jLo/qWhLw/ph4Di73OQ2mpycVTpgfGr2wFPQR1XJ+0Fd -+U+Ir/C3Q7FK4VIGHK7B0zNvZr5tEjlFfeRezo2JMVw5YWeSagIFcSwK+KqCTH9qc -+pw/Eb8nB/4XNcpTZu7Fg0Wc+ooUCgYEA8sVaicn1Wxkpb45a4qfrA6wOr5xdJ4cC -+A5qs7vjX2OdPIQOmoQhdI7bCWFXZzF33wA4YCws6j5wRaySLIJqdms8Gl9QnODy1 -+ZlA5gwKToBC/jqPmWAXSKb8EH7cHilaxU9OKnQ7CfwlGLHqjMtjrhR7KHlt3CVRs -+oRmvsjZVXI0CgYAmPedslAO6mMhFSSfULrhMXmV82OCqYrrA6EEkVNGbcdnzAOkD -+gfKIWabDd8bFY10po4Mguy0CHzNhBXIioWQWV5BlbhC1YKMLw+S9DzSdLAKGY9gJ -+xQ4+UQ3wtRQ/k+IYR413RUsW2oFvgZ3KSyNeAb9MK6uuv84VdG/OzVSs/QKBgQDn -+kap//l2EbObiWyaERunckdVcW0lcN+KK75J/TGwPoOwQsLvTpPe65kxRGGrtDsEQ -+uCDk/+v3KkZPLgdrrTAih9FhJ+PVN8tMcb+6IM4SA4fFFr/UPJEwct0LJ3oQ0grJ -+y+HPWFHb/Uurh7t99/4H98uR02sjQh1wOeEmm78mzQKBgQDm+LzGH0se6CXQ6cdZ -+g1JRZeXkDEsrW3hfAsW62xJQmXcWxBoblP9OamMY+A06rM5og3JbDk5Zm6JsOaA8 -+wS2gw4ilp46jors4eQey8ux7kB9LzdBoDBBElnsbjLO8oBNZlVcYXg+6BOl/CUi7 -+2whRF0FEjKA8ehrNhAq+VFfFNw== - -----END PRIVATE KEY----- --- -2.20.1 - diff --git a/ruby-2.6.1-Fix-rubyspec-to-follow-IO-ungetbyte-fix.patch b/ruby-2.6.1-Fix-rubyspec-to-follow-IO-ungetbyte-fix.patch new file mode 100644 index 0000000..623f56a --- /dev/null +++ b/ruby-2.6.1-Fix-rubyspec-to-follow-IO-ungetbyte-fix.patch @@ -0,0 +1,43 @@ +From b228a084aa200c82deaf02ee3cfa91943171f166 Mon Sep 17 00:00:00 2001 +From: naruse +Date: Wed, 30 Jan 2019 13:09:26 +0000 +Subject: [PATCH] merge revision(s) 66888: [Backport #15460] + +* Fix rubyspec to follow IO#ungetbyte's fix + Merge CRuby r66824 + With fixing actual spec and the version the change applied. + + +git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_6@66952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e +--- + spec/ruby/core/io/ungetbyte_spec.rb | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/spec/ruby/core/io/ungetbyte_spec.rb b/spec/ruby/core/io/ungetbyte_spec.rb +index 2e51fb02987c..f5f9a11be154 100644 +--- a/spec/ruby/core/io/ungetbyte_spec.rb ++++ b/spec/ruby/core/io/ungetbyte_spec.rb +@@ -49,7 +49,7 @@ + end + end + +- ruby_version_is '2.6'...'2.7' do ++ ruby_version_is '2.6'...'2.6.1' do + it "is an RangeError if the integer is not in 8bit" do + for i in [4095, 0x4f7574206f6620636861722072616e6765] do + lambda { @io.ungetbyte(i) }.should raise_error(RangeError) +@@ -57,10 +57,11 @@ + end + end + +- ruby_version_is '2.7' do ++ ruby_version_is '2.6.1' do + it "never raises RangeError" do +- for i in [4095, 0x4f7574206f6620636861722072616e6765] do +- lambda { @io.ungetbyte(i) }.should_not raise_error ++ for i in [4095, 0x4f7574206f6620636861722072616e67ff] do ++ @io.ungetbyte(i).should be_nil ++ @io.getbyte.should == 255 + end + end + end diff --git a/ruby.spec b/ruby.spec index 0384d25..1d12450 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 6 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 111 +%global release 112 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -139,9 +139,6 @@ Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch -# Refresh expired certificates. -# https://bugs.ruby-lang.org/issues/15502 -Patch10: ruby-2.6.0-Try-to-update-cert.patch # `gem build ../foo.gemspec` changes directory, which does not play well with # gems unpacked by setup macro. # https://github.com/rubygems/rubygems/issues/2587 @@ -149,6 +146,10 @@ Patch11: rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-g # This allows to loosen the RDoc dependency again. # https://github.com/rubygems/rubygems/pull/2604 Patch12: rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch +# Fix "IO#ungetbyte is an RangeError if the integer is not in 8bit FAILED" +# test failure. +# https://bugs.ruby-lang.org/issues/15460 +Patch13: ruby-2.6.1-Fix-rubyspec-to-follow-IO-ungetbyte-fix.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 @@ -544,9 +545,9 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch7 -p1 %patch9 -p1 -%patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 %patch22 -p1 %patch23 -p1 @@ -1024,8 +1025,8 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" # TODO: Gemify these libraries %{gem_dir}/specifications/default/cmath-1.0.0.gemspec -%{gem_dir}/specifications/default/csv-3.0.2.gemspec -%{gem_dir}/specifications/default/date-1.0.0.gemspec +%{gem_dir}/specifications/default/csv-3.0.4.gemspec +%{gem_dir}/specifications/default/date-2.0.0.gemspec %{gem_dir}/specifications/default/dbm-1.0.0.gemspec %{gem_dir}/specifications/default/e2mmap-0.1.0.gemspec %{gem_dir}/specifications/default/etc-1.0.1.gemspec @@ -1167,6 +1168,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Thu Jan 31 2019 Vít Ondruch - 2.6.1-112 +- Upgrade to Ruby 2.6.1. + * Thu Jan 24 2019 Vít Ondruch - 2.6.0-111 - Properly generate versioned ruby(rubygems) dependencies. - Loosen RDoc dependency. diff --git a/sources b/sources index f9e875e..54c52c0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.6.0.tar.xz) = c56eaf85ef7b79deb34ee4590b143c07f4fc83eb79775290761aee5a7c63374659613538a41f25706ed6e19e49d5c67a1014c24d17f29948294c7abd0b0fcea8 +SHA512 (ruby-2.6.1.tar.xz) = fb36289a955f0596c683cdadf1e4a9a9fd35222b1e1c6160c2e7cd82e5befd40a7aa4361e55f7a8f83c06ee899ec493821c7db34a60c4ac3bca0e874d33ef1a9 From f3953123c0b8b7c720d0f1e3ba482b84a03fcf35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 7 Feb 2019 15:16:51 +0100 Subject: [PATCH 314/530] Don't ship .stp files when SystemTap support is disabled. --- ruby.spec | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 1d12450..8fd6253 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 112 +%global release 113 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -729,12 +729,14 @@ sed -i '/^end$/ i\ # Move man pages into proper location mv %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/doc/rake.1 %{buildroot}%{_mandir}/man1 +%if %{with systemtap} # Install a tapset and fix up the path to the library. mkdir -p %{buildroot}%{tapset_dir} sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{major_minor_version}|" \ %{SOURCE2} > %{buildroot}%{tapset_dir}/libruby.so.%{major_minor_version}.stp # Escape '*/' in comment. sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{major_minor_version}.stp +%endif # Prepare -doc subpackage file lists. find doc -maxdepth 1 -type f ! -name '.*' ! -name '*.ja*' > .ruby-doc.en @@ -1000,7 +1002,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{ruby_libarchdir}/syslog.so %{ruby_libarchdir}/zlib.so -%{tapset_root} +%{?with_systemtap:%{tapset_root}} %files -n rubygems %{_bindir}/gem @@ -1083,7 +1085,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %files doc -f .ruby-doc.en -f .ruby-doc.ja %doc README.md %doc ChangeLog -%doc ruby-exercise.stp +%{?with_systemtap:%doc ruby-exercise.stp} %{_datadir}/ri %files -n rubygem-bigdecimal @@ -1168,6 +1170,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Thu Feb 07 2019 Vít Ondruch - 2.6.1-113 +- Don't ship .stp files when SystemTap support is disabled. + * Thu Jan 31 2019 Vít Ondruch - 2.6.1-112 - Upgrade to Ruby 2.6.1. From a889754fa255fbb1279449937b427c9bc4c3dc55 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Sun, 17 Feb 2019 09:30:52 +0100 Subject: [PATCH 315/530] Rebuild for readline 8.0 --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 8fd6253..a4f11d7 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 113 +%global release 114 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1170,6 +1170,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Sun Feb 17 2019 Igor Gnatenko - 2.6.1-114 +- Rebuild for readline 8.0 + * Thu Feb 07 2019 Vít Ondruch - 2.6.1-113 - Don't ship .stp files when SystemTap support is disabled. From 392287d18bf53970fb2a8e934a32e31b52d570d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 5 Mar 2019 10:39:38 +0100 Subject: [PATCH 316/530] Fix ".include =" support in openssl.cnf. Because of rhbz#1668916, OpenSSL now supports = character in openssl.cnf. --- ruby-2.6.0-config-support-include-directive.patch | 6 +++--- ruby.spec | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ruby-2.6.0-config-support-include-directive.patch b/ruby-2.6.0-config-support-include-directive.patch index 37a89d6..5b2024b 100644 --- a/ruby-2.6.0-config-support-include-directive.patch +++ b/ruby-2.6.0-config-support-include-directive.patch @@ -46,8 +46,8 @@ index 88225451..ba3a54c8 100644 - key = $2 - else - key = $1 -+ when /\A\.include (.+)\z/ -+ path = $1 ++ when /\A\.include (\s*=\s*)?(.+)\z/ ++ path = $2 + if File.directory?(path) + files = Dir.glob(File.join(path, "*.{cnf,conf}"), File::FNM_EXTGLOB) + else @@ -141,7 +141,7 @@ index 99dcc497..5653b5d0 100644 + file-main = unnamed + [sec-main] + main = 123 -+ .include include-child.conf ++ .include = include-child.conf + __EOC__ + + # Include a file by relative path diff --git a/ruby.spec b/ruby.spec index a4f11d7..cbebc7a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 114 +%global release 115 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1170,6 +1170,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Tue Mar 05 2019 Vít Ondruch - 2.6.1-115 +- Fix ".include =" support in openssl.cnf (rhbz#1668916). + * Sun Feb 17 2019 Igor Gnatenko - 2.6.1-114 - Rebuild for readline 8.0 From f4c0ae4dea433f7dad82bb90d4085e3621e4c65a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 14 Mar 2019 17:52:12 +0100 Subject: [PATCH 317/530] Upgrade to Ruby 2.6.2. --- ruby-2.3.0-ruby_version.patch | 4 +- ...-rubyspec-to-follow-IO-ungetbyte-fix.patch | 43 ------------------- ruby.spec | 14 +++--- sources | 2 +- 4 files changed, 9 insertions(+), 54 deletions(-) delete mode 100644 ruby-2.6.1-Fix-rubyspec-to-follow-IO-ungetbyte-fix.patch diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 7b09e55..a74fb74 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -245,7 +245,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index 0428bea..b6e090e 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1280,7 +1280,8 @@ def test_self_use_paths +@@ -1288,7 +1288,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -255,7 +255,7 @@ index 0428bea..b6e090e 100644 assert_equal File.join(parts), Gem.user_dir end -@@ -1357,7 +1358,7 @@ def test_self_gzip +@@ -1365,7 +1366,7 @@ def test_self_gzip def test_self_vendor_dir expected = File.join RbConfig::CONFIG['vendordir'], 'gems', diff --git a/ruby-2.6.1-Fix-rubyspec-to-follow-IO-ungetbyte-fix.patch b/ruby-2.6.1-Fix-rubyspec-to-follow-IO-ungetbyte-fix.patch deleted file mode 100644 index 623f56a..0000000 --- a/ruby-2.6.1-Fix-rubyspec-to-follow-IO-ungetbyte-fix.patch +++ /dev/null @@ -1,43 +0,0 @@ -From b228a084aa200c82deaf02ee3cfa91943171f166 Mon Sep 17 00:00:00 2001 -From: naruse -Date: Wed, 30 Jan 2019 13:09:26 +0000 -Subject: [PATCH] merge revision(s) 66888: [Backport #15460] - -* Fix rubyspec to follow IO#ungetbyte's fix - Merge CRuby r66824 - With fixing actual spec and the version the change applied. - - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_6@66952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - spec/ruby/core/io/ungetbyte_spec.rb | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/spec/ruby/core/io/ungetbyte_spec.rb b/spec/ruby/core/io/ungetbyte_spec.rb -index 2e51fb02987c..f5f9a11be154 100644 ---- a/spec/ruby/core/io/ungetbyte_spec.rb -+++ b/spec/ruby/core/io/ungetbyte_spec.rb -@@ -49,7 +49,7 @@ - end - end - -- ruby_version_is '2.6'...'2.7' do -+ ruby_version_is '2.6'...'2.6.1' do - it "is an RangeError if the integer is not in 8bit" do - for i in [4095, 0x4f7574206f6620636861722072616e6765] do - lambda { @io.ungetbyte(i) }.should raise_error(RangeError) -@@ -57,10 +57,11 @@ - end - end - -- ruby_version_is '2.7' do -+ ruby_version_is '2.6.1' do - it "never raises RangeError" do -- for i in [4095, 0x4f7574206f6620636861722072616e6765] do -- lambda { @io.ungetbyte(i) }.should_not raise_error -+ for i in [4095, 0x4f7574206f6620636861722072616e67ff] do -+ @io.ungetbyte(i).should be_nil -+ @io.getbyte.should == 255 - end - end - end diff --git a/ruby.spec b/ruby.spec index cbebc7a..2bcadb0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 6 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 115 +%global release 116 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -29,7 +29,7 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.0.1 +%global rubygems_version 3.0.3 %global rubygems_molinillo_version 0.5.7 %global bundler_version 1.17.2 @@ -146,10 +146,6 @@ Patch11: rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-g # This allows to loosen the RDoc dependency again. # https://github.com/rubygems/rubygems/pull/2604 Patch12: rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch -# Fix "IO#ungetbyte is an RangeError if the integer is not in 8bit FAILED" -# test failure. -# https://bugs.ruby-lang.org/issues/15460 -Patch13: ruby-2.6.1-Fix-rubyspec-to-follow-IO-ungetbyte-fix.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 @@ -547,7 +543,6 @@ rm -rf ext/fiddle/libffi* %patch9 -p1 %patch11 -p1 %patch12 -p1 -%patch13 -p1 %patch22 -p1 %patch23 -p1 @@ -1170,6 +1165,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Thu Mar 14 2019 Vít Ondruch - 2.6.2-116 +- Upgrade to Ruby 2.6.2. + * Tue Mar 05 2019 Vít Ondruch - 2.6.1-115 - Fix ".include =" support in openssl.cnf (rhbz#1668916). diff --git a/sources b/sources index 54c52c0..7698ba1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.6.1.tar.xz) = fb36289a955f0596c683cdadf1e4a9a9fd35222b1e1c6160c2e7cd82e5befd40a7aa4361e55f7a8f83c06ee899ec493821c7db34a60c4ac3bca0e874d33ef1a9 +SHA512 (ruby-2.6.2.tar.xz) = 13f7d7b483a037378eac4bf4bebddc21d69f4e19e6bbb397dd53e7518037ae9a3aa5b41fc20bf1fe410803c6efc3a6a65a65af47648d3a93713f75cfe885326a From 5aa32e278d096a36ba0d8926d4891f1e0757d4e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 19 Mar 2019 15:21:05 +0100 Subject: [PATCH 318/530] Link IRB back to StdLib. This avoids issues running `$ bin/rails console --sandbox`, which otherwise breaks with error such as: ~~~ $ bin/rails console --sandbox Traceback (most recent call last): 12: from bin/rails:4:in `
' 11: from bin/rails:4:in `require' 10: from /builddir/.gem/ruby/gems/railties-5.2.2.1/lib/rails/commands.rb:18:in `' 9: from /builddir/.gem/ruby/gems/railties-5.2.2.1/lib/rails/command.rb:44:in `invoke' 8: from /builddir/.gem/ruby/gems/railties-5.2.2.1/lib/rails/command.rb:70:in `find_by_namespace' 7: from /builddir/.gem/ruby/gems/railties-5.2.2.1/lib/rails/command/behavior.rb:79:in `lookup' 6: from /builddir/.gem/ruby/gems/railties-5.2.2.1/lib/rails/command/behavior.rb:79:in `each' 5: from /builddir/.gem/ruby/gems/railties-5.2.2.1/lib/rails/command/behavior.rb:80:in `block in lookup' 4: from /builddir/.gem/ruby/gems/railties-5.2.2.1/lib/rails/command/behavior.rb:80:in `each' 3: from /builddir/.gem/ruby/gems/railties-5.2.2.1/lib/rails/command/behavior.rb:84:in `block (2 levels) in lookup' 2: from /builddir/.gem/ruby/gems/railties-5.2.2.1/lib/rails/command/behavior.rb:84:in `require' 1: from /builddir/.gem/ruby/gems/railties-5.2.2.1/lib/rails/commands/console/console_command.rb:3:in `' /builddir/.gem/ruby/gems/railties-5.2.2.1/lib/rails/commands/console/console_command.rb:3:in `require': cannot load such file -- irb (LoadError) ~~~ --- ruby.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 2bcadb0..6ef4b56 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 116 +%global release 117 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -649,6 +649,8 @@ mkdir -p %{buildroot}%{_exec_prefix}/lib{,64}/gems/%{name} mkdir -p %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib mv %{buildroot}%{ruby_libdir}/irb* %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib mv %{buildroot}%{gem_dir}/specifications/default/irb-%{irb_version}.gemspec %{buildroot}%{gem_dir}/specifications +ln -s %{gem_dir}/gems/irb-%{irb_version}/lib/irb.rb %{buildroot}%{ruby_libdir}/irb.rb +ln -s %{gem_dir}/gems/irb-%{irb_version}/lib/irb %{buildroot}%{ruby_libdir}/irb mkdir -p %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib @@ -1066,6 +1068,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %files -n rubygem-irb %{_bindir}/irb +%{ruby_libdir}/irb* %{gem_dir}/gems/irb-%{irb_version} %{gem_dir}/specifications/irb-%{irb_version}.gemspec %{_mandir}/man1/irb.1* @@ -1165,6 +1168,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Tue Mar 19 2019 Vít Ondruch - 2.6.2-117 +- Link IRB back to StdLib. + * Thu Mar 14 2019 Vít Ondruch - 2.6.2-116 - Upgrade to Ruby 2.6.2. From 9d08846cc73dc9e91175b4b5049cbfbdeb7d3803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 21 Mar 2019 10:26:10 +0100 Subject: [PATCH 319/530] Link IRB files instead of directories. During update, RPM cannot simply replace directory by link to direcotry, therefore create the directory structure and link the files there one by one (rhbz#1691039). --- ruby.spec | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 6ef4b56..2d262cd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 117 +%global release 118 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -650,7 +650,13 @@ mkdir -p %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib mv %{buildroot}%{ruby_libdir}/irb* %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib mv %{buildroot}%{gem_dir}/specifications/default/irb-%{irb_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/irb-%{irb_version}/lib/irb.rb %{buildroot}%{ruby_libdir}/irb.rb -ln -s %{gem_dir}/gems/irb-%{irb_version}/lib/irb %{buildroot}%{ruby_libdir}/irb +# TODO: This should be possible to replaced by simple directory symlink +# after ~ F31 EOL (rhbz#1691039). +mkdir -p %{buildroot}%{ruby_libdir}/irb +pushd %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib +find irb -type d -mindepth 1 -exec mkdir %{buildroot}%{ruby_libdir}/'{}' \; +find irb -type f -exec ln -s %{gem_dir}/gems/irb-%{irb_version}/lib/'{}' %{buildroot}%{ruby_libdir}/'{}' \; +popd mkdir -p %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib @@ -1168,6 +1174,10 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Thu Mar 21 2019 Vít Ondruch - 2.6.2-118 +- Link IRB files instead of directories, which RPM cannot handle + during updates (rhbz#1691039). + * Tue Mar 19 2019 Vít Ondruch - 2.6.2-117 - Link IRB back to StdLib. From 395ef05d65fc3198d9f2408cb50bea95d94bff78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 25 Mar 2019 15:00:51 +0100 Subject: [PATCH 320/530] Exclude irb.rb from ruby-libs. This file is just part of rubygem-irb. --- ruby.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/ruby.spec b/ruby.spec index 2d262cd..3bcbc1f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -874,6 +874,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" # Platform independent libraries. %dir %{ruby_libdir} %{ruby_libdir}/*.rb +%exclude %{ruby_libdir}/irb.rb %exclude %{ruby_libdir}/json.rb %exclude %{ruby_libdir}/openssl.rb %exclude %{ruby_libdir}/psych.rb From e38302eeb14df7bc0177b060030fc26a08721907 Mon Sep 17 00:00:00 2001 From: Arjen Heidinga Date: Wed, 27 Mar 2019 09:29:42 +0000 Subject: [PATCH 321/530] Add zlib-devel as BuildRequire This is needed to compile zlib support. I think it is by accident available in the original buildroot, but not in mine. I think it is better to explicitly name it. --- ruby.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/ruby.spec b/ruby.spec index 3bcbc1f..4bf7a89 100644 --- a/ruby.spec +++ b/ruby.spec @@ -179,6 +179,7 @@ BuildRequires: procps %{?with_hostname:BuildRequires: %{_bindir}/hostname} BuildRequires: multilib-rpm-config BuildRequires: gcc +BuildRequires: zlib-devel # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. From ea106d15b2dcb1a2a193527a297b4dafe658de60 Mon Sep 17 00:00:00 2001 From: Arjen Heidinga Date: Fri, 29 Mar 2019 10:10:33 +0000 Subject: [PATCH 322/530] Bump version and add changelog --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 4bf7a89..9510657 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 118 +%global release 119 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1176,6 +1176,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Thu Mar 28 2019 Arjen Heidinga - 2.6.2-119 +- Add zlib-devel explicitly as BuildRequirement. + * Thu Mar 21 2019 Vít Ondruch - 2.6.2-118 - Link IRB files instead of directories, which RPM cannot handle during updates (rhbz#1691039). From ed790644ea1d1af742ef109fbc3df817622db744 Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Thu, 25 Apr 2019 08:44:02 +0200 Subject: [PATCH 323/530] Update to Ruby 2.6.3. --- ruby.spec | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 9510657..e5df88d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 6 -%global teeny_version 2 +%global teeny_version 3 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 119 +%global release 120 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -754,6 +754,12 @@ echo 'doc/pty' >> .ruby-doc.ja sed -i 's/^/%doc /' .ruby-doc.* sed -i 's/^/%lang(ja) /' .ruby-doc.ja +# https://github.com/yuki24/did_you_mean/issues/122 +rm -rf %{buildroot}%{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/tmp/ + +# https://github.com/ruby/rake/issues/316 +rm -f %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/.gitignore + %check %if 0%{?with_hardening_test} # Check Ruby hardening. @@ -1032,7 +1038,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" # TODO: Gemify these libraries %{gem_dir}/specifications/default/cmath-1.0.0.gemspec -%{gem_dir}/specifications/default/csv-3.0.4.gemspec +%{gem_dir}/specifications/default/csv-3.0.9.gemspec %{gem_dir}/specifications/default/date-2.0.0.gemspec %{gem_dir}/specifications/default/dbm-1.0.0.gemspec %{gem_dir}/specifications/default/e2mmap-0.1.0.gemspec @@ -1176,6 +1182,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Thu Apr 25 2019 Pavel Valena - 2.6.3-120 +- Update to Ruby 2.6.3. + * Thu Mar 28 2019 Arjen Heidinga - 2.6.2-119 - Add zlib-devel explicitly as BuildRequirement. From 1cc2a497d3569d77ab807885d4ebc4975c97155c Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Tue, 14 May 2019 18:39:59 +0200 Subject: [PATCH 324/530] Update sources file. --- sources | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources b/sources index 7698ba1..be8cf52 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.6.2.tar.xz) = 13f7d7b483a037378eac4bf4bebddc21d69f4e19e6bbb397dd53e7518037ae9a3aa5b41fc20bf1fe410803c6efc3a6a65a65af47648d3a93713f75cfe885326a +SHA512 (ruby-2.6.3.tar.xz) = 959a613f5cf5b3185a1d7a7ba0e1921166b3930f30461b391b1c9fcfe396f56dc3c736123dfc7b4e72c32a97dc5a1eb1fd7f09bcc3793a3c5526f6644ba421c8 From 13a1b3e907bdf6fd5a0b3d61f40f0f8bc21008d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 25 Jun 2019 13:48:27 +0200 Subject: [PATCH 325/530] Properly support %prerelease in %gemspec_ macros. --- macros.rubygems | 8 ++++---- ruby.spec | 5 ++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/macros.rubygems b/macros.rubygems index 532ea6c..2552780 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -60,7 +60,7 @@ gem install \\\ # %gemspec_add_dep(g:s:d) \ read -d '' gemspec_add_dep_script << 'EOR' || : \ - gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}.gemspec}' \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \ \ name = '%{-g*}' \ requirements = %{*}%{!?1:nil} \ @@ -97,7 +97,7 @@ unset -v gemspec_add_dep_script \ # %gemspec_remove_dep(g:s:d) \ read -d '' gemspec_remove_dep_script << 'EOR' || : \ - gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}.gemspec}' \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \ \ name = '%{-g*}' \ requirements = %{*}%{!?1:nil} \ @@ -144,7 +144,7 @@ unset -v gemspec_remove_dep_script \ # %gemspec_add_file(s:tr) \ read -d '' gemspec_add_file_script << 'EOR' || : \ - gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}.gemspec}' \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \ \ abort("gemspec_add_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \ \ @@ -177,7 +177,7 @@ unset -v gemspec_add_file_script \ # %gemspec_remove_file(s:tr) \ read -d '' gemspec_remove_file_script << 'EOR' || : \ - gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}.gemspec}' \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \ \ abort("gemspec_remove_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \ \ diff --git a/ruby.spec b/ruby.spec index e5df88d..2e94ada 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 120 +%global release 121 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1182,6 +1182,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Tue Jun 25 2019 Vít Ondruch - 2.6.3-121 +- Properly support %%prerelease in %%gemspec_ macros. + * Thu Apr 25 2019 Pavel Valena - 2.6.3-120 - Update to Ruby 2.6.3. From 423327ef48f95b92095dad9c4a9f695bbb03d1b4 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 26 Jul 2019 18:52:39 +0000 Subject: [PATCH 326/530] - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 2e94ada..8a30f1a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -21,7 +21,7 @@ %endif -%global release 121 +%global release 122 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1182,6 +1182,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Fri Jul 26 2019 Fedora Release Engineering - 2.6.3-122 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + * Tue Jun 25 2019 Vít Ondruch - 2.6.3-121 - Properly support %%prerelease in %%gemspec_ macros. From 050a503e16ff9bdd5f9da9733dc1dc7c7d32e295 Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Fri, 30 Aug 2019 14:16:55 +0200 Subject: [PATCH 327/530] Update to Ruby 2.6.4. --- ...-2.6.0-use-larger-keys-for-SSL-tests.patch | 486 ------------------ ruby.spec | 18 +- sources | 2 +- 3 files changed, 8 insertions(+), 498 deletions(-) delete mode 100644 ruby-2.6.0-use-larger-keys-for-SSL-tests.patch diff --git a/ruby-2.6.0-use-larger-keys-for-SSL-tests.patch b/ruby-2.6.0-use-larger-keys-for-SSL-tests.patch deleted file mode 100644 index 6bb8466..0000000 --- a/ruby-2.6.0-use-larger-keys-for-SSL-tests.patch +++ /dev/null @@ -1,486 +0,0 @@ -From b0bcb19cb4f95d260c5993df0aaa3667522fb99d Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Thu, 16 Aug 2018 20:54:47 +0900 -Subject: [PATCH 1/2] test/openssl/test_pair: fix deadlock in - test_connect_accept_nonblock - -Call IO.select with a timeout value and limit the number of retries to -prevent stacking forever. - -Reference: https://github.com/ruby/openssl/issues/214 ---- - test/openssl/test_pair.rb | 51 +++++++++++++++++---------------------- - 1 file changed, 22 insertions(+), 29 deletions(-) - -diff --git a/test/openssl/test_pair.rb b/test/openssl/test_pair.rb -index ea5f0dcf..eac3655e 100644 ---- a/test/openssl/test_pair.rb -+++ b/test/openssl/test_pair.rb -@@ -442,7 +442,7 @@ def test_connect_accept_nonblock_no_exception - end - - def test_connect_accept_nonblock -- ctx = OpenSSL::SSL::SSLContext.new() -+ ctx = OpenSSL::SSL::SSLContext.new - ctx.cert = @svr_cert - ctx.key = @svr_key - ctx.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey_dh("dh1024") } -@@ -451,45 +451,38 @@ def test_connect_accept_nonblock - - th = Thread.new { - s2 = OpenSSL::SSL::SSLSocket.new(sock2, ctx) -- s2.sync_close = true -- begin -+ 5.times { -+ begin -+ break s2.accept_nonblock -+ rescue IO::WaitReadable -+ IO.select([s2], nil, nil, 1) -+ rescue IO::WaitWritable -+ IO.select(nil, [s2], nil, 1) -+ end - sleep 0.2 -- s2.accept_nonblock -+ } -+ } -+ -+ s1 = OpenSSL::SSL::SSLSocket.new(sock1) -+ 5.times { -+ begin -+ break s1.connect_nonblock - rescue IO::WaitReadable -- IO.select([s2]) -- retry -+ IO.select([s1], nil, nil, 1) - rescue IO::WaitWritable -- IO.select(nil, [s2]) -- retry -+ IO.select(nil, [s1], nil, 1) - end -- s2 -- } -- -- sleep 0.1 -- ctx = OpenSSL::SSL::SSLContext.new() -- s1 = OpenSSL::SSL::SSLSocket.new(sock1, ctx) -- begin - sleep 0.2 -- s1.connect_nonblock -- rescue IO::WaitReadable -- IO.select([s1]) -- retry -- rescue IO::WaitWritable -- IO.select(nil, [s1]) -- retry -- end -- s1.sync_close = true -+ } - - s2 = th.value - - s1.print "a\ndef" - assert_equal("a\n", s2.gets) - ensure -- th.join if th -- s1.close if s1 && !s1.closed? -- s2.close if s2 && !s2.closed? -- sock1.close if sock1 && !sock1.closed? -- sock2.close if sock2 && !sock2.closed? -+ sock1&.close -+ sock2&.close -+ th&.join - end - end - - -From 5ba99ad7ae1267ed964f53906530579299f3fcc6 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Thu, 16 Aug 2018 20:04:13 +0900 -Subject: [PATCH 2/2] test: use larger keys for SSL tests - -Some systems enforce a system-wide policy to restrict key sizes used in -SSL/TLS. Use larger ones if possible so that the test suite runs -successfully. - -New PEM files test/openssl/fixtures/pkey/{dh-1,rsa-1,rsa-2,rsa-3}.pem are added -to the tree, and SSL tests now use them instead of the fixed-size keys. - -Reference: https://github.com/ruby/openssl/issues/215 ---- - test/openssl/fixtures/pkey/dh-1.pem | 13 +++++++ - test/openssl/fixtures/pkey/rsa-1.pem | 51 ++++++++++++++++++++++++++++ - test/openssl/fixtures/pkey/rsa-2.pem | 51 ++++++++++++++++++++++++++++ - test/openssl/fixtures/pkey/rsa-3.pem | 51 ++++++++++++++++++++++++++++ - test/openssl/test_pair.rb | 8 ++--- - test/openssl/test_pkey_dh.rb | 8 ++--- - test/openssl/test_ssl.rb | 11 +++--- - test/openssl/utils.rb | 14 ++++---- - 8 files changed, 186 insertions(+), 21 deletions(-) - create mode 100644 test/openssl/fixtures/pkey/dh-1.pem - create mode 100644 test/openssl/fixtures/pkey/rsa-1.pem - create mode 100644 test/openssl/fixtures/pkey/rsa-2.pem - create mode 100644 test/openssl/fixtures/pkey/rsa-3.pem - -diff --git a/test/openssl/fixtures/pkey/dh-1.pem b/test/openssl/fixtures/pkey/dh-1.pem -new file mode 100644 -index 00000000..3340a6a1 ---- /dev/null -+++ b/test/openssl/fixtures/pkey/dh-1.pem -@@ -0,0 +1,13 @@ -+-----BEGIN DH PARAMETERS----- -+MIICCAKCAgEAvRzXYxY6L2DjeYmm1eowtMDu1it3j+VwFr6s6PRWzc1apMtztr9G -+xZ2mYndUAJLgNLO3n2fUDCYVMB6ZkcekW8Siocof3xWiMA6wqZ6uw0dsE3q7ZX+6 -+TLjgSjaXeGvjutvuEwVrFeaUi83bMgfXN8ToxIQVprIF35sYFt6fpbFATKfW7qqi -+P1pQkjmCskU4tztaWvlLh0qg85wuQGnpJaQT3gS30378i0IGbA0EBvJcSpTHYbLa -+nsdI9bfN/ZVgeolVMNMU9/n8R8vRhNPcHuciFwaqS656q+HavCIyxw/LfjSwwFvR -+TngCn0wytRErkzFIXnRKckh8/BpI4S+0+l1NkOwG4WJ55KJ/9OOdZW5o/QCp2bDi -+E0JN1EP/gkSom/prq8JR/yEqtsy99uc5nUxPmzv0IgdcFHZEfiQU7iRggEbx7qfQ -+Ve55XksmmJInmpCy1bSabAEgIKp8Ckt5KLYZ0RgTXUhcEpsxEo6cuAwoSJT5o4Rp -+yG3xow2ozPcqZkvb+d2CHj1sc54w9BVFAjVANEKmRil/9WKz14bu3wxEhOPqC54n -+QojjLcoXSoT66ZUOQnYxTSiLtzoKGPy8cAVPbkBrXz2u2sj5gcvr1JjoGjdHm9/3 -+qnqC8fsTz8UndKNIQC337o4K0833bQMzRGl1/qjbAPit2B7E3b6xTZMCAQI= -+-----END DH PARAMETERS----- -diff --git a/test/openssl/fixtures/pkey/rsa-1.pem b/test/openssl/fixtures/pkey/rsa-1.pem -new file mode 100644 -index 00000000..bd5a624f ---- /dev/null -+++ b/test/openssl/fixtures/pkey/rsa-1.pem -@@ -0,0 +1,51 @@ -+-----BEGIN RSA PRIVATE KEY----- -+MIIJJwIBAAKCAgEArIEJUYZrXhMfUXXdl2gLcXrRB4ciWNEeXt5UVLG0nPhygZwJ -+xis8tOrjXOJEpUXUsfgF35pQiJLD4T9/Vp3zLFtMOOQjOR3AxjIelbH9KPyGFEr9 -+TcPtsJ24zhcG7RbwOGXR4iIcDaTx+bCLSAd7BjG3XHQtyeepGGRZkGyGUvXjPorH -+XP+dQjQnMd09wv0GMZSqQ06PedUUKQ4PJRfMCP+mwjFP+rB3NZuThF0CsNmpoixg -+GdoQ591Yrf5rf2Bs848JrYdqJlKlBL6rTFf2glHiC+mE5YRny7RZtv/qIkyUNotV -+ce1cE0GFrRmCpw9bqulDDcgKjFkhihTg4Voq0UYdJ6Alg7Ur4JerKTfyCaRGF27V -+fh/g2A2/6Vu8xKYYwTAwLn+Tvkx9OTVZ1t15wM7Ma8hHowNoO0g/lWkeltgHLMji -+rmeuIYQ20BQmdx2RRgWKl57D0wO/N0HIR+Bm4vcBoNPgMlk9g5WHA6idHR8TLxOr -+dMMmTiWfefB0/FzGXBv7DuuzHN3+urdCvG1QIMFQ06kHXhr4rC28KbWIxg+PJGM8 -+oGNEGtGWAOvi4Ov+BVsIdbD5Sfyb4nY3L9qqPl6TxRxMWTKsYCYx11jC8civCzOu -+yL1z+wgIICJ6iGzrfYf6C2BiNV3BC1YCtp2XsG+AooIxCwjL2CP/54MuRnUCAwEA -+AQKCAgAP4+8M0HoRd2d6JIZeDRqIwIyCygLy9Yh7qrVP+/KsRwKdR9dqps73x29c -+Pgeexdj67+Lynw9uFT7v/95mBzTAUESsNO+9sizw1OsWVQgB/4kGU4YT5Ml/bHf6 -+nApqSqOkPlTgJM46v4f+vTGHWBEQGAJRBO62250q/wt1D1osSDQ/rZ8BxRYiZBV8 -+NWocDRzF8nDgtFrpGSS7R21DuHZ2Gb6twscgS6MfkA49sieuTM6gfr/3gavu/+fM -+V1Rlrmc65GE61++CSjijQEEdTjkJ9isBd+hjEBhTnnBpOBfEQxOgFqOvU/MYXv/G -+W0Q6yWJjUwt3OIcoOImrY5L3j0vERneA1Alweqsbws3fXXMjA+jhLxlJqjPvSAKc -+POi7xu7QCJjSSLAzHSDPdmGmfzlrbdWS1h0mrC5YZYOyToLajfnmAlXNNrytnePg -+JV9/1136ZFrJyEi1JVN3kyrC+1iVd1E+lWK0U1UQ6/25tJvKFc1I+xToaUbK10UN -+ycXib7p2Zsc/+ZMlPRgCxWmpIHmKhnwbO7vtRunnnc6wzhvlQQNHWlIvkyQukV50 -+6k/bzWw0M6A98B4oCICIcxcpS3njDlHyL7NlkCD+/OfZp6X3RZF/m4grmA2doebz -+glsaNMyGHFrpHkHq19Y63Y4jtBdW/XuBv06Cnr4r3BXdjEzzwQKCAQEA5bj737Nk -+ZLA0UgzVVvY67MTserTOECIt4i37nULjRQwsSFiz0AWFOBwUCBJ5N2qDEelbf0Fa -+t4VzrphryEgzLz/95ZXi+oxw1liqCHi8iHeU2wSclDtx2jKv2q7bFvFSaH4CKC4N -+zBJNfP92kdXuAjXkbK/jWwr64fLNh/2KFWUAmrYmtGfnOjjyL+yZhPxBatztE58q -+/T61pkvP9NiLfrr7Xq8fnzrwqGERhXKueyoK6ig9ZJPZ2VTykMUUvNYJJ7OYQZru -+EYA3zkuEZifqmjgF57Bgg7dkkIh285TzH3CNf3MCMTmjlWVyHjlyeSPYgISB9Mys -+VKKQth+SvYcChQKCAQEAwDyCcolA7+bQBfECs6GXi7RYy2YSlx562S5vhjSlY9Ko -+WiwVJWviF7uSBdZRnGUKoPv4K4LV34o2lJpSSTi5Xgp7FH986VdGePe3p4hcXSIZ -+NtsKImLVLnEjrmkZExfQl7p0MkcU/LheCf/eEZVp0Z84O54WCs6GRm9wHYIUyrag -+9FREqqxTRVNhQQ2EDVGq1slREdwB+aygE76axK/qosk0RaoLzGZiMn4Sb8bpJxXO -+mee+ftq5bayVltfR0DhC8eHkcPPFeQMll1g+ML7HbINwHTr01ONm3cFUO4zOLBOO -+ws/+vtNfiv6S/lO1RQSRoiApbENBLdSc3V8Cy70PMQKCAQBOcZN4uP5gL5c+KWm0 -+T1KhxUDnSdRPyAwY/xC7i7qlullovvlv4GK0XUot03kXBkUJmcEHvF5o6qYtCZlM -+g/MOgHCHtF4Upl5lo1M0n13pz8PB4lpBd+cR1lscdrcTp4Y3bkf4RnmppNpXA7kO -+ZZnnoVWGE620ShSPkWTDuj0rvxisu+SNmClqRUXWPZnSwnzoK9a86443efF3fs3d -+UxCXTuxFUdGfgvXo2XStOBMCtcGSYflM3fv27b4C13mUXhY0O2yTgn8m9LyZsknc -+xGalENpbWmwqrjYl8KOF2+gFZV68FZ67Bm6otkJ4ta80VJw6joT9/eIe6IA34KIw -+G+ktAoIBAFRuPxzvC4ZSaasyX21l25mQbC9pdWDKEkqxCmp3VOyy6R4xnlgBOhwS -+VeAacV2vQyvRfv4dSLIVkkNSRDHEqCWVlNk75TDXFCytIAyE54xAHbLqIVlY7yim -+qHVB07F/FC6PxdkPPziAAU2DA5XVedSHibslg6jbbD4jU6qiJ1+hNrAZEs+jQC+C -+n4Ri20y+Qbp0URb2+icemnARlwgr+3HjzQGL3gK4NQjYNmDBjEWOXl9aWWB90FNL -+KahGwfAhxcVW4W56opCzwR7nsujV4eDXGba83itidRuQfd5pyWOyc1E86TYGwD/b -+79OkEElv6Ea8uXTDVS075GmWATRapQECggEAd9ZAbyT+KouTfi2e6yLOosxSZfns -+eF06QAJi5n9GOtdfK5fqdmHJqJI7wbubCnd0oxPeL71lRjrOAMXufaQRdZtfXSMn -+B1TljteNrh1en5xF451rCPR/Y6tNKBvIKnhy1waO27/vA+ovXrm17iR9rRuGZ29i -+IurlKA6z/96UdrSdpqITTCyTjSOBYg34f49ueGjlpL4+8HJq2wor4Cb1Sbv8ErqA -+bsQ/Jz+KIGUiuFCfNa6d6McPRXIrGgzpprXgfimkV3nj49QyrnuCF/Pc4psGgIaN -+l3EiGXzRt/55K7DQVadtbcjo9zREac8QnDD6dS/gOfJ82L7frQfMpNWgQA== -+-----END RSA PRIVATE KEY----- -diff --git a/test/openssl/fixtures/pkey/rsa-2.pem b/test/openssl/fixtures/pkey/rsa-2.pem -new file mode 100644 -index 00000000..e4fd4f43 ---- /dev/null -+++ b/test/openssl/fixtures/pkey/rsa-2.pem -@@ -0,0 +1,51 @@ -+-----BEGIN RSA PRIVATE KEY----- -+MIIJKAIBAAKCAgEA1HUbx825tG7+/ulC5DpDogzXqM2/KmeCwGXZY4XjiWa+Zj7b -+ECkZwQh7zxFUsPixGqQKJSyFwCogdaPzYTRNtqKKaw/IWS0um1PTn4C4/9atbIsf -+HVKu/fWg4VrZL+ixFIZxa8Z6pvTB2omMcx+uEzbXPsO01i1pHf7MaWBxUDGFyC9P -+lASJBfFZAf2Ar1H99OTS4SP+gxM9Kk5tcc22r8uFiqqbhJmQNSDApdHvT1zSZxAc -+T1BFEZqfmR0B0UegPyJc/9hW0dYpB9JjR29UaZRSta3LUMpqltoOF5bzaKVgMuBm -+Qy79xJ71LjGp8bKhgRaWXyPsDzAC0MQlOW6En0v8LK8fntivJEvw9PNOMcZ8oMTn -+no0NeVt32HiQJW8LIVo7dOLVFtguSBMWUVe8mdKbuIIULD6JlSYke9Ob6andUhzO -+U79m/aRWs2yjD6o5QAktjFBARdPgcpTdWfppc8xpJUkQgRmVhINoIMT9W6Wl898E -+P4aPx6mRV/k05ellN3zRgd9tx5dyNuj3RBaNmR47cAVvGYRQgtH9bQYs6jtf0oer -+A5yIYEKspNRlZZJKKrQdLflQFOEwjQJyZnTk7Mp0y21wOuEGgZBexew55/hUJDC2 -+mQ8CqjV4ki/Mm3z6Cw3jXIMNBJkH7oveBGSX0S9bF8A/73oOCU3W/LkORxECAwEA -+AQKCAgBLK7RMmYmfQbaPUtEMF2FesNSNMV72DfHBSUgFYpYDQ4sSeiLgMOqf1fSY -+azVf+F4RYwED7iDUwRMDDKNMPUlR2WjIQKlOhCH9a0dxJAZQ3xA1W3QC2AJ6cLIf -+ihlWTip5bKgszekPsYH1ZL2A7jCVM84ssuoE7cRHjKOelTUCfsMq9TJe2MvyglZP -+0fX6EjSctWm3pxiiH+iAU4d9wJ9my8fQLFUiMYNIiPIguYrGtbzsIlMh7PDDLcZS -+UmUWOxWDwRDOpSjyzadu0Q23dLiVMpmhFoDdcQENptFdn1c4K2tCFQuZscKwEt4F -+HiVXEzD5j5hcyUT4irA0VXImQ+hAH3oSDmn7wyHvyOg0bDZpUZXEHXb83Vvo54/d -+Fb4AOUva1dwhjci8CTEMxCENMy/CLilRv46AeHbOX8KMPM7BnRSJPptvTTh/qB9C -+HI5hxfkO+EOYnu0kUlxhJfrqG86H4IS+zA8HWiSEGxQteMjUQfgJoBzJ94YChpzo -+ePpKSpjxxl1PNNWKxWM3yUvlKmI2lNl6YNC8JpF2wVg4VvYkG7iVjleeRg21ay89 -+NCVMF98n3MI5jdzfDKACnuYxg7sw+gjMy8PSoFvQ5pvHuBBOpa8tho6vk7bLJixT -+QY5uXMNQaO6OwpkBssKpnuXhIJzDhO48nSjJ5nUEuadPH1nGwQKCAQEA7twrUIMi -+Vqze/X6VyfEBnX+n3ZyQHLGqUv/ww1ZOOHmSW5ceC4GxHa8EPDjoh9NEjYffwGq9 -+bfQh9Gntjk5gFipT/SfPrIhbPt59HthUqVvOGgSErCmn0vhsa0+ROpVi4K2WHS7O -+7SEwnoCWd6p1omon2olVY0ODlMH4neCx/ZuKV8SRMREubABlL8/MLp37AkgKarTY -+tewd0lpaZMvsjOhr1zVCGUUBxy87Fc7OKAcoQY8//0r8VMH7Jlga7F2PKVPzqRKf -+tjeW5jMAuRxTqtEdIeclJZwvUMxvb23BbBE+mtvKpXv69TB3DK8T1YIkhW2CidZW -+lad4MESC+QFNbQKCAQEA47PtULM/0ZFdE+PDDHOa2kJ2arm94sVIqF2168ZLXR69 -+NkvCWfjkUPDeejINCx7XQgk0d/+5BCvrJpcM7lE4XfnYVNtPpct1el6eTfaOcPU8 -+wAMsnq5n9Mxt02U+XRPtEqGk+lt0KLPDDSG88Z7jPmfftigLyPH6i/ZJyRUETlGk -+rGnWSx/LFUxQU5aBa2jUCjKOKa+OOk2jGg50A5Cmk26v9sA/ksOHisMjfdIpZc9P -+r4R0IteDDD5awlkWTF++5u1GpgU2yav4uan0wzY8OWYFzVyceA6+wffEcoplLm82 -+CPd/qJOB5HHkjoM+CJgfumFxlNtdowKvKNUxpoQNtQKCAQEAh3ugofFPp+Q0M4r6 -+gWnPZbuDxsLIR05K8vszYEjy4zup1YO4ygQNJ24fM91/n5Mo/jJEqwqgWd6w58ax -+tRclj00BCMXtGMrbHqTqSXWhR9LH66AGdPTHuXWpYZDnKliTlic/z1u+iWhbAHyl -+XEj2omIeKunc4gnod5cyYrKRouz3omLfi/pX33C19FGkWgjH2HpuViowBbhhDfCr -+9yJoEWC/0njl/hlTMdzLYcpEyxWMMuuC/FZXG+hPgWdWFh3XVzTEL3Fd3+hWEkp5 -+rYWwu2ITaSiHvHaDrAvZZVXW8WoynXnvzr+tECgmTq57zI4eEwSTl4VY5VfxZ0dl -+FsIzXQKCAQBC07GYd6MJPGJWzgeWhe8yk0Lxu6WRAll6oFYd5kqD/9uELePSSAup -+/actsbbGRrziMpVlinWgVctjvf0bjFbArezhqqPLgtTtnwtS0kOnvzGfIM9dms4D -+uGObISGWa5yuVSZ4G5MRxwA9wGMVfo4u6Iltin868FmZ7iRlkXd8DNYJi95KmgAe -+NhF1FrzQ6ykf/QpgDZfuYI63vPorea6JonieMHn39s622OJ3sNBZguheGL+E4j8h -+vsMgOskijQ8X8xdC7lDQC1qqEsk06ZvvNJQLW1zIl3tArhjHjPp5EEaJhym+Ldx3 -+UT3E3Zu9JfhZ2PNevqrShp0lnLw/pI3pAoIBAAUMz5Lj6V9ftsl1pTa8WDFeBJW0 -+Wa5AT1BZg/ip2uq2NLPnA5JWcD+v682fRSvIj1pU0DRi6VsXlzhs+1q3+sgqiXGz -+u2ArFylh8TvC1gXUctXKZz/M3Rqr6aSNoejUGLmvHre+ja/k6Zwmu6ePtB7dL50d -+6+xMTYquS4gLbrbSLcEu3iBAAnvRLreXK4KguPxaBdICB7v7epdpAKe3Z7hp/sst -+eJj1+6KRdlcmt8fh5MPkBBXa6I/9XGmX5UEo7q4wAxeM9nuFWY3watz/EO9LiO6P -+LmqUSWL65m4cX0VZPvhYEsHppKi1eoWGlHqS4Af5+aIXi2alu2iljQFeA+Q= -+-----END RSA PRIVATE KEY----- -diff --git a/test/openssl/fixtures/pkey/rsa-3.pem b/test/openssl/fixtures/pkey/rsa-3.pem -new file mode 100644 -index 00000000..6c9c9ced ---- /dev/null -+++ b/test/openssl/fixtures/pkey/rsa-3.pem -@@ -0,0 +1,51 @@ -+-----BEGIN RSA PRIVATE KEY----- -+MIIJKAIBAAKCAgEAzn+YCcOh7BIRzrb7TEuhQLD545+/Fx/zCYO3l+y/8ogUxMTg -+LG5HrcXlX3JP796ie90/GHIf8/lwczVhP1jk/keYjkwoTYDt477R7KRcJPyGqHRr -+qLp7AnZxtz3JLNboTgO3bAYzlvtsSKU/R3oehBbGHzEWCP2UEYj/Kky0zpcjkhZU -+jiErr9ARPq8+dOGqBf+CE2NLKYC1bu8hZe9AddvvN2SvfMN6uhJtEGZO1k8tScwf -+AyvPJ1Po/6z08pzMAgfBUCE95waAVeYJWIOlnNB4eEievzlXdPB9vEt8OOwtWfQX -+V8xyMsoKeAW05s413E0eTYx1aulFXdWwG2mWEBRtNzKF1iBudlg1a3x1zThWi1pY -+jW5vROvoWZMCbl9bYQ/LxOCVqDoUl86+NPEGeuESMzm5NvOQA2e0Ty5wphnt9M19 -+Wcc8neBhb6iCGqYzxWNvUYXZWUv1+/MrPHKyJuv7MSivwtctfp8SacUGxkd6T+u6 -+V6ntHf3qtN/5pAmni6nzUTgjC65MS0LEhi/RTzwafkIfifeJH7/LqFtjrursuwua -++p9lkACck/J5TpzaAfLroFQuepP8qgeq1cpD5Iii56IJ+FPSnkvesHuRUmZIkhtR -+VVsVqMaNPv/Uzc02bOaRXWP4auUY91mDKx/FDmORa9YCDQxMkKke05SWQ90CAwEA -+AQKCAgA0+B/c6VTgxGXS+7cMhB3yBTOkgva2jNh/6Uyv6Of345ZIPyQt4X/7gFbt -+G9qLcjWFxmQH9kZiA+snclrmr/vVijIE1l5EOz1KfUlGBYcpaal1DqALIQKqyA01 -+buDq4pmmYWesiw6yvP2yyMipohav1VOu7p1zYvCXaufhRtneYICcWaQI7VNSfvHd -+fYBs5PIDJd6M8Jx4Ie7obOjJSAzl7qu3LtmhDFev4Ugeu8+fQ6IfWv/dhWBW+zw6 -+UXhnv3bJUonw7wX8+/rxjdd54BMcXZF5cU9fR+s6MPJf2ZEc3OBpQaa3O9dTVeZH -+kVctGVpRj2qlg9EewoWro0PQVE5Mjah+mdFhPAHWoGl1xht6xJmg0uHYxMCzbUSz -+7NSS3knR0qieFvsp5ESY72i7DnQsbhbn6mTuYdVtm9bphxifAWCP3jFdft/bjtSF -+4yuPI7Qga+3m0B8QhtbWhEzPVon6NyiY7qfa6qllp0opEbw2hE22uGFFNJo2mpPa -+pe9VwARtD0IyfeklE7KrBEwV8NjTaAipZTZODw0w/dt4K3dOiePDl3pPWjmERpVg -+Lkw7XSCMtu5X87I1BbfOYbQhOXksPY+W9Asf6ETBeIZ8bD6Iypuk2ssool1lukqv -+yq1Y8gbR9B2x91ftYwXgzqBSvd8PFNsaXWLD3nrai2G1vb81lQKCAQEA6W02eZcN -+7wJfkqNokcuqhc5OKXH14gVIRV+KocG6f3vg88wrCg5J2GqNhBFuwVrafJjRenm6 -+C8zWdneeyrl6cztgbaySw7kXnqFdTBiuOT8bhiG5NTPjDQ109EucaTbZU9KUXk6k -+ChPlr4G6IPrONpvi/9BvDDZLZkwR6uIg1kFWBy9kZaxFUEIug02hrbkTpPtnEUrO -+r3nG0QL/D0vf+bm4YHIVRMH2O2ZTTWexMw9XlfCe1+WjbJ+PS35QRCRDcRdWHXDb -+HnIFIAajtH5LtaJLgWUYq3B25WkQYtbHmFkm94sp/G4trb8JIJGzVO8cj9t6KeAT -+LG+tk8OqplqsYwKCAQEA4ne81KXx8VNwsKVFqwmiDIoi1q3beNa2hoXdzAMrnYdj -+iLxbfCVgrKPav9hdfXPBncHaNlGsd2G5W1a1UsOr128lTdfBsgm1RVPhVMKvo3fl -+yUnWajtAR1q3tVEUhuFlbJ/RHEtxJaGrzudYCPWQiYhydpDgSckbxD8PuElEgFBX -+O91vnWZEjMsxrABWiZNBxmtBUEv+fjUU/9USYzO4sN79UeD1+ZuBxPFwscsRcjLr -+bPgZWOwiywH6UmQ+DJTzeu0wJ6jgPoy/pgEujsbPDz1wNos6NhA/RQv31QeX33/B -+7/F5XKNmbJ2AFb/B+xTaTQPg0pjT5Exm+HrNU5OivwKCAQEAsLLVi9FG4OiBBHXi -+UItFuChljoYPxVqOTMV4Id6OmLZjoOmqouASElsGaTTxDDkEL1FXMUk4Bnq21dLT -+R06EXPpTknISX0qbkJ9CCrqcGAWnhi+9DYMLmvPW1p7t9c9pUESVv5X0IxTQx7yB -+8zkoJLp4aYGUrj/jb7qhzZYDmWy3/JRpgXWYupp+rzJy8xiowDj22mYwczDRyaJl -+BWVAVL+7zHZPl07kYC6jXHLj9mzktkIBXBkfTriyNkmV5R82VkN+Eqc9l5xkOMwN -+3DHGieYjFf47YHuv5RVVLBy91puWHckgrU+SEHYOKLNidybSDivsHArdOMQJN1Pk -+uCznVQKCAQAYY7DQbfa6eLQAMixomSb8lrvdxueGAgmyPyR93jGKS5Rqm2521ket -+EBB07MZUxmyposDvbKhYSwv9TD9G5I/TKcMouP3BQM5m4vu3dygXQMhcfzk6Q5tO -+k/SI8Gx3gjq8EhIhK/bJiLnKFJwkit3AEhPRtRSSnbgB0JDO1gUslHpwlg55MxRa -+3V9CGN84/cTtq4tjLGwCB5F1Y+sRB/byBXHeqY2UDi1Rmnb6jtYYKGe2WpnQO84b -+cuEUknskO75lFLpE6ykLU3koVaQ/+CVAjOtS1He2btWBiCJurNysU0P9pVHeqjJT -+rDqpHPe1JK/F74783zyir5+/Tuph/9pdAoIBAANPdFRQkJVH8K6iuhxQk6vFqiYB -+MUxpIVeLonD0p9TgMdezVNESht/AIutc0+5wabM45XuDWFRTuonvcE8lckv2Ux3a -+AvSsamjuesxw2YmkEtzZouVqDU0+oxppQJiwBG3MiaHX9F5IfnK6YmQ6xPwZ6MXi -+9feq1jR4KOc1ZrHtRMNgjnBWEFWroGe3FHgV7O133hpMSshRFmwcbE0nAaDr82U9 -+sl8dclDjEKBxaqjAeNajOr+BU0w0AAwWXL7dt/ctG2QClcj9wqbEfsXnOR10h4AI -+rqkcvQrOLbTwcrOD/6R1rQfQXtEHKf1maThxosootAQZXdf6jxU3oonx3tU= -+-----END RSA PRIVATE KEY----- -diff --git a/test/openssl/test_pair.rb b/test/openssl/test_pair.rb -index eac3655e..8d6ca1e9 100644 ---- a/test/openssl/test_pair.rb -+++ b/test/openssl/test_pair.rb -@@ -10,7 +10,7 @@ def setup - ee_exts = [ - ["keyUsage", "keyEncipherment,digitalSignature", true], - ] -- @svr_key = OpenSSL::TestUtils::Fixtures.pkey("rsa1024") -+ @svr_key = OpenSSL::TestUtils::Fixtures.pkey("rsa-1") - @svr_cert = issue_cert(svr_dn, @svr_key, 1, ee_exts, nil, nil) - end - -@@ -23,7 +23,7 @@ def ssl_pair - sctx = OpenSSL::SSL::SSLContext.new - sctx.cert = @svr_cert - sctx.key = @svr_key -- sctx.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey_dh("dh1024") } -+ sctx.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey("dh-1") } - sctx.options |= OpenSSL::SSL::OP_NO_COMPRESSION - ssls = OpenSSL::SSL::SSLServer.new(tcps, sctx) - ns = ssls.accept -@@ -397,7 +397,7 @@ def test_connect_accept_nonblock_no_exception - ctx2 = OpenSSL::SSL::SSLContext.new - ctx2.cert = @svr_cert - ctx2.key = @svr_key -- ctx2.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey_dh("dh1024") } -+ ctx2.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey("dh-1") } - - sock1, sock2 = tcp_pair - -@@ -445,7 +445,7 @@ def test_connect_accept_nonblock - ctx = OpenSSL::SSL::SSLContext.new - ctx.cert = @svr_cert - ctx.key = @svr_key -- ctx.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey_dh("dh1024") } -+ ctx.tmp_dh_callback = proc { OpenSSL::TestUtils::Fixtures.pkey("dh-1") } - - sock1, sock2 = tcp_pair - -diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb -index fb713813..79bf9bb7 100644 ---- a/test/openssl/test_pkey_dh.rb -+++ b/test/openssl/test_pkey_dh.rb -@@ -19,7 +19,7 @@ def test_new_break - end - - def test_DHparams -- dh1024 = Fixtures.pkey_dh("dh1024") -+ dh1024 = Fixtures.pkey("dh1024") - asn1 = OpenSSL::ASN1::Sequence([ - OpenSSL::ASN1::Integer(dh1024.p), - OpenSSL::ASN1::Integer(dh1024.g) -@@ -42,7 +42,7 @@ def test_DHparams - end - - def test_public_key -- dh = Fixtures.pkey_dh("dh1024") -+ dh = Fixtures.pkey("dh1024") - public_key = dh.public_key - assert_no_key(public_key) #implies public_key.public? is false! - assert_equal(dh.to_der, public_key.to_der) -@@ -50,14 +50,14 @@ def test_public_key - end - - def test_generate_key -- dh = Fixtures.pkey_dh("dh1024").public_key # creates a copy -+ dh = Fixtures.pkey("dh1024").public_key # creates a copy - assert_no_key(dh) - dh.generate_key! - assert_key(dh) - end - - def test_key_exchange -- dh = Fixtures.pkey_dh("dh1024") -+ dh = Fixtures.pkey("dh1024") - dh2 = dh.public_key - dh.generate_key! - dh2.generate_key! -diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb -index 408c7d82..2633f7c4 100644 ---- a/test/openssl/test_ssl.rb -+++ b/test/openssl/test_ssl.rb -@@ -712,7 +712,7 @@ def socketpair - - def test_tlsext_hostname - fooctx = OpenSSL::SSL::SSLContext.new -- fooctx.tmp_dh_callback = proc { Fixtures.pkey_dh("dh1024") } -+ fooctx.tmp_dh_callback = proc { Fixtures.pkey("dh-1") } - fooctx.cert = @cli_cert - fooctx.key = @cli_key - -@@ -764,7 +764,7 @@ def test_servername_cb_raises_an_exception_on_unknown_objects - ctx2 = OpenSSL::SSL::SSLContext.new - ctx2.cert = @svr_cert - ctx2.key = @svr_key -- ctx2.tmp_dh_callback = proc { Fixtures.pkey_dh("dh1024") } -+ ctx2.tmp_dh_callback = proc { Fixtures.pkey("dh-1") } - ctx2.servername_cb = lambda { |args| Object.new } - - sock1, sock2 = socketpair -@@ -1144,7 +1144,7 @@ def test_alpn_protocol_selection_cancel - ctx1 = OpenSSL::SSL::SSLContext.new - ctx1.cert = @svr_cert - ctx1.key = @svr_key -- ctx1.tmp_dh_callback = proc { Fixtures.pkey_dh("dh1024") } -+ ctx1.tmp_dh_callback = proc { Fixtures.pkey("dh-1") } - ctx1.alpn_select_cb = -> (protocols) { nil } - ssl1 = OpenSSL::SSL::SSLSocket.new(sock1, ctx1) - -@@ -1386,20 +1386,21 @@ def test_fallback_scsv - def test_dh_callback - pend "TLS 1.2 is not supported" unless tls12_supported? - -+ dh = Fixtures.pkey("dh-1") - called = false - ctx_proc = -> ctx { - ctx.ssl_version = :TLSv1_2 - ctx.ciphers = "DH:!NULL" - ctx.tmp_dh_callback = ->(*args) { - called = true -- Fixtures.pkey_dh("dh1024") -+ dh - } - } - start_server(ctx_proc: ctx_proc) do |port| - server_connect(port) { |ssl| - assert called, "dh callback should be called" - if ssl.respond_to?(:tmp_key) -- assert_equal Fixtures.pkey_dh("dh1024").to_der, ssl.tmp_key.to_der -+ assert_equal dh.to_der, ssl.tmp_key.to_der - end - } - end -diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb -index b7ddd891..fe626ade 100644 ---- a/test/openssl/utils.rb -+++ b/test/openssl/utils.rb -@@ -42,10 +42,8 @@ module Fixtures - - def pkey(name) - OpenSSL::PKey.read(read_file("pkey", name)) -- end -- -- def pkey_dh(name) -- # DH parameters can be read by OpenSSL::PKey.read atm -+ rescue OpenSSL::PKey::PKeyError -+ # TODO: DH parameters can be read by OpenSSL::PKey.read atm - OpenSSL::PKey::DH.new(read_file("pkey", name)) - end - -@@ -157,9 +155,9 @@ class OpenSSL::SSLTestCase < OpenSSL::TestCase - - def setup - super -- @ca_key = Fixtures.pkey("rsa2048") -- @svr_key = Fixtures.pkey("rsa1024") -- @cli_key = Fixtures.pkey("rsa2048") -+ @ca_key = Fixtures.pkey("rsa-1") -+ @svr_key = Fixtures.pkey("rsa-2") -+ @cli_key = Fixtures.pkey("rsa-3") - @ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA") - @svr = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=localhost") - @cli = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=localhost") -@@ -200,7 +198,7 @@ def start_server(verify_mode: OpenSSL::SSL::VERIFY_NONE, start_immediately: true - ctx.cert_store = store - ctx.cert = @svr_cert - ctx.key = @svr_key -- ctx.tmp_dh_callback = proc { Fixtures.pkey_dh("dh1024") } -+ ctx.tmp_dh_callback = proc { Fixtures.pkey("dh-1") } - ctx.verify_mode = verify_mode - ctx_proc.call(ctx) if ctx_proc - diff --git a/ruby.spec b/ruby.spec index 8a30f1a..2301f29 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 6 -%global teeny_version 3 +%global teeny_version 4 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 122 +%global release 123 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -33,10 +33,7 @@ %global rubygems_molinillo_version 0.5.7 %global bundler_version 1.17.2 -# FileUtils had not used to have separate versioning from Ruby :/ Lets use -# date of bundling for now. The gemified version of FileUtils has already proper -# version (if it's going to be bundled). -%global bundler_fileutils_version 0.20170425 +%global bundler_fileutils_version 1.1.0 %global bundler_molinillo_version 0.6.6 %global bundler_net_http_persistent_version 2.9.4 %global bundler_thor_version 0.20.0 @@ -52,7 +49,7 @@ %global power_assert_version 1.1.3 %global psych_version 3.1.0 %global rake_version 12.3.2 -%global rdoc_version 6.1.0 +%global rdoc_version 6.1.2 %global test_unit_version 3.2.9 %global xmlrpc_version 0.3.0 @@ -150,9 +147,6 @@ Patch12: rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.pat # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 Patch22: ruby-2.6.0-config-support-include-directive.patch -# Use larger keys to prevent test failures. -# https://github.com/ruby/openssl/pull/217 -Patch23: ruby-2.6.0-use-larger-keys-for-SSL-tests.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -545,7 +539,6 @@ rm -rf ext/fiddle/libffi* %patch11 -p1 %patch12 -p1 %patch22 -p1 -%patch23 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1182,6 +1175,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Fri Aug 30 2019 Pavel Valena - 2.6.4-123 +- Update to Ruby 2.6.4. + * Fri Jul 26 2019 Fedora Release Engineering - 2.6.3-122 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild diff --git a/sources b/sources index be8cf52..c111591 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.6.3.tar.xz) = 959a613f5cf5b3185a1d7a7ba0e1921166b3930f30461b391b1c9fcfe396f56dc3c736123dfc7b4e72c32a97dc5a1eb1fd7f09bcc3793a3c5526f6644ba421c8 +SHA512 (ruby-2.6.4.tar.xz) = 930a4162fdb008d2446247908c14269fd13db4dc80bd2bb201a65a69c03f5933f97b4c5079ccd2a12db4934ff97b2debaa10a6c6f5c3060e55873f4397747eaa From fe3a1dd60438983c96fc0f0d5fd41d39099f8275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 4 Sep 2019 11:46:44 +0200 Subject: [PATCH 328/530] Fix checksec 2.0+ compatibility. --- ruby.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 2301f29..26a9082 100644 --- a/ruby.spec +++ b/ruby.spec @@ -756,7 +756,7 @@ rm -f %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/.gitignore %check %if 0%{?with_hardening_test} # Check Ruby hardening. -checksec -f libruby.so.%{ruby_version} | \ +checksec --file=libruby.so.%{ruby_version} | \ grep "Full RELRO.*Canary found.*NX enabled.*DSO.*No RPATH.*No RUNPATH.*Yes.*\d*.*\d*.*libruby.so.%{ruby_version}" %endif @@ -1177,6 +1177,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog * Fri Aug 30 2019 Pavel Valena - 2.6.4-123 - Update to Ruby 2.6.4. +- Fix checksec 2.0+ compatibility. * Fri Jul 26 2019 Fedora Release Engineering - 2.6.3-122 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild From 04b63f48ea89ff10fcffafe2ff3815dfa0e16e99 Mon Sep 17 00:00:00 2001 From: Slava Kardakov Date: Tue, 8 Oct 2019 14:56:06 +0000 Subject: [PATCH 329/530] Update to Ruby 2.6.5. --- ruby.spec | 7 +++++-- sources | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 26a9082..c7b6006 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 6 -%global teeny_version 4 +%global teeny_version 5 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -21,7 +21,7 @@ %endif -%global release 123 +%global release 124 %{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1175,6 +1175,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %changelog +* Tue Oct 08 2019 Slava Kardakov - 2.6.5-124 +- Update to Ruby 2.6.5. + * Fri Aug 30 2019 Pavel Valena - 2.6.4-123 - Update to Ruby 2.6.4. - Fix checksec 2.0+ compatibility. diff --git a/sources b/sources index c111591..c788916 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.6.4.tar.xz) = 930a4162fdb008d2446247908c14269fd13db4dc80bd2bb201a65a69c03f5933f97b4c5079ccd2a12db4934ff97b2debaa10a6c6f5c3060e55873f4397747eaa +SHA512 (ruby-2.6.5.tar.xz) = e8ae3b5d4d23a93d0ef6057235ad0e573665a8b4b6544e1c70b4cce9c4d2fb9094e5c8fe8a9ab7b9996efe3ada603f9b4ef1fd08fb5a83253c1ae2b5e3f202db From 3696d7be3746d3798fbeedd430c52ea6b5bfc6d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 15 Jan 2020 16:26:13 +0100 Subject: [PATCH 330/530] Upgrade to Ruby 2.7.0. This is SRPM import. The evolution of this commit is preserved in private-ruby-2.7 branch. --- abrt_prelude.rb | 8 - macros.rubygems | 10 - ruby-1.9.3-mkmf-verbose.patch | 2 +- ...-additional-preludes-by-configuratio.patch | 58 ----- ...0-Enable-configuration-of-archlibdir.patch | 6 +- ...ed-paths-when-empty-version-string-i.patch | 4 +- ruby-2.1.0-always-use-i386.patch | 4 +- ruby-2.1.0-custom-rubygems-location.patch | 10 +- ...2.3-Generate-preludes-using-miniruby.patch | 28 -- ruby-2.3.0-ruby_version.patch | 60 ++--- ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch | 30 ++- ruby-2.7.0-Initialize-ABRT-hook.patch | 77 ++++++ ruby-2.7.0-Remove-RubyGems-dependency.patch | 32 +++ ruby.spec | 244 +++++++++++------- ...when-its-failed-to-load-rdoc-library.patch | 24 -- ...nd-introdcue-the-C-flag-to-gem-build.patch | 88 ------- sources | 2 +- 17 files changed, 322 insertions(+), 365 deletions(-) delete mode 100644 abrt_prelude.rb delete mode 100644 ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch delete mode 100644 ruby-2.2.3-Generate-preludes-using-miniruby.patch create mode 100644 ruby-2.7.0-Initialize-ABRT-hook.patch create mode 100644 ruby-2.7.0-Remove-RubyGems-dependency.patch delete mode 100644 rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch delete mode 100644 rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-gem-build.patch diff --git a/abrt_prelude.rb b/abrt_prelude.rb deleted file mode 100644 index 587c6a6..0000000 --- a/abrt_prelude.rb +++ /dev/null @@ -1,8 +0,0 @@ -if defined?(Gem) - require 'rubygems.rb' - - begin - require 'abrt' - rescue LoadError - end -end diff --git a/macros.rubygems b/macros.rubygems index 2552780..b55a402 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -32,16 +32,6 @@ gem install \\\ %{nil} -# For rubygems packages we want to filter out any provides caused by private -# libs in %%{gem_archdir}. -# -# Note that this must be invoked in the spec file, preferably as -# "%{?rubygems_default_filter}", before any %description block. -%rubygems_default_filter %{expand: \ -%global __provides_exclude_from %{?__provides_exclude_from:%{__provides_exclude_from}|}^%{gem_extdir_mri}/.*\\\\.so$ \ -} - - # The 'read' command in %%gemspec_* macros is not essential, but it is usefull # to make the sript appear in build log. diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index dc8e9da..b9c2c6f 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,7 +11,7 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1911,7 +1911,7 @@ def configuration(srcdir) +@@ -1930,7 +1930,7 @@ def configuration(srcdir) SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch deleted file mode 100644 index 0770723..0000000 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 996012f6abe0ce4d68a2de9f249935c6d5b467bc Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 4 Oct 2013 22:13:11 +0200 -Subject: [PATCH] Allow to specify addition preludes by configuration option. - ---- - Makefile.in | 2 ++ - common.mk | 2 +- - configure.ac | 7 +++++++ - 3 files changed, 10 insertions(+), 1 deletion(-) - -diff --git a/Makefile.in b/Makefile.in -index 7e8ed82..7916993 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -154,6 +154,8 @@ BOOTSTRAPRUBY = @BOOTSTRAPRUBY@ - COROUTINE_H = @X_FIBER_COROUTINE_H@ - COROUTINE_OBJ = $(COROUTINE_H:.h=.@OBJEXT@) - -+OPTIONAL_PRELUDES = @OPTIONAL_PRELUDES@ -+ - #### End of system configuration section. #### - - MAJOR= @MAJOR@ -diff --git a/common.mk b/common.mk -index 5cfbc3d..3f0a82e 100644 ---- a/common.mk -+++ b/common.mk -@@ -156,7 +156,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS) - GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) - - DEFAULT_PRELUDES = $(GEM_PRELUDE) --PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(DEFAULT_PRELUDES) -+PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(DEFAULT_PRELUDES) $(OPTIONAL_PRELUDES) - GEM_PRELUDE = $(srcdir)/gem_prelude.rb - PRELUDES = {$(srcdir)}prelude.c {$(srcdir)}miniprelude.c - GOLFPRELUDES = {$(srcdir)}golf_prelude.c -diff --git a/configure.ac b/configure.ac -index 028ef7ca3e..cdeff87871 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -3855,6 +3855,13 @@ AC_SUBST(rubyarchhdrdir)dnl - AC_SUBST(sitearchhdrdir)dnl - AC_SUBST(vendorarchhdrdir)dnl - -+AC_ARG_WITH(prelude, -+ AS_HELP_STRING([--with-prelude=FILE-LIST], [specify additional preludes separated by space]), -+ [prelude=$withval]) -+if test "$prelude" != ""; then -+ AC_SUBST(OPTIONAL_PRELUDES, $prelude) -+fi -+ - AC_ARG_WITH(mantype, - AS_HELP_STRING([--with-mantype=TYPE], [specify man page type; TYPE is one of man and doc]), - [ --- -1.8.3.1 - diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 116bb66..6352db3 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -8,10 +8,10 @@ Subject: [PATCH] Allow to configure libruby.so placement. 1 file changed, 5 insertions(+) diff --git a/configure.ac b/configure.ac -index 11fc237552..b77e88fc37 100644 +index d261ea57b5..3c13076b82 100644 --- a/configure.ac +++ b/configure.ac -@@ -3085,6 +3085,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3102,6 +3102,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' @@ -24,5 +24,5 @@ index 11fc237552..b77e88fc37 100644 archincludedir='${includedir}/${arch}' sitearchincludedir='${includedir}/${sitearch}' -- -1.8.3.1 +2.22.0 diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index bfb197f..d48f74e 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -11,10 +11,10 @@ Subject: [PATCH] Prevent duplicated paths when empty version string is 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac -index 999e2d6d5d..11fc237552 100644 +index c42436c23d..d261ea57b5 100644 --- a/configure.ac +++ b/configure.ac -@@ -3710,7 +3710,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -3740,7 +3740,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index d63752a..d156a73 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -8,10 +8,10 @@ Subject: [PATCH] Always use i386. 1 file changed, 2 insertions(+) diff --git a/configure.ac b/configure.ac -index b77e88fc37..6bba453e3c 100644 +index 3c13076b82..93af30321d 100644 --- a/configure.ac +++ b/configure.ac -@@ -3774,6 +3774,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3804,6 +3804,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index c4893da..14e20ec 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -12,10 +12,10 @@ Subject: [PATCH] Allow to install RubyGems into custom location, outside of 4 files changed, 22 insertions(+) diff --git a/configure.ac b/configure.ac -index 6bba453e3c..028ef7ca3e 100644 +index 93af30321d..bc13397e0e 100644 --- a/configure.ac +++ b/configure.ac -@@ -3746,6 +3746,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -3776,6 +3776,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 6bba453e3c..028ef7ca3e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -3770,6 +3774,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3800,6 +3804,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -67,7 +67,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index b47b6e1..0b99408 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -334,6 +334,7 @@ def CONFIG.[](name, mandatory = false) +@@ -338,6 +338,7 @@ def CONFIG.[](name, mandatory = false) sitearchlibdir = CONFIG["sitearchdir"] vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] @@ -75,7 +75,7 @@ index b47b6e1..0b99408 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -560,7 +561,16 @@ def stub +@@ -565,7 +566,16 @@ def stub install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] diff --git a/ruby-2.2.3-Generate-preludes-using-miniruby.patch b/ruby-2.2.3-Generate-preludes-using-miniruby.patch deleted file mode 100644 index 7118a32..0000000 --- a/ruby-2.2.3-Generate-preludes-using-miniruby.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 07eb5f5e775dec01a92a8b13910eaced9e8ee0cd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Tue, 2 Dec 2014 10:56:58 +0100 -Subject: [PATCH] Generate preludes using miniruby. - ---- - common.mk | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/common.mk b/common.mk -index 168dc52..20c218a 100644 ---- a/common.mk -+++ b/common.mk -@@ -1052,9 +1052,9 @@ $(MINIPRELUDE_C): $(COMPILE_PRELUDE) - $(srcdir)/template/prelude.c.tmpl - - $(PRELUDE_C): $(COMPILE_PRELUDE) \ -- $(PRELUDE_SCRIPTS) -+ $(PRELUDE_SCRIPTS) $(PREP) - $(ECHO) generating $@ -- $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \ -+ $(Q) $(MINIRUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \ - $(srcdir)/template/prelude.c.tmpl $(PRELUDE_SCRIPTS) - - $(GOLF_PRELUDE_C): $(COMPILE_PRELUDE) {$(srcdir)}golf_prelude.rb --- -2.6.3 - diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index a74fb74..11f73f3 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -17,10 +17,10 @@ string. 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/configure.ac b/configure.ac -index 8ea969412f..a00f2b6776 100644 +index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -3661,9 +3661,6 @@ AS_CASE(["$target_os"], +@@ -3691,9 +3691,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 8ea969412f..a00f2b6776 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -3686,56 +3683,62 @@ AC_ARG_WITH(ridir, +@@ -3716,56 +3713,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 8ea969412f..a00f2b6776 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -3752,6 +3755,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -3782,6 +3785,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -171,7 +171,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index d4c110e..d39c9a6 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -424,7 +424,7 @@ def CONFIG.[](name, mandatory = false) +@@ -428,7 +428,7 @@ def CONFIG.[](name, mandatory = false) install?(:doc, :rdoc) do if $rdocdir @@ -181,48 +181,40 @@ index d4c110e..d39c9a6 100755 install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode) end -- -2.1.0 +2.23.0 -From f8d136f9a46d1fe87eba622ab9665935d05e981b Mon Sep 17 00:00:00 2001 +From 9f0ec0233f618cbb862629816b22491c3df79578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 31 Mar 2015 16:37:44 +0200 Subject: [PATCH 3/4] Add ruby_version_dir_name support for RubyGems. --- - lib/rubygems/defaults.rb | 11 ++++++----- - test/rubygems/test_gem.rb | 5 +++-- - 2 files changed, 9 insertions(+), 7 deletions(-) + lib/rubygems/defaults.rb | 9 +++++---- + test/rubygems/test_gem.rb | 5 +++-- + 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb -index 55ca080..75eea2b 100644 +index d4ff4a262c..3f9a5bf590 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -32,20 +32,20 @@ def self.default_dir +@@ -32,13 +32,13 @@ def self.default_dir [ File.dirname(RbConfig::CONFIG['sitedir']), 'Gems', - RbConfig::CONFIG['ruby_version'] + RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] ] - elsif RbConfig::CONFIG['rubylibprefix'] + else [ RbConfig::CONFIG['rubylibprefix'], 'gems', - RbConfig::CONFIG['ruby_version'] -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] - ] - else - [ - RbConfig::CONFIG['libdir'], - ruby_engine, - 'gems', -- RbConfig::CONFIG['ruby_version'] + RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] ] end -@@ -75,7 +75,8 @@ def self.default_rubygems_dirs +@@ -75,7 +75,8 @@ def self.default_specifications_dir def self.user_dir parts = [Gem.user_home, '.gem', ruby_engine] @@ -232,7 +224,7 @@ index 55ca080..75eea2b 100644 File.join parts end -@@ -172,7 +173,7 @@ def self.vendor_dir # :nodoc: +@@ -158,7 +159,7 @@ def self.vendor_dir # :nodoc: return nil unless RbConfig::CONFIG.key? 'vendordir' File.join RbConfig::CONFIG['vendordir'], 'gems', @@ -242,10 +234,10 @@ index 55ca080..75eea2b 100644 ## diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb -index 0428bea..b6e090e 100644 +index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1288,7 +1288,8 @@ def test_self_use_paths +@@ -1353,7 +1353,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -255,15 +247,15 @@ index 0428bea..b6e090e 100644 assert_equal File.join(parts), Gem.user_dir end -@@ -1365,7 +1366,7 @@ def test_self_gzip - def test_self_vendor_dir - expected = - File.join RbConfig::CONFIG['vendordir'], 'gems', -- RbConfig::CONFIG['ruby_version'] -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] +@@ -1429,7 +1430,7 @@ def test_self_vendor_dir + vendordir(File.join(@tempdir, 'vendor')) do + expected = + File.join RbConfig::CONFIG['vendordir'], 'gems', +- RbConfig::CONFIG['ruby_version'] ++ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] - assert_equal expected, Gem.vendor_dir - end + assert_equal expected, Gem.vendor_dir + end -- 2.1.0 @@ -282,7 +274,7 @@ diff --git a/configure.ac b/configure.ac index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -101,7 +101,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -98,7 +98,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) diff --git a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch index 1e6f83f..4d81a84 100644 --- a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +++ b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch @@ -8,14 +8,14 @@ on Red Hat platforms. This workaround rhbz#1361037 --- - test/fiddle/helper.rb | 89 ------------------------------------------- - 1 file changed, 89 deletions(-) + test/fiddle/helper.rb | 105 ------------------------------------------ + 1 file changed, 105 deletions(-) diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb index 1da3d93..65148a1 100644 --- a/test/fiddle/helper.rb +++ b/test/fiddle/helper.rb -@@ -6,95 +6,6 @@ +@@ -6,111 +6,6 @@ libc_so = libm_so = nil @@ -23,12 +23,28 @@ index 1da3d93..65148a1 100644 -when /cygwin/ - libc_so = "cygwin1.dll" - libm_so = "cygwin1.dll" +-when /android/ +- libdir = '/system/lib' +- if [0].pack('L!').size == 8 +- libdir = '/system/lib64' +- end +- libc_so = File.join(libdir, "libc.so") +- libm_so = File.join(libdir, "libm.so") -when /linux/ - libdir = '/lib' -- case [0].pack('L!').size +- case RbConfig::SIZEOF['void*'] - when 4 - # 32-bit ruby -- libdir = '/lib32' if File.directory? '/lib32' +- case RUBY_PLATFORM +- when /armv\w+-linux/ +- # In the ARM 32-bit libc package such as libc6:armhf libc6:armel, +- # libc.so and libm.so are installed to /lib/arm-linux-gnu*. +- # It's not installed to /lib32. +- dirs = Dir.glob('/lib/arm-linux-gnu*') +- libdir = dirs[0] if dirs && File.directory?(dirs[0]) +- else +- libdir = '/lib32' if File.directory? '/lib32' +- end - when 8 - # 64-bit ruby - libdir = '/lib64' if File.directory? '/lib64' @@ -59,7 +75,7 @@ index 1da3d93..65148a1 100644 - libm_so = "/usr/lib/libm.so" -when /solaris/ - libdir = '/lib' -- case [0].pack('L!').size +- case RbConfig::SIZEOF['void*'] - when 4 - # 32-bit ruby - libdir = '/lib' if File.directory? '/lib' @@ -110,7 +126,7 @@ index 1da3d93..65148a1 100644 - if !libc_so || !libm_so ruby = EnvUtil.rubybin - ldd = `ldd #{ruby}` + # When the ruby binary is 32-bit and the host is 64-bit, -- 2.9.2 diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch new file mode 100644 index 0000000..58c92cf --- /dev/null +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -0,0 +1,77 @@ +From eca084e4079c77c061045df9c21b219175b05228 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 6 Jan 2020 13:56:04 +0100 +Subject: [PATCH] Initialize ABRT hook. + +The ABRT hook used to be initialized by preludes via patches [[1], [2]]. +Unfortunately, due to [[3]] and especially since [[4]], this would +require boostrapping [[5]]. + +To keep the things simple for now, load the ABRT hook via C. + +[1]: https://bugs.ruby-lang.org/issues/8566 +[2]: https://bugs.ruby-lang.org/issues/15306 +[3]: https://bugs.ruby-lang.org/issues/16254 +[4]: https://github.com/ruby/ruby/pull/2735 +[5]: https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ +--- + abrt.c | 12 ++++++++++++++ + common.mk | 3 ++- + ruby.c | 4 ++++ + 3 files changed, 18 insertions(+), 1 deletion(-) + create mode 100644 abrt.c + +diff --git a/abrt.c b/abrt.c +new file mode 100644 +index 0000000000..74b0bd5c0f +--- /dev/null ++++ b/abrt.c +@@ -0,0 +1,12 @@ ++#include "internal.h" ++ ++void ++Init_abrt(void) ++{ ++ rb_eval_string( ++ " begin\n" ++ " require 'abrt'\n" ++ " rescue LoadError\n" ++ " end\n" ++ ); ++} +diff --git a/common.mk b/common.mk +index b2e5b2b6d0..f39f81da5c 100644 +--- a/common.mk ++++ b/common.mk +@@ -81,7 +81,8 @@ ENC_MK = enc.mk + MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \ + RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(mflags) + +-COMMONOBJS = array.$(OBJEXT) \ ++COMMONOBJS = abrt.$(OBJEXT) \ ++ array.$(OBJEXT) \ + ast.$(OBJEXT) \ + bignum.$(OBJEXT) \ + class.$(OBJEXT) \ +diff --git a/ruby.c b/ruby.c +index 60c57d6259..1eec16f2c8 100644 +--- a/ruby.c ++++ b/ruby.c +@@ -1439,10 +1439,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) + + void Init_builtin_features(void); + ++/* abrt.c */ ++void Init_abrt(void); ++ + static void + ruby_init_prelude(void) + { + Init_builtin_features(); ++ Init_abrt(); + rb_const_remove(rb_cObject, rb_intern_const("TMP_RUBY_PREFIX")); + } + +-- +2.24.1 + diff --git a/ruby-2.7.0-Remove-RubyGems-dependency.patch b/ruby-2.7.0-Remove-RubyGems-dependency.patch new file mode 100644 index 0000000..4205217 --- /dev/null +++ b/ruby-2.7.0-Remove-RubyGems-dependency.patch @@ -0,0 +1,32 @@ +From 6532dbecf36d1f24dab1f2143afd171e0b7699eb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Wed, 4 Sep 2019 15:07:07 +0200 +Subject: [PATCH] Remove RubyGems dependency. + +Since `Process::RLIMIT_NOFILE` is platform specific, better to use Ruby +introspection than detecting platform. +--- + .../vendor/net-http-persistent/lib/net/http/persistent.rb | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +index a54be2a..06739f1 100644 +--- a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb ++++ b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +@@ -202,10 +202,10 @@ class Bundler::Persistent::Net::HTTP::Persistent + ## + # The default connection pool size is 1/4 the allowed open files. + +- if Gem.win_platform? then +- DEFAULT_POOL_SIZE = 256 +- else ++ if Process.const_defined? :RLIMIT_NOFILE + DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4 ++ else ++ DEFAULT_POOL_SIZE = 256 + end + + ## +-- +2.23.0 + diff --git a/ruby.spec b/ruby.spec index c7b6006..3e8e718 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,56 +1,59 @@ %global major_version 2 -%global minor_version 6 -%global teeny_version 5 +%global minor_version 7 +%global teeny_version 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. -#%%global milestone rc2 +#%%global milestone rc1 # Keep the revision enabled for pre-releases from SVN. -#%%global revision 66252 +#%%global revision af11efd377 %global ruby_archive %{name}-%{ruby_version} # If revision and milestone are removed/commented out, the official release build is expected. %if 0%{?milestone:1}%{?revision:1} != 0 -%global development_release %{?milestone}%{?!milestone:%{?revision:r%{revision}}} -%global ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision:r%{revision}}} +%global ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision}} +%define ruby_archive_timestamp %(stat --printf='@%Y' %{ruby_archive}.tar.xz | date -f - +"%Y%m%d") +%define development_release %{?milestone}%{?!milestone:%{?revision:%{ruby_archive_timestamp}git%{revision}}} %endif -%global release 124 -%{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} +%global release 125 +%{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the # RubyGems should be share by all Ruby implementations. %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.0.3 +%global rubygems_version 3.1.2 %global rubygems_molinillo_version 0.5.7 -%global bundler_version 1.17.2 -%global bundler_fileutils_version 1.1.0 +%global bundler_version 2.1.2 +%global bundler_connection_pool_version 2.2.2 +%global bundler_fileutils_version 1.3.0 %global bundler_molinillo_version 0.6.6 -%global bundler_net_http_persistent_version 2.9.4 -%global bundler_thor_version 0.20.0 +%global bundler_net_http_persistent_version 3.1.0 +%global bundler_thor_version 1.0.0 -%global bigdecimal_version 1.4.1 -%global did_you_mean_version 1.3.0 -%global io_console_version 0.4.7 -%global irb_version 1.0.0 -%global json_version 2.1.0 -%global minitest_version 5.11.3 +%global bigdecimal_version 2.0.0 +%global did_you_mean_version 1.4.0 +%global io_console_version 0.5.3 +%global irb_version 1.2.1 +%global json_version 2.3.0 +%global minitest_version 5.13.0 %global net_telnet_version 0.2.0 %global openssl_version 2.1.2 -%global power_assert_version 1.1.3 +%global power_assert_version 1.1.5 %global psych_version 3.1.0 -%global rake_version 12.3.2 -%global rdoc_version 6.1.2 -%global test_unit_version 3.2.9 +%global racc_version 1.4.16 +%global rake_version 13.0.1 +%global rdoc_version 6.2.1 +%global test_unit_version 3.3.4 %global xmlrpc_version 0.3.0 # Might not be needed in the future, if we are lucky enough. @@ -92,7 +95,6 @@ Source2: libruby.stp Source3: ruby-exercise.stp Source4: macros.ruby Source5: macros.rubygems -Source6: abrt_prelude.rb # RPM dependency generators. Source8: rubygems.attr Source9: rubygems.req @@ -125,24 +127,22 @@ Patch3: ruby-2.1.0-always-use-i386.patch Patch4: ruby-2.1.0-custom-rubygems-location.patch # Make mkmf verbose by default Patch5: ruby-1.9.3-mkmf-verbose.patch -# Adds support for '--with-prelude' configuration option. This allows to built -# in support for ABRT. -# http://bugs.ruby-lang.org/issues/8566 -Patch6: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch -# Use miniruby to regenerate prelude.c. +# The ABRT hook used to be initialized by preludes via following patches: +# https://bugs.ruby-lang.org/issues/8566 # https://bugs.ruby-lang.org/issues/15306 -Patch7: ruby-2.2.3-Generate-preludes-using-miniruby.patch +# Unfortunately, due to https://bugs.ruby-lang.org/issues/16254 +# and especially since https://github.com/ruby/ruby/pull/2735 +# this would require boostrapping: +# https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ +# For now, load the ABRT hook via this simple patch: +Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch # Workaround "an invalid stdio handle" error on PPC, due to recently introduced # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch -# `gem build ../foo.gemspec` changes directory, which does not play well with -# gems unpacked by setup macro. -# https://github.com/rubygems/rubygems/issues/2587 -Patch11: rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-gem-build.patch -# This allows to loosen the RDoc dependency again. -# https://github.com/rubygems/rubygems/pull/2604 -Patch12: rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch +# Revert commit which breaks bundled net-http-persistent version check. +# https://github.com/drbrain/net-http-persistent/pull/109 +Patch10: ruby-2.7.0-Remove-RubyGems-dependency.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 @@ -226,6 +226,7 @@ Summary: The Ruby standard for packaging ruby libraries Version: %{rubygems_version} License: Ruby or MIT Requires: ruby(release) +Recommends: rubygem(bundler) >= %{bundler_version} Recommends: rubygem(rdoc) >= %{rdoc_version} Recommends: rubygem(io-console) >= %{io_console_version} Requires: rubygem(openssl) >= %{openssl_version} @@ -509,6 +510,7 @@ Requires: ruby(rubygems) >= %{rubygems_version} Requires: rubygem(io-console) Provides: rubygem(bundler) = %{version}-%{release} # https://github.com/bundler/bundler/issues/3647 +Provides: bundled(connection_pool) = %{bundler_connection_pool_version} Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} Provides: bundled(rubygem-molinillo) = %{bundler_molinillo_version} Provides: bundled(rubygem-net-http-persisntent) = %{bundler_net_http_persistent_version} @@ -520,6 +522,19 @@ Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably. +%package -n rubygem-racc +Summary: Racc is a LALR(1) parser generator +Version: %{racc_version} +License: MIT +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(racc) = %{version}-%{release} + +%description -n rubygem-racc +Racc is a LALR(1) parser generator. It is written in Ruby itself, and +generates Ruby program. + + %prep %setup -q -n %{ruby_archive} @@ -534,20 +549,13 @@ rm -rf ext/fiddle/libffi* %patch4 -p1 %patch5 -p1 %patch6 -p1 -%patch7 -p1 %patch9 -p1 -%patch11 -p1 -%patch12 -p1 +%patch10 -p1 %patch22 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . -# Make abrt_prelude.rb available for compilation process. The prelude must be -# available together with Ruby's source due to -# https://github.com/ruby/ruby/blob/trunk/tool/compile_prelude.rb#L26 -cp -a %{SOURCE6} . - %build autoconf @@ -570,7 +578,6 @@ autoconf --enable-shared \ --with-ruby-version='' \ --enable-multiarch \ - --with-prelude=./abrt_prelude.rb \ # Q= makes the build output more verbose and allows to check Fedora # compiler options. @@ -583,7 +590,7 @@ make install DESTDIR=%{buildroot} # Rename ruby/config.h to ruby/config-.h to avoid file conflicts on # multilib systems and install config.h wrapper %multilib_fix_c_header --file %{_includedir}/%{name}/config.h -# TODO: The correct patch should be %%{_includedir}/%%{name}/rb_mjit_min_header-%{ruby_version}.h +# TODO: The correct patch should be %%{_includedir}/%%{name}/rb_mjit_min_header-%%{ruby_version}.h # https://bugs.ruby-lang.org/issues/15425 %multilib_fix_c_header --file %{_includedir}/rb_mjit_min_header-%{ruby_version}.h @@ -602,13 +609,9 @@ for cert in \ do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert rm -r $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) - rm %{buildroot}%{ruby_libdir}/bundler/ssl_certs/$cert - rm -r $(dirname %{buildroot}%{ruby_libdir}/bundler/ssl_certs/$cert) done # Ensure there is not forgotten any certificate. test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" -test "$(ls -A %{buildroot}%{ruby_libdir}/bundler/ssl_certs/ 2>/dev/null)" \ - = "certificate_manager.rb" # Move macros file into proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. @@ -660,11 +663,9 @@ mkdir -p %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} -mv %{buildroot}%{ruby_libarchdir}/bigdecimal/util.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal mv %{buildroot}%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so -ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal/util.so %{buildroot}%{ruby_libarchdir}/bigdecimal/util.so # TODO: Put help files into proper location. # https://bugs.ruby-lang.org/issues/15359 @@ -673,6 +674,11 @@ mv %{buildroot}%{ruby_libdir}/bundler.rb %{buildroot}%{gem_dir}/gems/bundler-%{b mv %{buildroot}%{ruby_libdir}/bundler %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib mv %{buildroot}%{gem_dir}/specifications/default/bundler-%{bundler_version}.gemspec %{buildroot}%{gem_dir}/specifications +mkdir -p %{buildroot}%{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/lib +mv %{buildroot}%{ruby_libdir}/did_you_mean.rb %{buildroot}%{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/lib +mv %{buildroot}%{ruby_libdir}/did_you_mean %{buildroot}%{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/lib +mv %{buildroot}%{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec %{buildroot}%{gem_dir}/specifications + mkdir -p %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib @@ -713,6 +719,18 @@ ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_libdir ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_libdir}/psych.rb ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby_libarchdir}/psych.so +# These have wrong shebangs. Exclude them for now and let's see what upstream +# thinks about them. +# https://bugs.ruby-lang.org/issues/15982 +rm %{buildroot}%{_bindir}/{racc2y,y2racc} +rm %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} +mkdir -p %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version} +mv %{buildroot}%{ruby_libdir}/racc* %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib +mv %{buildroot}%{ruby_libarchdir}/racc/ %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version}/ +touch %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version}/gem.build_complete +mv %{buildroot}%{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{buildroot}%{gem_dir}/specifications + # Move the binary extensions into proper place (if no gem has binary extension, # the extensions directory might be empty). find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{ruby_version}/* -maxdepth 0 \ @@ -774,9 +792,19 @@ checksec --file=libruby.so.%{ruby_version} | \ # Check Bundler bundled dependencies versions. +# connection_pool. +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ + module Bundler; end; \ + require 'bundler/vendor/connection_pool/lib/connection_pool/version'; \ + puts Bundler::ConnectionPool::VERSION\\\"\" | tail -1`" \ + == '%{bundler_connection_pool_version}' ] + # FileUtils. -# TODO: There is no version in bundled FileUtils yet. -#%%{global bundler_fileutils_version} +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ + module Bundler; end; \ + require 'bundler/vendor/fileutils/lib/fileutils/version'; \ + puts Bundler::FileUtils::VERSION\\\"\" | tail -1`" \ + == '%{bundler_fileutils_version}' ] # Molinillo. [ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ @@ -819,16 +847,17 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} -# SIGSEV handler does not provide correct output on AArch64. -# https://bugs.ruby-lang.org/issues/13758 -%ifarch aarch64 -DISABLE_TESTS="$DISABLE_TESTS -n !/test_segv_\(setproctitle\|test\|loaded_features\)/" -%endif +# Disable "File.utime allows Time instances in the far future to set +# mtime and atime". +# https://bugs.ruby-lang.org/issues/16410 +MSPECOPTS="$MSPECOPTS -P 'File.utime allows Time instances in the far future to set mtime and atime'" -# Disable failing TestResolvMDNS#test_mdns_each_address test, -# which fails on Koji. -# https://bugs.ruby-lang.org/issues/14175 -sed -i '/def test_mdns_each_address$/,/^ end$/ s/^/#/' test/resolv/test_mdns.rb +# Increase timeout for TestBugReporter#test_bug_reporter_add test, which fails +# quite often. +# https://bugs.ruby-lang.org/issues/16492 +%ifarch s390x +sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bug_reporter.rb +%endif make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" @@ -878,25 +907,31 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %exclude %{ruby_libdir}/json.rb %exclude %{ruby_libdir}/openssl.rb %exclude %{ruby_libdir}/psych.rb +%{ruby_libdir}/benchmark %{ruby_libdir}/cgi %{ruby_libdir}/csv +%{ruby_libdir}/delegate %{ruby_libdir}/digest %{ruby_libdir}/drb -%{ruby_libdir}/e2mmap %{ruby_libdir}/fiddle -%{ruby_libdir}/fileutils %{ruby_libdir}/forwardable +%{ruby_libdir}/getoptlong +%{ruby_libdir}/logger %{ruby_libdir}/matrix %{ruby_libdir}/net +%{ruby_libdir}/observer +%{ruby_libdir}/open3 %{ruby_libdir}/optparse -%{ruby_libdir}/racc +%{ruby_libdir}/ostruct +%{ruby_libdir}/pstore +%{ruby_libdir}/reline %{ruby_libdir}/rexml %{ruby_libdir}/rinda %{ruby_libdir}/ripper %{ruby_libdir}/rss -%{ruby_libdir}/shell +%{ruby_libdir}/singleton %{ruby_libdir}/syslog -%{ruby_libdir}/thwait +%{ruby_libdir}/timeout %{ruby_libdir}/tracer %{ruby_libdir}/unicode_normalize %{ruby_libdir}/uri @@ -921,6 +956,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{ruby_libarchdir}/digest/sha2.so %dir %{ruby_libarchdir}/enc %{ruby_libarchdir}/enc/big5.so +%{ruby_libarchdir}/enc/cesu_8.so %{ruby_libarchdir}/enc/cp949.so %{ruby_libarchdir}/enc/emacs_mule.so %{ruby_libarchdir}/enc/encdb.so @@ -950,6 +986,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{ruby_libarchdir}/enc/shift_jis.so %dir %{ruby_libarchdir}/enc/trans %{ruby_libarchdir}/enc/trans/big5.so +%{ruby_libarchdir}/enc/trans/cesu_8.so %{ruby_libarchdir}/enc/trans/chinese.so %{ruby_libarchdir}/enc/trans/ebcdic.so %{ruby_libarchdir}/enc/trans/emoji.so @@ -988,12 +1025,11 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %dir %{ruby_libarchdir}/io %{ruby_libarchdir}/io/nonblock.so %{ruby_libarchdir}/io/wait.so +%{ruby_libarchdir}/monitor.so %{ruby_libarchdir}/nkf.so %{ruby_libarchdir}/objspace.so %{ruby_libarchdir}/pathname.so %{ruby_libarchdir}/pty.so -%dir %{ruby_libarchdir}/racc -%{ruby_libarchdir}/racc/cparse.so %dir %{ruby_libarchdir}/rbconfig %{ruby_libarchdir}/rbconfig.rb %{ruby_libarchdir}/rbconfig/sizeof.so @@ -1030,35 +1066,45 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %exclude %{gem_dir}/cache/* # TODO: Gemify these libraries -%{gem_dir}/specifications/default/cmath-1.0.0.gemspec -%{gem_dir}/specifications/default/csv-3.0.9.gemspec -%{gem_dir}/specifications/default/date-2.0.0.gemspec -%{gem_dir}/specifications/default/dbm-1.0.0.gemspec -%{gem_dir}/specifications/default/e2mmap-0.1.0.gemspec -%{gem_dir}/specifications/default/etc-1.0.1.gemspec +%{gem_dir}/specifications/default/benchmark-0.1.0.gemspec +%{gem_dir}/specifications/default/cgi-0.1.0.gemspec +%{gem_dir}/specifications/default/csv-3.1.2.gemspec +%{gem_dir}/specifications/default/date-3.0.0.gemspec +%{gem_dir}/specifications/default/dbm-1.1.0.gemspec +%{gem_dir}/specifications/default/delegate-0.1.0.gemspec +%{gem_dir}/specifications/default/etc-1.1.0.gemspec %{gem_dir}/specifications/default/fcntl-1.0.0.gemspec %{gem_dir}/specifications/default/fiddle-1.0.0.gemspec -%{gem_dir}/specifications/default/fileutils-1.1.0.gemspec -%{gem_dir}/specifications/default/forwardable-1.2.0.gemspec -%{gem_dir}/specifications/default/gdbm-2.0.0.gemspec +%{gem_dir}/specifications/default/fileutils-1.4.1.gemspec +%{gem_dir}/specifications/default/forwardable-1.3.1.gemspec +%{gem_dir}/specifications/default/gdbm-2.1.0.gemspec +%{gem_dir}/specifications/default/getoptlong-0.1.0.gemspec %{gem_dir}/specifications/default/ipaddr-1.2.2.gemspec -%{gem_dir}/specifications/default/logger-1.3.0.gemspec -%{gem_dir}/specifications/default/matrix-0.1.0.gemspec +%{gem_dir}/specifications/default/logger-1.4.2.gemspec +%{gem_dir}/specifications/default/matrix-0.2.0.gemspec %{gem_dir}/specifications/default/mutex_m-0.1.0.gemspec -%{gem_dir}/specifications/default/ostruct-0.1.0.gemspec -%{gem_dir}/specifications/default/prime-0.1.0.gemspec -%{gem_dir}/specifications/default/rexml-3.1.9.gemspec -%{gem_dir}/specifications/default/rss-0.2.7.gemspec -%{gem_dir}/specifications/default/scanf-1.0.0.gemspec +%{gem_dir}/specifications/default/net-pop-0.1.0.gemspec +%{gem_dir}/specifications/default/net-smtp-0.1.0.gemspec +%{gem_dir}/specifications/default/observer-0.1.0.gemspec +%{gem_dir}/specifications/default/open3-0.1.0.gemspec +%{gem_dir}/specifications/default/ostruct-0.2.0.gemspec +%{gem_dir}/specifications/default/prime-0.1.1.gemspec +%{gem_dir}/specifications/default/pstore-0.1.0.gemspec +%{gem_dir}/specifications/default/readline-0.0.2.gemspec +%{gem_dir}/specifications/default/readline-ext-0.1.0.gemspec +%{gem_dir}/specifications/default/reline-0.1.2.gemspec +%{gem_dir}/specifications/default/rexml-3.2.3.gemspec +%{gem_dir}/specifications/default/rss-0.2.8.gemspec %{gem_dir}/specifications/default/sdbm-1.0.0.gemspec -%{gem_dir}/specifications/default/shell-0.7.gemspec -%{gem_dir}/specifications/default/stringio-0.0.2.gemspec -%{gem_dir}/specifications/default/strscan-1.0.0.gemspec -%{gem_dir}/specifications/default/sync-0.5.0.gemspec -%{gem_dir}/specifications/default/thwait-0.1.0.gemspec +%{gem_dir}/specifications/default/singleton-0.1.0.gemspec +%{gem_dir}/specifications/default/stringio-0.1.0.gemspec +%{gem_dir}/specifications/default/strscan-1.0.3.gemspec +%{gem_dir}/specifications/default/timeout-0.1.0.gemspec %{gem_dir}/specifications/default/tracer-0.1.0.gemspec -%{gem_dir}/specifications/default/webrick-1.4.2.gemspec -%{gem_dir}/specifications/default/zlib-1.0.0.gemspec +%{gem_dir}/specifications/default/uri-0.10.0.gemspec +%{gem_dir}/specifications/default/webrick-1.6.0.gemspec +%{gem_dir}/specifications/default/yaml-0.1.0.gemspec +%{gem_dir}/specifications/default/zlib-1.1.0.gemspec %files -n rubygems-devel %{_rpmconfigdir}/macros.d/macros.rubygems @@ -1174,7 +1220,17 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man1/bundle*.1* %{_mandir}/man5/gemfile.5* +%files -n rubygem-racc +%{_bindir}/racc +%{_libdir}/gems/%{name}/racc-%{racc_version} +%{gem_dir}/gems/racc-%{racc_version} +%{gem_dir}/specifications/racc-%{racc_version}.gemspec + %changelog +* Tue Jan 07 2020 Vít Ondruch - 2.7.0-125 +- Upgrade to Ruby 2.7.0. +- Drop useless %%{rubygems_default_filter}. + * Tue Oct 08 2019 Slava Kardakov - 2.6.5-124 - Update to Ruby 2.6.5. diff --git a/rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch b/rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch deleted file mode 100644 index 690d245..0000000 --- a/rubygems-3.0.3-Avoid-rdoc-hook-when-its-failed-to-load-rdoc-library.patch +++ /dev/null @@ -1,24 +0,0 @@ -From c16675582a68800ef17b6056110e0a8bcdb38b55 Mon Sep 17 00:00:00 2001 -From: SHIBATA Hiroshi -Date: Tue, 22 Jan 2019 09:37:23 +0900 -Subject: [PATCH] Avoid rdoc hook when it's failed to load rdoc library. - - Fixed #2483 ---- - lib/rubygems/rdoc.rb | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/lib/rubygems/rdoc.rb b/lib/rubygems/rdoc.rb -index dfaf7c55bf..4e16fbb86f 100644 ---- a/lib/rubygems/rdoc.rb -+++ b/lib/rubygems/rdoc.rb -@@ -18,7 +18,7 @@ - module Gem - RDoc = ::RDoc::RubygemsHook - end -+ -+ Gem.done_installing(&Gem::RDoc.method(:generation_hook)) - rescue LoadError - end -- --Gem.done_installing(&Gem::RDoc.method(:generation_hook)) diff --git a/rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-gem-build.patch b/rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-gem-build.patch deleted file mode 100644 index fa4f0c3..0000000 --- a/rubygems-3.0.3-Restore-gem-build-behavior-and-introdcue-the-C-flag-to-gem-build.patch +++ /dev/null @@ -1,88 +0,0 @@ -From f4061357d812e9033f07ae3f8f44c4e26839f1e5 Mon Sep 17 00:00:00 2001 -From: bronzdoc -Date: Mon, 14 Jan 2019 09:46:29 -0600 -Subject: [PATCH] Restore gem build behavior and introdcue the "-C" flag to gem - build - ---- - lib/rubygems/commands/build_command.rb | 41 +++++++++++++------ - .../test_gem_commands_build_command.rb | 1 + - 2 files changed, 29 insertions(+), 13 deletions(-) - -diff --git a/lib/rubygems/commands/build_command.rb b/lib/rubygems/commands/build_command.rb -index e59471e976..761b80ee94 100644 ---- a/lib/rubygems/commands/build_command.rb -+++ b/lib/rubygems/commands/build_command.rb -@@ -18,6 +18,10 @@ def initialize - add_option '-o', '--output FILE', 'output gem with the given filename' do |value, options| - options[:output] = value - end -+ -+ add_option '-C PATH', '', 'Run as if gem build was started in instead of the current working directory.' do |value, options| -+ options[:build_path] = value -+ end - end - - def arguments # :nodoc: -@@ -60,25 +64,36 @@ def execute - end - - if File.exist? gemspec -- Dir.chdir(File.dirname(gemspec)) do -- spec = Gem::Specification.load File.basename(gemspec) -- -- if spec -- Gem::Package.build( -- spec, -- options[:force], -- options[:strict], -- options[:output] -- ) -- else -- alert_error "Error loading gemspec. Aborting." -- terminate_interaction 1 -+ spec = Gem::Specification.load(gemspec) -+ -+ if options[:build_path] -+ Dir.chdir(File.dirname(gemspec)) do -+ spec = Gem::Specification.load File.basename(gemspec) -+ build_package(spec) - end -+ else -+ build_package(spec) - end -+ - else - alert_error "Gemspec file not found: #{gemspec}" - terminate_interaction 1 - end - end - -+ private -+ -+ def build_package(spec) -+ if spec -+ Gem::Package.build( -+ spec, -+ options[:force], -+ options[:strict], -+ options[:output] -+ ) -+ else -+ alert_error "Error loading gemspec. Aborting." -+ terminate_interaction 1 -+ end -+ end - end -diff --git a/test/rubygems/test_gem_commands_build_command.rb b/test/rubygems/test_gem_commands_build_command.rb -index ac82a408c7..02d1b98e8f 100644 ---- a/test/rubygems/test_gem_commands_build_command.rb -+++ b/test/rubygems/test_gem_commands_build_command.rb -@@ -207,6 +207,7 @@ def test_execute_outside_dir - gs.write @gem.to_ruby - end - -+ @cmd.options[:build_path] = gemspec_dir - @cmd.options[:args] = [gemspec_file] - - use_ui @ui do diff --git a/sources b/sources index c788916..d32bf72 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.6.5.tar.xz) = e8ae3b5d4d23a93d0ef6057235ad0e573665a8b4b6544e1c70b4cce9c4d2fb9094e5c8fe8a9ab7b9996efe3ada603f9b4ef1fd08fb5a83253c1ae2b5e3f202db +SHA512 (ruby-2.7.0.tar.xz) = dd5690c631bf3a2b76cdc06902bcd76a89713a045e136debab9b8a81ff8c433bbb254aa09e4014ca1cf85a69ff4bcb13de11da5e40c224e7268be43ef2194af7 From 8454ff1601cdb7061baca37b267ba7247fb0bed2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 16 Jan 2020 10:34:34 +0100 Subject: [PATCH 331/530] The did_you_mean does not include its temporary directory anymore. --- ruby.spec | 3 --- 1 file changed, 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 3e8e718..4b07666 100644 --- a/ruby.spec +++ b/ruby.spec @@ -765,9 +765,6 @@ echo 'doc/pty' >> .ruby-doc.ja sed -i 's/^/%doc /' .ruby-doc.* sed -i 's/^/%lang(ja) /' .ruby-doc.ja -# https://github.com/yuki24/did_you_mean/issues/122 -rm -rf %{buildroot}%{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/tmp/ - # https://github.com/ruby/rake/issues/316 rm -f %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/.gitignore From bb318e296450ce0a11b1cdb62067c39369246786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 16 Jan 2020 10:36:22 +0100 Subject: [PATCH 332/530] .gitignore is not included in Rake anymore. --- ruby.spec | 3 --- 1 file changed, 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 4b07666..a1bec2d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -765,9 +765,6 @@ echo 'doc/pty' >> .ruby-doc.ja sed -i 's/^/%doc /' .ruby-doc.* sed -i 's/^/%lang(ja) /' .ruby-doc.ja -# https://github.com/ruby/rake/issues/316 -rm -f %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/.gitignore - %check %if 0%{?with_hardening_test} # Check Ruby hardening. From 197c02993b8f83267ea69eba951e8515a1cf38ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 16 Jan 2020 11:41:12 +0100 Subject: [PATCH 333/530] Remove useless .github directory from Rake. --- ruby.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.spec b/ruby.spec index a1bec2d..d7f2241 100644 --- a/ruby.spec +++ b/ruby.spec @@ -765,6 +765,10 @@ echo 'doc/pty' >> .ruby-doc.ja sed -i 's/^/%doc /' .ruby-doc.* sed -i 's/^/%lang(ja) /' .ruby-doc.ja +# Remove useless .github directory from Rake. +# https://github.com/ruby/rake/pull/333 +rm -rf %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/.github + %check %if 0%{?with_hardening_test} # Check Ruby hardening. From 345ce0e5b8a3a6d9c962807da12e80bdaee9fb90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 16 Jan 2020 10:40:01 +0100 Subject: [PATCH 334/530] Make rubygem(did_you_mean) hard dependency. --- ruby.spec | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index d7f2241..924bb2e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 125 +%global release 126 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -152,7 +152,9 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick Recommends: ruby(rubygems) >= %{rubygems_version} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} -Recommends: rubygem(did_you_mean) >= %{did_you_mean_version} +# Change this to requires, hopefully just as temporary measure. +# https://bugs.ruby-lang.org/issues/16431 +Requires: rubygem(did_you_mean) >= %{did_you_mean_version} Recommends: rubygem(openssl) >= %{openssl_version} BuildRequires: autoconf @@ -1225,6 +1227,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/racc-%{racc_version}.gemspec %changelog +* Thu Jan 16 2020 Vít Ondruch - 2.7.0-126 +- Make rubygem(did_you_mean) hard dependency. + * Tue Jan 07 2020 Vít Ondruch - 2.7.0-125 - Upgrade to Ruby 2.7.0. - Drop useless %%{rubygems_default_filter}. From 26cfdf277ec00ee0df58a333b3e64dbce6d8d47b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 27 Jan 2020 10:41:26 +0100 Subject: [PATCH 335/530] The json.gemspec now referes properly to the extensions. --- ruby.spec | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index 924bb2e..5154925 100644 --- a/ruby.spec +++ b/ruby.spec @@ -739,10 +739,6 @@ find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{ruby_version}/* -maxdep -exec mv '{}' %{buildroot}%{_libdir}/gems/%{name}/ \; \ || echo "No gem binary extensions to move." -# Adjust the gemspec files so that the gems will load properly -sed -i '/^end$/ i\ - s.extensions = ["json/ext/parser.so", "json/ext/generator.so"]' %{buildroot}%{gem_dir}/specifications/json-%{json_version}.gemspec - # Move man pages into proper location mv %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/doc/rake.1 %{buildroot}%{_mandir}/man1 From dde320d13d3b8b011dab30d9a75ac5951c1ce302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 27 Jan 2020 18:13:11 +0100 Subject: [PATCH 336/530] Remove useless rdoc directory from racc. --- ruby.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ruby.spec b/ruby.spec index 5154925..a033bed 100644 --- a/ruby.spec +++ b/ruby.spec @@ -726,6 +726,9 @@ ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby # https://bugs.ruby-lang.org/issues/15982 rm %{buildroot}%{_bindir}/{racc2y,y2racc} rm %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} +# The 'rdoc' directory is empty and useless ATM. +# https://bugs.ruby-lang.org/issues/16596 +rm -r %{buildroot}%{ruby_libdir}/racc/rdoc mkdir -p %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version} mv %{buildroot}%{ruby_libdir}/racc* %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib From 40610a988c4d1bdbd1bec08e7092fc84bf08507f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 28 Jan 2020 13:49:34 +0100 Subject: [PATCH 337/530] Provide StdLib links for Racc. --- ruby.spec | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index a033bed..9884b09 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 126 +%global release 127 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -735,6 +735,15 @@ mv %{buildroot}%{ruby_libdir}/racc* %{buildroot}%{gem_dir}/gems/racc-%{racc_vers mv %{buildroot}%{ruby_libarchdir}/racc/ %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version}/ touch %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version}/gem.build_complete mv %{buildroot}%{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{buildroot}%{gem_dir}/specifications +# This used to be directories when racc was integral part of StdLib => Keep +# them as directories and link everything in them to prevent directory => +# symlink conversion RPM issues. +mkdir -p %{buildroot}%{ruby_libdir}/racc +mkdir -p %{buildroot}%{ruby_libarchdir}/racc +find %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib/racc -maxdepth 1 -type f -exec \ + sh -c 'ln -s %{gem_dir}/gems/racc-%{racc_version}/lib/racc/`basename {}` %{buildroot}%{ruby_libdir}/racc' \; +ln -s %{gem_dir}/gems/racc-%{racc_version}/lib/racc.rb %{buildroot}%{ruby_libdir}/racc.rb +ln -s %{_libdir}/gems/%{name}/racc-%{racc_version}/racc/cparse.so %{buildroot}%{ruby_libarchdir}/racc/cparse.so # Move the binary extensions into proper place (if no gem has binary extension, # the extensions directory might be empty). @@ -906,6 +915,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %exclude %{ruby_libdir}/json.rb %exclude %{ruby_libdir}/openssl.rb %exclude %{ruby_libdir}/psych.rb +%exclude %{ruby_libdir}/racc.rb %{ruby_libdir}/benchmark %{ruby_libdir}/cgi %{ruby_libdir}/csv @@ -1220,12 +1230,17 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man5/gemfile.5* %files -n rubygem-racc +%{ruby_libdir}/racc* +%{ruby_libarchdir}/racc %{_bindir}/racc %{_libdir}/gems/%{name}/racc-%{racc_version} %{gem_dir}/gems/racc-%{racc_version} %{gem_dir}/specifications/racc-%{racc_version}.gemspec %changelog +* Tue Jan 28 2020 Vít Ondruch - 2.7.0-127 +- Provide StdLib links for Racc. + * Thu Jan 16 2020 Vít Ondruch - 2.7.0-126 - Make rubygem(did_you_mean) hard dependency. From 40937c8a7a54a6baba830a46b121dbf988ccdc3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 28 Jan 2020 13:50:46 +0100 Subject: [PATCH 338/530] Install Racc it by default. --- ruby.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 9884b09..343cefa 100644 --- a/ruby.spec +++ b/ruby.spec @@ -156,6 +156,7 @@ Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} # https://bugs.ruby-lang.org/issues/16431 Requires: rubygem(did_you_mean) >= %{did_you_mean_version} Recommends: rubygem(openssl) >= %{openssl_version} +Recommends: rubygem(racc) >= %{racc_version} BuildRequires: autoconf BuildRequires: gdbm-devel @@ -1239,7 +1240,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog * Tue Jan 28 2020 Vít Ondruch - 2.7.0-127 -- Provide StdLib links for Racc. +- Provide StdLib links for Racc and install it by default. * Thu Jan 16 2020 Vít Ondruch - 2.7.0-126 - Make rubygem(did_you_mean) hard dependency. From 79683d7d629de74dbcefe8cce68d51ec1eb1da01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 1 Apr 2020 19:08:27 +0200 Subject: [PATCH 339/530] Fix FTBFS due to glibc 2.31.9000 implementing lchmod(2). --- ruby.spec | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 343cefa..284fb5e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 127 +%global release 128 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -143,6 +143,11 @@ Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch # Revert commit which breaks bundled net-http-persistent version check. # https://github.com/drbrain/net-http-persistent/pull/109 Patch10: ruby-2.7.0-Remove-RubyGems-dependency.patch +# Fix lchmod test failures. +# https://github.com/ruby/ruby/commit/a19228f878d955eaf2cce086bcf53f46fdf894b9 +Patch11: ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch +# https://github.com/ruby/ruby/commit/72c02aa4b79731c7f25c9267f74b347f1946c704 +Patch12: ruby-2.8.0-Moved-not-implemented-method-tests.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 @@ -554,6 +559,8 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 +%patch12 -p1 %patch22 -p1 # Provide an example of usage of the tapset: @@ -861,6 +868,11 @@ MSPECOPTS="" # https://bugs.ruby-lang.org/issues/16410 MSPECOPTS="$MSPECOPTS -P 'File.utime allows Time instances in the far future to set mtime and atime'" +# Disable File.lchmod specs, which fails when building against glibc 2.31.9000. +# https://bugs.ruby-lang.org/issues/16749 +MSPECOPTS="$MSPECOPTS -P 'File.lchmod returns false from \#respond_to?'" +MSPECOPTS="$MSPECOPTS -P 'File.lchmod raises a NotImplementedError when called'" + # Increase timeout for TestBugReporter#test_bug_reporter_add test, which fails # quite often. # https://bugs.ruby-lang.org/issues/16492 @@ -1239,6 +1251,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/racc-%{racc_version}.gemspec %changelog +* Wed Apr 01 2020 Vít Ondruch - 2.7.0-128 +- Fix FTBFS due to glibc 2.31.9000 implementing lchmod(2). + * Tue Jan 28 2020 Vít Ondruch - 2.7.0-127 - Provide StdLib links for Racc and install it by default. From f2d727806baef882e54ad9209931e9cbacb5b008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 1 Apr 2020 21:05:13 +0200 Subject: [PATCH 340/530] Upgrade to Ruby 2.7.1. --- ruby-2.1.0-custom-rubygems-location.patch | 10 +- ruby-2.3.0-ruby_version.patch | 2 +- ruby-2.7.0-Remove-RubyGems-dependency.patch | 2 +- ...-the-fact-that-lchmod-can-EOPNOTSUPP.patch | 88 ++++++++++++ ...0-Moved-not-implemented-method-tests.patch | 131 ++++++++++++++++++ ruby.spec | 18 ++- sources | 2 +- 7 files changed, 235 insertions(+), 18 deletions(-) create mode 100644 ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch create mode 100644 ruby-2.8.0-Moved-not-implemented-method-tests.patch diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 14e20ec..c256708 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -67,15 +67,15 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index b47b6e1..0b99408 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -338,6 +338,7 @@ def CONFIG.[](name, mandatory = false) - sitearchlibdir = CONFIG["sitearchdir"] - vendorlibdir = CONFIG["vendorlibdir"] - vendorarchlibdir = CONFIG["vendorarchdir"] +@@ -343,6 +343,7 @@ def CONFIG.[](name, mandatory = false) + vendorlibdir = CONFIG["vendorlibdir"] + vendorarchlibdir = CONFIG["vendorarchdir"] + end +rubygemsdir = CONFIG["rubygemsdir"] mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -565,7 +566,16 @@ def stub +@@ -570,7 +571,16 @@ def stub install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 11f73f3..bf51605 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -171,7 +171,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index d4c110e..d39c9a6 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -428,7 +428,7 @@ def CONFIG.[](name, mandatory = false) +@@ -433,7 +433,7 @@ def CONFIG.[](name, mandatory = false) install?(:doc, :rdoc) do if $rdocdir diff --git a/ruby-2.7.0-Remove-RubyGems-dependency.patch b/ruby-2.7.0-Remove-RubyGems-dependency.patch index 4205217..4166900 100644 --- a/ruby-2.7.0-Remove-RubyGems-dependency.patch +++ b/ruby-2.7.0-Remove-RubyGems-dependency.patch @@ -13,7 +13,7 @@ diff --git a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb b index a54be2a..06739f1 100644 --- a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +++ b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb -@@ -202,10 +202,10 @@ class Bundler::Persistent::Net::HTTP::Persistent +@@ -197,10 +197,10 @@ class Bundler::Persistent::Net::HTTP::Persistent ## # The default connection pool size is 1/4 the allowed open files. diff --git a/ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch b/ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch new file mode 100644 index 0000000..1e09843 --- /dev/null +++ b/ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch @@ -0,0 +1,88 @@ +From a19228f878d955eaf2cce086bcf53f46fdf894b9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?= + +Date: Thu, 23 Jan 2020 15:33:42 +0900 +Subject: [PATCH] brace the fact that lchmod(2) can EOPNOTSUPP + +Musl libc has this function as a tiny wrapper of fchmodat(3posix). On +the other hand Linux kernel does not support changing modes of a symlink. +The operation always fails with EOPNOTSUPP. This fchmodat behaviour is +defined in POSIX. We have to take care of such exceptions. +--- + lib/fileutils.rb | 3 ++- + test/pathname/test_pathname.rb | 2 +- + test/ruby/test_notimp.rb | 19 ++++++++++++------- + 3 files changed, 15 insertions(+), 9 deletions(-) + +diff --git a/lib/fileutils.rb b/lib/fileutils.rb +index a7ad65ae5e98..04788e26ca9c 100644 +--- a/lib/fileutils.rb ++++ b/lib/fileutils.rb +@@ -1345,6 +1345,7 @@ def chmod(mode) + else + File.chmod mode, path() + end ++ rescue Errno::EOPNOTSUPP + end + + def chown(uid, gid) +@@ -1439,7 +1440,7 @@ def copy_metadata(path) + if st.symlink? + begin + File.lchmod mode, path +- rescue NotImplementedError ++ rescue NotImplementedError, Errno::EOPNOTSUPP + end + else + File.chmod mode, path +diff --git a/test/pathname/test_pathname.rb b/test/pathname/test_pathname.rb +index 792510bdfb2d..2ce32a6c1208 100644 +--- a/test/pathname/test_pathname.rb ++++ b/test/pathname/test_pathname.rb +@@ -818,7 +818,7 @@ def test_lchmod + old = path.lstat.mode + begin + path.lchmod(0444) +- rescue NotImplementedError ++ rescue NotImplementedError, Errno::EOPNOTSUPP + next + end + assert_equal(0444, path.lstat.mode & 0777) +diff --git a/test/ruby/test_notimp.rb b/test/ruby/test_notimp.rb +index b069154cfc3f..e13db692b50d 100644 +--- a/test/ruby/test_notimp.rb ++++ b/test/ruby/test_notimp.rb +@@ -13,11 +13,11 @@ def test_respond_to_fork + + def test_respond_to_lchmod + assert_include(File.methods, :lchmod) +- if /linux/ =~ RUBY_PLATFORM +- assert_equal(false, File.respond_to?(:lchmod)) +- end +- if /freebsd/ =~ RUBY_PLATFORM ++ case RUBY_PLATFORM ++ when /freebsd/, /linux-musl/ + assert_equal(true, File.respond_to?(:lchmod)) ++ when /linux/ ++ assert_equal(false, File.respond_to?(:lchmod)) + end + end + +@@ -57,9 +57,14 @@ def test_call_lchmod + File.open(f, "w") {} + File.symlink f, g + newmode = 0444 +- File.lchmod newmode, "#{d}/g" +- snew = File.lstat(g) +- assert_equal(newmode, snew.mode & 0777) ++ begin ++ File.lchmod newmode, "#{d}/g" ++ rescue Errno::EOPNOTSUPP ++ skip $! ++ else ++ snew = File.lstat(g) ++ assert_equal(newmode, snew.mode & 0777) ++ end + } + end + end diff --git a/ruby-2.8.0-Moved-not-implemented-method-tests.patch b/ruby-2.8.0-Moved-not-implemented-method-tests.patch new file mode 100644 index 0000000..ffc8c52 --- /dev/null +++ b/ruby-2.8.0-Moved-not-implemented-method-tests.patch @@ -0,0 +1,131 @@ +From 72c02aa4b79731c7f25c9267f74b347f1946c704 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Fri, 28 Feb 2020 21:15:37 +0900 +Subject: [PATCH] Moved not-implemented method tests [Bug #16662] + +Test not-implemented method with the dedicated methods, instead of +platform dependent features. +--- + test/-ext-/test_notimplement.rb | 7 +++ + test/ruby/test_notimp.rb | 90 --------------------------------- + 2 files changed, 7 insertions(+), 90 deletions(-) + delete mode 100644 test/ruby/test_notimp.rb + +diff --git a/test/-ext-/test_notimplement.rb b/test/-ext-/test_notimplement.rb +index 92a2fd22b8d6..038b507b7312 100644 +--- a/test/-ext-/test_notimplement.rb ++++ b/test/-ext-/test_notimplement.rb +@@ -13,10 +13,17 @@ def test_funcall_notimplement + end + + def test_respond_to ++ assert_include(Bug.methods(false), :notimplement) ++ assert_include(Bug::NotImplement.instance_methods(false), :notimplement) + assert_not_respond_to(Bug, :notimplement) + assert_not_respond_to(Bug::NotImplement.new, :notimplement) + end + ++ def test_method_inspect_notimplement ++ assert_match(/not-implemented/, Bug.method(:notimplement).inspect) ++ assert_match(/not-implemented/, Bug::NotImplement.instance_method(:notimplement).inspect) ++ end ++ + def test_not_method_defined + assert !Bug::NotImplement.method_defined?(:notimplement) + assert !Bug::NotImplement.method_defined?(:notimplement, true) +diff --git a/test/ruby/test_notimp.rb b/test/ruby/test_notimp.rb +deleted file mode 100644 +index e13db692b50d..000000000000 +--- a/test/ruby/test_notimp.rb ++++ /dev/null +@@ -1,90 +0,0 @@ +-# frozen_string_literal: false +-require 'test/unit' +-require 'timeout' +-require 'tmpdir' +- +-class TestNotImplement < Test::Unit::TestCase +- def test_respond_to_fork +- assert_include(Process.methods, :fork) +- if /linux/ =~ RUBY_PLATFORM +- assert_equal(true, Process.respond_to?(:fork)) +- end +- end +- +- def test_respond_to_lchmod +- assert_include(File.methods, :lchmod) +- case RUBY_PLATFORM +- when /freebsd/, /linux-musl/ +- assert_equal(true, File.respond_to?(:lchmod)) +- when /linux/ +- assert_equal(false, File.respond_to?(:lchmod)) +- end +- end +- +- def test_call_fork +- GC.start +- pid = nil +- ps = +- case RUBY_PLATFORM +- when /linux/ # assume Linux Distribution uses procps +- proc {`ps -eLf #{pid}`} +- when /freebsd/ +- proc {`ps -lH #{pid}`} +- when /darwin/ +- proc {`ps -lM #{pid}`} +- else +- proc {`ps -l #{pid}`} +- end +- assert_nothing_raised(Timeout::Error, ps) do +- EnvUtil.timeout(20) { +- pid = fork {} +- Process.wait pid +- pid = nil +- } +- end +- ensure +- if pid +- Process.kill(:KILL, pid) +- Process.wait pid +- end +- end if Process.respond_to?(:fork) +- +- def test_call_lchmod +- if File.respond_to?(:lchmod) +- Dir.mktmpdir {|d| +- f = "#{d}/f" +- g = "#{d}/g" +- File.open(f, "w") {} +- File.symlink f, g +- newmode = 0444 +- begin +- File.lchmod newmode, "#{d}/g" +- rescue Errno::EOPNOTSUPP +- skip $! +- else +- snew = File.lstat(g) +- assert_equal(newmode, snew.mode & 0777) +- end +- } +- end +- end +- +- def test_method_inspect_fork +- m = Process.method(:fork) +- if Process.respond_to?(:fork) +- assert_not_match(/not-implemented/, m.inspect) +- else +- assert_match(/not-implemented/, m.inspect) +- end +- end +- +- def test_method_inspect_lchmod +- m = File.method(:lchmod) +- if File.respond_to?(:lchmod) +- assert_not_match(/not-implemented/, m.inspect) +- else +- assert_match(/not-implemented/, m.inspect) +- end +- end +- +-end diff --git a/ruby.spec b/ruby.spec index 284fb5e..deb65bc 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 7 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -33,7 +33,7 @@ %global rubygems_version 3.1.2 %global rubygems_molinillo_version 0.5.7 -%global bundler_version 2.1.2 +%global bundler_version 2.1.4 %global bundler_connection_pool_version 2.2.2 %global bundler_fileutils_version 1.3.0 %global bundler_molinillo_version 0.6.6 @@ -42,13 +42,13 @@ %global bigdecimal_version 2.0.0 %global did_you_mean_version 1.4.0 -%global io_console_version 0.5.3 -%global irb_version 1.2.1 +%global io_console_version 0.5.6 +%global irb_version 1.2.3 %global json_version 2.3.0 %global minitest_version 5.13.0 %global net_telnet_version 0.2.0 %global openssl_version 2.1.2 -%global power_assert_version 1.1.5 +%global power_assert_version 1.1.7 %global psych_version 3.1.0 %global racc_version 1.4.16 %global rake_version 13.0.1 @@ -734,9 +734,6 @@ ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby # https://bugs.ruby-lang.org/issues/15982 rm %{buildroot}%{_bindir}/{racc2y,y2racc} rm %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} -# The 'rdoc' directory is empty and useless ATM. -# https://bugs.ruby-lang.org/issues/16596 -rm -r %{buildroot}%{ruby_libdir}/racc/rdoc mkdir -p %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version} mv %{buildroot}%{ruby_libdir}/racc* %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib @@ -1114,7 +1111,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/default/pstore-0.1.0.gemspec %{gem_dir}/specifications/default/readline-0.0.2.gemspec %{gem_dir}/specifications/default/readline-ext-0.1.0.gemspec -%{gem_dir}/specifications/default/reline-0.1.2.gemspec +%{gem_dir}/specifications/default/reline-0.1.3.gemspec %{gem_dir}/specifications/default/rexml-3.2.3.gemspec %{gem_dir}/specifications/default/rss-0.2.8.gemspec %{gem_dir}/specifications/default/sdbm-1.0.0.gemspec @@ -1251,7 +1248,8 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/racc-%{racc_version}.gemspec %changelog -* Wed Apr 01 2020 Vít Ondruch - 2.7.0-128 +* Wed Apr 01 2020 Vít Ondruch - 2.7.1-128 +- Upgrade to Ruby 2.7.1. - Fix FTBFS due to glibc 2.31.9000 implementing lchmod(2). * Tue Jan 28 2020 Vít Ondruch - 2.7.0-127 diff --git a/sources b/sources index d32bf72..38b728a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.7.0.tar.xz) = dd5690c631bf3a2b76cdc06902bcd76a89713a045e136debab9b8a81ff8c433bbb254aa09e4014ca1cf85a69ff4bcb13de11da5e40c224e7268be43ef2194af7 +SHA512 (ruby-2.7.1.tar.xz) = 79f98b1ea98e0b10ec79da1883e8fc84d48ffe5c09ae945cbebde94365e35a589d919aac965f74d70ca7e21370ecee631ac5a8f9c4eac61d62f5aa629f27bf31 From a9b3ba531fab9f5919908bbf8c944bc6cbe85969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 28 Feb 2020 17:09:21 +0100 Subject: [PATCH 341/530] Shuffle bits of .spec file around. Reorganize subpackages to keep default and bundled gems together. --- ruby.spec | 224 +++++++++++++++++++++++++++++------------------------- 1 file changed, 119 insertions(+), 105 deletions(-) diff --git a/ruby.spec b/ruby.spec index deb65bc..ce460e0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -33,6 +33,7 @@ %global rubygems_version 3.1.2 %global rubygems_molinillo_version 0.5.7 +# Default gems. %global bundler_version 2.1.4 %global bundler_connection_pool_version 2.2.2 %global bundler_fileutils_version 1.3.0 @@ -45,17 +46,19 @@ %global io_console_version 0.5.6 %global irb_version 1.2.3 %global json_version 2.3.0 -%global minitest_version 5.13.0 %global net_telnet_version 0.2.0 %global openssl_version 2.1.2 -%global power_assert_version 1.1.7 %global psych_version 3.1.0 %global racc_version 1.4.16 -%global rake_version 13.0.1 %global rdoc_version 6.2.1 -%global test_unit_version 3.3.4 %global xmlrpc_version 0.3.0 +# Bundled gems. +%global minitest_version 5.13.0 +%global power_assert_version 1.1.7 +%global rake_version 13.0.1 +%global test_unit_version 3.3.4 + # Might not be needed in the future, if we are lucky enough. # https://bugzilla.redhat.com/show_bug.cgi?id=888262 %global tapset_root %{_datadir}/systemtap @@ -264,20 +267,10 @@ BuildArch: noarch Macros and development tools for packaging RubyGems. -%package -n rubygem-rake -Summary: Ruby based make-like utility -Version: %{rake_version} -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rake = %{version}-%{release} -Provides: rubygem(rake) = %{version}-%{release} -BuildArch: noarch - -%description -n rubygem-rake -Rake is a Make-like program implemented in Ruby. Tasks and dependencies are -specified in standard Ruby syntax. - +# Default gems +# +# These packages are part of Ruby StdLib and are expected to be loadable even +# with disabled RubyGems. %package -n rubygem-irb Summary: The Interactive Ruby @@ -390,6 +383,73 @@ data to disk or transmit it over a network rather than use a verbose markup language. +%package -n rubygem-openssl +Summary: OpenSSL provides SSL, TLS and general purpose cryptography +Version: %{openssl_version} +License: Ruby or BSD +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(openssl) = %{version}-%{release} + +%description -n rubygem-openssl +OpenSSL provides SSL, TLS and general purpose cryptography. It wraps the +OpenSSL library. + + +%package -n rubygem-psych +Summary: A libyaml wrapper for Ruby +Version: %{psych_version} +License: MIT +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(psych) = %{version}-%{release} + +%description -n rubygem-psych +Psych is a YAML parser and emitter. Psych leverages +libyaml[http://pyyaml.org/wiki/LibYAML] for its YAML parsing and emitting +capabilities. In addition to wrapping libyaml, Psych also knows how to +serialize and de-serialize most Ruby objects to and from the YAML format. + + +%package -n rubygem-bundler +Summary: Library and utilities to manage a Ruby application's gem dependencies +Version: %{bundler_version} +License: MIT +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Requires: rubygem(io-console) +Provides: rubygem(bundler) = %{version}-%{release} +# https://github.com/bundler/bundler/issues/3647 +Provides: bundled(connection_pool) = %{bundler_connection_pool_version} +Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} +Provides: bundled(rubygem-molinillo) = %{bundler_molinillo_version} +Provides: bundled(rubygem-net-http-persisntent) = %{bundler_net_http_persistent_version} +Provides: bundled(rubygem-thor) = %{bundler_thor_version} +BuildArch: noarch + +%description -n rubygem-bundler +Bundler manages an application's dependencies through its entire life, across +many machines, systematically and repeatably. + + +%package -n rubygem-racc +Summary: Racc is a LALR(1) parser generator +Version: %{racc_version} +License: MIT +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(racc) = %{version}-%{release} + +%description -n rubygem-racc +Racc is a LALR(1) parser generator. It is written in Ruby itself, and +generates Ruby program. + + +# Bundled gems +# +# These are regular packages, which might be installed just optionally. Users +# should list them among their dependencies (in Gemfile). + %package -n rubygem-minitest Summary: Minitest provides a complete suite of testing facilities Version: %{minitest_version} @@ -414,19 +474,6 @@ minitest/pride shows pride in testing and adds coloring to your test output. -%package -n rubygem-openssl -Summary: OpenSSL provides SSL, TLS and general purpose cryptography -Version: %{openssl_version} -License: Ruby or BSD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(openssl) = %{version}-%{release} - -%description -n rubygem-openssl -OpenSSL provides SSL, TLS and general purpose cryptography. It wraps the -OpenSSL library. - - %package -n rubygem-power_assert Summary: Power Assert for Ruby Version: %{power_assert_version} @@ -442,19 +489,19 @@ It is useful for testing, providing which value wasn't correct when the condition is not satisfied. -%package -n rubygem-psych -Summary: A libyaml wrapper for Ruby -Version: %{psych_version} +%package -n rubygem-rake +Summary: Ruby based make-like utility +Version: %{rake_version} License: MIT Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(psych) = %{version}-%{release} +Provides: rake = %{version}-%{release} +Provides: rubygem(rake) = %{version}-%{release} +BuildArch: noarch -%description -n rubygem-psych -Psych is a YAML parser and emitter. Psych leverages -libyaml[http://pyyaml.org/wiki/LibYAML] for its YAML parsing and emitting -capabilities. In addition to wrapping libyaml, Psych also knows how to -serialize and de-serialize most Ruby objects to and from the YAML format. +%description -n rubygem-rake +Rake is a Make-like program implemented in Ruby. Tasks and dependencies are +specified in standard Ruby syntax. %package -n rubygem-net-telnet @@ -509,40 +556,6 @@ XMLRPC is a lightweight protocol that enables remote procedure calls over HTTP. -%package -n rubygem-bundler -Summary: Library and utilities to manage a Ruby application's gem dependencies -Version: %{bundler_version} -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(io-console) -Provides: rubygem(bundler) = %{version}-%{release} -# https://github.com/bundler/bundler/issues/3647 -Provides: bundled(connection_pool) = %{bundler_connection_pool_version} -Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} -Provides: bundled(rubygem-molinillo) = %{bundler_molinillo_version} -Provides: bundled(rubygem-net-http-persisntent) = %{bundler_net_http_persistent_version} -Provides: bundled(rubygem-thor) = %{bundler_thor_version} -BuildArch: noarch - -%description -n rubygem-bundler -Bundler manages an application's dependencies through its entire life, across -many machines, systematically and repeatably. - - -%package -n rubygem-racc -Summary: Racc is a LALR(1) parser generator -Version: %{racc_version} -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(racc) = %{version}-%{release} - -%description -n rubygem-racc -Racc is a LALR(1) parser generator. It is written in Ruby itself, and -generates Ruby program. - - %prep %setup -q -n %{ruby_archive} @@ -1132,12 +1145,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_rpmconfigdir}/rubygems.prov %{_rpmconfigdir}/rubygems.con -%files -n rubygem-rake -%{_bindir}/rake -%{gem_dir}/gems/rake-%{rake_version} -%{gem_dir}/specifications/rake-%{rake_version}.gemspec -%{_mandir}/man1/rake.1* - %files -n rubygem-irb %{_bindir}/irb %{ruby_libdir}/irb* @@ -1184,11 +1191,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/gems/json-%{json_version} %{gem_dir}/specifications/json-%{json_version}.gemspec -%files -n rubygem-minitest -%{gem_dir}/gems/minitest-%{minitest_version} -%exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* -%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec - %files -n rubygem-openssl %{ruby_libdir}/openssl %{ruby_libdir}/openssl.rb @@ -1197,11 +1199,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/gems/openssl-%{openssl_version} %{gem_dir}/specifications/openssl-%{openssl_version}.gemspec -%files -n rubygem-power_assert -%{gem_dir}/gems/power_assert-%{power_assert_version} -%exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* -%{gem_dir}/specifications/power_assert-%{power_assert_version}.gemspec - %files -n rubygem-psych %{ruby_libdir}/psych %{ruby_libdir}/psych.rb @@ -1210,11 +1207,43 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/gems/psych-%{psych_version} %{gem_dir}/specifications/psych-%{psych_version}.gemspec +%files -n rubygem-bundler +%{_bindir}/bundle +%{_bindir}/bundler +%{gem_dir}/gems/bundler-%{bundler_version} +%{gem_dir}/specifications/bundler-%{bundler_version}.gemspec +%{_mandir}/man1/bundle*.1* +%{_mandir}/man5/gemfile.5* + +%files -n rubygem-racc +%{ruby_libdir}/racc* +%{ruby_libarchdir}/racc +%{_bindir}/racc +%{_libdir}/gems/%{name}/racc-%{racc_version} +%{gem_dir}/gems/racc-%{racc_version} +%{gem_dir}/specifications/racc-%{racc_version}.gemspec + +%files -n rubygem-minitest +%{gem_dir}/gems/minitest-%{minitest_version} +%exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* +%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec + %files -n rubygem-net-telnet %{gem_dir}/gems/net-telnet-%{net_telnet_version} %exclude %{gem_dir}/gems/net-telnet-%{net_telnet_version}/.* %{gem_dir}/specifications/net-telnet-%{net_telnet_version}.gemspec +%files -n rubygem-power_assert +%{gem_dir}/gems/power_assert-%{power_assert_version} +%exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* +%{gem_dir}/specifications/power_assert-%{power_assert_version}.gemspec + +%files -n rubygem-rake +%{_bindir}/rake +%{gem_dir}/gems/rake-%{rake_version} +%{gem_dir}/specifications/rake-%{rake_version}.gemspec +%{_mandir}/man1/rake.1* + %files -n rubygem-test-unit %{gem_dir}/gems/test-unit-%{test_unit_version} %{gem_dir}/specifications/test-unit-%{test_unit_version}.gemspec @@ -1231,21 +1260,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/xmlrpc.gemspec %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec -%files -n rubygem-bundler -%{_bindir}/bundle -%{_bindir}/bundler -%{gem_dir}/gems/bundler-%{bundler_version} -%{gem_dir}/specifications/bundler-%{bundler_version}.gemspec -%{_mandir}/man1/bundle*.1* -%{_mandir}/man5/gemfile.5* - -%files -n rubygem-racc -%{ruby_libdir}/racc* -%{ruby_libarchdir}/racc -%{_bindir}/racc -%{_libdir}/gems/%{name}/racc-%{racc_version} -%{gem_dir}/gems/racc-%{racc_version} -%{gem_dir}/specifications/racc-%{racc_version}.gemspec %changelog * Wed Apr 01 2020 Vít Ondruch - 2.7.1-128 From 759d6796c6d87f5b5107db6e4418d4eaac7eeef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 16 Mar 2020 18:56:03 +0100 Subject: [PATCH 342/530] Properly own BigDecimal files. --- ruby.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index ce460e0..08feffe 100644 --- a/ruby.spec +++ b/ruby.spec @@ -934,6 +934,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" # Platform independent libraries. %dir %{ruby_libdir} %{ruby_libdir}/*.rb +%exclude %{ruby_libdir}/bigdecimal.rb %exclude %{ruby_libdir}/irb.rb %exclude %{ruby_libdir}/json.rb %exclude %{ruby_libdir}/openssl.rb @@ -1166,7 +1167,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_datadir}/ri %files -n rubygem-bigdecimal -%{ruby_libdir}/bigdecimal +%{ruby_libdir}/bigdecimal* %{ruby_libarchdir}/bigdecimal* %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} %{gem_dir}/gems/bigdecimal-%{bigdecimal_version} From e5cef5e2719a7175d90813722095cb9593c29a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 19 Mar 2020 15:34:39 +0100 Subject: [PATCH 343/530] Be more strict about StdLib content. --- ruby.spec | 98 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 32 deletions(-) diff --git a/ruby.spec b/ruby.spec index 08feffe..f53b5e6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -933,43 +933,77 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" # List all these files explicitly to prevent surprises # Platform independent libraries. %dir %{ruby_libdir} -%{ruby_libdir}/*.rb -%exclude %{ruby_libdir}/bigdecimal.rb -%exclude %{ruby_libdir}/irb.rb -%exclude %{ruby_libdir}/json.rb -%exclude %{ruby_libdir}/openssl.rb -%exclude %{ruby_libdir}/psych.rb -%exclude %{ruby_libdir}/racc.rb -%{ruby_libdir}/benchmark -%{ruby_libdir}/cgi -%{ruby_libdir}/csv -%{ruby_libdir}/delegate -%{ruby_libdir}/digest -%{ruby_libdir}/drb -%{ruby_libdir}/fiddle -%{ruby_libdir}/forwardable -%{ruby_libdir}/getoptlong -%{ruby_libdir}/logger -%{ruby_libdir}/matrix +%exclude %{ruby_libdir}/bigdecimal* +%exclude %{ruby_libdir}/irb* +%exclude %{ruby_libdir}/json* +%exclude %{ruby_libdir}/openssl* +%exclude %{ruby_libdir}/psych* +%exclude %{ruby_libdir}/racc* +%{ruby_libdir}/abbrev.rb +%{ruby_libdir}/base64.rb +%{ruby_libdir}/benchmark* +%{ruby_libdir}/cgi* +%{ruby_libdir}/coverage.rb +%{ruby_libdir}/csv* +%{ruby_libdir}/date.rb +%{ruby_libdir}/debug.rb +%{ruby_libdir}/delegate* +%{ruby_libdir}/digest* +%{ruby_libdir}/drb* +%{ruby_libdir}/English.rb +%{ruby_libdir}/erb.rb +%{ruby_libdir}/expect.rb +%{ruby_libdir}/fiddle* +%{ruby_libdir}/fileutils.rb +%{ruby_libdir}/find.rb +%{ruby_libdir}/forwardable* +%{ruby_libdir}/getoptlong* +%{ruby_libdir}/io +%{ruby_libdir}/ipaddr.rb +%{ruby_libdir}/kconv.rb +%{ruby_libdir}/logger* +%{ruby_libdir}/matrix* +%{ruby_libdir}/mkmf.rb +%{ruby_libdir}/monitor.rb +%{ruby_libdir}/mutex_m.rb %{ruby_libdir}/net -%{ruby_libdir}/observer -%{ruby_libdir}/open3 -%{ruby_libdir}/optparse -%{ruby_libdir}/ostruct -%{ruby_libdir}/pstore -%{ruby_libdir}/reline +%{ruby_libdir}/observer* +%{ruby_libdir}/open-uri.rb +%{ruby_libdir}/open3* +%{ruby_libdir}/optionparser.rb +%{ruby_libdir}/optparse* +%{ruby_libdir}/ostruct* +%{ruby_libdir}/pathname.rb +%{ruby_libdir}/pp.rb +%{ruby_libdir}/prettyprint.rb +%{ruby_libdir}/prime.rb +%{ruby_libdir}/pstore* +%{ruby_libdir}/readline.rb +%{ruby_libdir}/reline* +%{ruby_libdir}/resolv.rb +%{ruby_libdir}/resolv-replace.rb %{ruby_libdir}/rexml %{ruby_libdir}/rinda -%{ruby_libdir}/ripper -%{ruby_libdir}/rss -%{ruby_libdir}/singleton +%{ruby_libdir}/ripper* +%{ruby_libdir}/rss* +%{ruby_libdir}/securerandom.rb +%{ruby_libdir}/set.rb +%{ruby_libdir}/shellwords.rb +%{ruby_libdir}/singleton* +%{ruby_libdir}/socket.rb %{ruby_libdir}/syslog -%{ruby_libdir}/timeout -%{ruby_libdir}/tracer +%{ruby_libdir}/tempfile.rb +%{ruby_libdir}/timeout* +%{ruby_libdir}/time.rb +%{ruby_libdir}/tmpdir.rb +%{ruby_libdir}/tracer* +%{ruby_libdir}/tsort.rb %{ruby_libdir}/unicode_normalize -%{ruby_libdir}/uri -%{ruby_libdir}/webrick -%{ruby_libdir}/yaml +%{ruby_libdir}/un.rb +%{ruby_libdir}/uri* +%{ruby_libdir}/weakref* +%{ruby_libdir}/webrick* +%{ruby_libdir}/yaml* # Platform specific libraries. %{_libdir}/libruby.so.* From c63e907e87a6bc21cd5fa97deaad1df6f9520a7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 23 Mar 2020 18:38:59 +0100 Subject: [PATCH 344/530] Add ruby-default-gems subpackage shipping all extra default gem content. --- ruby.spec | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/ruby.spec b/ruby.spec index f53b5e6..ca49307 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 128 +%global release 129 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -272,6 +272,17 @@ Macros and development tools for packaging RubyGems. # These packages are part of Ruby StdLib and are expected to be loadable even # with disabled RubyGems. +%package default-gems +Summary: Default gems which are part of Ruby StdLib. +Requires: ruby(rubygems) >= %{rubygems_version} +Supplements: ruby(rubygems) +BuildArch: noarch + +%description default-gems +The .gemspec files and executables of default gems, which are part of Ruby +StdLib. + + %package -n rubygem-irb Summary: The Interactive Ruby Version: %{irb_version} @@ -1132,7 +1143,14 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %exclude %{gem_dir}/cache/* -# TODO: Gemify these libraries +%files -n rubygems-devel +%{_rpmconfigdir}/macros.d/macros.rubygems +%{_rpmconfigdir}/fileattrs/rubygems.attr +%{_rpmconfigdir}/rubygems.req +%{_rpmconfigdir}/rubygems.prov +%{_rpmconfigdir}/rubygems.con + +%files default-gems %{gem_dir}/specifications/default/benchmark-0.1.0.gemspec %{gem_dir}/specifications/default/cgi-0.1.0.gemspec %{gem_dir}/specifications/default/csv-3.1.2.gemspec @@ -1173,12 +1191,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/default/yaml-0.1.0.gemspec %{gem_dir}/specifications/default/zlib-1.1.0.gemspec -%files -n rubygems-devel -%{_rpmconfigdir}/macros.d/macros.rubygems -%{_rpmconfigdir}/fileattrs/rubygems.attr -%{_rpmconfigdir}/rubygems.req -%{_rpmconfigdir}/rubygems.prov -%{_rpmconfigdir}/rubygems.con %files -n rubygem-irb %{_bindir}/irb @@ -1297,6 +1309,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Thu Apr 02 2020 Vít Ondruch - 2.7.1-129 +- Add ruby-default-gems subpackage shipping all extra default gem content. + * Wed Apr 01 2020 Vít Ondruch - 2.7.1-128 - Upgrade to Ruby 2.7.1. - Fix FTBFS due to glibc 2.31.9000 implementing lchmod(2). From baf046a6a4d17fa309c9d20fa3db949f6c24aacf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 30 Mar 2020 17:39:57 +0200 Subject: [PATCH 345/530] Bundle Racc into StdLib. It is increasingly hard to maintain default gems extracted from StdLib into gems. If they are overlapped by independent versions, it is even harder, because the overlapped versions would need to provide symlinks back to StdLib \[[1]\]. On top of that, the layout differs from upstream, where default gems are always available. Because these small nuances can make hard discoverable race conditions during Ruby application loading and runtime, it will be best to keep the default gems bundled. [1]: https://src.fedoraproject.org/rpms/rubygem-racc/pull-request/1 --- ruby.spec | 67 +++++++++++++++++++------------------------------------ 1 file changed, 23 insertions(+), 44 deletions(-) diff --git a/ruby.spec b/ruby.spec index ca49307..602e019 100644 --- a/ruby.spec +++ b/ruby.spec @@ -164,7 +164,6 @@ Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} # https://bugs.ruby-lang.org/issues/16431 Requires: rubygem(did_you_mean) >= %{did_you_mean_version} Recommends: rubygem(openssl) >= %{openssl_version} -Recommends: rubygem(racc) >= %{racc_version} BuildRequires: autoconf BuildRequires: gdbm-devel @@ -220,6 +219,9 @@ Provides: bundled(ccan-check_type) Provides: bundled(ccan-container_of) Provides: bundled(ccan-list) +# StdLib default gems. +Provides: bundled(rubygem-racc) = %{racc_version} + # Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe # so lets obsolete it. This is not the best place, but we don't have # better, unless https://fedorahosted.org/fpc/ticket/645 provides some @@ -276,6 +278,8 @@ Macros and development tools for packaging RubyGems. Summary: Default gems which are part of Ruby StdLib. Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) +# Obsoleted by Ruby 2.7 in F32 timeframe. +Obsoletes: rubygem-racc < %{racc_version}-%{release} BuildArch: noarch %description default-gems @@ -443,19 +447,6 @@ Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably. -%package -n rubygem-racc -Summary: Racc is a LALR(1) parser generator -Version: %{racc_version} -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(racc) = %{version}-%{release} - -%description -n rubygem-racc -Racc is a LALR(1) parser generator. It is written in Ruby itself, and -generates Ruby program. - - # Bundled gems # # These are regular packages, which might be installed just optionally. Users @@ -753,27 +744,6 @@ ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_libdir ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_libdir}/psych.rb ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby_libarchdir}/psych.so -# These have wrong shebangs. Exclude them for now and let's see what upstream -# thinks about them. -# https://bugs.ruby-lang.org/issues/15982 -rm %{buildroot}%{_bindir}/{racc2y,y2racc} -rm %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} -mkdir -p %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version} -mv %{buildroot}%{ruby_libdir}/racc* %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib -mv %{buildroot}%{ruby_libarchdir}/racc/ %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version}/ -touch %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version}/gem.build_complete -mv %{buildroot}%{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{buildroot}%{gem_dir}/specifications -# This used to be directories when racc was integral part of StdLib => Keep -# them as directories and link everything in them to prevent directory => -# symlink conversion RPM issues. -mkdir -p %{buildroot}%{ruby_libdir}/racc -mkdir -p %{buildroot}%{ruby_libarchdir}/racc -find %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib/racc -maxdepth 1 -type f -exec \ - sh -c 'ln -s %{gem_dir}/gems/racc-%{racc_version}/lib/racc/`basename {}` %{buildroot}%{ruby_libdir}/racc' \; -ln -s %{gem_dir}/gems/racc-%{racc_version}/lib/racc.rb %{buildroot}%{ruby_libdir}/racc.rb -ln -s %{_libdir}/gems/%{name}/racc-%{racc_version}/racc/cparse.so %{buildroot}%{ruby_libarchdir}/racc/cparse.so - # Move the binary extensions into proper place (if no gem has binary extension, # the extensions directory might be empty). find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{ruby_version}/* -maxdepth 0 \ @@ -949,7 +919,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %exclude %{ruby_libdir}/json* %exclude %{ruby_libdir}/openssl* %exclude %{ruby_libdir}/psych* -%exclude %{ruby_libdir}/racc* %{ruby_libdir}/abbrev.rb %{ruby_libdir}/base64.rb %{ruby_libdir}/benchmark* @@ -1120,6 +1089,11 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{ruby_libarchdir}/syslog.so %{ruby_libarchdir}/zlib.so +# Default gems +%{ruby_libdir}/racc* +%dir %{ruby_libarchdir}/racc +%{ruby_libarchdir}/racc/cparse.so + %{?with_systemtap:%{tapset_root}} %files -n rubygems @@ -1191,6 +1165,18 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/default/yaml-0.1.0.gemspec %{gem_dir}/specifications/default/zlib-1.1.0.gemspec +# Use standalone rubygem-racc if Racc binary is required. Shipping this +# executable in both packages might possibly cause conflicts. The situation +# could be better if Ruby generated these files: +# https://github.com/ruby/ruby/pull/2545 +%exclude %{_bindir}/racc +# These have wrong shebangs. Exclude them for now and let's see what upstream +# thinks about them. +# https://bugs.ruby-lang.org/issues/15982 +%exclude %{_bindir}/{racc2y,y2racc} +%exclude %{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} +%{gem_dir}/gems/racc-%{racc_version} +%{gem_dir}/specifications/default/racc-1.4.16.gemspec %files -n rubygem-irb %{_bindir}/irb @@ -1262,14 +1248,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man1/bundle*.1* %{_mandir}/man5/gemfile.5* -%files -n rubygem-racc -%{ruby_libdir}/racc* -%{ruby_libarchdir}/racc -%{_bindir}/racc -%{_libdir}/gems/%{name}/racc-%{racc_version} -%{gem_dir}/gems/racc-%{racc_version} -%{gem_dir}/specifications/racc-%{racc_version}.gemspec - %files -n rubygem-minitest %{gem_dir}/gems/minitest-%{minitest_version} %exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* @@ -1311,6 +1289,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog * Thu Apr 02 2020 Vít Ondruch - 2.7.1-129 - Add ruby-default-gems subpackage shipping all extra default gem content. +- Bundle Racc into StdLib. * Wed Apr 01 2020 Vít Ondruch - 2.7.1-128 - Upgrade to Ruby 2.7.1. From 838cca0381d85dfd7ec84963e52115c50ad326cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 8 Apr 2020 18:12:32 +0200 Subject: [PATCH 346/530] Move Racc .gemspec to better place. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 602e019..919613c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1149,6 +1149,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/default/ostruct-0.2.0.gemspec %{gem_dir}/specifications/default/prime-0.1.1.gemspec %{gem_dir}/specifications/default/pstore-0.1.0.gemspec +%{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{gem_dir}/specifications/default/readline-0.0.2.gemspec %{gem_dir}/specifications/default/readline-ext-0.1.0.gemspec %{gem_dir}/specifications/default/reline-0.1.3.gemspec @@ -1176,7 +1177,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %exclude %{_bindir}/{racc2y,y2racc} %exclude %{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} %{gem_dir}/gems/racc-%{racc_version} -%{gem_dir}/specifications/default/racc-1.4.16.gemspec %files -n rubygem-irb %{_bindir}/irb From ca69f778a9169c7ff172d2cc9c9d31c6f348cb2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 8 Apr 2020 18:09:44 +0200 Subject: [PATCH 347/530] Bundle did_you_mean into StdLib. Resolves: rhbz#1817178 --- ruby.spec | 35 +++++++++-------------------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/ruby.spec b/ruby.spec index 919613c..66202df 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 129 +%global release 130 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -162,7 +162,6 @@ Recommends: ruby(rubygems) >= %{rubygems_version} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} # Change this to requires, hopefully just as temporary measure. # https://bugs.ruby-lang.org/issues/16431 -Requires: rubygem(did_you_mean) >= %{did_you_mean_version} Recommends: rubygem(openssl) >= %{openssl_version} BuildRequires: autoconf @@ -220,6 +219,7 @@ Provides: bundled(ccan-container_of) Provides: bundled(ccan-list) # StdLib default gems. +Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} Provides: bundled(rubygem-racc) = %{racc_version} # Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe @@ -279,6 +279,7 @@ Summary: Default gems which are part of Ruby StdLib. Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) # Obsoleted by Ruby 2.7 in F32 timeframe. +Obsoletes: rubygem-did_you_mean < %{did_you_mean_version}-%{release} Obsoletes: rubygem-racc < %{racc_version}-%{release} BuildArch: noarch @@ -356,20 +357,6 @@ floating point arithmetic often introduces subtle errors because of the conversion between base 10 and base 2. -%package -n rubygem-did_you_mean -Summary: "Did you mean?" experience in Ruby -Version: %{did_you_mean_version} -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(did_you_mean) = %{version}-%{release} -BuildArch: noarch - -%description -n rubygem-did_you_mean -"did you mean?" experience in Ruby: the error message will tell you the right -one when you misspelled something. - - %package -n rubygem-io-console Summary: IO/Console is a simple console utilizing library Version: %{io_console_version} @@ -699,11 +686,6 @@ mv %{buildroot}%{ruby_libdir}/bundler.rb %{buildroot}%{gem_dir}/gems/bundler-%{b mv %{buildroot}%{ruby_libdir}/bundler %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib mv %{buildroot}%{gem_dir}/specifications/default/bundler-%{bundler_version}.gemspec %{buildroot}%{gem_dir}/specifications -mkdir -p %{buildroot}%{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/lib -mv %{buildroot}%{ruby_libdir}/did_you_mean.rb %{buildroot}%{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/lib -mv %{buildroot}%{ruby_libdir}/did_you_mean %{buildroot}%{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec %{buildroot}%{gem_dir}/specifications - mkdir -p %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib @@ -1090,6 +1072,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{ruby_libarchdir}/zlib.so # Default gems +%{ruby_libdir}/did_you_mean* %{ruby_libdir}/racc* %dir %{ruby_libarchdir}/racc %{ruby_libarchdir}/racc/cparse.so @@ -1131,6 +1114,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/default/date-3.0.0.gemspec %{gem_dir}/specifications/default/dbm-1.1.0.gemspec %{gem_dir}/specifications/default/delegate-0.1.0.gemspec +%{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec %{gem_dir}/specifications/default/etc-1.1.0.gemspec %{gem_dir}/specifications/default/fcntl-1.0.0.gemspec %{gem_dir}/specifications/default/fiddle-1.0.0.gemspec @@ -1205,11 +1189,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/gems/bigdecimal-%{bigdecimal_version} %{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec -%files -n rubygem-did_you_mean -%{gem_dir}/gems/did_you_mean-%{did_you_mean_version} -%exclude %{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/.* -%{gem_dir}/specifications/did_you_mean-%{did_you_mean_version}.gemspec - %files -n rubygem-io-console %{ruby_libdir}/io %{ruby_libarchdir}/io/console.so @@ -1287,6 +1266,10 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Wed Apr 08 2020 Vít Ondruch - 2.7.1-130 +- Bundle did_you_mean into StdLib. + Resolves: rhbz#1817178 + * Thu Apr 02 2020 Vít Ondruch - 2.7.1-129 - Add ruby-default-gems subpackage shipping all extra default gem content. - Bundle Racc into StdLib. From fb50c77241a5e95945f40541755d8b293bbf8674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 15 Apr 2020 18:07:11 +0200 Subject: [PATCH 348/530] Hardcode obsolete version for rubygem-did_you_mean. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 66202df..eb48899 100644 --- a/ruby.spec +++ b/ruby.spec @@ -279,7 +279,7 @@ Summary: Default gems which are part of Ruby StdLib. Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) # Obsoleted by Ruby 2.7 in F32 timeframe. -Obsoletes: rubygem-did_you_mean < %{did_you_mean_version}-%{release} +Obsoletes: rubygem-did_you_mean < 1.4.0-130 Obsoletes: rubygem-racc < %{racc_version}-%{release} BuildArch: noarch From 50345c3ee4f400b298e93eaf2686d8d4231b475c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 15 Apr 2020 18:08:21 +0200 Subject: [PATCH 349/530] Hardcode obsolete version for rubygem-racc. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index eb48899..af0154a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -280,7 +280,7 @@ Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) # Obsoleted by Ruby 2.7 in F32 timeframe. Obsoletes: rubygem-did_you_mean < 1.4.0-130 -Obsoletes: rubygem-racc < %{racc_version}-%{release} +Obsoletes: rubygem-racc < 1.4.16-130 BuildArch: noarch %description default-gems From 102ff85d98d1a0a6423637c5b3feddbcaa43251c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 15 Apr 2020 18:45:29 +0200 Subject: [PATCH 350/530] Prevent issues with openssl loading when RubyGems are disabled. --- ...move-unneeded-gem-require-for-ipaddr.patch | 22 +++++++++++++++++++ ruby.spec | 5 +++++ 2 files changed, 27 insertions(+) create mode 100644 ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch diff --git a/ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch b/ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch new file mode 100644 index 0000000..c6923ee --- /dev/null +++ b/ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch @@ -0,0 +1,22 @@ +From 0689147586c6cb56b91bf0f368890f19d630ece1 Mon Sep 17 00:00:00 2001 +From: nobletrout +Date: Tue, 5 Feb 2019 08:14:02 -0500 +Subject: [PATCH] remove unneeded gem require for ipaddr + +ipaddr is a builtin class for ruby, that is occasionally merged. If the version isn't specified by the runtime dependency, then it will default to needing the latest gem rather than the version that ships with that version of ruby. That will lead to all kinds of potential dependency fails that are most likely unneeded since this gem already requires ruby > 2.3.0 +--- + ext/openssl/openssl.gemspec | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/ext/openssl/openssl.gemspec b/ext/openssl/openssl.gemspec +index 7c17cd54..f721f247 100644 +--- a/ext/openssl/openssl.gemspec ++++ b/ext/openssl/openssl.gemspec +@@ -21,7 +21,6 @@ Gem::Specification.new do |spec| + s.rubygems_version = "3.0.0.beta1" + s.summary = "OpenSSL provides SSL, TLS and general purpose cryptography." + +- s.add_runtime_dependency("ipaddr", [">= 0"]) + s.add_development_dependency("rake", [">= 0"]) + s.add_development_dependency("rake-compiler", [">= 0"]) + s.add_development_dependency("test-unit", ["~> 3.0"]) diff --git a/ruby.spec b/ruby.spec index af0154a..2304ef5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -151,6 +151,9 @@ Patch10: ruby-2.7.0-Remove-RubyGems-dependency.patch Patch11: ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch # https://github.com/ruby/ruby/commit/72c02aa4b79731c7f25c9267f74b347f1946c704 Patch12: ruby-2.8.0-Moved-not-implemented-method-tests.patch +# Prevent issues with openssl loading when RubyGems are disabled. +# https://github.com/ruby/openssl/pull/242 +Patch13: ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 @@ -563,6 +566,7 @@ rm -rf ext/fiddle/libffi* %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 %patch22 -p1 # Provide an example of usage of the tapset: @@ -1269,6 +1273,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" * Wed Apr 08 2020 Vít Ondruch - 2.7.1-130 - Bundle did_you_mean into StdLib. Resolves: rhbz#1817178 +- Prevent issues with openssl loading when RubyGems are disabled. * Thu Apr 02 2020 Vít Ondruch - 2.7.1-129 - Add ruby-default-gems subpackage shipping all extra default gem content. From 26bc2eb795e224b55ef8c217b53f8a75fce744b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 16 Apr 2020 10:35:30 +0200 Subject: [PATCH 351/530] Fix changelog identation. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 2304ef5..4cd8c85 100644 --- a/ruby.spec +++ b/ruby.spec @@ -2124,7 +2124,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" - Disable the static library building. * Tue Dec 04 2007 Release Engineering - 1.8.6.111-2 - - Rebuild for openssl bump +- Rebuild for openssl bump * Wed Oct 31 2007 Akira TAGOH - Fix the dead link. From 29816481d1e7a36950e08a1447cfae6cdda62dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 15 May 2020 17:49:43 +0200 Subject: [PATCH 352/530] Relax rubygems-devel dependency on rubygems. Independent rubygems package used to provide rubygems-devel subpackages, but this is going to change to ease the independent rubygems package maitenance and therefore ruby package will become the ultimate source of rubygems-devel package. --- ruby.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 4cd8c85..7eeacbe 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 130 +%global release 131 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -262,7 +262,7 @@ libraries. Summary: Macros and development tools for packaging RubyGems Version: %{rubygems_version} License: Ruby or MIT -Requires: ruby(rubygems) = %{version}-%{release} +Requires: ruby(rubygems) >= %{version}-%{release} # Needed for RDoc documentation format generation. Requires: rubygem(json) >= %{json_version} Requires: rubygem(rdoc) >= %{rdoc_version} @@ -1270,6 +1270,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Fri May 15 2020 Vít Ondruch - 2.7.1-131 +- Relax rubygems-devel dependency on rubygems. + * Wed Apr 08 2020 Vít Ondruch - 2.7.1-130 - Bundle did_you_mean into StdLib. Resolves: rhbz#1817178 From 0963ae510224fb2bf93ea4e5aeb27f8c7af840c6 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Tue, 9 Jun 2020 16:11:19 +0200 Subject: [PATCH 353/530] Fix FTBFS due to libyaml 0.2.5. Resolves: rhbz#1845530 --- ruby-2.7.2-psych-fix-yaml-tests.patch | 162 ++++++++++++++++++++++++++ ruby.spec | 4 + 2 files changed, 166 insertions(+) create mode 100644 ruby-2.7.2-psych-fix-yaml-tests.patch diff --git a/ruby-2.7.2-psych-fix-yaml-tests.patch b/ruby-2.7.2-psych-fix-yaml-tests.patch new file mode 100644 index 0000000..5a4be77 --- /dev/null +++ b/ruby-2.7.2-psych-fix-yaml-tests.patch @@ -0,0 +1,162 @@ +From 3c55d93cf68b1a969b90b306de4dd8b88d74a2f2 Mon Sep 17 00:00:00 2001 +From: nagachika +Date: Sat, 13 Jun 2020 11:29:51 +0900 +Subject: [PATCH] merge revision(s) 7e289cdf3fed588b2d5a6973e29f9ff95cb8d76c: + [Backport #16949] + + [ruby/psych] Fixing compatibility with libyaml 0.2.5 + + The main issue is that commas aren't allowed in local tags. libyaml + was updated to follow the spec, and our tests were out of date. + + See: https://github.com/yaml/libyaml/issues/196 + + https://github.com/ruby/psych/commit/3f5e520fd3 +--- + test/psych/test_nil.rb | 4 ++-- + test/psych/test_psych.rb | 17 +++++++---------- + test/psych/test_yaml.rb | 24 ++++++++++++------------ + version.h | 4 ++-- + 4 files changed, 23 insertions(+), 26 deletions(-) + +diff --git a/test/psych/test_nil.rb b/test/psych/test_nil.rb +index 910a2e697def..bcbbcb9c9397 100644 +--- a/test/psych/test_nil.rb ++++ b/test/psych/test_nil.rb +@@ -5,13 +5,13 @@ module Psych + class TestNil < TestCase + def test_nil + yml = Psych.dump nil +- assert_match(/--- \n(?:\.\.\.\n)?/, yml) ++ assert_match(/---[ ]?\n(?:\.\.\.\n)?/, yml) + assert_nil Psych.load(yml) + end + + def test_array_nil + yml = Psych.dump [nil] +- assert_equal "---\n- \n", yml ++ assert_match(/---\n-[ ]?\n/, yml) + assert_equal [nil], Psych.load(yml) + end + +diff --git a/test/psych/test_psych.rb b/test/psych/test_psych.rb +index eeadc864ef4e..e557feffb76a 100644 +--- a/test/psych/test_psych.rb ++++ b/test/psych/test_psych.rb +@@ -178,17 +178,17 @@ def test_add_builtin_type + + def test_domain_types + got = nil +- Psych.add_domain_type 'foo.bar,2002', 'foo' do |type, val| ++ Psych.add_domain_type 'foo.bar/2002', 'foo' do |type, val| + got = val + end + +- Psych.load('--- !foo.bar,2002/foo hello') ++ Psych.load('--- !foo.bar/2002:foo hello') + assert_equal 'hello', got + +- Psych.load("--- !foo.bar,2002/foo\n- hello\n- world") ++ Psych.load("--- !foo.bar/2002:foo\n- hello\n- world") + assert_equal %w{ hello world }, got + +- Psych.load("--- !foo.bar,2002/foo\nhello: world") ++ Psych.load("--- !foo.bar/2002:foo\nhello: world") + assert_equal({ 'hello' => 'world' }, got) + end + +@@ -295,16 +295,13 @@ def test_callbacks + types = [] + appender = lambda { |*args| types << args } + +- Psych.add_builtin_type('foo', &appender) +- Psych.add_domain_type('example.com,2002', 'foo', &appender) ++ Psych.add_domain_type('example.com:2002', 'foo', &appender) + Psych.load <<-eoyml +-- !tag:yaml.org,2002:foo bar +-- !tag:example.com,2002:foo bar ++- !tag:example.com:2002:foo bar + eoyml + + assert_equal [ +- ["tag:yaml.org,2002:foo", "bar"], +- ["tag:example.com,2002:foo", "bar"] ++ ["tag:example.com:2002:foo", "bar"] + ], types + end + +diff --git a/test/psych/test_yaml.rb b/test/psych/test_yaml.rb +index 5fa759c981b2..0dfd60f89434 100644 +--- a/test/psych/test_yaml.rb ++++ b/test/psych/test_yaml.rb +@@ -617,11 +617,11 @@ def test_spec_domain_prefix + raise ArgumentError, "Not a Hash in domain.tld,2002/invoice: " + val.inspect + end + } +- Psych.add_domain_type( "domain.tld,2002", 'invoice', &customer_proc ) +- Psych.add_domain_type( "domain.tld,2002", 'customer', &customer_proc ) ++ Psych.add_domain_type( "domain.tld/2002", 'invoice', &customer_proc ) ++ Psych.add_domain_type( "domain.tld/2002", 'customer', &customer_proc ) + assert_parse_only( { "invoice"=> { "customers"=> [ { "given"=>"Chris", "type"=>"domain customer", "family"=>"Dumars" } ], "type"=>"domain invoice" } }, <7, "center"=>{"x"=>73, "y"=>129}, "TYPE"=>"Shape: graph/circle"}, {"finish"=>{"x"=>89, "y"=>102}, "TYPE"=>"Shape: graph/line", "start"=>{"x"=>73, "y"=>129}}, {"TYPE"=>"Shape: graph/text", "value"=>"Pretty vector drawing.", "start"=>{"x"=>73, "y"=>129}, "color"=>16772795}, "Shape Container"]], < Date: Thu, 28 May 2020 14:08:38 +0200 Subject: [PATCH 354/530] Fix `require` behavior allowing to load libraries multiple times. Resolves: rhbz#1835836 --- ruby.spec | 22 +- rubygems-3.1.3-Fix-I-require-priority.patch | 167 +++++++++ ...nd-performance-regression-in-require.patch | 324 ++++++++++++++++++ rubygems-3.1.3-Improve-require.patch | 92 +++++ ...ude-empty-suffix-from-I-require-loop.patch | 29 ++ 5 files changed, 633 insertions(+), 1 deletion(-) create mode 100644 rubygems-3.1.3-Fix-I-require-priority.patch create mode 100644 rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch create mode 100644 rubygems-3.1.3-Improve-require.patch create mode 100644 rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch diff --git a/ruby.spec b/ruby.spec index 6bc8f9b..0365eec 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 131 +%global release 132 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -157,6 +157,18 @@ Patch13: ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch # Fix compatibility with libyaml 0.2.5 # https://bugs.ruby-lang.org/issues/16949 Patch14: ruby-2.7.2-psych-fix-yaml-tests.patch +# Fix `require` behavior allowing to load libraries multiple times. +# https://github.com/rubygems/rubygems/issues/3647 +# Because there were multiple fixes in `Kernel.require` in recent months, +# pickup all the changes one by one instead of squashing them. +# https://github.com/rubygems/rubygems/pull/3124 +Patch15: rubygems-3.1.3-Fix-I-require-priority.patch +# https://github.com/rubygems/rubygems/pull/3133 +Patch16: rubygems-3.1.3-Improve-require.patch +# https://github.com/rubygems/rubygems/pull/3153 +Patch17: rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch +# https://github.com/rubygems/rubygems/pull/3639 +Patch18: rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 @@ -571,6 +583,10 @@ rm -rf ext/fiddle/libffi* %patch12 -p1 %patch13 -p1 %patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 %patch22 -p1 # Provide an example of usage of the tapset: @@ -1274,6 +1290,10 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Wed Jun 24 2020 Vít Ondruch - 2.7.1-132 +- Fix `require` behavior allowing to load libraries multiple times. + Resolves: rhbz#1835836 + * Fri May 15 2020 Vít Ondruch - 2.7.1-131 - Relax rubygems-devel dependency on rubygems. diff --git a/rubygems-3.1.3-Fix-I-require-priority.patch b/rubygems-3.1.3-Fix-I-require-priority.patch new file mode 100644 index 0000000..6ed2f76 --- /dev/null +++ b/rubygems-3.1.3-Fix-I-require-priority.patch @@ -0,0 +1,167 @@ +From 912d141a351053d0f6d915b5e7807f6a8f4c0631 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 4 Feb 2020 17:25:56 +0100 +Subject: [PATCH 1/2] Make non "test_" method private + +--- + test/rubygems/test_require.rb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index aa2675af5d..d618a93473 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -532,6 +532,8 @@ def test_require_bundler_with_bundler_version + end + end + ++ private ++ + def silence_warnings + old_verbose, $VERBOSE = $VERBOSE, false + yield + +From b3944384f44b869985051863d8b05b545d09a585 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 4 Feb 2020 17:26:28 +0100 +Subject: [PATCH 2/2] Fix require issue with file extension priority + +If `require "a"` is run when two folders have been specified in the -I +option including a "a.rb" file and a "a.so" file respectively, the ruby +spec says that the ".rb" file should always be preferred. However, the +logic we added in https://github.com/rubygems/rubygems/commit/6b81076d9 +to make the -I option always beat default gems does not respect this +spec, creating a difference from the original ruby-core's require. + +[the ruby spec says]: https://github.com/ruby/spec/blob/d80a6e2b221d4f17a8cadcac75ef950c59cba901/core/kernel/shared/require.rb#L234-L246 +--- + lib/rubygems/core_ext/kernel_require.rb | 28 +++++------ + test/rubygems/test_require.rb | 62 +++++++++++++++++++++++++ + 2 files changed, 74 insertions(+), 16 deletions(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 60f4d18712..369f2c743e 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -43,18 +43,18 @@ def require(path) + # https://github.com/rubygems/rubygems/pull/1868 + resolved_path = begin + rp = nil +- $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| +- safe_lp = lp.dup.tap(&Gem::UNTAINT) +- begin +- if File.symlink? safe_lp # for backward compatibility +- next ++ Gem.suffixes.each do |s| ++ $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| ++ safe_lp = lp.dup.tap(&Gem::UNTAINT) ++ begin ++ if File.symlink? safe_lp # for backward compatibility ++ next ++ end ++ rescue SecurityError ++ RUBYGEMS_ACTIVATION_MONITOR.exit ++ raise + end +- rescue SecurityError +- RUBYGEMS_ACTIVATION_MONITOR.exit +- raise +- end + +- Gem.suffixes.each do |s| + full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) + if File.file?(full_path) + rp = full_path +@@ -67,12 +67,8 @@ def require(path) + end + + if resolved_path +- begin +- RUBYGEMS_ACTIVATION_MONITOR.exit +- return gem_original_require(resolved_path) +- rescue LoadError +- RUBYGEMS_ACTIVATION_MONITOR.enter +- end ++ RUBYGEMS_ACTIVATION_MONITOR.exit ++ return gem_original_require(resolved_path) + end + + if spec = Gem.find_unresolved_default_spec(path) +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index d618a93473..7cffbfa7fe 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -120,6 +120,24 @@ def test_dash_i_beats_default_gems + Object.send :remove_const, :HELLO if Object.const_defined? :HELLO + end + ++ def test_dash_i_respects_default_library_extension_priority ++ skip "extensions don't quite work on jruby" if Gem.java_platform? ++ ++ dash_i_ext_arg = util_install_extension_file('a') ++ dash_i_lib_arg = util_install_ruby_file('a') ++ ++ lp = $LOAD_PATH.dup ++ ++ begin ++ $LOAD_PATH.unshift dash_i_lib_arg ++ $LOAD_PATH.unshift dash_i_ext_arg ++ assert_require 'a' ++ assert_match(/a\.rb$/, $LOADED_FEATURES.last) ++ ensure ++ $LOAD_PATH.replace lp ++ end ++ end ++ + def test_concurrent_require + Object.const_set :FILE_ENTERED_LATCH, Latch.new(2) + Object.const_set :FILE_EXIT_LATCH, Latch.new(1) +@@ -541,4 +559,48 @@ def silence_warnings + $VERBOSE = old_verbose + end + ++ def util_install_extension_file(name) ++ spec = quick_gem name ++ util_build_gem spec ++ ++ spec.extensions << "extconf.rb" ++ write_file File.join(@tempdir, "extconf.rb") do |io| ++ io.write <<-RUBY ++ require "mkmf" ++ create_makefile("#{name}") ++ RUBY ++ end ++ ++ write_file File.join(@tempdir, "#{name}.c") do |io| ++ io.write <<-C ++ #include ++ void Init_#{name}() { } ++ C ++ end ++ ++ spec.files += ["extconf.rb", "#{name}.c"] ++ ++ so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}") ++ refute_path_exists so ++ ++ path = Gem::Package.build spec ++ installer = Gem::Installer.at path ++ installer.install ++ assert_path_exists so ++ ++ spec.gem_dir ++ end ++ ++ def util_install_ruby_file(name) ++ dir_lib = Dir.mktmpdir("test_require_lib", @tempdir) ++ dash_i_lib_arg = File.join dir_lib ++ ++ a_rb = File.join dash_i_lib_arg, "#{name}.rb" ++ ++ FileUtils.mkdir_p File.dirname a_rb ++ File.open(a_rb, 'w') { |f| f.write "# #{name}.rb" } ++ ++ dash_i_lib_arg ++ end ++ + end diff --git a/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch b/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch new file mode 100644 index 0000000..b1438dd --- /dev/null +++ b/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch @@ -0,0 +1,324 @@ +From 00d98eb8a3245fb93a475ecbbbc4c7ec7e6704cd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 19 May 2020 14:00:00 +0200 +Subject: [PATCH 1/5] Fix performance regression in `require` + +Our check for `-I` paths should not go through all activated gems. +--- + lib/rubygems.rb | 10 ++++++++++ + lib/rubygems/core_ext/kernel_require.rb | 2 +- + lib/rubygems/test_case.rb | 1 + + test/rubygems/test_require.rb | 11 +++++++++++ + 4 files changed, 23 insertions(+), 1 deletion(-) + +diff --git a/lib/rubygems.rb b/lib/rubygems.rb +index 843cb49e4a..d1a9a1c7e1 100644 +--- a/lib/rubygems.rb ++++ b/lib/rubygems.rb +@@ -660,10 +660,20 @@ def self.load_path_insert_index + index + end + ++ ## ++ # The number of paths in the `$LOAD_PATH` from activated gems. Used to ++ # prioritize `-I` and `ENV['RUBYLIB`]` entries during `require`. ++ ++ def self.activated_gem_paths ++ @activated_gem_paths ||= 0 ++ end ++ + ## + # Add a list of paths to the $LOAD_PATH at the proper place. + + def self.add_to_load_path(*paths) ++ @activated_gem_paths = activated_gem_paths + paths.size ++ + insert_index = load_path_insert_index + + if insert_index +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index ed24111bd5..7625ce1bee 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -47,7 +47,7 @@ def require(path) + load_path_insert_index = Gem.load_path_insert_index + break unless load_path_insert_index + +- $LOAD_PATH[0...load_path_insert_index].each do |lp| ++ $LOAD_PATH[0...load_path_insert_index - Gem.activated_gem_paths].each do |lp| + safe_lp = lp.dup.tap(&Gem::UNTAINT) + begin + if File.symlink? safe_lp # for backward compatibility +diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb +index a05a2898d1..53dd495aef 100644 +--- a/lib/rubygems/test_case.rb ++++ b/lib/rubygems/test_case.rb +@@ -379,6 +379,7 @@ def setup + Gem::Security.reset + + Gem.loaded_specs.clear ++ Gem.instance_variable_set(:@activated_gem_paths, 0) + Gem.clear_default_specs + Bundler.reset! + +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index f36892f8cc..9f2fe3439a 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -382,6 +382,17 @@ def test_default_gem_require_activates_just_once + assert_equal 0, times_called + end + ++ def test_second_gem_require_does_not_resolve_path_manually_before_going_through_standard_require ++ a1 = util_spec "a", "1", nil, "lib/test_gem_require_a.rb" ++ install_gem a1 ++ ++ assert_require "test_gem_require_a" ++ ++ stub(:gem_original_require, ->(path) { assert_equal "test_gem_require_a", path }) do ++ require "test_gem_require_a" ++ end ++ end ++ + def test_realworld_default_gem + testing_ruby_repo = !ENV["GEM_COMMAND"].nil? + skip "this test can't work under ruby-core setup" if testing_ruby_repo || java_platform? + +From ae95885dff6189c5ac59bbdf685cb4ec4751fdef Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 19 May 2020 14:08:19 +0200 +Subject: [PATCH 2/5] Refactor `Gem.load_path_insert_index` + +--- + lib/rubygems.rb | 13 +++---------- + lib/rubygems/core_ext/kernel_require.rb | 5 +---- + 2 files changed, 4 insertions(+), 14 deletions(-) + +diff --git a/lib/rubygems.rb b/lib/rubygems.rb +index d1a9a1c7e1..ca80326459 100644 +--- a/lib/rubygems.rb ++++ b/lib/rubygems.rb +@@ -657,7 +657,7 @@ def self.load_path_insert_index + + index = $LOAD_PATH.index RbConfig::CONFIG['sitelibdir'] + +- index ++ index || 0 + end + + ## +@@ -674,15 +674,8 @@ def self.activated_gem_paths + def self.add_to_load_path(*paths) + @activated_gem_paths = activated_gem_paths + paths.size + +- insert_index = load_path_insert_index +- +- if insert_index +- # gem directories must come after -I and ENV['RUBYLIB'] +- $LOAD_PATH.insert(insert_index, *paths) +- else +- # we are probably testing in core, -I and RUBYLIB don't apply +- $LOAD_PATH.unshift(*paths) +- end ++ # gem directories must come after -I and ENV['RUBYLIB'] ++ $LOAD_PATH.insert(Gem.load_path_insert_index, *paths) + end + + @yaml_loaded = false +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 7625ce1bee..decf4829f1 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -44,10 +44,7 @@ def require(path) + resolved_path = begin + rp = nil + Gem.suffixes.each do |s| +- load_path_insert_index = Gem.load_path_insert_index +- break unless load_path_insert_index +- +- $LOAD_PATH[0...load_path_insert_index - Gem.activated_gem_paths].each do |lp| ++ $LOAD_PATH[0...Gem.load_path_insert_index - Gem.activated_gem_paths].each do |lp| + safe_lp = lp.dup.tap(&Gem::UNTAINT) + begin + if File.symlink? safe_lp # for backward compatibility + +From da1492e9d7b28d068fbfbb0ba1cafcc516681567 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 19 May 2020 14:32:12 +0200 +Subject: [PATCH 3/5] Extract a local outside the loop + +--- + lib/rubygems/core_ext/kernel_require.rb | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index decf4829f1..6a7faaf2d1 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -43,8 +43,9 @@ def require(path) + # https://github.com/rubygems/rubygems/pull/1868 + resolved_path = begin + rp = nil ++ load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths + Gem.suffixes.each do |s| +- $LOAD_PATH[0...Gem.load_path_insert_index - Gem.activated_gem_paths].each do |lp| ++ $LOAD_PATH[0...load_path_check_index].each do |lp| + safe_lp = lp.dup.tap(&Gem::UNTAINT) + begin + if File.symlink? safe_lp # for backward compatibility + +From 22ad5717c38feda2375b53628d15ae3db2195684 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Thu, 21 May 2020 15:20:57 +0200 +Subject: [PATCH 4/5] Fix `$LOADED_FEATURES` cache sometimes not respected + +In the cases where the initial manually `-I` path resolution succeeded, +we were passing a full path to the original require effectively skipping +the `$LOADED_FEATURES` cache. With this change, we _only_ do the +resolution when a matching requirable path is found in a default gem. In +that case, we skip activation of the default gem if we detect that the +required file will be picked up for a `-I` path. +--- + lib/rubygems/core_ext/kernel_require.rb | 53 +++++++++++-------------- + test/rubygems/test_require.rb | 29 ++++++++++++++ + 2 files changed, 53 insertions(+), 29 deletions(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 6a7faaf2d1..81e37b98bf 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -39,46 +39,41 @@ def require(path) + + path = path.to_path if path.respond_to? :to_path + +- # Ensure -I beats a default gem +- # https://github.com/rubygems/rubygems/pull/1868 +- resolved_path = begin +- rp = nil +- load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths +- Gem.suffixes.each do |s| +- $LOAD_PATH[0...load_path_check_index].each do |lp| +- safe_lp = lp.dup.tap(&Gem::UNTAINT) +- begin +- if File.symlink? safe_lp # for backward compatibility +- next ++ if spec = Gem.find_unresolved_default_spec(path) ++ # Ensure -I beats a default gem ++ # https://github.com/rubygems/rubygems/pull/1868 ++ resolved_path = begin ++ rp = nil ++ load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths ++ Gem.suffixes.each do |s| ++ $LOAD_PATH[0...load_path_check_index].each do |lp| ++ safe_lp = lp.dup.tap(&Gem::UNTAINT) ++ begin ++ if File.symlink? safe_lp # for backward compatibility ++ next ++ end ++ rescue SecurityError ++ RUBYGEMS_ACTIVATION_MONITOR.exit ++ raise + end +- rescue SecurityError +- RUBYGEMS_ACTIVATION_MONITOR.exit +- raise +- end + +- full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) +- if File.file?(full_path) +- rp = full_path +- break ++ full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) ++ if File.file?(full_path) ++ rp = full_path ++ break ++ end + end ++ break if rp + end +- break if rp ++ rp + end +- rp +- end + +- if resolved_path +- RUBYGEMS_ACTIVATION_MONITOR.exit +- return gem_original_require(resolved_path) +- end +- +- if spec = Gem.find_unresolved_default_spec(path) + begin + Kernel.send(:gem, spec.name, Gem::Requirement.default_prerelease) + rescue Exception + RUBYGEMS_ACTIVATION_MONITOR.exit + raise +- end ++ end unless resolved_path + end + + # If there are no unresolved deps, then we can use just try +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index 9f2fe3439a..2b11e26dfe 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -45,6 +45,35 @@ def refute_require(path) + refute require(path), "'#{path}' was not yet required" + end + ++ def test_respect_loaded_features_caching_like_standard_require ++ dir = Dir.mktmpdir("test_require", @tempdir) ++ ++ lp1 = File.join dir, 'foo1' ++ foo1 = File.join lp1, 'foo.rb' ++ ++ FileUtils.mkdir_p lp1 ++ File.open(foo1, 'w') { |f| f.write "class Object; HELLO = 'foo1' end" } ++ ++ lp = $LOAD_PATH.dup ++ ++ $LOAD_PATH.unshift lp1 ++ assert_require 'foo' ++ assert_equal "foo1", ::Object::HELLO ++ ++ lp2 = File.join dir, 'foo2' ++ foo2 = File.join lp2, 'foo.rb' ++ ++ FileUtils.mkdir_p lp2 ++ File.open(foo2, 'w') { |f| f.write "class Object; HELLO = 'foo2' end" } ++ ++ $LOAD_PATH.unshift lp2 ++ refute_require 'foo' ++ assert_equal "foo1", ::Object::HELLO ++ ensure ++ $LOAD_PATH.replace lp ++ Object.send :remove_const, :HELLO if Object.const_defined? :HELLO ++ end ++ + # Providing -I on the commandline should always beat gems + def test_dash_i_beats_gems + a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb" + +From db872c7a18d616f4447bdcca3130be6db9e5cb03 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Sat, 23 May 2020 20:18:41 +0200 +Subject: [PATCH 5/5] Remove direct reference to PR + +The code is quite different now, so I think the link might be even +confusing. If you want to know more, use git history. +--- + lib/rubygems/core_ext/kernel_require.rb | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 81e37b98bf..115ae0cb50 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -41,7 +41,6 @@ def require(path) + + if spec = Gem.find_unresolved_default_spec(path) + # Ensure -I beats a default gem +- # https://github.com/rubygems/rubygems/pull/1868 + resolved_path = begin + rp = nil + load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths diff --git a/rubygems-3.1.3-Improve-require.patch b/rubygems-3.1.3-Improve-require.patch new file mode 100644 index 0000000..2df5c4f --- /dev/null +++ b/rubygems-3.1.3-Improve-require.patch @@ -0,0 +1,92 @@ +From c5197b2ab35ba389f48918e0c773b43b6dca2fa5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Fri, 7 Feb 2020 17:16:05 +0100 +Subject: [PATCH 1/3] Tweaks to get test passing more reliably + +--- + test/rubygems/test_require.rb | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index 7cffbfa7fe..67c55416d4 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -567,18 +567,20 @@ def util_install_extension_file(name) + write_file File.join(@tempdir, "extconf.rb") do |io| + io.write <<-RUBY + require "mkmf" ++ CONFIG['LDSHARED'] = '$(TOUCH) $@ ||' + create_makefile("#{name}") + RUBY + end + + write_file File.join(@tempdir, "#{name}.c") do |io| + io.write <<-C +- #include + void Init_#{name}() { } + C + end + +- spec.files += ["extconf.rb", "#{name}.c"] ++ write_file File.join(@tempdir, "depend") ++ ++ spec.files += ["extconf.rb", "depend", "#{name}.c"] + + so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}") + refute_path_exists so + +From 7bfd7319cd751837c3ccaf1d97b02846eaaf39d5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 11 Feb 2020 11:56:06 +0100 +Subject: [PATCH 2/3] Fix bug bug calculating $LOAD_PATH's to check in + `require` + +In `Gem.load_path_insert_index` is not set, we end up having +`$LOAD_PATH[0...-1]`, unintentionally skipping the last $LOAD_PATH entry +from the check. + +The correct thing to do in that case is to not even try since we have no +way of distinguisng default LOAD_PATH entries from those added with -I. +--- + lib/rubygems/core_ext/kernel_require.rb | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 369f2c743e..a8d170f13a 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -44,7 +44,10 @@ def require(path) + resolved_path = begin + rp = nil + Gem.suffixes.each do |s| +- $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| ++ load_path_insert_index = Gem.load_path_insert_index ++ break unless load_path_insert_index ++ ++ $LOAD_PATH[0...load_path_insert_index].each do |lp| + safe_lp = lp.dup.tap(&Gem::UNTAINT) + begin + if File.symlink? safe_lp # for backward compatibility + +From 4fc0ab21c0f7713829abb522ce3b6d8e24c126b3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Fri, 14 Feb 2020 02:03:04 +0100 +Subject: [PATCH 3/3] Exclude empty suffix from `-I` require loop + +--- + lib/rubygems/core_ext/kernel_require.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index a8d170f13a..9712fb6ac0 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -43,7 +43,7 @@ def require(path) + # https://github.com/rubygems/rubygems/pull/1868 + resolved_path = begin + rp = nil +- Gem.suffixes.each do |s| ++ Gem.suffixes[1..-1].each do |s| + load_path_insert_index = Gem.load_path_insert_index + break unless load_path_insert_index + diff --git a/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch b/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch new file mode 100644 index 0000000..463047c --- /dev/null +++ b/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch @@ -0,0 +1,29 @@ +From 301e30bf97dd603ca81d52b90186908575c4ddf8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 25 Feb 2020 15:01:44 +0100 +Subject: [PATCH] Revert "Exclude empty suffix from `-I` require loop" + +This reverts commit 4fc0ab21c0f7713829abb522ce3b6d8e24c126b3. + +Technically, extensionless ruby files are valid ruby files that can be +required. For example, `bin/bundle` is sometimes required from other +binstubs even if it's also runnable directly. + +So, we should technically consider this kind of files too. +--- + lib/rubygems/core_ext/kernel_require.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 9712fb6ac0..a8d170f13a 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -43,7 +43,7 @@ def require(path) + # https://github.com/rubygems/rubygems/pull/1868 + resolved_path = begin + rp = nil +- Gem.suffixes[1..-1].each do |s| ++ Gem.suffixes.each do |s| + load_path_insert_index = Gem.load_path_insert_index + break unless load_path_insert_index + From 064a0517d6038851b099f3d456a78a7e8736dc66 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Wed, 24 Jun 2020 23:39:43 +0200 Subject: [PATCH 355/530] Add ruby-default-gems dependency on irb. Resolves: rhbz#1850541 --- ruby.spec | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ruby.spec b/ruby.spec index 0365eec..d5977cb 100644 --- a/ruby.spec +++ b/ruby.spec @@ -311,6 +311,9 @@ Summary: The Interactive Ruby Version: %{irb_version} Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} +# ruby-default-gems is required to run irb. +# https://bugs.ruby-lang.org/issues/16951 +Requires: ruby-default-gems >= %{ruby_version} Provides: irb = %{version}-%{release} Provides: rubygem(irb) = %{version}-%{release} # Obsoleted by Ruby 2.6 in F30 timeframe. @@ -1290,6 +1293,10 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Wed Jun 24 2020 Jun Aruga - 2.7.1-132 +- Add ruby-default-gems dependency on irb. + Resolves: rhbz#1850541 + * Wed Jun 24 2020 Vít Ondruch - 2.7.1-132 - Fix `require` behavior allowing to load libraries multiple times. Resolves: rhbz#1835836 From d461276d489a6f8f6b130c93762d98ac5e269b07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 27 Jul 2020 17:15:32 +0200 Subject: [PATCH 356/530] Disable LTO, which appear to cause issues with SIGSEV handler. https://src.fedoraproject.org/rpms/redhat-rpm-config/c/5baaf4a99cc77572d3496a7000674098bef7ed68?branch=master --- ruby.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index d5977cb..bda2afd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 132 +%global release 133 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -81,6 +81,10 @@ %bcond_without hardening_test %endif +# LTO appears to cause some issue to SEGV handler. +# https://bugs.ruby-lang.org/issues/17052 +%define _lto_cflags %{nil} + Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version} @@ -1293,6 +1297,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Mon Jul 27 2020 Vít Ondruch - 2.7.1-133 +- Disable LTO, which appear to cause issues with SIGSEV handler. + * Wed Jun 24 2020 Jun Aruga - 2.7.1-132 - Add ruby-default-gems dependency on irb. Resolves: rhbz#1850541 From 4979be53acdcfd0d6021c4f209403c2e88fae58e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 27 Jul 2020 17:16:51 +0200 Subject: [PATCH 357/530] Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. --- ..._bug_reporter_add-witout-raising-err.patch | 34 +++++++++++++++++++ ruby.spec | 12 +++---- 2 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch diff --git a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch new file mode 100644 index 0000000..64e2114 --- /dev/null +++ b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -0,0 +1,34 @@ +From 9b42fce32bff25e0569581f76f532b9d57865aef Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 27 Jul 2020 14:56:05 +0200 +Subject: [PATCH] Timeout the test_bug_reporter_add witout raising error. + +While timeouting the threads might be still good idea, it does not seems +the timeout impacts the TestBugReporter#test_bug_reporter_add result, +because the output of the child process has been already collected +earlier. + +It seems that when the system is under heavy load, the thread might not +be sheduled to finish its processing. Even finishing the child process +might take tens of seconds and therefore the test case finish might take +a while. +--- + test/-ext-/bug_reporter/test_bug_reporter.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_reporter/test_bug_reporter.rb +index 628fcd0340..2c677cc8a7 100644 +--- a/test/-ext-/bug_reporter/test_bug_reporter.rb ++++ b/test/-ext-/bug_reporter/test_bug_reporter.rb +@@ -21,7 +21,7 @@ def test_bug_reporter_add + args = ["--disable-gems", "-r-test-/bug_reporter", + "-C", tmpdir] + stdin = "register_sample_bug_reporter(12345); Process.kill :SEGV, $$" +- assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT") ++ assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT", timeout_error: nil) + ensure + FileUtils.rm_rf(tmpdir) if tmpdir + end +-- +2.27.0 + diff --git a/ruby.spec b/ruby.spec index bda2afd..02a6027 100644 --- a/ruby.spec +++ b/ruby.spec @@ -173,6 +173,9 @@ Patch16: rubygems-3.1.3-Improve-require.patch Patch17: rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch # https://github.com/rubygems/rubygems/pull/3639 Patch18: rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch +# Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. +# https://bugs.ruby-lang.org/issues/16492 +Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 @@ -594,6 +597,7 @@ rm -rf ext/fiddle/libffi* %patch16 -p1 %patch17 -p1 %patch18 -p1 +%patch19 -p1 %patch22 -p1 # Provide an example of usage of the tapset: @@ -877,13 +881,6 @@ MSPECOPTS="$MSPECOPTS -P 'File.utime allows Time instances in the far future to MSPECOPTS="$MSPECOPTS -P 'File.lchmod returns false from \#respond_to?'" MSPECOPTS="$MSPECOPTS -P 'File.lchmod raises a NotImplementedError when called'" -# Increase timeout for TestBugReporter#test_bug_reporter_add test, which fails -# quite often. -# https://bugs.ruby-lang.org/issues/16492 -%ifarch s390x -sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bug_reporter.rb -%endif - make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %files @@ -1299,6 +1296,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog * Mon Jul 27 2020 Vít Ondruch - 2.7.1-133 - Disable LTO, which appear to cause issues with SIGSEV handler. +- Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. * Wed Jun 24 2020 Jun Aruga - 2.7.1-132 - Add ruby-default-gems dependency on irb. From d471fb8f6273a87be2ea0e70bb76283459fbfc8a Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 29 Jul 2020 06:02:07 +0000 Subject: [PATCH 358/530] - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 02a6027..24a9b86 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 133 +%global release 134 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1294,6 +1294,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Wed Jul 29 2020 Fedora Release Engineering - 2.7.1-134 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Mon Jul 27 2020 Vít Ondruch - 2.7.1-133 - Disable LTO, which appear to cause issues with SIGSEV handler. - Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. From 78c9d9e3240d018cfba5aa81fb16d7023c49dbc1 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Thu, 28 May 2020 17:31:05 +0200 Subject: [PATCH 359/530] Give an option to increase the timeout in tests. Because setting the option makes some tests stable that are currently randomly failing with error on especially s390x and aarch64. We observed the failing tests are calling `assert_in_out_err` method calling `invoke_ruby` calling method. Then when the `th_stdout.join(timeout)` or `th_stderr.join(timeout)` returns `nil` as thread timeout in `invoke_ruby` method, it causes the error. [1][2] The `test_timeout_scale` macro is to set the environment variable `RUBY_TEST_TIMEOUT_SCALE` to increase the timeout in `apply_timeout_scale` method as = * . As an example, `TestBugReporter#test_bug_reporter_add` test's maximum thread timeout was 56+ seconds for the default timeout 10 seconds. [3] In this case setting `RUBY_TEST_TIMEOUT_SCALE=6` (6 * 10 = 60) is good enough for 56+ seconds. [1] https://github.com/ruby/ruby/blob/v2_7_1/tool/lib/envutil.rb#L149 [2] https://bugs.ruby-lang.org/issues/16492#note-8 [3] https://bugs.ruby-lang.org/issues/16492#note-4 --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 24a9b86..942088f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -881,7 +881,10 @@ MSPECOPTS="$MSPECOPTS -P 'File.utime allows Time instances in the far future to MSPECOPTS="$MSPECOPTS -P 'File.lchmod returns false from \#respond_to?'" MSPECOPTS="$MSPECOPTS -P 'File.lchmod raises a NotImplementedError when called'" -make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" +# Give an option to increase the timeout in tests. +# https://bugs.ruby-lang.org/issues/16921 +%{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ + make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %files %license BSDL From 8b746d13cf7e797442cf730262dd5559fe4ebe91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Oct 2020 16:21:35 +0200 Subject: [PATCH 360/530] Upgrade to Ruby 2.7.2. --- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 +- ruby-2.3.0-ruby_version.patch | 10 +- ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch | 14 +- ...6.0-config-support-include-directive.patch | 182 ------------------ ruby-2.7.0-Initialize-ABRT-hook.patch | 2 +- ..._bug_reporter_add-witout-raising-err.patch | 2 +- ruby-2.7.2-psych-fix-yaml-tests.patch | 162 ---------------- ...-the-fact-that-lchmod-can-EOPNOTSUPP.patch | 88 --------- ...0-Moved-not-implemented-method-tests.patch | 131 ------------- ruby.spec | 32 +-- ...nd-performance-regression-in-require.patch | 8 +- sources | 2 +- 15 files changed, 35 insertions(+), 608 deletions(-) delete mode 100644 ruby-2.6.0-config-support-include-directive.patch delete mode 100644 ruby-2.7.2-psych-fix-yaml-tests.patch delete mode 100644 ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch delete mode 100644 ruby-2.8.0-Moved-not-implemented-method-tests.patch diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 6352db3..87583c2 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index d261ea57b5..3c13076b82 100644 --- a/configure.ac +++ b/configure.ac -@@ -3102,6 +3102,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3105,6 +3105,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index d48f74e..9d5dc20 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index c42436c23d..d261ea57b5 100644 --- a/configure.ac +++ b/configure.ac -@@ -3740,7 +3740,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -3743,7 +3743,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index d156a73..3595c0d 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 3c13076b82..93af30321d 100644 --- a/configure.ac +++ b/configure.ac -@@ -3804,6 +3804,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3807,6 +3807,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index c256708..f0eeb61 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.ac b/configure.ac index 93af30321d..bc13397e0e 100644 --- a/configure.ac +++ b/configure.ac -@@ -3776,6 +3776,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -3779,6 +3779,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 93af30321d..bc13397e0e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -3800,6 +3804,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3803,6 +3807,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index bf51605..fc85914 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -3691,9 +3691,6 @@ AS_CASE(["$target_os"], +@@ -3694,9 +3694,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 80b137e380..63cd3b4f8b 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -3716,56 +3713,62 @@ AC_ARG_WITH(ridir, +@@ -3719,56 +3716,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -3782,6 +3785,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -3785,6 +3788,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -237,7 +237,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1353,7 +1353,8 @@ def test_self_use_paths +@@ -1378,7 +1378,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -247,7 +247,7 @@ index b25068405d..e9fef4a311 100644 assert_equal File.join(parts), Gem.user_dir end -@@ -1429,7 +1430,7 @@ def test_self_vendor_dir +@@ -1454,7 +1455,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, 'vendor')) do expected = File.join RbConfig::CONFIG['vendordir'], 'gems', diff --git a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch index 4d81a84..9718d6e 100644 --- a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +++ b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch @@ -8,14 +8,14 @@ on Red Hat platforms. This workaround rhbz#1361037 --- - test/fiddle/helper.rb | 105 ------------------------------------------ - 1 file changed, 105 deletions(-) + test/fiddle/helper.rb | 111 ------------------------------------------ + 1 file changed, 111 deletions(-) diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb index 1da3d93..65148a1 100644 --- a/test/fiddle/helper.rb +++ b/test/fiddle/helper.rb -@@ -6,111 +6,6 @@ +@@ -6,115 +6,6 @@ libc_so = libm_so = nil @@ -56,8 +56,7 @@ index 1da3d93..65148a1 100644 - crtname = RbConfig::CONFIG["RUBY_SO_NAME"][/msvc\w+/] || 'ucrtbase' - libc_so = libm_so = "#{crtname}.dll" -when /darwin/ -- libc_so = "/usr/lib/libc.dylib" -- libm_so = "/usr/lib/libm.dylib" +- libc_so = libm_so = "/usr/lib/libSystem.B.dylib" -when /kfreebsd/ - libc_so = "/lib/libc.so.0.1" - libm_so = "/lib/libm.so.1" @@ -123,6 +122,11 @@ index 1da3d93..65148a1 100644 - -libc_so = nil if !libc_so || (libc_so[0] == ?/ && !File.file?(libc_so)) -libm_so = nil if !libm_so || (libm_so[0] == ?/ && !File.file?(libm_so)) +- +-# macOS 11.0+ removed libSystem.B.dylib from /usr/lib. But It works with dlopen. +-if RUBY_PLATFORM =~ /darwin/ +- libc_so = libm_so = "/usr/lib/libSystem.B.dylib" +-end - if !libc_so || !libm_so ruby = EnvUtil.rubybin diff --git a/ruby-2.6.0-config-support-include-directive.patch b/ruby-2.6.0-config-support-include-directive.patch deleted file mode 100644 index 5b2024b..0000000 --- a/ruby-2.6.0-config-support-include-directive.patch +++ /dev/null @@ -1,182 +0,0 @@ -From f46bac1f3e8634e24c747d06b28e11b874f1e488 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Thu, 16 Aug 2018 19:40:48 +0900 -Subject: [PATCH] config: support .include directive - -OpenSSL 1.1.1 introduces a new '.include' directive. Update our config -parser to support that. - -As mentioned in the referenced GitHub issue, we should use the OpenSSL -API instead of implementing the parsing logic ourselves, but it will -need backwards-incompatible changes which we can't backport to stable -versions. So continue to use the Ruby implementation for now. - -Reference: https://github.com/ruby/openssl/issues/208 ---- - ext/openssl/lib/openssl/config.rb | 54 ++++++++++++++++++++----------- - test/openssl/test_config.rb | 54 +++++++++++++++++++++++++++++++ - 2 files changed, 90 insertions(+), 18 deletions(-) - -diff --git a/ext/openssl/lib/openssl/config.rb b/ext/openssl/lib/openssl/config.rb -index 88225451..ba3a54c8 100644 ---- a/ext/openssl/lib/openssl/config.rb -+++ b/ext/openssl/lib/openssl/config.rb -@@ -77,29 +77,44 @@ def get_key_string(data, section, key) # :nodoc: - def parse_config_lines(io) - section = 'default' - data = {section => {}} -- while definition = get_definition(io) -+ io_stack = [io] -+ while definition = get_definition(io_stack) - definition = clear_comments(definition) - next if definition.empty? -- if definition[0] == ?[ -+ case definition -+ when /\A\[/ - if /\[([^\]]*)\]/ =~ definition - section = $1.strip - data[section] ||= {} - else - raise ConfigError, "missing close square bracket" - end -- else -- if /\A([^:\s]*)(?:::([^:\s]*))?\s*=(.*)\z/ =~ definition -- if $2 -- section = $1 -- key = $2 -- else -- key = $1 -+ when /\A\.include (\s*=\s*)?(.+)\z/ -+ path = $2 -+ if File.directory?(path) -+ files = Dir.glob(File.join(path, "*.{cnf,conf}"), File::FNM_EXTGLOB) -+ else -+ files = [path] -+ end -+ -+ files.each do |filename| -+ begin -+ io_stack << StringIO.new(File.read(filename)) -+ rescue -+ raise ConfigError, "could not include file '%s'" % filename - end -- value = unescape_value(data, section, $3) -- (data[section] ||= {})[key] = value.strip -+ end -+ when /\A([^:\s]*)(?:::([^:\s]*))?\s*=(.*)\z/ -+ if $2 -+ section = $1 -+ key = $2 - else -- raise ConfigError, "missing equal sign" -+ key = $1 - end -+ value = unescape_value(data, section, $3) -+ (data[section] ||= {})[key] = value.strip -+ else -+ raise ConfigError, "missing equal sign" - end - end - data -@@ -212,10 +227,10 @@ def clear_comments(line) - scanned.join - end - -- def get_definition(io) -- if line = get_line(io) -+ def get_definition(io_stack) -+ if line = get_line(io_stack) - while /[^\\]\\\z/ =~ line -- if extra = get_line(io) -+ if extra = get_line(io_stack) - line += extra - else - break -@@ -225,9 +240,12 @@ def get_definition(io) - end - end - -- def get_line(io) -- if line = io.gets -- line.gsub(/[\r\n]*/, '') -+ def get_line(io_stack) -+ while io = io_stack.last -+ if line = io.gets -+ return line.gsub(/[\r\n]*/, '') -+ end -+ io_stack.pop - end - end - end -diff --git a/test/openssl/test_config.rb b/test/openssl/test_config.rb -index 99dcc497..5653b5d0 100644 ---- a/test/openssl/test_config.rb -+++ b/test/openssl/test_config.rb -@@ -120,6 +120,49 @@ def test_s_parse_format - assert_equal("error in line 7: missing close square bracket", excn.message) - end - -+ def test_s_parse_include -+ in_tmpdir("ossl-config-include-test") do |dir| -+ Dir.mkdir("child") -+ File.write("child/a.conf", <<~__EOC__) -+ [default] -+ file-a = a.conf -+ [sec-a] -+ a = 123 -+ __EOC__ -+ File.write("child/b.cnf", <<~__EOC__) -+ [default] -+ file-b = b.cnf -+ [sec-b] -+ b = 123 -+ __EOC__ -+ File.write("include-child.conf", <<~__EOC__) -+ key_outside_section = value_a -+ .include child -+ __EOC__ -+ -+ include_file = <<~__EOC__ -+ [default] -+ file-main = unnamed -+ [sec-main] -+ main = 123 -+ .include = include-child.conf -+ __EOC__ -+ -+ # Include a file by relative path -+ c1 = OpenSSL::Config.parse(include_file) -+ assert_equal(["default", "sec-a", "sec-b", "sec-main"], c1.sections.sort) -+ assert_equal(["file-main", "file-a", "file-b"], c1["default"].keys) -+ assert_equal({"a" => "123"}, c1["sec-a"]) -+ assert_equal({"b" => "123"}, c1["sec-b"]) -+ assert_equal({"main" => "123", "key_outside_section" => "value_a"}, c1["sec-main"]) -+ -+ # Relative paths are from the working directory -+ assert_raise(OpenSSL::ConfigError) do -+ Dir.chdir("child") { OpenSSL::Config.parse(include_file) } -+ end -+ end -+ end -+ - def test_s_load - # alias of new - c = OpenSSL::Config.load -@@ -299,6 +342,17 @@ def test_clone - @it['newsection'] = {'a' => 'b'} - assert_not_equal(@it.sections.sort, c.sections.sort) - end -+ -+ private -+ -+ def in_tmpdir(*args) -+ Dir.mktmpdir(*args) do |dir| -+ dir = File.realpath(dir) -+ Dir.chdir(dir) do -+ yield dir -+ end -+ end -+ end - end - - end diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index 58c92cf..5dd2654 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -57,7 +57,7 @@ diff --git a/ruby.c b/ruby.c index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1439,10 +1439,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1451,10 +1451,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); diff --git a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch index 64e2114..81384ba 100644 --- a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch +++ b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -20,7 +20,7 @@ diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_repor index 628fcd0340..2c677cc8a7 100644 --- a/test/-ext-/bug_reporter/test_bug_reporter.rb +++ b/test/-ext-/bug_reporter/test_bug_reporter.rb -@@ -21,7 +21,7 @@ def test_bug_reporter_add +@@ -19,7 +19,7 @@ def test_bug_reporter_add args = ["--disable-gems", "-r-test-/bug_reporter", "-C", tmpdir] stdin = "register_sample_bug_reporter(12345); Process.kill :SEGV, $$" diff --git a/ruby-2.7.2-psych-fix-yaml-tests.patch b/ruby-2.7.2-psych-fix-yaml-tests.patch deleted file mode 100644 index 5a4be77..0000000 --- a/ruby-2.7.2-psych-fix-yaml-tests.patch +++ /dev/null @@ -1,162 +0,0 @@ -From 3c55d93cf68b1a969b90b306de4dd8b88d74a2f2 Mon Sep 17 00:00:00 2001 -From: nagachika -Date: Sat, 13 Jun 2020 11:29:51 +0900 -Subject: [PATCH] merge revision(s) 7e289cdf3fed588b2d5a6973e29f9ff95cb8d76c: - [Backport #16949] - - [ruby/psych] Fixing compatibility with libyaml 0.2.5 - - The main issue is that commas aren't allowed in local tags. libyaml - was updated to follow the spec, and our tests were out of date. - - See: https://github.com/yaml/libyaml/issues/196 - - https://github.com/ruby/psych/commit/3f5e520fd3 ---- - test/psych/test_nil.rb | 4 ++-- - test/psych/test_psych.rb | 17 +++++++---------- - test/psych/test_yaml.rb | 24 ++++++++++++------------ - version.h | 4 ++-- - 4 files changed, 23 insertions(+), 26 deletions(-) - -diff --git a/test/psych/test_nil.rb b/test/psych/test_nil.rb -index 910a2e697def..bcbbcb9c9397 100644 ---- a/test/psych/test_nil.rb -+++ b/test/psych/test_nil.rb -@@ -5,13 +5,13 @@ module Psych - class TestNil < TestCase - def test_nil - yml = Psych.dump nil -- assert_match(/--- \n(?:\.\.\.\n)?/, yml) -+ assert_match(/---[ ]?\n(?:\.\.\.\n)?/, yml) - assert_nil Psych.load(yml) - end - - def test_array_nil - yml = Psych.dump [nil] -- assert_equal "---\n- \n", yml -+ assert_match(/---\n-[ ]?\n/, yml) - assert_equal [nil], Psych.load(yml) - end - -diff --git a/test/psych/test_psych.rb b/test/psych/test_psych.rb -index eeadc864ef4e..e557feffb76a 100644 ---- a/test/psych/test_psych.rb -+++ b/test/psych/test_psych.rb -@@ -178,17 +178,17 @@ def test_add_builtin_type - - def test_domain_types - got = nil -- Psych.add_domain_type 'foo.bar,2002', 'foo' do |type, val| -+ Psych.add_domain_type 'foo.bar/2002', 'foo' do |type, val| - got = val - end - -- Psych.load('--- !foo.bar,2002/foo hello') -+ Psych.load('--- !foo.bar/2002:foo hello') - assert_equal 'hello', got - -- Psych.load("--- !foo.bar,2002/foo\n- hello\n- world") -+ Psych.load("--- !foo.bar/2002:foo\n- hello\n- world") - assert_equal %w{ hello world }, got - -- Psych.load("--- !foo.bar,2002/foo\nhello: world") -+ Psych.load("--- !foo.bar/2002:foo\nhello: world") - assert_equal({ 'hello' => 'world' }, got) - end - -@@ -295,16 +295,13 @@ def test_callbacks - types = [] - appender = lambda { |*args| types << args } - -- Psych.add_builtin_type('foo', &appender) -- Psych.add_domain_type('example.com,2002', 'foo', &appender) -+ Psych.add_domain_type('example.com:2002', 'foo', &appender) - Psych.load <<-eoyml --- !tag:yaml.org,2002:foo bar --- !tag:example.com,2002:foo bar -+- !tag:example.com:2002:foo bar - eoyml - - assert_equal [ -- ["tag:yaml.org,2002:foo", "bar"], -- ["tag:example.com,2002:foo", "bar"] -+ ["tag:example.com:2002:foo", "bar"] - ], types - end - -diff --git a/test/psych/test_yaml.rb b/test/psych/test_yaml.rb -index 5fa759c981b2..0dfd60f89434 100644 ---- a/test/psych/test_yaml.rb -+++ b/test/psych/test_yaml.rb -@@ -617,11 +617,11 @@ def test_spec_domain_prefix - raise ArgumentError, "Not a Hash in domain.tld,2002/invoice: " + val.inspect - end - } -- Psych.add_domain_type( "domain.tld,2002", 'invoice', &customer_proc ) -- Psych.add_domain_type( "domain.tld,2002", 'customer', &customer_proc ) -+ Psych.add_domain_type( "domain.tld/2002", 'invoice', &customer_proc ) -+ Psych.add_domain_type( "domain.tld/2002", 'customer', &customer_proc ) - assert_parse_only( { "invoice"=> { "customers"=> [ { "given"=>"Chris", "type"=>"domain customer", "family"=>"Dumars" } ], "type"=>"domain invoice" } }, <7, "center"=>{"x"=>73, "y"=>129}, "TYPE"=>"Shape: graph/circle"}, {"finish"=>{"x"=>89, "y"=>102}, "TYPE"=>"Shape: graph/line", "start"=>{"x"=>73, "y"=>129}}, {"TYPE"=>"Shape: graph/text", "value"=>"Pretty vector drawing.", "start"=>{"x"=>73, "y"=>129}, "color"=>16772795}, "Shape Container"]], < -Date: Thu, 23 Jan 2020 15:33:42 +0900 -Subject: [PATCH] brace the fact that lchmod(2) can EOPNOTSUPP - -Musl libc has this function as a tiny wrapper of fchmodat(3posix). On -the other hand Linux kernel does not support changing modes of a symlink. -The operation always fails with EOPNOTSUPP. This fchmodat behaviour is -defined in POSIX. We have to take care of such exceptions. ---- - lib/fileutils.rb | 3 ++- - test/pathname/test_pathname.rb | 2 +- - test/ruby/test_notimp.rb | 19 ++++++++++++------- - 3 files changed, 15 insertions(+), 9 deletions(-) - -diff --git a/lib/fileutils.rb b/lib/fileutils.rb -index a7ad65ae5e98..04788e26ca9c 100644 ---- a/lib/fileutils.rb -+++ b/lib/fileutils.rb -@@ -1345,6 +1345,7 @@ def chmod(mode) - else - File.chmod mode, path() - end -+ rescue Errno::EOPNOTSUPP - end - - def chown(uid, gid) -@@ -1439,7 +1440,7 @@ def copy_metadata(path) - if st.symlink? - begin - File.lchmod mode, path -- rescue NotImplementedError -+ rescue NotImplementedError, Errno::EOPNOTSUPP - end - else - File.chmod mode, path -diff --git a/test/pathname/test_pathname.rb b/test/pathname/test_pathname.rb -index 792510bdfb2d..2ce32a6c1208 100644 ---- a/test/pathname/test_pathname.rb -+++ b/test/pathname/test_pathname.rb -@@ -818,7 +818,7 @@ def test_lchmod - old = path.lstat.mode - begin - path.lchmod(0444) -- rescue NotImplementedError -+ rescue NotImplementedError, Errno::EOPNOTSUPP - next - end - assert_equal(0444, path.lstat.mode & 0777) -diff --git a/test/ruby/test_notimp.rb b/test/ruby/test_notimp.rb -index b069154cfc3f..e13db692b50d 100644 ---- a/test/ruby/test_notimp.rb -+++ b/test/ruby/test_notimp.rb -@@ -13,11 +13,11 @@ def test_respond_to_fork - - def test_respond_to_lchmod - assert_include(File.methods, :lchmod) -- if /linux/ =~ RUBY_PLATFORM -- assert_equal(false, File.respond_to?(:lchmod)) -- end -- if /freebsd/ =~ RUBY_PLATFORM -+ case RUBY_PLATFORM -+ when /freebsd/, /linux-musl/ - assert_equal(true, File.respond_to?(:lchmod)) -+ when /linux/ -+ assert_equal(false, File.respond_to?(:lchmod)) - end - end - -@@ -57,9 +57,14 @@ def test_call_lchmod - File.open(f, "w") {} - File.symlink f, g - newmode = 0444 -- File.lchmod newmode, "#{d}/g" -- snew = File.lstat(g) -- assert_equal(newmode, snew.mode & 0777) -+ begin -+ File.lchmod newmode, "#{d}/g" -+ rescue Errno::EOPNOTSUPP -+ skip $! -+ else -+ snew = File.lstat(g) -+ assert_equal(newmode, snew.mode & 0777) -+ end - } - end - end diff --git a/ruby-2.8.0-Moved-not-implemented-method-tests.patch b/ruby-2.8.0-Moved-not-implemented-method-tests.patch deleted file mode 100644 index ffc8c52..0000000 --- a/ruby-2.8.0-Moved-not-implemented-method-tests.patch +++ /dev/null @@ -1,131 +0,0 @@ -From 72c02aa4b79731c7f25c9267f74b347f1946c704 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Fri, 28 Feb 2020 21:15:37 +0900 -Subject: [PATCH] Moved not-implemented method tests [Bug #16662] - -Test not-implemented method with the dedicated methods, instead of -platform dependent features. ---- - test/-ext-/test_notimplement.rb | 7 +++ - test/ruby/test_notimp.rb | 90 --------------------------------- - 2 files changed, 7 insertions(+), 90 deletions(-) - delete mode 100644 test/ruby/test_notimp.rb - -diff --git a/test/-ext-/test_notimplement.rb b/test/-ext-/test_notimplement.rb -index 92a2fd22b8d6..038b507b7312 100644 ---- a/test/-ext-/test_notimplement.rb -+++ b/test/-ext-/test_notimplement.rb -@@ -13,10 +13,17 @@ def test_funcall_notimplement - end - - def test_respond_to -+ assert_include(Bug.methods(false), :notimplement) -+ assert_include(Bug::NotImplement.instance_methods(false), :notimplement) - assert_not_respond_to(Bug, :notimplement) - assert_not_respond_to(Bug::NotImplement.new, :notimplement) - end - -+ def test_method_inspect_notimplement -+ assert_match(/not-implemented/, Bug.method(:notimplement).inspect) -+ assert_match(/not-implemented/, Bug::NotImplement.instance_method(:notimplement).inspect) -+ end -+ - def test_not_method_defined - assert !Bug::NotImplement.method_defined?(:notimplement) - assert !Bug::NotImplement.method_defined?(:notimplement, true) -diff --git a/test/ruby/test_notimp.rb b/test/ruby/test_notimp.rb -deleted file mode 100644 -index e13db692b50d..000000000000 ---- a/test/ruby/test_notimp.rb -+++ /dev/null -@@ -1,90 +0,0 @@ --# frozen_string_literal: false --require 'test/unit' --require 'timeout' --require 'tmpdir' -- --class TestNotImplement < Test::Unit::TestCase -- def test_respond_to_fork -- assert_include(Process.methods, :fork) -- if /linux/ =~ RUBY_PLATFORM -- assert_equal(true, Process.respond_to?(:fork)) -- end -- end -- -- def test_respond_to_lchmod -- assert_include(File.methods, :lchmod) -- case RUBY_PLATFORM -- when /freebsd/, /linux-musl/ -- assert_equal(true, File.respond_to?(:lchmod)) -- when /linux/ -- assert_equal(false, File.respond_to?(:lchmod)) -- end -- end -- -- def test_call_fork -- GC.start -- pid = nil -- ps = -- case RUBY_PLATFORM -- when /linux/ # assume Linux Distribution uses procps -- proc {`ps -eLf #{pid}`} -- when /freebsd/ -- proc {`ps -lH #{pid}`} -- when /darwin/ -- proc {`ps -lM #{pid}`} -- else -- proc {`ps -l #{pid}`} -- end -- assert_nothing_raised(Timeout::Error, ps) do -- EnvUtil.timeout(20) { -- pid = fork {} -- Process.wait pid -- pid = nil -- } -- end -- ensure -- if pid -- Process.kill(:KILL, pid) -- Process.wait pid -- end -- end if Process.respond_to?(:fork) -- -- def test_call_lchmod -- if File.respond_to?(:lchmod) -- Dir.mktmpdir {|d| -- f = "#{d}/f" -- g = "#{d}/g" -- File.open(f, "w") {} -- File.symlink f, g -- newmode = 0444 -- begin -- File.lchmod newmode, "#{d}/g" -- rescue Errno::EOPNOTSUPP -- skip $! -- else -- snew = File.lstat(g) -- assert_equal(newmode, snew.mode & 0777) -- end -- } -- end -- end -- -- def test_method_inspect_fork -- m = Process.method(:fork) -- if Process.respond_to?(:fork) -- assert_not_match(/not-implemented/, m.inspect) -- else -- assert_match(/not-implemented/, m.inspect) -- end -- end -- -- def test_method_inspect_lchmod -- m = File.method(:lchmod) -- if File.respond_to?(:lchmod) -- assert_not_match(/not-implemented/, m.inspect) -- else -- assert_match(/not-implemented/, m.inspect) -- end -- end -- --end diff --git a/ruby.spec b/ruby.spec index 942088f..9c0d538 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 7 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -22,7 +22,7 @@ %endif -%global release 134 +%global release 135 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -30,7 +30,7 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.1.2 +%global rubygems_version 3.1.4 %global rubygems_molinillo_version 0.5.7 # Default gems. @@ -44,7 +44,7 @@ %global bigdecimal_version 2.0.0 %global did_you_mean_version 1.4.0 %global io_console_version 0.5.6 -%global irb_version 1.2.3 +%global irb_version 1.2.6 %global json_version 2.3.0 %global net_telnet_version 0.2.0 %global openssl_version 2.1.2 @@ -150,17 +150,9 @@ Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch # Revert commit which breaks bundled net-http-persistent version check. # https://github.com/drbrain/net-http-persistent/pull/109 Patch10: ruby-2.7.0-Remove-RubyGems-dependency.patch -# Fix lchmod test failures. -# https://github.com/ruby/ruby/commit/a19228f878d955eaf2cce086bcf53f46fdf894b9 -Patch11: ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch -# https://github.com/ruby/ruby/commit/72c02aa4b79731c7f25c9267f74b347f1946c704 -Patch12: ruby-2.8.0-Moved-not-implemented-method-tests.patch # Prevent issues with openssl loading when RubyGems are disabled. # https://github.com/ruby/openssl/pull/242 Patch13: ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch -# Fix compatibility with libyaml 0.2.5 -# https://bugs.ruby-lang.org/issues/16949 -Patch14: ruby-2.7.2-psych-fix-yaml-tests.patch # Fix `require` behavior allowing to load libraries multiple times. # https://github.com/rubygems/rubygems/issues/3647 # Because there were multiple fixes in `Kernel.require` in recent months, @@ -177,10 +169,6 @@ Patch18: rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.pa # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch -# Add support for .include directive used by OpenSSL config files. -# https://github.com/ruby/openssl/pull/216 -Patch22: ruby-2.6.0-config-support-include-directive.patch - Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick Recommends: ruby(rubygems) >= %{rubygems_version} @@ -589,16 +577,12 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch9 -p1 %patch10 -p1 -%patch11 -p1 -%patch12 -p1 %patch13 -p1 -%patch14 -p1 %patch15 -p1 %patch16 -p1 %patch17 -p1 %patch18 -p1 %patch19 -p1 -%patch22 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -878,8 +862,7 @@ MSPECOPTS="$MSPECOPTS -P 'File.utime allows Time instances in the far future to # Disable File.lchmod specs, which fails when building against glibc 2.31.9000. # https://bugs.ruby-lang.org/issues/16749 -MSPECOPTS="$MSPECOPTS -P 'File.lchmod returns false from \#respond_to?'" -MSPECOPTS="$MSPECOPTS -P 'File.lchmod raises a NotImplementedError when called'" +MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not of the file'" # Give an option to increase the timeout in tests. # https://bugs.ruby-lang.org/issues/16921 @@ -1167,7 +1150,7 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod raises a NotImplementedError when called'" %{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{gem_dir}/specifications/default/readline-0.0.2.gemspec %{gem_dir}/specifications/default/readline-ext-0.1.0.gemspec -%{gem_dir}/specifications/default/reline-0.1.3.gemspec +%{gem_dir}/specifications/default/reline-0.1.5.gemspec %{gem_dir}/specifications/default/rexml-3.2.3.gemspec %{gem_dir}/specifications/default/rss-0.2.8.gemspec %{gem_dir}/specifications/default/sdbm-1.0.0.gemspec @@ -1297,6 +1280,9 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod raises a NotImplementedError when called'" %changelog +* Tue Oct 13 2020 Vít Ondruch - 2.7.2-135 +- Upgrade to Ruby 2.7.2. + * Wed Jul 29 2020 Fedora Release Engineering - 2.7.1-134 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild diff --git a/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch b/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch index b1438dd..ae6ecbb 100644 --- a/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch +++ b/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch @@ -15,7 +15,7 @@ diff --git a/lib/rubygems.rb b/lib/rubygems.rb index 843cb49e4a..d1a9a1c7e1 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb -@@ -660,10 +660,20 @@ def self.load_path_insert_index +@@ -662,10 +662,20 @@ def self.load_path_insert_index index end @@ -53,7 +53,7 @@ diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb index a05a2898d1..53dd495aef 100644 --- a/lib/rubygems/test_case.rb +++ b/lib/rubygems/test_case.rb -@@ -379,6 +379,7 @@ def setup +@@ -385,6 +385,7 @@ def setup Gem::Security.reset Gem.loaded_specs.clear @@ -98,7 +98,7 @@ diff --git a/lib/rubygems.rb b/lib/rubygems.rb index d1a9a1c7e1..ca80326459 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb -@@ -657,7 +657,7 @@ def self.load_path_insert_index +@@ -659,7 +659,7 @@ def self.load_path_insert_index index = $LOAD_PATH.index RbConfig::CONFIG['sitelibdir'] @@ -107,7 +107,7 @@ index d1a9a1c7e1..ca80326459 100644 end ## -@@ -674,15 +674,8 @@ def self.activated_gem_paths +@@ -676,15 +676,8 @@ def self.activated_gem_paths def self.add_to_load_path(*paths) @activated_gem_paths = activated_gem_paths + paths.size diff --git a/sources b/sources index 38b728a..df34d8a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.7.1.tar.xz) = 79f98b1ea98e0b10ec79da1883e8fc84d48ffe5c09ae945cbebde94365e35a589d919aac965f74d70ca7e21370ecee631ac5a8f9c4eac61d62f5aa629f27bf31 +SHA512 (ruby-2.7.2.tar.xz) = 7972278b096aa768c7adf2befd26003e18781a29ca317640317d30d93d6e963ded197724c8e2f1dfe1e838c5647176d414a74732a62e931fb50d6f2e0f777349 From 946f8b8693580574f6f93de4540992847d3c7f16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Oct 2020 17:02:57 +0200 Subject: [PATCH 361/530] Enable arm64 optimizations. The same already exists for power/x86. Resolves: rhbz#1884728 --- ruby.spec | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ruby.spec b/ruby.spec index 9c0d538..3f1a8ee 100644 --- a/ruby.spec +++ b/ruby.spec @@ -168,6 +168,10 @@ Patch18: rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.pa # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch +# Enable arm64 optimizations. +# https://bugzilla.redhat.com/show_bug.cgi?id=1884728 +# https://github.com/ruby/ruby/pull/3393 +Patch20: ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -583,6 +587,7 @@ rm -rf ext/fiddle/libffi* %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . From be9961f6d007f12e7ac37b59800127a9d735c257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Oct 2020 17:54:53 +0200 Subject: [PATCH 362/530] Add missing patch. --- ...timizations-that-exist-for-power-x86.patch | 178 ++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch diff --git a/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch b/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch new file mode 100644 index 0000000..decb45f --- /dev/null +++ b/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch @@ -0,0 +1,178 @@ +From c5806d668f84a86e9e6a522f84b8aa6cb4cdaae9 Mon Sep 17 00:00:00 2001 +From: Ali Saidi +Date: Wed, 5 Aug 2020 20:46:28 -0500 +Subject: [PATCH 1/3] Enable unaligned accesses on arm64 + +64-bit Arm platforms support unaligned accesses. + +Running the string benchmarks this change improves performance +by an average of 1.04x, min .96x, max 1.21x, median 1.01x +--- + include/ruby/defines.h | 2 +- + regint.h | 2 +- + siphash.c | 2 +- + st.c | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/include/ruby/defines.h b/include/ruby/defines.h +index 49f673ef936a..0193275e8b78 100644 +--- a/include/ruby/defines.h ++++ b/include/ruby/defines.h +@@ -485,7 +485,7 @@ + #ifndef UNALIGNED_WORD_ACCESS + # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ +- defined(__powerpc64__) || \ ++ defined(__powerpc64__) || defined(__aarch64__) || \ + defined(__mc68020__) + # define UNALIGNED_WORD_ACCESS 1 + # else +diff --git a/regint.h b/regint.h +index a2f5bbba1d1f..0740429688bc 100644 +--- a/regint.h ++++ b/regint.h +@@ -52,7 +52,7 @@ + #ifndef UNALIGNED_WORD_ACCESS + # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ +- defined(__powerpc64__) || \ ++ defined(__powerpc64__) || defined(__aarch64__) || \ + defined(__mc68020__) + # define UNALIGNED_WORD_ACCESS 1 + # else +diff --git a/siphash.c b/siphash.c +index 153d2c690ab9..ddf8ee245d81 100644 +--- a/siphash.c ++++ b/siphash.c +@@ -30,7 +30,7 @@ + #ifndef UNALIGNED_WORD_ACCESS + # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ +- defined(__powerpc64__) || \ ++ defined(__powerpc64__) || defined(__aarch64__) || \ + defined(__mc68020__) + # define UNALIGNED_WORD_ACCESS 1 + # endif +diff --git a/st.c b/st.c +index c11535ef9779..8be466bf733f 100644 +--- a/st.c ++++ b/st.c +@@ -1815,7 +1815,7 @@ st_values_check(st_table *tab, st_data_t *values, st_index_t size, + #ifndef UNALIGNED_WORD_ACCESS + # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ +- defined(__powerpc64__) || \ ++ defined(__powerpc64__) || defined(__aarch64__) || \ + defined(__mc68020__) + # define UNALIGNED_WORD_ACCESS 1 + # endif + +From 79b7b9143fda0f33fc9375980cecc61eb42c6f66 Mon Sep 17 00:00:00 2001 +From: Ali Saidi +Date: Wed, 5 Aug 2020 21:04:37 -0500 +Subject: [PATCH 2/3] arm64 enable gc optimizations + +Similar to x86 and powerpc optimizations. + +| |compare-ruby|built-ruby| +|:------|-----------:|---------:| +|hash1 | 0.225| 0.237| +| | -| 1.05x| +|hash2 | 0.110| 0.110| +| | 1.00x| -| +--- + gc.c | 13 +++++++++++++ + gc.h | 2 ++ + 2 files changed, 15 insertions(+) + +diff --git a/gc.c b/gc.c +index 22972dfc806c..788f06f1586e 100644 +--- a/gc.c ++++ b/gc.c +@@ -1153,6 +1153,19 @@ tick(void) + return val; + } + ++#elif defined(__aarch64__) && defined(__GNUC__) ++typedef unsigned long tick_t; ++#define PRItick "lu" ++ ++static __inline__ tick_t ++tick(void) ++{ ++ unsigned long val; ++ __asm__ __volatile__ ("mrs %0, cntvct_el0", : "=r" (val)); ++ return val; ++} ++ ++ + #elif defined(_WIN32) && defined(_MSC_VER) + #include + typedef unsigned __int64 tick_t; +diff --git a/gc.h b/gc.h +index 6568079c54e5..47a4ca19a0c5 100644 +--- a/gc.h ++++ b/gc.h +@@ -8,6 +8,8 @@ + #define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movl\t%%esp, %0" : "=r" (*(p))) + #elif defined(__powerpc64__) && defined(__GNUC__) + #define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mr\t%0, %%r1" : "=r" (*(p))) ++#elif defined(__aarch64__) && defined(__GNUC__) ++#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mov\t%0, sp" : "=r" (*(p))) + #else + NOINLINE(void rb_gc_set_stack_end(VALUE **stack_end_p)); + #define SET_MACHINE_STACK_END(p) rb_gc_set_stack_end(p) + +From c985b8c6868a380e44e285368af4a4f414ce3309 Mon Sep 17 00:00:00 2001 +From: Ali Saidi +Date: Wed, 5 Aug 2020 21:15:55 -0500 +Subject: [PATCH 3/3] vm_exec.c: improve performance for arm64 + +| |compare-ruby|built-ruby| +|:------------------------------|-----------:|---------:| +|vm_array | 26.501M| 27.959M| +| | -| 1.06x| +|vm_attr_ivar | 21.606M| 31.429M| +| | -| 1.45x| +|vm_attr_ivar_set | 21.178M| 26.113M| +| | -| 1.23x| +|vm_backtrace | 6.621| 6.668| +| | -| 1.01x| +|vm_bigarray | 26.205M| 29.958M| +| | -| 1.14x| +|vm_bighash | 504.155k| 479.306k| +| | 1.05x| -| +|vm_block | 16.692M| 21.315M| +| | -| 1.28x| +|block_handler_type_iseq | 5.083| 7.004| +| | -| 1.38x| +--- + vm_exec.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/vm_exec.c b/vm_exec.c +index ce2e053ee745..7aa56f6ad620 100644 +--- a/vm_exec.c ++++ b/vm_exec.c +@@ -27,6 +27,9 @@ static void vm_insns_counter_count_insn(int insn) {} + #elif defined(__GNUC__) && defined(__powerpc64__) + #define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("r" reg) + ++#elif defined(__GNUC__) && defined(__aarch64__) ++#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("x" reg) ++ + #else + #define DECL_SC_REG(type, r, reg) register type reg_##r + #endif +@@ -74,6 +77,11 @@ vm_exec_core(rb_execution_context_t *ec, VALUE initial) + DECL_SC_REG(rb_control_frame_t *, cfp, "15"); + #define USE_MACHINE_REGS 1 + ++#elif defined(__GNUC__) && defined(__aarch64__) ++ DECL_SC_REG(const VALUE *, pc, "19"); ++ DECL_SC_REG(rb_control_frame_t *, cfp, "20"); ++#define USE_MACHINE_REGS 1 ++ + #else + register rb_control_frame_t *reg_cfp; + const VALUE *reg_pc; From 986dc48123fd737f31a585e6c137e50e9c9c596d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 25 Nov 2020 11:01:43 +0100 Subject: [PATCH 363/530] Add explicit `BR: make`. --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 3f1a8ee..fc6cc44 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 135 +%global release 136 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -199,6 +199,7 @@ BuildRequires: procps %{?with_hostname:BuildRequires: %{_bindir}/hostname} BuildRequires: multilib-rpm-config BuildRequires: gcc +BuildRequires: make BuildRequires: zlib-devel # This package provides %%{_bindir}/ruby-mri therefore it is marked by this @@ -1285,6 +1286,9 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not %changelog +* Tue Nov 24 18:16:02 CET 2020 Vít Ondruch - 2.7.2-136 +- Add explicit `BR: make`. + * Tue Oct 13 2020 Vít Ondruch - 2.7.2-135 - Upgrade to Ruby 2.7.2. From 2a352348bd279acf56541a800eef9614698202f8 Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Tue, 15 Dec 2020 16:17:58 +0100 Subject: [PATCH 364/530] Add Recommends: redhat-rpm-config to devel subpackage as it's needed for building (gem install ...) gems with binary extensions. This is a workaround to have /usr/lib/rpm/redhat/redhat-hardened-cc1 on the system, as same CFLAGS are reused from when Ruby was built. Resolves: rhbz#1905222 --- ruby.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index fc6cc44..3d3d309 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 136 +%global release 137 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -219,6 +219,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release} # This would not be needed if ~50 packages depending on -devel used # --disable-gems Requires: rubygems +# Users need CFLAGS from /usr/lib/rpm/redhat/redhat-hardened-cc1 +# for building gems with binary extensions (rhbz#1905222). +Recommends: redhat-rpm-config %description devel Header files and libraries for building an extension library for the @@ -1286,6 +1289,10 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not %changelog +* Tue Dec 15 16:26:46 CET 2020 Pavel Valena - 2.7.2-137 +- Add Recommends: redhat-rpm-config to devel subpackage. + Resolves: rhbz#1905222 + * Tue Nov 24 18:16:02 CET 2020 Vít Ondruch - 2.7.2-136 - Add explicit `BR: make`. From f11a9b4fe3a245cf4f27e127716fe415396531a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 4 Jan 2021 16:25:55 +0100 Subject: [PATCH 365/530] Upgrade to Ruby 3.0.0. * Extract RSS and REXML into separate subpackages, because they were moved from default gems to bundled gems. * Obsolete Net::Telnet and XMLRPC packages, because they were dropped from Ruby. The detailed changelog leading to this release is preserved in private-ruby-3.0 branch. --- .gitignore | 3 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 10 +- ruby-2.3.0-ruby_version.patch | 42 +- ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch | 122 +---- ruby-2.7.0-Initialize-ABRT-hook.patch | 4 +- ruby-2.7.0-Remove-RubyGems-dependency.patch | 32 -- ..._bug_reporter_add-witout-raising-err.patch | 2 +- ...move-unneeded-gem-require-for-ipaddr.patch | 22 - ...timizations-that-exist-for-power-x86.patch | 178 ------- ruby.spec | 439 +++++++++++------- rubygems-3.1.3-Fix-I-require-priority.patch | 167 ------- ...nd-performance-regression-in-require.patch | 324 ------------- rubygems-3.1.3-Improve-require.patch | 92 ---- ...ude-empty-suffix-from-I-require-loop.patch | 29 -- sources | 2 +- 18 files changed, 311 insertions(+), 1163 deletions(-) delete mode 100644 ruby-2.7.0-Remove-RubyGems-dependency.patch delete mode 100644 ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch delete mode 100644 ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch delete mode 100644 rubygems-3.1.3-Fix-I-require-priority.patch delete mode 100644 rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch delete mode 100644 rubygems-3.1.3-Improve-require.patch delete mode 100644 rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch diff --git a/.gitignore b/.gitignore index 3523d77..a59f941 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ /*/ -/ruby-2.*.tar.bz2 -/ruby-2.*.tar.xz +/ruby-*.tar.xz /*.rpm diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 87583c2..9759776 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index d261ea57b5..3c13076b82 100644 --- a/configure.ac +++ b/configure.ac -@@ -3105,6 +3105,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3211,6 +3211,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 9d5dc20..2e751cb 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index c42436c23d..d261ea57b5 100644 --- a/configure.ac +++ b/configure.ac -@@ -3743,7 +3743,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -3852,7 +3852,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 3595c0d..c1b3942 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 3c13076b82..93af30321d 100644 --- a/configure.ac +++ b/configure.ac -@@ -3807,6 +3807,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3916,6 +3916,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index f0eeb61..1646675 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.ac b/configure.ac index 93af30321d..bc13397e0e 100644 --- a/configure.ac +++ b/configure.ac -@@ -3779,6 +3779,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -3888,6 +3888,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 93af30321d..bc13397e0e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -3803,6 +3807,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3912,6 +3916,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -64,10 +64,10 @@ index 79c003e..34f2382 100644 % R = {} % R["ruby_version"] = '"RUBY_LIB_VERSION"' diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index b47b6e1..0b99408 100755 +index e9110a17ca..76a1f0a315 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -343,6 +343,7 @@ def CONFIG.[](name, mandatory = false) +@@ -348,6 +348,7 @@ def CONFIG.[](name, mandatory = false) vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] end @@ -75,7 +75,7 @@ index b47b6e1..0b99408 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -570,7 +571,16 @@ def stub +@@ -580,7 +581,16 @@ def stub install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index fc85914..9dc9cc4 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -3694,9 +3694,6 @@ AS_CASE(["$target_os"], +@@ -3803,9 +3803,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 80b137e380..63cd3b4f8b 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -3719,56 +3716,62 @@ AC_ARG_WITH(ridir, +@@ -3828,56 +3825,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -3785,6 +3788,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -3894,6 +3897,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -165,13 +165,13 @@ index 970cb91..5bf8230 100644 - version = RbConfig::CONFIG['ruby_version'] + version = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] - BASE = if RbConfig::CONFIG.key? 'ridir' then - File.join RbConfig::CONFIG['ridir'], version + BASE = File.join RbConfig::CONFIG['ridir'], version + diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index d4c110e..d39c9a6 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -433,7 +433,7 @@ def CONFIG.[](name, mandatory = false) +@@ -438,7 +438,7 @@ def CONFIG.[](name, mandatory = false) install?(:doc, :rdoc) do if $rdocdir @@ -198,33 +198,33 @@ diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb index d4ff4a262c..3f9a5bf590 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -32,13 +32,13 @@ def self.default_dir +@@ -38,13 +38,13 @@ def self.default_dir [ File.dirname(RbConfig::CONFIG['sitedir']), 'Gems', -- RbConfig::CONFIG['ruby_version'] +- RbConfig::CONFIG['ruby_version'], + RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] ] else [ RbConfig::CONFIG['rubylibprefix'], 'gems', -- RbConfig::CONFIG['ruby_version'] +- RbConfig::CONFIG['ruby_version'], + RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] ] end -@@ -75,7 +75,8 @@ def self.default_specifications_dir - - def self.user_dir - parts = [Gem.user_home, '.gem', ruby_engine] +@@ -117,7 +117,8 @@ def self.user_dir + gem_dir = File.join(Gem.user_home, ".gem") + gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir) + parts = [gem_dir, ruby_engine] - parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty? + ruby_version_dir_name = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + parts << ruby_version_dir_name unless ruby_version_dir_name.empty? File.join parts end -@@ -158,7 +159,7 @@ def self.vendor_dir # :nodoc: +@@ -252,7 +253,7 @@ def self.vendor_dir # :nodoc: return nil unless RbConfig::CONFIG.key? 'vendordir' File.join RbConfig::CONFIG['vendordir'], 'gems', @@ -237,7 +237,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1378,7 +1378,8 @@ def test_self_use_paths +@@ -1369,7 +1369,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -245,9 +245,9 @@ index b25068405d..e9fef4a311 100644 + ruby_version_dir_name = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + parts << ruby_version_dir_name unless ruby_version_dir_name.empty? - assert_equal File.join(parts), Gem.user_dir - end -@@ -1454,7 +1455,7 @@ def test_self_vendor_dir + FileUtils.mkdir_p File.join(parts) + +@@ -1447,7 +1448,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, 'vendor')) do expected = File.join RbConfig::CONFIG['vendordir'], 'gems', @@ -274,15 +274,15 @@ diff --git a/configure.ac b/configure.ac index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -98,7 +98,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -81,7 +81,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) -AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version}') +AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version_dir_name}') - AC_CANONICAL_TARGET - test x"$target_alias" = x && + dnl checks for alternative programs + AC_CANONICAL_BUILD -- 2.1.0 diff --git a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch index 9718d6e..db6737d 100644 --- a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +++ b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch @@ -8,126 +8,20 @@ on Red Hat platforms. This workaround rhbz#1361037 --- - test/fiddle/helper.rb | 111 ------------------------------------------ - 1 file changed, 111 deletions(-) + test/fiddle/helper.rb | 3 +++ + 1 file changed, 3 insertions(+) diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb index 1da3d93..65148a1 100644 --- a/test/fiddle/helper.rb +++ b/test/fiddle/helper.rb -@@ -6,115 +6,6 @@ +@@ -139,6 +139,9 @@ + libc_so = libm_so = "/usr/lib/libSystem.B.dylib" + end - libc_so = libm_so = nil - --case RUBY_PLATFORM --when /cygwin/ -- libc_so = "cygwin1.dll" -- libm_so = "cygwin1.dll" --when /android/ -- libdir = '/system/lib' -- if [0].pack('L!').size == 8 -- libdir = '/system/lib64' -- end -- libc_so = File.join(libdir, "libc.so") -- libm_so = File.join(libdir, "libm.so") --when /linux/ -- libdir = '/lib' -- case RbConfig::SIZEOF['void*'] -- when 4 -- # 32-bit ruby -- case RUBY_PLATFORM -- when /armv\w+-linux/ -- # In the ARM 32-bit libc package such as libc6:armhf libc6:armel, -- # libc.so and libm.so are installed to /lib/arm-linux-gnu*. -- # It's not installed to /lib32. -- dirs = Dir.glob('/lib/arm-linux-gnu*') -- libdir = dirs[0] if dirs && File.directory?(dirs[0]) -- else -- libdir = '/lib32' if File.directory? '/lib32' -- end -- when 8 -- # 64-bit ruby -- libdir = '/lib64' if File.directory? '/lib64' -- end -- libc_so = File.join(libdir, "libc.so.6") -- libm_so = File.join(libdir, "libm.so.6") --when /mingw/, /mswin/ -- require "rbconfig" -- crtname = RbConfig::CONFIG["RUBY_SO_NAME"][/msvc\w+/] || 'ucrtbase' -- libc_so = libm_so = "#{crtname}.dll" --when /darwin/ -- libc_so = libm_so = "/usr/lib/libSystem.B.dylib" --when /kfreebsd/ -- libc_so = "/lib/libc.so.0.1" -- libm_so = "/lib/libm.so.1" --when /gnu/ #GNU/Hurd -- libc_so = "/lib/libc.so.0.3" -- libm_so = "/lib/libm.so.6" --when /mirbsd/ -- libc_so = "/usr/lib/libc.so.41.10" -- libm_so = "/usr/lib/libm.so.7.0" --when /freebsd/ -- libc_so = "/lib/libc.so.7" -- libm_so = "/lib/libm.so.5" --when /bsd|dragonfly/ -- libc_so = "/usr/lib/libc.so" -- libm_so = "/usr/lib/libm.so" --when /solaris/ -- libdir = '/lib' -- case RbConfig::SIZEOF['void*'] -- when 4 -- # 32-bit ruby -- libdir = '/lib' if File.directory? '/lib' -- when 8 -- # 64-bit ruby -- libdir = '/lib/64' if File.directory? '/lib/64' -- end -- libc_so = File.join(libdir, "libc.so") -- libm_so = File.join(libdir, "libm.so") --when /aix/ -- pwd=Dir.pwd -- libc_so = libm_so = "#{pwd}/libaixdltest.so" -- unless File.exist? libc_so -- cobjs=%w!strcpy.o! -- mobjs=%w!floats.o sin.o! -- funcs=%w!sin sinf strcpy strncpy! -- expfile='dltest.exp' -- require 'tmpdir' -- Dir.mktmpdir do |dir| -- begin -- Dir.chdir dir -- %x!/usr/bin/ar x /usr/lib/libc.a #{cobjs.join(' ')}! -- %x!/usr/bin/ar x /usr/lib/libm.a #{mobjs.join(' ')}! -- %x!echo "#{funcs.join("\n")}\n" > #{expfile}! -- require 'rbconfig' -- if RbConfig::CONFIG["GCC"] = 'yes' -- lflag='-Wl,' -- else -- lflag='' -- end -- flags="#{lflag}-bE:#{expfile} #{lflag}-bnoentry -lm" -- %x!#{RbConfig::CONFIG["LDSHARED"]} -o #{libc_so} #{(cobjs+mobjs).join(' ')} #{flags}! -- ensure -- Dir.chdir pwd -- end -- end -- end --else -- libc_so = ARGV[0] if ARGV[0] && ARGV[0][0] == ?/ -- libm_so = ARGV[1] if ARGV[1] && ARGV[1][0] == ?/ -- if( !(libc_so && libm_so) ) -- $stderr.puts("libc and libm not found: #{$0} ") -- end --end -- --libc_so = nil if !libc_so || (libc_so[0] == ?/ && !File.file?(libc_so)) --libm_so = nil if !libm_so || (libm_so[0] == ?/ && !File.file?(libm_so)) -- --# macOS 11.0+ removed libSystem.B.dylib from /usr/lib. But It works with dlopen. --if RUBY_PLATFORM =~ /darwin/ -- libc_so = libm_so = "/usr/lib/libSystem.B.dylib" --end -- ++# Just ignore the heuristic, because it is not reliable on all platforms. ++libc_so = libm_so = nil ++ if !libc_so || !libm_so ruby = EnvUtil.rubybin # When the ruby binary is 32-bit and the host is 64-bit, diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index 5dd2654..2b90d9e 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -15,7 +15,7 @@ To keep the things simple for now, load the ABRT hook via C. [4]: https://github.com/ruby/ruby/pull/2735 [5]: https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ --- - abrt.c | 12 ++++++++++++++ + abrt.c | 12 ++++++++++++ common.mk | 3 ++- ruby.c | 4 ++++ 3 files changed, 18 insertions(+), 1 deletion(-) @@ -57,7 +57,7 @@ diff --git a/ruby.c b/ruby.c index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1451,10 +1451,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1489,10 +1489,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); diff --git a/ruby-2.7.0-Remove-RubyGems-dependency.patch b/ruby-2.7.0-Remove-RubyGems-dependency.patch deleted file mode 100644 index 4166900..0000000 --- a/ruby-2.7.0-Remove-RubyGems-dependency.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 6532dbecf36d1f24dab1f2143afd171e0b7699eb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 4 Sep 2019 15:07:07 +0200 -Subject: [PATCH] Remove RubyGems dependency. - -Since `Process::RLIMIT_NOFILE` is platform specific, better to use Ruby -introspection than detecting platform. ---- - .../vendor/net-http-persistent/lib/net/http/persistent.rb | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb -index a54be2a..06739f1 100644 ---- a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb -+++ b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb -@@ -197,10 +197,10 @@ class Bundler::Persistent::Net::HTTP::Persistent - ## - # The default connection pool size is 1/4 the allowed open files. - -- if Gem.win_platform? then -- DEFAULT_POOL_SIZE = 256 -- else -+ if Process.const_defined? :RLIMIT_NOFILE - DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4 -+ else -+ DEFAULT_POOL_SIZE = 256 - end - - ## --- -2.23.0 - diff --git a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch index 81384ba..64e2114 100644 --- a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch +++ b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -20,7 +20,7 @@ diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_repor index 628fcd0340..2c677cc8a7 100644 --- a/test/-ext-/bug_reporter/test_bug_reporter.rb +++ b/test/-ext-/bug_reporter/test_bug_reporter.rb -@@ -19,7 +19,7 @@ def test_bug_reporter_add +@@ -21,7 +21,7 @@ def test_bug_reporter_add args = ["--disable-gems", "-r-test-/bug_reporter", "-C", tmpdir] stdin = "register_sample_bug_reporter(12345); Process.kill :SEGV, $$" diff --git a/ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch b/ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch deleted file mode 100644 index c6923ee..0000000 --- a/ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 0689147586c6cb56b91bf0f368890f19d630ece1 Mon Sep 17 00:00:00 2001 -From: nobletrout -Date: Tue, 5 Feb 2019 08:14:02 -0500 -Subject: [PATCH] remove unneeded gem require for ipaddr - -ipaddr is a builtin class for ruby, that is occasionally merged. If the version isn't specified by the runtime dependency, then it will default to needing the latest gem rather than the version that ships with that version of ruby. That will lead to all kinds of potential dependency fails that are most likely unneeded since this gem already requires ruby > 2.3.0 ---- - ext/openssl/openssl.gemspec | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/ext/openssl/openssl.gemspec b/ext/openssl/openssl.gemspec -index 7c17cd54..f721f247 100644 ---- a/ext/openssl/openssl.gemspec -+++ b/ext/openssl/openssl.gemspec -@@ -21,7 +21,6 @@ Gem::Specification.new do |spec| - s.rubygems_version = "3.0.0.beta1" - s.summary = "OpenSSL provides SSL, TLS and general purpose cryptography." - -- s.add_runtime_dependency("ipaddr", [">= 0"]) - s.add_development_dependency("rake", [">= 0"]) - s.add_development_dependency("rake-compiler", [">= 0"]) - s.add_development_dependency("test-unit", ["~> 3.0"]) diff --git a/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch b/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch deleted file mode 100644 index decb45f..0000000 --- a/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch +++ /dev/null @@ -1,178 +0,0 @@ -From c5806d668f84a86e9e6a522f84b8aa6cb4cdaae9 Mon Sep 17 00:00:00 2001 -From: Ali Saidi -Date: Wed, 5 Aug 2020 20:46:28 -0500 -Subject: [PATCH 1/3] Enable unaligned accesses on arm64 - -64-bit Arm platforms support unaligned accesses. - -Running the string benchmarks this change improves performance -by an average of 1.04x, min .96x, max 1.21x, median 1.01x ---- - include/ruby/defines.h | 2 +- - regint.h | 2 +- - siphash.c | 2 +- - st.c | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/include/ruby/defines.h b/include/ruby/defines.h -index 49f673ef936a..0193275e8b78 100644 ---- a/include/ruby/defines.h -+++ b/include/ruby/defines.h -@@ -485,7 +485,7 @@ - #ifndef UNALIGNED_WORD_ACCESS - # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ -- defined(__powerpc64__) || \ -+ defined(__powerpc64__) || defined(__aarch64__) || \ - defined(__mc68020__) - # define UNALIGNED_WORD_ACCESS 1 - # else -diff --git a/regint.h b/regint.h -index a2f5bbba1d1f..0740429688bc 100644 ---- a/regint.h -+++ b/regint.h -@@ -52,7 +52,7 @@ - #ifndef UNALIGNED_WORD_ACCESS - # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ -- defined(__powerpc64__) || \ -+ defined(__powerpc64__) || defined(__aarch64__) || \ - defined(__mc68020__) - # define UNALIGNED_WORD_ACCESS 1 - # else -diff --git a/siphash.c b/siphash.c -index 153d2c690ab9..ddf8ee245d81 100644 ---- a/siphash.c -+++ b/siphash.c -@@ -30,7 +30,7 @@ - #ifndef UNALIGNED_WORD_ACCESS - # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ -- defined(__powerpc64__) || \ -+ defined(__powerpc64__) || defined(__aarch64__) || \ - defined(__mc68020__) - # define UNALIGNED_WORD_ACCESS 1 - # endif -diff --git a/st.c b/st.c -index c11535ef9779..8be466bf733f 100644 ---- a/st.c -+++ b/st.c -@@ -1815,7 +1815,7 @@ st_values_check(st_table *tab, st_data_t *values, st_index_t size, - #ifndef UNALIGNED_WORD_ACCESS - # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ -- defined(__powerpc64__) || \ -+ defined(__powerpc64__) || defined(__aarch64__) || \ - defined(__mc68020__) - # define UNALIGNED_WORD_ACCESS 1 - # endif - -From 79b7b9143fda0f33fc9375980cecc61eb42c6f66 Mon Sep 17 00:00:00 2001 -From: Ali Saidi -Date: Wed, 5 Aug 2020 21:04:37 -0500 -Subject: [PATCH 2/3] arm64 enable gc optimizations - -Similar to x86 and powerpc optimizations. - -| |compare-ruby|built-ruby| -|:------|-----------:|---------:| -|hash1 | 0.225| 0.237| -| | -| 1.05x| -|hash2 | 0.110| 0.110| -| | 1.00x| -| ---- - gc.c | 13 +++++++++++++ - gc.h | 2 ++ - 2 files changed, 15 insertions(+) - -diff --git a/gc.c b/gc.c -index 22972dfc806c..788f06f1586e 100644 ---- a/gc.c -+++ b/gc.c -@@ -1153,6 +1153,19 @@ tick(void) - return val; - } - -+#elif defined(__aarch64__) && defined(__GNUC__) -+typedef unsigned long tick_t; -+#define PRItick "lu" -+ -+static __inline__ tick_t -+tick(void) -+{ -+ unsigned long val; -+ __asm__ __volatile__ ("mrs %0, cntvct_el0", : "=r" (val)); -+ return val; -+} -+ -+ - #elif defined(_WIN32) && defined(_MSC_VER) - #include - typedef unsigned __int64 tick_t; -diff --git a/gc.h b/gc.h -index 6568079c54e5..47a4ca19a0c5 100644 ---- a/gc.h -+++ b/gc.h -@@ -8,6 +8,8 @@ - #define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movl\t%%esp, %0" : "=r" (*(p))) - #elif defined(__powerpc64__) && defined(__GNUC__) - #define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mr\t%0, %%r1" : "=r" (*(p))) -+#elif defined(__aarch64__) && defined(__GNUC__) -+#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mov\t%0, sp" : "=r" (*(p))) - #else - NOINLINE(void rb_gc_set_stack_end(VALUE **stack_end_p)); - #define SET_MACHINE_STACK_END(p) rb_gc_set_stack_end(p) - -From c985b8c6868a380e44e285368af4a4f414ce3309 Mon Sep 17 00:00:00 2001 -From: Ali Saidi -Date: Wed, 5 Aug 2020 21:15:55 -0500 -Subject: [PATCH 3/3] vm_exec.c: improve performance for arm64 - -| |compare-ruby|built-ruby| -|:------------------------------|-----------:|---------:| -|vm_array | 26.501M| 27.959M| -| | -| 1.06x| -|vm_attr_ivar | 21.606M| 31.429M| -| | -| 1.45x| -|vm_attr_ivar_set | 21.178M| 26.113M| -| | -| 1.23x| -|vm_backtrace | 6.621| 6.668| -| | -| 1.01x| -|vm_bigarray | 26.205M| 29.958M| -| | -| 1.14x| -|vm_bighash | 504.155k| 479.306k| -| | 1.05x| -| -|vm_block | 16.692M| 21.315M| -| | -| 1.28x| -|block_handler_type_iseq | 5.083| 7.004| -| | -| 1.38x| ---- - vm_exec.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/vm_exec.c b/vm_exec.c -index ce2e053ee745..7aa56f6ad620 100644 ---- a/vm_exec.c -+++ b/vm_exec.c -@@ -27,6 +27,9 @@ static void vm_insns_counter_count_insn(int insn) {} - #elif defined(__GNUC__) && defined(__powerpc64__) - #define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("r" reg) - -+#elif defined(__GNUC__) && defined(__aarch64__) -+#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("x" reg) -+ - #else - #define DECL_SC_REG(type, r, reg) register type reg_##r - #endif -@@ -74,6 +77,11 @@ vm_exec_core(rb_execution_context_t *ec, VALUE initial) - DECL_SC_REG(rb_control_frame_t *, cfp, "15"); - #define USE_MACHINE_REGS 1 - -+#elif defined(__GNUC__) && defined(__aarch64__) -+ DECL_SC_REG(const VALUE *, pc, "19"); -+ DECL_SC_REG(rb_control_frame_t *, cfp, "20"); -+#define USE_MACHINE_REGS 1 -+ - #else - register rb_control_frame_t *reg_cfp; - const VALUE *reg_pc; diff --git a/ruby.spec b/ruby.spec index 3d3d309..23a9fbc 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ -%global major_version 2 -%global minor_version 7 -%global teeny_version 2 +%global major_version 3 +%global minor_version 0 +%global teeny_version 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -9,20 +9,20 @@ # Specify the named version. It has precedense to revision. #%%global milestone rc1 -# Keep the revision enabled for pre-releases from SVN. -#%%global revision af11efd377 +# Keep the revision enabled for pre-releases from GIT. +#%%global revision 684649ea05 %global ruby_archive %{name}-%{ruby_version} # If revision and milestone are removed/commented out, the official release build is expected. %if 0%{?milestone:1}%{?revision:1} != 0 %global ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision}} -%define ruby_archive_timestamp %(stat --printf='@%Y' %{ruby_archive}.tar.xz | date -f - +"%Y%m%d") +%define ruby_archive_timestamp %(stat --printf='@%Y' %{_sourcedir}/%{ruby_archive}.tar.xz | date -f - +"%Y%m%d") %define development_release %{?milestone}%{?!milestone:%{?revision:%{ruby_archive_timestamp}git%{revision}}} %endif -%global release 137 +%global release 138 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -30,43 +30,42 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.1.4 -%global rubygems_molinillo_version 0.5.7 +%global rubygems_version 3.2.3 +%global rubygems_molinillo_version 0.7.0 # Default gems. -%global bundler_version 2.1.4 +%global bundler_version 2.2.3 %global bundler_connection_pool_version 2.2.2 -%global bundler_fileutils_version 1.3.0 -%global bundler_molinillo_version 0.6.6 -%global bundler_net_http_persistent_version 3.1.0 -%global bundler_thor_version 1.0.0 +%global bundler_fileutils_version 1.4.1 +%global bundler_molinillo_version 0.7.0 +%global bundler_net_http_persistent_version 4.0.0 +%global bundler_thor_version 1.0.1 +%global bundler_tmpdir_version 0.1.0 +%global bundler_uri_version 0.10.0 -%global bigdecimal_version 2.0.0 -%global did_you_mean_version 1.4.0 +%global bigdecimal_version 3.0.0 +%global did_you_mean_version 1.5.0 +%global erb_version 2.2.0 %global io_console_version 0.5.6 -%global irb_version 1.2.6 -%global json_version 2.3.0 -%global net_telnet_version 0.2.0 -%global openssl_version 2.1.2 -%global psych_version 3.1.0 -%global racc_version 1.4.16 -%global rdoc_version 6.2.1 -%global xmlrpc_version 0.3.0 +%global irb_version 1.3.0 +%global json_version 2.5.1 +%global openssl_version 2.2.0 +%global psych_version 3.3.0 +%global racc_version 1.5.1 +%global rdoc_version 6.3.0 # Bundled gems. -%global minitest_version 5.13.0 -%global power_assert_version 1.1.7 -%global rake_version 13.0.1 -%global test_unit_version 3.3.4 +%global minitest_version 5.14.2 +%global power_assert_version 1.2.0 +%global rake_version 13.0.3 +%global rbs_version 1.0.0 +%global test_unit_version 3.3.7 +%global rexml_version 3.2.4 +%global rss_version 0.2.9 +%global typeprof_version 0.11.0 -# Might not be needed in the future, if we are lucky enough. -# https://bugzilla.redhat.com/show_bug.cgi?id=888262 -%global tapset_root %{_datadir}/systemtap -%global tapset_dir %{tapset_root}/tapset %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* -%global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') - %if 0%{?fedora} >= 19 %bcond_without rubypick %endif @@ -147,38 +146,14 @@ Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch -# Revert commit which breaks bundled net-http-persistent version check. -# https://github.com/drbrain/net-http-persistent/pull/109 -Patch10: ruby-2.7.0-Remove-RubyGems-dependency.patch -# Prevent issues with openssl loading when RubyGems are disabled. -# https://github.com/ruby/openssl/pull/242 -Patch13: ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch -# Fix `require` behavior allowing to load libraries multiple times. -# https://github.com/rubygems/rubygems/issues/3647 -# Because there were multiple fixes in `Kernel.require` in recent months, -# pickup all the changes one by one instead of squashing them. -# https://github.com/rubygems/rubygems/pull/3124 -Patch15: rubygems-3.1.3-Fix-I-require-priority.patch -# https://github.com/rubygems/rubygems/pull/3133 -Patch16: rubygems-3.1.3-Improve-require.patch -# https://github.com/rubygems/rubygems/pull/3153 -Patch17: rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch -# https://github.com/rubygems/rubygems/pull/3639 -Patch18: rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch -# Enable arm64 optimizations. -# https://bugzilla.redhat.com/show_bug.cgi?id=1884728 -# https://github.com/ruby/ruby/pull/3393 -Patch20: ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick Recommends: ruby(rubygems) >= %{rubygems_version} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} -# Change this to requires, hopefully just as temporary measure. -# https://bugs.ruby-lang.org/issues/16431 Recommends: rubygem(openssl) >= %{openssl_version} BuildRequires: autoconf @@ -243,12 +218,15 @@ Provides: bundled(ccan-list) Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} Provides: bundled(rubygem-racc) = %{racc_version} -# Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe -# so lets obsolete it. This is not the best place, but we don't have -# better, unless https://fedorahosted.org/fpc/ticket/645 provides some -# generic solution. +# Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe. Obsoletes: ruby-tcltk < 2.4.0 +# The Net::Telnet and XMLRPC were removed in Ruby 2.8, i.e. F34 timeframe. +# https://bugs.ruby-lang.org/issues/16484 +# TODO: Update the versions prior landing in Fedora. +Obsoletes: rubygem-net-telnet < 0.2.0-%{release} +Obsoletes: rubygem-xmlrpc < 0.3.0-%{release} + %description libs This package includes the libruby, necessary to run Ruby. @@ -451,6 +429,8 @@ Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} Provides: bundled(rubygem-molinillo) = %{bundler_molinillo_version} Provides: bundled(rubygem-net-http-persisntent) = %{bundler_net_http_persistent_version} Provides: bundled(rubygem-thor) = %{bundler_thor_version} +Provides: bundled(rubygem-tmpdir) = %{bundler_tmpdir_version} +Provides: bundled(rubygem-uri) = %{bundler_uri_version} BuildArch: noarch %description -n rubygem-bundler @@ -517,23 +497,18 @@ Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax. -%package -n rubygem-net-telnet -Summary: Provides telnet client functionality -Version: %{net_telnet_version} +%package -n rubygem-rbs +Summary: Type signature for Ruby +Version: %{rbs_version} +License: Ruby or BSD Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(net-telnet) = %{version}-%{release} +Provides: rubygem(rbs) = %{version}-%{release} BuildArch: noarch -%description -n rubygem-net-telnet -Provides telnet client functionality. - -This class also has, through delegation, all the methods of a socket object -(by default, a TCPSocket, but can be set by the Proxy option to new()). This -provides methods such as close() to end the session and sysread() to read data -directly from the host, instead of via the waitfor() mechanism. Note that if -you do use sysread() directly when in telnet mode, you should probably pass -the output through preprocess() to extract telnet command sequences. +%description -n rubygem-rbs +RBS is the language for type signatures for Ruby and standard library +definitions. %package -n rubygem-test-unit @@ -555,18 +530,62 @@ programming software development methodology, for Smalltalk's SUnit. It allows writing tests, checking results and automated testing in Ruby. -%package -n rubygem-xmlrpc -Summary: XMLRPC is a lightweight protocol that enables remote procedure calls over HTTP -Version: %{xmlrpc_version} -License: Ruby or BSD +%package -n rubygem-rexml +Summary: An XML toolkit for Ruby +Version: %{rexml_version} +License: BSD +URL: https://github.com/ruby/rexml Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(xmlrpc) = %{version}-%{release} +Provides: rubygem(rexml) = %{version}-%{release} BuildArch: noarch -%description -n rubygem-xmlrpc -XMLRPC is a lightweight protocol that enables remote procedure calls over -HTTP. +%description -n rubygem-rexml +REXML was inspired by the Electric XML library for Java, which features an +easy-to-use API, small size, and speed. Hopefully, REXML, designed with the same +philosophy, has these same features. I've tried to keep the API as intuitive as +possible, and have followed the Ruby methodology for method naming and code +flow, rather than mirroring the Java API. + +REXML supports both tree and stream document parsing. Stream parsing is faster +(about 1.5 times as fast). However, with stream parsing, you don't get access to +features such as XPath. + + +%package -n rubygem-rss +Summary: Family of libraries that support various formats of XML "feeds" +Version: %{rss_version} +License: BSD +URL: https://github.com/ruby/rss +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(rss) = %{version}-%{release} +BuildArch: noarch + +%description -n rubygem-rss +Really Simple Syndication (RSS) is a family of formats that describe 'feeds', +specially constructed XML documents that allow an interested person to subscribe +and receive updates from a particular web service. This library provides tooling +to read and create these feeds. + + +%package -n rubygem-typeprof +Version: %{typeprof_version} +Summary: TypeProf is a type analysis tool for Ruby code based on abstract interpretation +License: MIT +URL: https://github.com/ruby/typeprof +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Requires: rubygem(rbs) >= %{rbs_version} +Provides: rubygem(typeprof) = %{version}-%{release} +BuildArch: noarch + +%description -n rubygem-typeprof +TypeProf performs a type analysis of non-annotated Ruby code. +It abstractly executes input Ruby code in a level of types instead of values, +gathers what types are passed to and returned by methods, and prints the +analysis result in RBS format, a standard type description format for Ruby +3.0. %prep @@ -584,14 +603,7 @@ rm -rf ext/fiddle/libffi* %patch5 -p1 %patch6 -p1 %patch9 -p1 -%patch10 -p1 -%patch13 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 %patch19 -p1 -%patch20 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -621,11 +633,13 @@ autoconf # Q= makes the build output more verbose and allows to check Fedora # compiler options. -make %{?_smp_mflags} COPY="cp -p" Q= +%make_build COPY="cp -p" Q= %install rm -rf %{buildroot} -make install DESTDIR=%{buildroot} +%make_install + +# TODO: Regenerate RBS parser in lib/rbs/parser.rb # Rename ruby/config.h to ruby/config-.h to avoid file conflicts on # multilib systems and install config.h wrapper @@ -643,12 +657,11 @@ sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_li # Kill bundled certificates, as they should be part of ca-certificates. for cert in \ - rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem \ - rubygems.org/AddTrustExternalCARoot.pem \ - index.rubygems.org/GlobalSignRootCA.pem + rubygems.org/GlobalSignRootCA.pem \ + rubygems.org/GlobalSignRootCA_R3.pem do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert - rm -r $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) + rm -d $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) || : done # Ensure there is not forgotten any certificate. test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" @@ -765,11 +778,11 @@ mv %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/doc/rake.1 %{buildroot}%{_ma %if %{with systemtap} # Install a tapset and fix up the path to the library. -mkdir -p %{buildroot}%{tapset_dir} +mkdir -p %{buildroot}%{_systemtap_tapsetdir} sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{major_minor_version}|" \ - %{SOURCE2} > %{buildroot}%{tapset_dir}/libruby.so.%{major_minor_version}.stp + %{SOURCE2} > %{buildroot}%{_systemtap_tapsetdir}/libruby.so.%{major_minor_version}.stp # Escape '*/' in comment. -sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{major_minor_version}.stp +sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{_systemtap_tapsetdir}/libruby.so.%{major_minor_version}.stp %endif # Prepare -doc subpackage file lists. @@ -819,7 +832,7 @@ checksec --file=libruby.so.%{ruby_version} | \ # FileUtils. [ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ module Bundler; end; \ - require 'bundler/vendor/fileutils/lib/fileutils/version'; \ + require 'bundler/vendor/fileutils/lib/fileutils'; \ puts Bundler::FileUtils::VERSION\\\"\" | tail -1`" \ == '%{bundler_fileutils_version}' ] @@ -845,6 +858,17 @@ checksec --file=libruby.so.%{ruby_version} | \ puts Bundler::Thor::VERSION\\\"\" | tail -1`" \ == '%{bundler_thor_version}' ] +# tmpdir. +# TODO: There is no version in bundled tmpdir yet. +#%%{global bundler_tmpdir_version} + +# URI. +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ + module Bundler; end; \ + require 'bundler/vendor/uri/lib/uri/version'; \ + puts Bundler::URI::VERSION\\\"\" | tail -1`" \ + == '%{bundler_uri_version}' ] + # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing @@ -864,14 +888,9 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} -# Disable "File.utime allows Time instances in the far future to set -# mtime and atime". -# https://bugs.ruby-lang.org/issues/16410 -MSPECOPTS="$MSPECOPTS -P 'File.utime allows Time instances in the far future to set mtime and atime'" - -# Disable File.lchmod specs, which fails when building against glibc 2.31.9000. -# https://bugs.ruby-lang.org/issues/16749 -MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not of the file'" +# The test suite gets stuck in 'C-API Kernel function rb_rescue2'. +# https://bugs.ruby-lang.org/issues/17338 +MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is not a Module'" # Give an option to increase the timeout in tests. # https://bugs.ruby-lang.org/issues/16921 @@ -908,7 +927,7 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not %license GPL %license LEGAL %doc README.md -%doc NEWS +%doc NEWS.md # Exclude /usr/local directory since it is supposed to be managed by # local system administrator. %exclude %{ruby_sitelibdir} @@ -952,6 +971,7 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not %{ruby_libdir}/monitor.rb %{ruby_libdir}/mutex_m.rb %{ruby_libdir}/net +%{ruby_libdir}/objspace.rb %{ruby_libdir}/observer* %{ruby_libdir}/open-uri.rb %{ruby_libdir}/open3* @@ -967,12 +987,10 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not %{ruby_libdir}/reline* %{ruby_libdir}/resolv.rb %{ruby_libdir}/resolv-replace.rb -%{ruby_libdir}/rexml %{ruby_libdir}/rinda %{ruby_libdir}/ripper* -%{ruby_libdir}/rss* %{ruby_libdir}/securerandom.rb -%{ruby_libdir}/set.rb +%{ruby_libdir}/set* %{ruby_libdir}/shellwords.rb %{ruby_libdir}/singleton* %{ruby_libdir}/socket.rb @@ -987,7 +1005,6 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not %{ruby_libdir}/un.rb %{ruby_libdir}/uri* %{ruby_libdir}/weakref* -%{ruby_libdir}/webrick* %{ruby_libdir}/yaml* # Platform specific libraries. @@ -1087,7 +1104,6 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not %{ruby_libarchdir}/rbconfig/sizeof.so %{ruby_libarchdir}/readline.so %{ruby_libarchdir}/ripper.so -%{ruby_libarchdir}/sdbm.so %{ruby_libarchdir}/socket.so %{ruby_libarchdir}/stringio.so %{ruby_libarchdir}/strscan.so @@ -1100,7 +1116,7 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not %dir %{ruby_libarchdir}/racc %{ruby_libarchdir}/racc/cparse.so -%{?with_systemtap:%{tapset_root}} +%{?with_systemtap:%{_systemtap_datadir}} %files -n rubygems %{_bindir}/gem @@ -1131,59 +1147,86 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not %{_rpmconfigdir}/rubygems.con %files default-gems -%{gem_dir}/specifications/default/benchmark-0.1.0.gemspec -%{gem_dir}/specifications/default/cgi-0.1.0.gemspec -%{gem_dir}/specifications/default/csv-3.1.2.gemspec -%{gem_dir}/specifications/default/date-3.0.0.gemspec +%{gem_dir}/specifications/default/english-0.7.1.gemspec +%{gem_dir}/specifications/default/abbrev-0.1.0.gemspec +%{gem_dir}/specifications/default/base64-0.1.0.gemspec +%{gem_dir}/specifications/default/benchmark-0.1.1.gemspec +%{gem_dir}/specifications/default/cgi-0.2.0.gemspec +%{gem_dir}/specifications/default/csv-3.1.9.gemspec +%{gem_dir}/specifications/default/date-3.1.0.gemspec %{gem_dir}/specifications/default/dbm-1.1.0.gemspec -%{gem_dir}/specifications/default/delegate-0.1.0.gemspec +%{gem_dir}/specifications/default/debug-0.1.0.gemspec +%{gem_dir}/specifications/default/delegate-0.2.0.gemspec %{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec -%{gem_dir}/specifications/default/etc-1.1.0.gemspec +%{gem_dir}/specifications/default/digest-3.0.0.gemspec +%{gem_dir}/specifications/default/drb-2.0.4.gemspec +%{gem_dir}/specifications/default/erb-%{erb_version}.gemspec +%{gem_dir}/specifications/default/etc-1.2.0.gemspec %{gem_dir}/specifications/default/fcntl-1.0.0.gemspec -%{gem_dir}/specifications/default/fiddle-1.0.0.gemspec -%{gem_dir}/specifications/default/fileutils-1.4.1.gemspec -%{gem_dir}/specifications/default/forwardable-1.3.1.gemspec +%{gem_dir}/specifications/default/fiddle-1.0.6.gemspec +%{gem_dir}/specifications/default/fileutils-1.5.0.gemspec +%{gem_dir}/specifications/default/find-0.1.0.gemspec +%{gem_dir}/specifications/default/forwardable-1.3.2.gemspec %{gem_dir}/specifications/default/gdbm-2.1.0.gemspec -%{gem_dir}/specifications/default/getoptlong-0.1.0.gemspec +%{gem_dir}/specifications/default/getoptlong-0.1.1.gemspec +%{gem_dir}/specifications/default/io-nonblock-0.1.0.gemspec +%{gem_dir}/specifications/default/io-wait-0.1.0.gemspec %{gem_dir}/specifications/default/ipaddr-1.2.2.gemspec -%{gem_dir}/specifications/default/logger-1.4.2.gemspec -%{gem_dir}/specifications/default/matrix-0.2.0.gemspec -%{gem_dir}/specifications/default/mutex_m-0.1.0.gemspec -%{gem_dir}/specifications/default/net-pop-0.1.0.gemspec -%{gem_dir}/specifications/default/net-smtp-0.1.0.gemspec -%{gem_dir}/specifications/default/observer-0.1.0.gemspec -%{gem_dir}/specifications/default/open3-0.1.0.gemspec -%{gem_dir}/specifications/default/ostruct-0.2.0.gemspec -%{gem_dir}/specifications/default/prime-0.1.1.gemspec -%{gem_dir}/specifications/default/pstore-0.1.0.gemspec +%{gem_dir}/specifications/default/logger-1.4.3.gemspec +%{gem_dir}/specifications/default/matrix-0.3.1.gemspec +%{gem_dir}/specifications/default/mutex_m-0.1.1.gemspec +%{gem_dir}/specifications/default/net-ftp-0.1.1.gemspec +%{gem_dir}/specifications/default/net-http-0.1.1.gemspec +%{gem_dir}/specifications/default/net-imap-0.1.1.gemspec +%{gem_dir}/specifications/default/net-pop-0.1.1.gemspec +%{gem_dir}/specifications/default/net-protocol-0.1.0.gemspec +%{gem_dir}/specifications/default/net-smtp-0.2.1.gemspec +%{gem_dir}/specifications/default/nkf-0.1.0.gemspec +%{gem_dir}/specifications/default/observer-0.1.1.gemspec +%{gem_dir}/specifications/default/open3-0.1.1.gemspec +%{gem_dir}/specifications/default/open-uri-0.1.0.gemspec +%{gem_dir}/specifications/default/optparse-0.1.0.gemspec +%{gem_dir}/specifications/default/ostruct-0.3.1.gemspec +%{gem_dir}/specifications/default/pathname-0.1.0.gemspec +%{gem_dir}/specifications/default/pp-0.1.0.gemspec +%{gem_dir}/specifications/default/prettyprint-0.1.0.gemspec +%{gem_dir}/specifications/default/prime-0.1.2.gemspec +%{gem_dir}/specifications/default/pstore-0.1.1.gemspec %{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{gem_dir}/specifications/default/readline-0.0.2.gemspec -%{gem_dir}/specifications/default/readline-ext-0.1.0.gemspec -%{gem_dir}/specifications/default/reline-0.1.5.gemspec -%{gem_dir}/specifications/default/rexml-3.2.3.gemspec -%{gem_dir}/specifications/default/rss-0.2.8.gemspec -%{gem_dir}/specifications/default/sdbm-1.0.0.gemspec -%{gem_dir}/specifications/default/singleton-0.1.0.gemspec -%{gem_dir}/specifications/default/stringio-0.1.0.gemspec -%{gem_dir}/specifications/default/strscan-1.0.3.gemspec -%{gem_dir}/specifications/default/timeout-0.1.0.gemspec -%{gem_dir}/specifications/default/tracer-0.1.0.gemspec -%{gem_dir}/specifications/default/uri-0.10.0.gemspec -%{gem_dir}/specifications/default/webrick-1.6.0.gemspec -%{gem_dir}/specifications/default/yaml-0.1.0.gemspec +%{gem_dir}/specifications/default/readline-ext-0.1.1.gemspec +%{gem_dir}/specifications/default/reline-0.2.0.gemspec +%{gem_dir}/specifications/default/resolv-0.2.0.gemspec +%{gem_dir}/specifications/default/resolv-replace-0.1.0.gemspec +%{gem_dir}/specifications/default/rinda-0.1.0.gemspec +%{gem_dir}/specifications/default/securerandom-0.1.0.gemspec +%{gem_dir}/specifications/default/set-1.0.1.gemspec +%{gem_dir}/specifications/default/shellwords-0.1.0.gemspec +%{gem_dir}/specifications/default/singleton-0.1.1.gemspec +%{gem_dir}/specifications/default/stringio-3.0.0.gemspec +%{gem_dir}/specifications/default/strscan-3.0.0.gemspec +%{gem_dir}/specifications/default/syslog-0.1.0.gemspec +%{gem_dir}/specifications/default/tempfile-0.1.1.gemspec +%{gem_dir}/specifications/default/time-0.1.0.gemspec +%{gem_dir}/specifications/default/timeout-0.1.1.gemspec +%{gem_dir}/specifications/default/tmpdir-0.1.1.gemspec +%{gem_dir}/specifications/default/tsort-0.1.0.gemspec +%{gem_dir}/specifications/default/tracer-0.1.1.gemspec +%{gem_dir}/specifications/default/un-0.1.0.gemspec +%{gem_dir}/specifications/default/uri-0.10.1.gemspec +%{gem_dir}/specifications/default/weakref-0.1.1.gemspec +#%%{gem_dir}/specifications/default/win32ole-1.8.8.gemspec +%{gem_dir}/specifications/default/yaml-0.1.1.gemspec %{gem_dir}/specifications/default/zlib-1.1.0.gemspec +%{gem_dir}/gems/erb-%{erb_version} # Use standalone rubygem-racc if Racc binary is required. Shipping this # executable in both packages might possibly cause conflicts. The situation # could be better if Ruby generated these files: # https://github.com/ruby/ruby/pull/2545 %exclude %{_bindir}/racc -# These have wrong shebangs. Exclude them for now and let's see what upstream -# thinks about them. -# https://bugs.ruby-lang.org/issues/15982 -%exclude %{_bindir}/{racc2y,y2racc} -%exclude %{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} -%{gem_dir}/gems/racc-%{racc_version} +%exclude %{gem_dir}/gems/racc-%{racc_version}/bin + %files -n rubygem-irb %{_bindir}/irb @@ -1255,11 +1298,6 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not %exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* %{gem_dir}/specifications/minitest-%{minitest_version}.gemspec -%files -n rubygem-net-telnet -%{gem_dir}/gems/net-telnet-%{net_telnet_version} -%exclude %{gem_dir}/gems/net-telnet-%{net_telnet_version}/.* -%{gem_dir}/specifications/net-telnet-%{net_telnet_version}.gemspec - %files -n rubygem-power_assert %{gem_dir}/gems/power_assert-%{power_assert_version} %exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* @@ -1271,24 +1309,81 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not %{gem_dir}/specifications/rake-%{rake_version}.gemspec %{_mandir}/man1/rake.1* +%files -n rubygem-rbs +%{_bindir}/rbs +%dir %{gem_dir}/gems/rbs-%{rbs_version} +%exclude %{gem_dir}/gems/rbs-%{rbs_version}/.* +%license %{gem_dir}/gems/rbs-%{rbs_version}/BSDL +%doc %{gem_dir}/gems/rbs-%{rbs_version}/CHANGELOG.md +%license %{gem_dir}/gems/rbs-%{rbs_version}/COPYING +%{gem_dir}/gems/rbs-%{rbs_version}/Gemfile +%doc %{gem_dir}/gems/rbs-%{rbs_version}/README.md +%{gem_dir}/gems/rbs-%{rbs_version}/Rakefile +%{gem_dir}/gems/rbs-%{rbs_version}/Steepfile +%{gem_dir}/gems/rbs-%{rbs_version}/bin +%{gem_dir}/gems/rbs-%{rbs_version}/core +%doc %{gem_dir}/gems/rbs-%{rbs_version}/docs +%{gem_dir}/gems/rbs-%{rbs_version}/exe +%{gem_dir}/gems/rbs-%{rbs_version}/goodcheck.yml +%{gem_dir}/gems/rbs-%{rbs_version}/lib +%{gem_dir}/gems/rbs-%{rbs_version}/schema +%{gem_dir}/gems/rbs-%{rbs_version}/sig +%{gem_dir}/gems/rbs-%{rbs_version}/stdlib +%{gem_dir}/gems/rbs-%{rbs_version}/steep +%{gem_dir}/specifications/rbs-%{rbs_version}.gemspec + %files -n rubygem-test-unit %{gem_dir}/gems/test-unit-%{test_unit_version} %{gem_dir}/specifications/test-unit-%{test_unit_version}.gemspec -%files -n rubygem-xmlrpc -%license %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/LICENSE.txt -%dir %{gem_dir}/gems/xmlrpc-%{xmlrpc_version} -%exclude %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/.* -%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/Gemfile -%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/Rakefile -%doc %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/README.md -%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/bin -%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/lib -%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/xmlrpc.gemspec -%{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec +%files -n rubygem-rexml +%dir %{gem_dir}/gems/rexml-%{rexml_version} +%exclude %{gem_dir}/gems/rexml-%{rexml_version}/.* +%license %{gem_dir}/gems/rexml-%{rexml_version}/LICENSE.txt +%doc %{gem_dir}/gems/rexml-%{rexml_version}/NEWS.md +%{gem_dir}/gems/rexml-%{rexml_version}/lib +%{gem_dir}/specifications/rexml-%{rexml_version}.gemspec +%doc %{gem_dir}/gems/rexml-%{rexml_version}/Gemfile +%doc %{gem_dir}/gems/rexml-%{rexml_version}/README.md +%doc %{gem_dir}/gems/rexml-%{rexml_version}/Rakefile + +%files -n rubygem-rss +%dir %{gem_dir}/gems/rss-%{rss_version} +%exclude %{gem_dir}/gems/rss-%{rss_version}/.* +%license %{gem_dir}/gems/rss-%{rss_version}/LICENSE.txt +%doc %{gem_dir}/gems/rss-%{rss_version}/NEWS.md +%{gem_dir}/gems/rss-%{rss_version}/lib +%{gem_dir}/specifications/rss-%{rss_version}.gemspec +%doc %{gem_dir}/gems/rss-%{rss_version}/Gemfile +%doc %{gem_dir}/gems/rss-%{rss_version}/README.md +%doc %{gem_dir}/gems/rss-%{rss_version}/Rakefile +%doc %{gem_dir}/gems/rss-%{rss_version}/test + +%files -n rubygem-typeprof +%dir %{gem_dir}/gems/typeprof-%{typeprof_version} +%{_bindir}/typeprof +%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/.* +%license %{gem_dir}/gems/typeprof-%{typeprof_version}/LICENSE +%{gem_dir}/gems/typeprof-%{typeprof_version}/exe +%{gem_dir}/gems/typeprof-%{typeprof_version}/lib +%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/smoke +%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/tools +%{gem_dir}/specifications/typeprof-%{typeprof_version}.gemspec +%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/Gemfile* +%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/README.md +%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/Rakefile +%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/doc +%lang(ja) %doc %{gem_dir}/gems/typeprof-%{typeprof_version}/doc/doc.ja.md +%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/testbed %changelog +* Mon Jan 04 2021 Vít Ondruch - 3.0.0-138 +- Upgrade to Ruby 3.0.0. +- Extract RSS and REXML into separate subpackages, because they were moved from + default gems to bundled gems. +- Obsolete Net::Telnet and XMLRPC packages, because they were dropped from Ruby. + * Tue Dec 15 16:26:46 CET 2020 Pavel Valena - 2.7.2-137 - Add Recommends: redhat-rpm-config to devel subpackage. Resolves: rhbz#1905222 @@ -1306,6 +1401,10 @@ MSPECOPTS="$MSPECOPTS -P 'File.lchmod changes the file mode of the link and not - Disable LTO, which appear to cause issues with SIGSEV handler. - Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. +* Tue Jul 14 2020 Tom Stellard - 2.7.1-133 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + * Wed Jun 24 2020 Jun Aruga - 2.7.1-132 - Add ruby-default-gems dependency on irb. Resolves: rhbz#1850541 diff --git a/rubygems-3.1.3-Fix-I-require-priority.patch b/rubygems-3.1.3-Fix-I-require-priority.patch deleted file mode 100644 index 6ed2f76..0000000 --- a/rubygems-3.1.3-Fix-I-require-priority.patch +++ /dev/null @@ -1,167 +0,0 @@ -From 912d141a351053d0f6d915b5e7807f6a8f4c0631 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 4 Feb 2020 17:25:56 +0100 -Subject: [PATCH 1/2] Make non "test_" method private - ---- - test/rubygems/test_require.rb | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb -index aa2675af5d..d618a93473 100644 ---- a/test/rubygems/test_require.rb -+++ b/test/rubygems/test_require.rb -@@ -532,6 +532,8 @@ def test_require_bundler_with_bundler_version - end - end - -+ private -+ - def silence_warnings - old_verbose, $VERBOSE = $VERBOSE, false - yield - -From b3944384f44b869985051863d8b05b545d09a585 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 4 Feb 2020 17:26:28 +0100 -Subject: [PATCH 2/2] Fix require issue with file extension priority - -If `require "a"` is run when two folders have been specified in the -I -option including a "a.rb" file and a "a.so" file respectively, the ruby -spec says that the ".rb" file should always be preferred. However, the -logic we added in https://github.com/rubygems/rubygems/commit/6b81076d9 -to make the -I option always beat default gems does not respect this -spec, creating a difference from the original ruby-core's require. - -[the ruby spec says]: https://github.com/ruby/spec/blob/d80a6e2b221d4f17a8cadcac75ef950c59cba901/core/kernel/shared/require.rb#L234-L246 ---- - lib/rubygems/core_ext/kernel_require.rb | 28 +++++------ - test/rubygems/test_require.rb | 62 +++++++++++++++++++++++++ - 2 files changed, 74 insertions(+), 16 deletions(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 60f4d18712..369f2c743e 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -43,18 +43,18 @@ def require(path) - # https://github.com/rubygems/rubygems/pull/1868 - resolved_path = begin - rp = nil -- $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| -- safe_lp = lp.dup.tap(&Gem::UNTAINT) -- begin -- if File.symlink? safe_lp # for backward compatibility -- next -+ Gem.suffixes.each do |s| -+ $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| -+ safe_lp = lp.dup.tap(&Gem::UNTAINT) -+ begin -+ if File.symlink? safe_lp # for backward compatibility -+ next -+ end -+ rescue SecurityError -+ RUBYGEMS_ACTIVATION_MONITOR.exit -+ raise - end -- rescue SecurityError -- RUBYGEMS_ACTIVATION_MONITOR.exit -- raise -- end - -- Gem.suffixes.each do |s| - full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) - if File.file?(full_path) - rp = full_path -@@ -67,12 +67,8 @@ def require(path) - end - - if resolved_path -- begin -- RUBYGEMS_ACTIVATION_MONITOR.exit -- return gem_original_require(resolved_path) -- rescue LoadError -- RUBYGEMS_ACTIVATION_MONITOR.enter -- end -+ RUBYGEMS_ACTIVATION_MONITOR.exit -+ return gem_original_require(resolved_path) - end - - if spec = Gem.find_unresolved_default_spec(path) -diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb -index d618a93473..7cffbfa7fe 100644 ---- a/test/rubygems/test_require.rb -+++ b/test/rubygems/test_require.rb -@@ -120,6 +120,24 @@ def test_dash_i_beats_default_gems - Object.send :remove_const, :HELLO if Object.const_defined? :HELLO - end - -+ def test_dash_i_respects_default_library_extension_priority -+ skip "extensions don't quite work on jruby" if Gem.java_platform? -+ -+ dash_i_ext_arg = util_install_extension_file('a') -+ dash_i_lib_arg = util_install_ruby_file('a') -+ -+ lp = $LOAD_PATH.dup -+ -+ begin -+ $LOAD_PATH.unshift dash_i_lib_arg -+ $LOAD_PATH.unshift dash_i_ext_arg -+ assert_require 'a' -+ assert_match(/a\.rb$/, $LOADED_FEATURES.last) -+ ensure -+ $LOAD_PATH.replace lp -+ end -+ end -+ - def test_concurrent_require - Object.const_set :FILE_ENTERED_LATCH, Latch.new(2) - Object.const_set :FILE_EXIT_LATCH, Latch.new(1) -@@ -541,4 +559,48 @@ def silence_warnings - $VERBOSE = old_verbose - end - -+ def util_install_extension_file(name) -+ spec = quick_gem name -+ util_build_gem spec -+ -+ spec.extensions << "extconf.rb" -+ write_file File.join(@tempdir, "extconf.rb") do |io| -+ io.write <<-RUBY -+ require "mkmf" -+ create_makefile("#{name}") -+ RUBY -+ end -+ -+ write_file File.join(@tempdir, "#{name}.c") do |io| -+ io.write <<-C -+ #include -+ void Init_#{name}() { } -+ C -+ end -+ -+ spec.files += ["extconf.rb", "#{name}.c"] -+ -+ so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}") -+ refute_path_exists so -+ -+ path = Gem::Package.build spec -+ installer = Gem::Installer.at path -+ installer.install -+ assert_path_exists so -+ -+ spec.gem_dir -+ end -+ -+ def util_install_ruby_file(name) -+ dir_lib = Dir.mktmpdir("test_require_lib", @tempdir) -+ dash_i_lib_arg = File.join dir_lib -+ -+ a_rb = File.join dash_i_lib_arg, "#{name}.rb" -+ -+ FileUtils.mkdir_p File.dirname a_rb -+ File.open(a_rb, 'w') { |f| f.write "# #{name}.rb" } -+ -+ dash_i_lib_arg -+ end -+ - end diff --git a/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch b/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch deleted file mode 100644 index ae6ecbb..0000000 --- a/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch +++ /dev/null @@ -1,324 +0,0 @@ -From 00d98eb8a3245fb93a475ecbbbc4c7ec7e6704cd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 19 May 2020 14:00:00 +0200 -Subject: [PATCH 1/5] Fix performance regression in `require` - -Our check for `-I` paths should not go through all activated gems. ---- - lib/rubygems.rb | 10 ++++++++++ - lib/rubygems/core_ext/kernel_require.rb | 2 +- - lib/rubygems/test_case.rb | 1 + - test/rubygems/test_require.rb | 11 +++++++++++ - 4 files changed, 23 insertions(+), 1 deletion(-) - -diff --git a/lib/rubygems.rb b/lib/rubygems.rb -index 843cb49e4a..d1a9a1c7e1 100644 ---- a/lib/rubygems.rb -+++ b/lib/rubygems.rb -@@ -662,10 +662,20 @@ def self.load_path_insert_index - index - end - -+ ## -+ # The number of paths in the `$LOAD_PATH` from activated gems. Used to -+ # prioritize `-I` and `ENV['RUBYLIB`]` entries during `require`. -+ -+ def self.activated_gem_paths -+ @activated_gem_paths ||= 0 -+ end -+ - ## - # Add a list of paths to the $LOAD_PATH at the proper place. - - def self.add_to_load_path(*paths) -+ @activated_gem_paths = activated_gem_paths + paths.size -+ - insert_index = load_path_insert_index - - if insert_index -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index ed24111bd5..7625ce1bee 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -47,7 +47,7 @@ def require(path) - load_path_insert_index = Gem.load_path_insert_index - break unless load_path_insert_index - -- $LOAD_PATH[0...load_path_insert_index].each do |lp| -+ $LOAD_PATH[0...load_path_insert_index - Gem.activated_gem_paths].each do |lp| - safe_lp = lp.dup.tap(&Gem::UNTAINT) - begin - if File.symlink? safe_lp # for backward compatibility -diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb -index a05a2898d1..53dd495aef 100644 ---- a/lib/rubygems/test_case.rb -+++ b/lib/rubygems/test_case.rb -@@ -385,6 +385,7 @@ def setup - Gem::Security.reset - - Gem.loaded_specs.clear -+ Gem.instance_variable_set(:@activated_gem_paths, 0) - Gem.clear_default_specs - Bundler.reset! - -diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb -index f36892f8cc..9f2fe3439a 100644 ---- a/test/rubygems/test_require.rb -+++ b/test/rubygems/test_require.rb -@@ -382,6 +382,17 @@ def test_default_gem_require_activates_just_once - assert_equal 0, times_called - end - -+ def test_second_gem_require_does_not_resolve_path_manually_before_going_through_standard_require -+ a1 = util_spec "a", "1", nil, "lib/test_gem_require_a.rb" -+ install_gem a1 -+ -+ assert_require "test_gem_require_a" -+ -+ stub(:gem_original_require, ->(path) { assert_equal "test_gem_require_a", path }) do -+ require "test_gem_require_a" -+ end -+ end -+ - def test_realworld_default_gem - testing_ruby_repo = !ENV["GEM_COMMAND"].nil? - skip "this test can't work under ruby-core setup" if testing_ruby_repo || java_platform? - -From ae95885dff6189c5ac59bbdf685cb4ec4751fdef Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 19 May 2020 14:08:19 +0200 -Subject: [PATCH 2/5] Refactor `Gem.load_path_insert_index` - ---- - lib/rubygems.rb | 13 +++---------- - lib/rubygems/core_ext/kernel_require.rb | 5 +---- - 2 files changed, 4 insertions(+), 14 deletions(-) - -diff --git a/lib/rubygems.rb b/lib/rubygems.rb -index d1a9a1c7e1..ca80326459 100644 ---- a/lib/rubygems.rb -+++ b/lib/rubygems.rb -@@ -659,7 +659,7 @@ def self.load_path_insert_index - - index = $LOAD_PATH.index RbConfig::CONFIG['sitelibdir'] - -- index -+ index || 0 - end - - ## -@@ -676,15 +676,8 @@ def self.activated_gem_paths - def self.add_to_load_path(*paths) - @activated_gem_paths = activated_gem_paths + paths.size - -- insert_index = load_path_insert_index -- -- if insert_index -- # gem directories must come after -I and ENV['RUBYLIB'] -- $LOAD_PATH.insert(insert_index, *paths) -- else -- # we are probably testing in core, -I and RUBYLIB don't apply -- $LOAD_PATH.unshift(*paths) -- end -+ # gem directories must come after -I and ENV['RUBYLIB'] -+ $LOAD_PATH.insert(Gem.load_path_insert_index, *paths) - end - - @yaml_loaded = false -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 7625ce1bee..decf4829f1 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -44,10 +44,7 @@ def require(path) - resolved_path = begin - rp = nil - Gem.suffixes.each do |s| -- load_path_insert_index = Gem.load_path_insert_index -- break unless load_path_insert_index -- -- $LOAD_PATH[0...load_path_insert_index - Gem.activated_gem_paths].each do |lp| -+ $LOAD_PATH[0...Gem.load_path_insert_index - Gem.activated_gem_paths].each do |lp| - safe_lp = lp.dup.tap(&Gem::UNTAINT) - begin - if File.symlink? safe_lp # for backward compatibility - -From da1492e9d7b28d068fbfbb0ba1cafcc516681567 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 19 May 2020 14:32:12 +0200 -Subject: [PATCH 3/5] Extract a local outside the loop - ---- - lib/rubygems/core_ext/kernel_require.rb | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index decf4829f1..6a7faaf2d1 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -43,8 +43,9 @@ def require(path) - # https://github.com/rubygems/rubygems/pull/1868 - resolved_path = begin - rp = nil -+ load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths - Gem.suffixes.each do |s| -- $LOAD_PATH[0...Gem.load_path_insert_index - Gem.activated_gem_paths].each do |lp| -+ $LOAD_PATH[0...load_path_check_index].each do |lp| - safe_lp = lp.dup.tap(&Gem::UNTAINT) - begin - if File.symlink? safe_lp # for backward compatibility - -From 22ad5717c38feda2375b53628d15ae3db2195684 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Thu, 21 May 2020 15:20:57 +0200 -Subject: [PATCH 4/5] Fix `$LOADED_FEATURES` cache sometimes not respected - -In the cases where the initial manually `-I` path resolution succeeded, -we were passing a full path to the original require effectively skipping -the `$LOADED_FEATURES` cache. With this change, we _only_ do the -resolution when a matching requirable path is found in a default gem. In -that case, we skip activation of the default gem if we detect that the -required file will be picked up for a `-I` path. ---- - lib/rubygems/core_ext/kernel_require.rb | 53 +++++++++++-------------- - test/rubygems/test_require.rb | 29 ++++++++++++++ - 2 files changed, 53 insertions(+), 29 deletions(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 6a7faaf2d1..81e37b98bf 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -39,46 +39,41 @@ def require(path) - - path = path.to_path if path.respond_to? :to_path - -- # Ensure -I beats a default gem -- # https://github.com/rubygems/rubygems/pull/1868 -- resolved_path = begin -- rp = nil -- load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths -- Gem.suffixes.each do |s| -- $LOAD_PATH[0...load_path_check_index].each do |lp| -- safe_lp = lp.dup.tap(&Gem::UNTAINT) -- begin -- if File.symlink? safe_lp # for backward compatibility -- next -+ if spec = Gem.find_unresolved_default_spec(path) -+ # Ensure -I beats a default gem -+ # https://github.com/rubygems/rubygems/pull/1868 -+ resolved_path = begin -+ rp = nil -+ load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths -+ Gem.suffixes.each do |s| -+ $LOAD_PATH[0...load_path_check_index].each do |lp| -+ safe_lp = lp.dup.tap(&Gem::UNTAINT) -+ begin -+ if File.symlink? safe_lp # for backward compatibility -+ next -+ end -+ rescue SecurityError -+ RUBYGEMS_ACTIVATION_MONITOR.exit -+ raise - end -- rescue SecurityError -- RUBYGEMS_ACTIVATION_MONITOR.exit -- raise -- end - -- full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) -- if File.file?(full_path) -- rp = full_path -- break -+ full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) -+ if File.file?(full_path) -+ rp = full_path -+ break -+ end - end -+ break if rp - end -- break if rp -+ rp - end -- rp -- end - -- if resolved_path -- RUBYGEMS_ACTIVATION_MONITOR.exit -- return gem_original_require(resolved_path) -- end -- -- if spec = Gem.find_unresolved_default_spec(path) - begin - Kernel.send(:gem, spec.name, Gem::Requirement.default_prerelease) - rescue Exception - RUBYGEMS_ACTIVATION_MONITOR.exit - raise -- end -+ end unless resolved_path - end - - # If there are no unresolved deps, then we can use just try -diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb -index 9f2fe3439a..2b11e26dfe 100644 ---- a/test/rubygems/test_require.rb -+++ b/test/rubygems/test_require.rb -@@ -45,6 +45,35 @@ def refute_require(path) - refute require(path), "'#{path}' was not yet required" - end - -+ def test_respect_loaded_features_caching_like_standard_require -+ dir = Dir.mktmpdir("test_require", @tempdir) -+ -+ lp1 = File.join dir, 'foo1' -+ foo1 = File.join lp1, 'foo.rb' -+ -+ FileUtils.mkdir_p lp1 -+ File.open(foo1, 'w') { |f| f.write "class Object; HELLO = 'foo1' end" } -+ -+ lp = $LOAD_PATH.dup -+ -+ $LOAD_PATH.unshift lp1 -+ assert_require 'foo' -+ assert_equal "foo1", ::Object::HELLO -+ -+ lp2 = File.join dir, 'foo2' -+ foo2 = File.join lp2, 'foo.rb' -+ -+ FileUtils.mkdir_p lp2 -+ File.open(foo2, 'w') { |f| f.write "class Object; HELLO = 'foo2' end" } -+ -+ $LOAD_PATH.unshift lp2 -+ refute_require 'foo' -+ assert_equal "foo1", ::Object::HELLO -+ ensure -+ $LOAD_PATH.replace lp -+ Object.send :remove_const, :HELLO if Object.const_defined? :HELLO -+ end -+ - # Providing -I on the commandline should always beat gems - def test_dash_i_beats_gems - a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb" - -From db872c7a18d616f4447bdcca3130be6db9e5cb03 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Sat, 23 May 2020 20:18:41 +0200 -Subject: [PATCH 5/5] Remove direct reference to PR - -The code is quite different now, so I think the link might be even -confusing. If you want to know more, use git history. ---- - lib/rubygems/core_ext/kernel_require.rb | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 81e37b98bf..115ae0cb50 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -41,7 +41,6 @@ def require(path) - - if spec = Gem.find_unresolved_default_spec(path) - # Ensure -I beats a default gem -- # https://github.com/rubygems/rubygems/pull/1868 - resolved_path = begin - rp = nil - load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths diff --git a/rubygems-3.1.3-Improve-require.patch b/rubygems-3.1.3-Improve-require.patch deleted file mode 100644 index 2df5c4f..0000000 --- a/rubygems-3.1.3-Improve-require.patch +++ /dev/null @@ -1,92 +0,0 @@ -From c5197b2ab35ba389f48918e0c773b43b6dca2fa5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Fri, 7 Feb 2020 17:16:05 +0100 -Subject: [PATCH 1/3] Tweaks to get test passing more reliably - ---- - test/rubygems/test_require.rb | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb -index 7cffbfa7fe..67c55416d4 100644 ---- a/test/rubygems/test_require.rb -+++ b/test/rubygems/test_require.rb -@@ -567,18 +567,20 @@ def util_install_extension_file(name) - write_file File.join(@tempdir, "extconf.rb") do |io| - io.write <<-RUBY - require "mkmf" -+ CONFIG['LDSHARED'] = '$(TOUCH) $@ ||' - create_makefile("#{name}") - RUBY - end - - write_file File.join(@tempdir, "#{name}.c") do |io| - io.write <<-C -- #include - void Init_#{name}() { } - C - end - -- spec.files += ["extconf.rb", "#{name}.c"] -+ write_file File.join(@tempdir, "depend") -+ -+ spec.files += ["extconf.rb", "depend", "#{name}.c"] - - so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}") - refute_path_exists so - -From 7bfd7319cd751837c3ccaf1d97b02846eaaf39d5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 11 Feb 2020 11:56:06 +0100 -Subject: [PATCH 2/3] Fix bug bug calculating $LOAD_PATH's to check in - `require` - -In `Gem.load_path_insert_index` is not set, we end up having -`$LOAD_PATH[0...-1]`, unintentionally skipping the last $LOAD_PATH entry -from the check. - -The correct thing to do in that case is to not even try since we have no -way of distinguisng default LOAD_PATH entries from those added with -I. ---- - lib/rubygems/core_ext/kernel_require.rb | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 369f2c743e..a8d170f13a 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -44,7 +44,10 @@ def require(path) - resolved_path = begin - rp = nil - Gem.suffixes.each do |s| -- $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| -+ load_path_insert_index = Gem.load_path_insert_index -+ break unless load_path_insert_index -+ -+ $LOAD_PATH[0...load_path_insert_index].each do |lp| - safe_lp = lp.dup.tap(&Gem::UNTAINT) - begin - if File.symlink? safe_lp # for backward compatibility - -From 4fc0ab21c0f7713829abb522ce3b6d8e24c126b3 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Fri, 14 Feb 2020 02:03:04 +0100 -Subject: [PATCH 3/3] Exclude empty suffix from `-I` require loop - ---- - lib/rubygems/core_ext/kernel_require.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index a8d170f13a..9712fb6ac0 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -43,7 +43,7 @@ def require(path) - # https://github.com/rubygems/rubygems/pull/1868 - resolved_path = begin - rp = nil -- Gem.suffixes.each do |s| -+ Gem.suffixes[1..-1].each do |s| - load_path_insert_index = Gem.load_path_insert_index - break unless load_path_insert_index - diff --git a/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch b/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch deleted file mode 100644 index 463047c..0000000 --- a/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 301e30bf97dd603ca81d52b90186908575c4ddf8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 25 Feb 2020 15:01:44 +0100 -Subject: [PATCH] Revert "Exclude empty suffix from `-I` require loop" - -This reverts commit 4fc0ab21c0f7713829abb522ce3b6d8e24c126b3. - -Technically, extensionless ruby files are valid ruby files that can be -required. For example, `bin/bundle` is sometimes required from other -binstubs even if it's also runnable directly. - -So, we should technically consider this kind of files too. ---- - lib/rubygems/core_ext/kernel_require.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 9712fb6ac0..a8d170f13a 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -43,7 +43,7 @@ def require(path) - # https://github.com/rubygems/rubygems/pull/1868 - resolved_path = begin - rp = nil -- Gem.suffixes[1..-1].each do |s| -+ Gem.suffixes.each do |s| - load_path_insert_index = Gem.load_path_insert_index - break unless load_path_insert_index - diff --git a/sources b/sources index df34d8a..2b68f2e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.7.2.tar.xz) = 7972278b096aa768c7adf2befd26003e18781a29ca317640317d30d93d6e963ded197724c8e2f1dfe1e838c5647176d414a74732a62e931fb50d6f2e0f777349 +SHA512 (ruby-3.0.0.tar.xz) = 2a23c2894e62e24bb20cec6b2a016b66d7df05083668726b6f70af8338211cfec417aa3624290d1f5ccd130f65ee7b52b5db7d428abc4a9460459c9a5dd1a450 From 15d70f8b4a8bb6aa317f2c4337705462161e2574 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 6 Jan 2021 14:18:39 +0100 Subject: [PATCH 366/530] Properly own RubyGems plugin directory. RubyGems 3.2.0 rewored their plugins system for improvement performance [[1]]. Each RubyGems plugins has now generated loader stub during installation. This directory needs to have proper ownership. [1]: https://github.com/rubygems/rubygems/pull/3108 --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 23a9fbc..969d10a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 138 +%global release 139 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1132,6 +1132,7 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %dir %{gem_dir}/doc %dir %{gem_dir}/extensions %dir %{gem_dir}/gems +%dir %{gem_dir}/plugins %dir %{gem_dir}/specifications %dir %{gem_dir}/specifications/default %dir %{_exec_prefix}/lib*/gems @@ -1378,6 +1379,9 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %changelog +* Wed Jan 6 2021 Vít Ondruch - 3.0.0-139 +- Add support for reworked RubyGems plugins. + * Mon Jan 04 2021 Vít Ondruch - 3.0.0-138 - Upgrade to Ruby 3.0.0. - Extract RSS and REXML into separate subpackages, because they were moved from From 9a03f61609a0da52a3292d03203ad1befdb1ef6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 6 Jan 2021 14:23:29 +0100 Subject: [PATCH 367/530] Add `%{gem_plugin}` convenience macro. This allows easy plugin stub ownership for RubyGems plugin packages. --- macros.rubygems | 1 + 1 file changed, 1 insertion(+) diff --git a/macros.rubygems b/macros.rubygems index b55a402..3f72b14 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -9,6 +9,7 @@ %gem_cache %{gem_dir}/cache/%{gem_name}-%{version}%{?prerelease}.gem %gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}%{?prerelease}.gemspec %gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}%{?prerelease} +%gem_plugin %{gem_dir}/plugins/%{gem_name}_plugin.rb # %gem_install - Install gem into appropriate directory. From fcc584306bbaf23b7a1e895747768fd594437d70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 8 Jan 2021 15:36:07 +0100 Subject: [PATCH 368/530] Fix SEGFAULT preventing rubygem-unicode to build on armv7hl. --- ...eb34e28b000627e5f0649dd81a04e252286f.patch | 30 +++++++++++++++++++ ruby.spec | 17 +++++++---- 2 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 f690eb34e28b000627e5f0649dd81a04e252286f.patch diff --git a/f690eb34e28b000627e5f0649dd81a04e252286f.patch b/f690eb34e28b000627e5f0649dd81a04e252286f.patch new file mode 100644 index 0000000..416f85e --- /dev/null +++ b/f690eb34e28b000627e5f0649dd81a04e252286f.patch @@ -0,0 +1,30 @@ +From f690eb34e28b000627e5f0649dd81a04e252286f Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Sat, 2 Jan 2021 12:11:52 +0900 +Subject: [PATCH] Fixed dangling imemo_tmpbuf + +The count of rb_alloc_tmp_buffer_with_count is the allocation size +counted in VALUE size but not in the requested element size. + +Co-authored-by: Yusuke Endoh +Co-authored-by: Koichi Sasada +--- + include/ruby/internal/memory.h | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/include/ruby/internal/memory.h b/include/ruby/internal/memory.h +index 974c21e19ce8..7d24df494512 100644 +--- a/include/ruby/internal/memory.h ++++ b/include/ruby/internal/memory.h +@@ -250,8 +250,9 @@ rbimpl_size_mul_or_raise(size_t x, size_t y) + static inline void * + rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize) + { +- return rb_alloc_tmp_buffer_with_count( +- store, rbimpl_size_mul_or_raise(count, elsize), count); ++ const size_t total_size = rbimpl_size_mul_or_raise(count, elsize); ++ const size_t cnt = (total_size + sizeof(VALUE) - 1) / sizeof(VALUE); ++ return rb_alloc_tmp_buffer_with_count(store, total_size, cnt); + } + + #ifndef __MINGW32__ diff --git a/ruby.spec b/ruby.spec index 969d10a..34987eb 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 139 +%global release 140 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -146,6 +146,9 @@ Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +# Fix SEGFAULT preventing rubygem-unicode to build on armv7hl. +# https://bugs.ruby-lang.org/issues/17518 +Patch10: ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -603,6 +606,7 @@ rm -rf ext/fiddle/libffi* %patch5 -p1 %patch6 -p1 %patch9 -p1 +%patch10 -p1 %patch19 -p1 # Provide an example of usage of the tapset: @@ -892,10 +896,10 @@ MSPECOPTS="" # https://bugs.ruby-lang.org/issues/17338 MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is not a Module'" -# Give an option to increase the timeout in tests. -# https://bugs.ruby-lang.org/issues/16921 -%{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ - make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" +#%# Give an option to increase the timeout in tests. +#%# https://bugs.ruby-lang.org/issues/16921 +#%%{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ +#% make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %files %license BSDL @@ -1379,6 +1383,9 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %changelog +* Fri Jan 8 14:25:51 CET 2021 Vít Ondruch - 3.0.0-140 +- Fix SEGFAULT preventing rubygem-unicode to build on armv7hl. + * Wed Jan 6 2021 Vít Ondruch - 3.0.0-139 - Add support for reworked RubyGems plugins. From 071cbd09061fb0e519fb1216b2ddb156643b0d9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 8 Jan 2021 16:14:30 +0100 Subject: [PATCH 369/530] Rename patch to the correct name. --- ...e252286f.patch => ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename f690eb34e28b000627e5f0649dd81a04e252286f.patch => ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch (100%) diff --git a/f690eb34e28b000627e5f0649dd81a04e252286f.patch b/ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch similarity index 100% rename from f690eb34e28b000627e5f0649dd81a04e252286f.patch rename to ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch From 0e7ccf2b47f3cf48caffe92f483e4f3111fcc99e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 8 Jan 2021 18:49:13 +0100 Subject: [PATCH 370/530] ruby-default-gems have to depend on rubygem(io-console) due to reline. This fixes IRB failures: ~~~ $ irb /usr/share/rubygems/rubygems/specification.rb:1398:in `rescue in block in activate_dependencies': Could not find 'io-console' (~> 0.5) among 76 total gem(s) (Gem::MissingSpecError) Checked in 'GEM_PATH=/builddir/.local/share/gem/ruby:/usr/share/gems:/usr/local/share/gems' at: /usr/share/gems/specifications/reline-0.2.0.gemspec, execute `gem env` for more information from /usr/share/rubygems/rubygems/specification.rb:1395:in `block in activate_dependencies' from /usr/share/rubygems/rubygems/specification.rb:1384:in `each' from /usr/share/rubygems/rubygems/specification.rb:1384:in `activate_dependencies' from /usr/share/rubygems/rubygems/specification.rb:1366:in `activate' from /usr/share/rubygems/rubygems/specification.rb:1402:in `block in activate_dependencies' from /usr/share/rubygems/rubygems/specification.rb:1384:in `each' from /usr/share/rubygems/rubygems/specification.rb:1384:in `activate_dependencies' from /usr/share/rubygems/rubygems/specification.rb:1366:in `activate' from /usr/share/rubygems/rubygems.rb:302:in `block in activate_bin_path' from /usr/share/rubygems/rubygems.rb:301:in `synchronize' from /usr/share/rubygems/rubygems.rb:301:in `activate_bin_path' from /usr/bin/irb:23:in `
' /usr/share/rubygems/rubygems/dependency.rb:307:in `to_specs': Could not find 'io-console' (~> 0.5) among 76 total gem(s) (Gem::MissingSpecError) Checked in 'GEM_PATH=/builddir/.local/share/gem/ruby:/usr/share/gems:/usr/local/share/gems' , execute `gem env` for more information from /usr/share/rubygems/rubygems/specification.rb:1396:in `block in activate_dependencies' from /usr/share/rubygems/rubygems/specification.rb:1384:in `each' from /usr/share/rubygems/rubygems/specification.rb:1384:in `activate_dependencies' from /usr/share/rubygems/rubygems/specification.rb:1366:in `activate' from /usr/share/rubygems/rubygems/specification.rb:1402:in `block in activate_dependencies' from /usr/share/rubygems/rubygems/specification.rb:1384:in `each' from /usr/share/rubygems/rubygems/specification.rb:1384:in `activate_dependencies' from /usr/share/rubygems/rubygems/specification.rb:1366:in `activate' from /usr/share/rubygems/rubygems.rb:302:in `block in activate_bin_path' from /usr/share/rubygems/rubygems.rb:301:in `synchronize' from /usr/share/rubygems/rubygems.rb:301:in `activate_bin_path' from /usr/bin/irb:23:in `
' ~~~ --- ruby.spec | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 34987eb..e2b313f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 140 +%global release 141 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -280,6 +280,8 @@ Macros and development tools for packaging RubyGems. Summary: Default gems which are part of Ruby StdLib. Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) +# Include the io-console dependency for reline. +Requires: rubygem(io-console) # Obsoleted by Ruby 2.7 in F32 timeframe. Obsoletes: rubygem-did_you_mean < 1.4.0-130 Obsoletes: rubygem-racc < 1.4.16-130 @@ -1383,6 +1385,9 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %changelog +* Fri Jan 8 2021 Vít Ondruch - 3.0.0-141 +- ruby-default-gems have to depend on rubygem(io-console) due to reline. + * Fri Jan 8 14:25:51 CET 2021 Vít Ondruch - 3.0.0-140 - Fix SEGFAULT preventing rubygem-unicode to build on armv7hl. From f63d6e5cd45afbbd9cd333f4c686095c7136327a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 11 Jan 2021 09:26:29 +0100 Subject: [PATCH 371/530] Remove time from changelog It makes some tools to complain about changelog ordering. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index e2b313f..f199db5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1388,7 +1388,7 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no * Fri Jan 8 2021 Vít Ondruch - 3.0.0-141 - ruby-default-gems have to depend on rubygem(io-console) due to reline. -* Fri Jan 8 14:25:51 CET 2021 Vít Ondruch - 3.0.0-140 +* Fri Jan 8 2021 Vít Ondruch - 3.0.0-140 - Fix SEGFAULT preventing rubygem-unicode to build on armv7hl. * Wed Jan 6 2021 Vít Ondruch - 3.0.0-139 From 64975231d1f7eddafefa1ed3ab6dec33d098053c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 11 Jan 2021 09:28:52 +0100 Subject: [PATCH 372/530] Re-enable test suite. It was disabled by mistake in fcc584306bbaf23b7a1e895747768fd594437d70 when I was trying to come up with fix for armv7hl. --- ruby.spec | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/ruby.spec b/ruby.spec index f199db5..41c9460 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 141 +%global release 142 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -898,10 +898,10 @@ MSPECOPTS="" # https://bugs.ruby-lang.org/issues/17338 MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is not a Module'" -#%# Give an option to increase the timeout in tests. -#%# https://bugs.ruby-lang.org/issues/16921 -#%%{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ -#% make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" +# Give an option to increase the timeout in tests. +# https://bugs.ruby-lang.org/issues/16921 +%{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ + make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %files %license BSDL @@ -1385,6 +1385,9 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %changelog +* Mon Jan 11 2021 Vít Ondruch - 3.0.0-142 +- Re-enable test suite. + * Fri Jan 8 2021 Vít Ondruch - 3.0.0-141 - ruby-default-gems have to depend on rubygem(io-console) due to reline. From 0256efd9925ff20d18c1b5ccabf004c94da217ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 12 Jan 2021 18:20:04 +0100 Subject: [PATCH 373/530] Provide `gem.build_complete` file for binary gems. When the `gem.build_complete` file is not present, Bundler treats the package as uninstalled, therefore leaves it out from the dependency resolution with error such as: ~~~ Could not find gem 'openssl', which is required by gem 'net-ssh', in any of the sources. ~~~ [1] https://github.com/rubygems/rubygems/blob/1969e8adfc714d5fc3689e6de0689b4c7b3e7f0d/bundler/lib/bundler/source/rubygems.rb#L353-L384 --- ruby.spec | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 41c9460..49aecaa 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 142 +%global release 143 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -722,6 +722,7 @@ mkdir -p %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} +touch %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/gem.build_complete mv %{buildroot}%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so @@ -737,6 +738,7 @@ mkdir -p %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io +touch %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/gem.build_complete mv %{buildroot}%{gem_dir}/specifications/default/io-console-%{io_console_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/io-console-%{io_console_version}/lib/io %{buildroot}%{ruby_libdir}/io ln -s %{_libdir}/gems/%{name}/io-console-%{io_console_version}/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so @@ -745,6 +747,7 @@ mkdir -p %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version} mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/ +touch %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/gem.build_complete mv %{buildroot}%{gem_dir}/specifications/default/json-%{json_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/json-%{json_version}/lib/json.rb %{buildroot}%{ruby_libdir}/json.rb ln -s %{gem_dir}/gems/json-%{json_version}/lib/json %{buildroot}%{ruby_libdir}/json @@ -754,6 +757,7 @@ mkdir -p %{buildroot}%{gem_dir}/gems/openssl-%{openssl_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version} mv %{buildroot}%{ruby_libdir}/openssl* %{buildroot}%{gem_dir}/gems/openssl-%{openssl_version}/lib mv %{buildroot}%{ruby_libarchdir}/openssl.so %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version}/ +touch %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version}/gem.build_complete mv %{buildroot}%{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec %{buildroot}%{gem_dir}/specifications # This used to be directory when OpenSSL was integral part of StdLib => Keep # it as directory and link everything in it to prevent directory => symlink @@ -768,6 +772,7 @@ mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version} mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/ +touch %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/gem.build_complete mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_libdir}/psych ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_libdir}/psych.rb @@ -1385,6 +1390,9 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %changelog +* Tue Jan 12 2021 Vít Ondruch - 3.0.0-143 +- Provide `gem.build_complete` file for binary gems. + * Mon Jan 11 2021 Vít Ondruch - 3.0.0-142 - Re-enable test suite. From 1e7260221818aaaff726e7141f211251c54db14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Sat, 16 Jan 2021 11:43:47 +0100 Subject: [PATCH 374/530] Fix SEGFAULT in rubygem-shoulda-matchers test suite. --- ...ry-to-clear-cache-on-garbage-objects.patch | 31 +++++++++++++++++++ ruby.spec | 10 +++++- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch diff --git a/ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch b/ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch new file mode 100644 index 0000000..f97b2d0 --- /dev/null +++ b/ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch @@ -0,0 +1,31 @@ +From 0b54279d63c4be355e0ce9cc0b81e3df75045791 Mon Sep 17 00:00:00 2001 +From: Aaron Patterson +Date: Fri, 15 Jan 2021 14:14:43 -0800 +Subject: [PATCH] Don't try to clear cache on garbage objects + +Method cache can be cleared during lazy sweeping. An object that will +be collected during lazy sweep *should not* have it's method cache +cleared. Soon-to-be-collected objects can be in an inconsistent state and +this can lead to a crash. This patch just leaves early if the object is +going to be collected. + +Fixes [Bug #17536] + +Co-Authored-By: John Hawthorn +Co-Authored-By: Alan Wu +--- + vm_method.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/vm_method.c b/vm_method.c +index 287d4aee6dea..81920bbe5bfb 100644 +--- a/vm_method.c ++++ b/vm_method.c +@@ -136,6 +136,7 @@ static void + clear_method_cache_by_id_in_class(VALUE klass, ID mid) + { + VM_ASSERT(RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_ICLASS)); ++ if (rb_objspace_garbage_object_p(klass)) return; + + if (LIKELY(RCLASS_EXT(klass)->subclasses == NULL)) { + // no subclasses diff --git a/ruby.spec b/ruby.spec index 49aecaa..e10ef27 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 143 +%global release 144 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -149,6 +149,10 @@ Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch # Fix SEGFAULT preventing rubygem-unicode to build on armv7hl. # https://bugs.ruby-lang.org/issues/17518 Patch10: ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch +# Fix SEGFAULT in rubygem-shoulda-matchers test suite. +# https://bugs.ruby-lang.org/issues/17536 +# https://github.com/ruby/ruby/pull/4077 +Patch11: ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -609,6 +613,7 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 %patch19 -p1 # Provide an example of usage of the tapset: @@ -1390,6 +1395,9 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %changelog +* Sat Jan 16 2021 Vít Ondruch - 3.0.0-144 +- Fix SEGFAULT in rubygem-shoulda-matchers test suite. + * Tue Jan 12 2021 Vít Ondruch - 3.0.0-143 - Provide `gem.build_complete` file for binary gems. From cdeff9e00a2fb8edc6e8bd03831cfdd9f0fa26cc Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Mon, 18 Jan 2021 19:02:12 +0100 Subject: [PATCH 375/530] Refactor small issues. --- ruby.spec | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index e10ef27..fdbedf8 100644 --- a/ruby.spec +++ b/ruby.spec @@ -93,7 +93,7 @@ Release: %{release_string} # zlib: ext/digest/md5/md5.*, ext/nkf/nkf-utf8/nkf.c # UCD: some of enc/trans/**/*.src License: (Ruby or BSD) and Public Domain and MIT and CC0 and zlib and UCD -URL: http://ruby-lang.org/ +URL: https://www.ruby-lang.org/ Source0: https://cache.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.xz Source1: operating_system.rb # TODO: Try to push SystemTap support upstream. @@ -579,8 +579,8 @@ to read and create these feeds. %package -n rubygem-typeprof -Version: %{typeprof_version} Summary: TypeProf is a type analysis tool for Ruby code based on abstract interpretation +Version: %{typeprof_version} License: MIT URL: https://github.com/ruby/typeprof Requires: ruby(release) @@ -1244,7 +1244,6 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %exclude %{_bindir}/racc %exclude %{gem_dir}/gems/racc-%{racc_version}/bin - %files -n rubygem-irb %{_bindir}/irb %{ruby_libdir}/irb* From c7513cd67c700325c441dd4650be417102f90f37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 26 Jan 2021 11:57:43 +0100 Subject: [PATCH 376/530] Bundle OpenSSL into StdLib. Symlinks to StdLib provided to preserve `--disable-gems` functionality together with `require_relative` cause double loading issues [1], e.g.: ~~~ $ ruby --disable-gems -e 'require "openssl"; require "openssl/digest"' /usr/share/ruby/openssl/digest.rb:45: warning: already initialized constant OpenSSL::Digest::MD4 /usr/share/gems/gems/openssl-2.2.0/lib/openssl/digest.rb:45: warning: previous definition of MD4 was here /usr/share/ruby/openssl/digest.rb:45: warning: already initialized constant OpenSSL::Digest::MD5 /usr/share/gems/gems/openssl-2.2.0/lib/openssl/digest.rb:45: warning: previous definition of MD5 was here /usr/share/ruby/openssl/digest.rb:45: warning: already initialized constant OpenSSL::Digest::RIPEMD160 /usr/share/gems/gems/openssl-2.2.0/lib/openssl/digest.rb:45: warning: previous definition of RIPEMD160 was here /usr/share/ruby/openssl/digest.rb:45: warning: already initialized constant OpenSSL::Digest::SHA1 /usr/share/gems/gems/openssl-2.2.0/lib/openssl/digest.rb:45: warning: previous definition of SHA1 was here /usr/share/ruby/openssl/digest.rb:45: warning: already initialized constant OpenSSL::Digest::SHA224 /usr/share/gems/gems/openssl-2.2.0/lib/openssl/digest.rb:45: warning: previous definition of SHA224 was here /usr/share/ruby/openssl/digest.rb:45: warning: already initialized constant OpenSSL::Digest::SHA256 /usr/share/gems/gems/openssl-2.2.0/lib/openssl/digest.rb:45: warning: previous definition of SHA256 was here /usr/share/ruby/openssl/digest.rb:45: warning: already initialized constant OpenSSL::Digest::SHA384 /usr/share/gems/gems/openssl-2.2.0/lib/openssl/digest.rb:45: warning: previous definition of SHA384 was here /usr/share/ruby/openssl/digest.rb:45: warning: already initialized constant OpenSSL::Digest::SHA512 /usr/share/gems/gems/openssl-2.2.0/lib/openssl/digest.rb:45: warning: previous definition of SHA512 was here /usr/share/ruby/openssl/digest.rb:52:in `': superclass mismatch for class Digest (TypeError) from /usr/share/ruby/openssl/digest.rb:16:in `' from /usr/share/ruby/openssl/digest.rb:15:in `' from -e:1:in `require' from -e:1:in `
' ~~~ We could maintain a downstream patch reverting the `require_relative`, but given that how much troubles the extracted gems cause, it'll be better to keep them bundled. This will provide similar experience to upstream and prevent similar issues. [1]: https://bugs.ruby-lang.org/issues/16978#note-11 --- ruby.spec | 51 +++++++++++---------------------------------------- 1 file changed, 11 insertions(+), 40 deletions(-) diff --git a/ruby.spec b/ruby.spec index fdbedf8..4d694d7 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 144 +%global release 145 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -161,7 +161,6 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick Recommends: ruby(rubygems) >= %{rubygems_version} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} -Recommends: rubygem(openssl) >= %{openssl_version} BuildRequires: autoconf BuildRequires: gdbm-devel @@ -223,6 +222,7 @@ Provides: bundled(ccan-list) # StdLib default gems. Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} +Provides: bundled(rubygem-openssl) = %{openssl_version} Provides: bundled(rubygem-racc) = %{racc_version} # Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe. @@ -248,7 +248,6 @@ Requires: ruby(release) Recommends: rubygem(bundler) >= %{bundler_version} Recommends: rubygem(rdoc) >= %{rdoc_version} Recommends: rubygem(io-console) >= %{io_console_version} -Requires: rubygem(openssl) >= %{openssl_version} Requires: rubygem(psych) >= %{psych_version} Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} @@ -289,6 +288,9 @@ Requires: rubygem(io-console) # Obsoleted by Ruby 2.7 in F32 timeframe. Obsoletes: rubygem-did_you_mean < 1.4.0-130 Obsoletes: rubygem-racc < 1.4.16-130 +# Obsoleted by Ruby 3.0 in F34 timeframe. +Obsoletes: rubygem-openssl < 2.2.0-145 +Provides: rubygem(openssl) = %{openssl_version}-%{release} BuildArch: noarch %description default-gems @@ -396,19 +398,6 @@ data to disk or transmit it over a network rather than use a verbose markup language. -%package -n rubygem-openssl -Summary: OpenSSL provides SSL, TLS and general purpose cryptography -Version: %{openssl_version} -License: Ruby or BSD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(openssl) = %{version}-%{release} - -%description -n rubygem-openssl -OpenSSL provides SSL, TLS and general purpose cryptography. It wraps the -OpenSSL library. - - %package -n rubygem-psych Summary: A libyaml wrapper for Ruby Version: %{psych_version} @@ -758,21 +747,6 @@ ln -s %{gem_dir}/gems/json-%{json_version}/lib/json.rb %{buildroot}%{ruby_libdir ln -s %{gem_dir}/gems/json-%{json_version}/lib/json %{buildroot}%{ruby_libdir}/json ln -s %{_libdir}/gems/%{name}/json-%{json_version}/json/ %{buildroot}%{ruby_libarchdir}/json -mkdir -p %{buildroot}%{gem_dir}/gems/openssl-%{openssl_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version} -mv %{buildroot}%{ruby_libdir}/openssl* %{buildroot}%{gem_dir}/gems/openssl-%{openssl_version}/lib -mv %{buildroot}%{ruby_libarchdir}/openssl.so %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version}/ -touch %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version}/gem.build_complete -mv %{buildroot}%{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec %{buildroot}%{gem_dir}/specifications -# This used to be directory when OpenSSL was integral part of StdLib => Keep -# it as directory and link everything in it to prevent directory => symlink -# conversion RPM issues. -mkdir -p %{buildroot}%{ruby_libdir}/openssl -find %{buildroot}%{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl -maxdepth 1 -type f -exec \ - sh -c 'ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl/`basename {}` %{buildroot}%{ruby_libdir}/openssl' \; -ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl.rb %{buildroot}%{ruby_libdir}/openssl.rb -ln -s %{_libdir}/gems/%{name}/openssl-%{openssl_version}/openssl.so %{buildroot}%{ruby_libarchdir}/openssl.so - mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version} mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib @@ -957,7 +931,6 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %exclude %{ruby_libdir}/bigdecimal* %exclude %{ruby_libdir}/irb* %exclude %{ruby_libdir}/json* -%exclude %{ruby_libdir}/openssl* %exclude %{ruby_libdir}/psych* %{ruby_libdir}/abbrev.rb %{ruby_libdir}/base64.rb @@ -1128,6 +1101,8 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no # Default gems %{ruby_libdir}/did_you_mean* +%{ruby_libdir}/openssl* +%{ruby_libarchdir}/openssl.so %{ruby_libdir}/racc* %dir %{ruby_libarchdir}/racc %{ruby_libarchdir}/racc/cparse.so @@ -1203,6 +1178,7 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %{gem_dir}/specifications/default/open3-0.1.1.gemspec %{gem_dir}/specifications/default/open-uri-0.1.0.gemspec %{gem_dir}/specifications/default/optparse-0.1.0.gemspec +%{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec %{gem_dir}/specifications/default/ostruct-0.3.1.gemspec %{gem_dir}/specifications/default/pathname-0.1.0.gemspec %{gem_dir}/specifications/default/pp-0.1.0.gemspec @@ -1285,14 +1261,6 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %{gem_dir}/gems/json-%{json_version} %{gem_dir}/specifications/json-%{json_version}.gemspec -%files -n rubygem-openssl -%{ruby_libdir}/openssl -%{ruby_libdir}/openssl.rb -%{ruby_libarchdir}/openssl.so -%{_libdir}/gems/%{name}/openssl-%{openssl_version} -%{gem_dir}/gems/openssl-%{openssl_version} -%{gem_dir}/specifications/openssl-%{openssl_version}.gemspec - %files -n rubygem-psych %{ruby_libdir}/psych %{ruby_libdir}/psych.rb @@ -1394,6 +1362,9 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %changelog +* Mon Jan 25 2021 Vít Ondruch - 3.0.0-145 +- Bundle OpenSSL into StdLib. + * Sat Jan 16 2021 Vít Ondruch - 3.0.0-144 - Fix SEGFAULT in rubygem-shoulda-matchers test suite. From b3e2d7fc608e4515f2249bba98aa5cbbcb8d640f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 26 Jan 2021 12:32:30 +0100 Subject: [PATCH 377/530] Add missing `rubygem-` prefix for bundled provide. The `bundled()` provide name must corresponded with package name. This was omited due to mistake probably. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 4d694d7..468900f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -422,7 +422,7 @@ Requires: ruby(rubygems) >= %{rubygems_version} Requires: rubygem(io-console) Provides: rubygem(bundler) = %{version}-%{release} # https://github.com/bundler/bundler/issues/3647 -Provides: bundled(connection_pool) = %{bundler_connection_pool_version} +Provides: bundled(rubygem-connection_pool) = %{bundler_connection_pool_version} Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} Provides: bundled(rubygem-molinillo) = %{bundler_molinillo_version} Provides: bundled(rubygem-net-http-persisntent) = %{bundler_net_http_persistent_version} From b7229da1654b460c66694251c97cffaf21ecdd70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 27 Jan 2021 14:02:29 +0100 Subject: [PATCH 378/530] Disable test which started to fail presumably after move to DWARF5 https://bugzilla.redhat.com/show_bug.cgi?id=1920533 Unfortunately, these used to be problematic already before: https://bugs.ruby-lang.org/issues/13758 --- ruby.spec | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ruby.spec b/ruby.spec index 468900f..012c915 100644 --- a/ruby.spec +++ b/ruby.spec @@ -875,6 +875,15 @@ make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}" DISABLE_TESTS="" MSPECOPTS="" +%ifarch armv7hl ppc64le +# Disable test which started to fail presumably after move to DWARF5: +# https://bugzilla.redhat.com/show_bug.cgi?id=1920533 +# Unfortunately, these used to be problematic already before: +# https://bugs.ruby-lang.org/issues/13758 +DISABLE_TESTS="$DISABLE_TESTS -n !/test_segv_\(setproctitle\|test\|loaded_features\)/" +DISABLE_TESTS="$DISABLE_TESTS -n !/test_bug_reporter_add/" +%endif + # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} From 35f28c9a6800eaf1d557b74e2f60d13e99cd2268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 27 Jan 2021 14:00:39 +0100 Subject: [PATCH 379/530] Use proper path for plugin wrappers. --- ruby.spec | 5 ++ ...ugin-wrappers-with-relative-requires.patch | 47 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch diff --git a/ruby.spec b/ruby.spec index 012c915..13dd4a3 100644 --- a/ruby.spec +++ b/ruby.spec @@ -153,6 +153,9 @@ Patch10: ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch # https://bugs.ruby-lang.org/issues/17536 # https://github.com/ruby/ruby/pull/4077 Patch11: ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch +# Use proper path for plugin wrappers. +# https://github.com/rubygems/rubygems/pull/4317 +Patch12: rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -603,6 +606,7 @@ rm -rf ext/fiddle/libffi* %patch9 -p1 %patch10 -p1 %patch11 -p1 +%patch12 -p1 %patch19 -p1 # Provide an example of usage of the tapset: @@ -1373,6 +1377,7 @@ MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is no %changelog * Mon Jan 25 2021 Vít Ondruch - 3.0.0-145 - Bundle OpenSSL into StdLib. +- Use proper path for plugin wrappers. * Sat Jan 16 2021 Vít Ondruch - 3.0.0-144 - Fix SEGFAULT in rubygem-shoulda-matchers test suite. diff --git a/rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch b/rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch new file mode 100644 index 0000000..d58c987 --- /dev/null +++ b/rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch @@ -0,0 +1,47 @@ +From db4157e9aa7b7f720ee06fb866b53ad11879c016 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Mon, 25 Jan 2021 15:40:26 +0100 +Subject: [PATCH] Generate plugin wrappers with relative requires + +It shouldn't change behaviour and it fixes broken wrappers generated +with `--build-root` flag is used. +--- + lib/rubygems/installer_uninstaller_utils.rb | 7 ++++++- + test/rubygems/test_gem_installer.rb | 2 ++ + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/lib/rubygems/installer_uninstaller_utils.rb b/lib/rubygems/installer_uninstaller_utils.rb +index e81ed4cba38..2c8b7c635e1 100644 +--- a/lib/rubygems/installer_uninstaller_utils.rb ++++ b/lib/rubygems/installer_uninstaller_utils.rb +@@ -6,11 +6,16 @@ + module Gem::InstallerUninstallerUtils + + def regenerate_plugins_for(spec, plugins_dir) ++ plugins = spec.plugins ++ return if plugins.empty? ++ ++ require 'pathname' ++ + spec.plugins.each do |plugin| + plugin_script_path = File.join plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}" + + File.open plugin_script_path, 'wb' do |file| +- file.puts "require '#{plugin}'" ++ file.puts "require_relative '#{Pathname.new(plugin).relative_path_from(Pathname.new(plugins_dir))}'" + end + + verbose plugin_script_path +diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb +index 4ce7e92442a..5652d863316 100644 +--- a/test/rubygems/test_gem_installer.rb ++++ b/test/rubygems/test_gem_installer.rb +@@ -821,6 +821,8 @@ def test_generate_plugins_with_build_root + + assert !File.exist?(system_path), 'plugin written incorrect written to system plugins_dir' + assert File.exist?(build_root_path), 'plugin not written to build_root' ++ ++ refute_includes File.read(build_root_path), build_root + end + + def test_keeps_plugins_up_to_date From 3210f66fb138765903d77d679ee2beadb0eba3ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 16 Feb 2021 10:00:33 +0100 Subject: [PATCH 380/530] Avoid ruby-spec to be stuck in "C-API Kernel function rb_rescue2". --- ...a_list-args-in-rb_vrescue2-is-reused.patch | 65 +++++++++++++++++++ ruby.spec | 8 +-- 2 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch diff --git a/ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch b/ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch new file mode 100644 index 0000000..996d528 --- /dev/null +++ b/ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch @@ -0,0 +1,65 @@ +From 85310ad82ede533681c4f8a423cc8f140e6adf76 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Tue, 9 Feb 2021 10:08:30 +0900 +Subject: [PATCH 1/2] Also `eclass` loop can raise in `rb_obj_is_kind_of` + +--- + eval.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/eval.c b/eval.c +index 56d7c2b81c93..2c9e375e2545 100644 +--- a/eval.c ++++ b/eval.c +@@ -1034,6 +1034,7 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1, + int handle = FALSE; + VALUE eclass; + ++ result = Qnil; + while ((eclass = va_arg(args, VALUE)) != 0) { + if (rb_obj_is_kind_of(ec->errinfo, eclass)) { + handle = TRUE; +@@ -1042,7 +1043,6 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1, + } + + if (handle) { +- result = Qnil; + state = 0; + if (r_proc) { + result = (*r_proc) (data2, ec->errinfo); + +From 601d38efa21dbed0084629d909752e52e3d6092d Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Tue, 9 Feb 2021 00:42:12 +0900 +Subject: [PATCH 2/2] Copy va_list of exception classes + +The list is reused when an exception raised again after retrying +in the rescue procedure. +--- + eval.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/eval.c b/eval.c +index 2c9e375e2545..55d66b550854 100644 +--- a/eval.c ++++ b/eval.c +@@ -1033,14 +1033,18 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1, + if (state == TAG_RAISE) { + int handle = FALSE; + VALUE eclass; ++ va_list ap; + + result = Qnil; +- while ((eclass = va_arg(args, VALUE)) != 0) { ++ /* reuses args when raised again after retrying in r_proc */ ++ va_copy(ap, args); ++ while ((eclass = va_arg(ap, VALUE)) != 0) { + if (rb_obj_is_kind_of(ec->errinfo, eclass)) { + handle = TRUE; + break; + } + } ++ va_end(ap); + + if (handle) { + state = 0; diff --git a/ruby.spec b/ruby.spec index 13dd4a3..3ad310f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -156,6 +156,9 @@ Patch11: ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch # Use proper path for plugin wrappers. # https://github.com/rubygems/rubygems/pull/4317 Patch12: rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch +# Avoid ruby-spec to be stuck in "C-API Kernel function rb_rescue2". +# https://bugs.ruby-lang.org/issues/17338 +Patch13: ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -607,6 +610,7 @@ rm -rf ext/fiddle/libffi* %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 %patch19 -p1 # Provide an example of usage of the tapset: @@ -891,10 +895,6 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/test_bug_reporter_add/" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} -# The test suite gets stuck in 'C-API Kernel function rb_rescue2'. -# https://bugs.ruby-lang.org/issues/17338 -MSPECOPTS="$MSPECOPTS -P 'raises TypeError if one of the passed exceptions is not a Module'" - # Give an option to increase the timeout in tests. # https://bugs.ruby-lang.org/issues/16921 %{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ From 2bc8b3d5d52c4ae2db138235cf424871cc668e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 2 Mar 2021 10:16:45 +0100 Subject: [PATCH 381/530] Apply patch fixing flaky excon test suite. --- ...-storage-in-dfree-function-during-GC.patch | 24 +++++++++++++++++++ ruby.spec | 9 ++++++- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 ruby-3.0.0-Do-not-allocate-ractor-local-storage-in-dfree-function-during-GC.patch diff --git a/ruby-3.0.0-Do-not-allocate-ractor-local-storage-in-dfree-function-during-GC.patch b/ruby-3.0.0-Do-not-allocate-ractor-local-storage-in-dfree-function-during-GC.patch new file mode 100644 index 0000000..c63c7c3 --- /dev/null +++ b/ruby-3.0.0-Do-not-allocate-ractor-local-storage-in-dfree-function-during-GC.patch @@ -0,0 +1,24 @@ +From 265c0022390e3dcd4ff692fc77d29b94e652c877 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Tue, 9 Feb 2021 01:00:00 +0900 +Subject: [PATCH] Do not allocate ractor-local storage in dfree function during + GC + +--- + random.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/random.c b/random.c +index c11cd803f2cb..83df6d1eb537 100644 +--- a/random.c ++++ b/random.c +@@ -257,7 +257,8 @@ const rb_data_type_t rb_random_data_type = { + static void + random_mt_free(void *ptr) + { +- if (ptr != default_rand()) ++ rb_random_mt_t *rnd = rb_ractor_local_storage_ptr(default_rand_key); ++ if (ptr != rnd) + xfree(ptr); + } + diff --git a/ruby.spec b/ruby.spec index 3ad310f..cc9f9a8 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 145 +%global release 146 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -159,6 +159,9 @@ Patch12: rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch # Avoid ruby-spec to be stuck in "C-API Kernel function rb_rescue2". # https://bugs.ruby-lang.org/issues/17338 Patch13: ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch +# Fix flaky excon test suite. +# https://bugs.ruby-lang.org/issues/17653 +Patch14: ruby-3.0.0-Do-not-allocate-ractor-local-storage-in-dfree-function-during-GC.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -611,6 +614,7 @@ rm -rf ext/fiddle/libffi* %patch11 -p1 %patch12 -p1 %patch13 -p1 +%patch14 -p1 %patch19 -p1 # Provide an example of usage of the tapset: @@ -1375,6 +1379,9 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/test_bug_reporter_add/" %changelog +* Tue Mar 02 2021 Vít Ondruch - 3.0.0-146 +- Fix flaky excon test suite. + * Mon Jan 25 2021 Vít Ondruch - 3.0.0-145 - Bundle OpenSSL into StdLib. - Use proper path for plugin wrappers. From 9b149e59e4a46bdfebd0a7fd1a865d16c1c66886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 3 Mar 2021 11:25:14 +0100 Subject: [PATCH 382/530] Properly support DWARF5 debug information. Resolves: rhbz#1920533 --- ruby-dwarf5-avoid_crash-r1.patch | 217 +++++++++++++++++++++++++++++++ ruby.spec | 16 +-- 2 files changed, 224 insertions(+), 9 deletions(-) create mode 100644 ruby-dwarf5-avoid_crash-r1.patch diff --git a/ruby-dwarf5-avoid_crash-r1.patch b/ruby-dwarf5-avoid_crash-r1.patch new file mode 100644 index 0000000..c14642b --- /dev/null +++ b/ruby-dwarf5-avoid_crash-r1.patch @@ -0,0 +1,217 @@ +--- a/addr2line.c ++++ b/addr2line.c +@@ -159,11 +159,12 @@ + struct dwarf_section debug_info; + struct dwarf_section debug_line; + struct dwarf_section debug_ranges; ++ struct dwarf_section debug_rnglists; + struct dwarf_section debug_str; + struct obj_info *next; + } obj_info_t; + +-#define DWARF_SECTION_COUNT 5 ++#define DWARF_SECTION_COUNT 6 + + static struct dwarf_section * + obj_dwarf_section_at(obj_info_t *obj, int n) +@@ -173,6 +174,7 @@ + &obj->debug_info, + &obj->debug_line, + &obj->debug_ranges, ++ &obj->debug_rnglists, + &obj->debug_str + }; + if (n < 0 || DWARF_SECTION_COUNT <= n) { +@@ -411,7 +413,7 @@ + FILL_LINE(); + break; + case DW_LNS_advance_pc: +- a = uleb128((char **)&p); ++ a = uleb128((char **)&p) * header.minimum_instruction_length; + addr += a; + break; + case DW_LNS_advance_line: { +@@ -450,7 +452,7 @@ + /* isa = (unsigned int)*/(void)uleb128((char **)&p); + break; + case 0: +- a = *(unsigned char *)p++; ++ a = uleb128((char **)&p); + op = *p++; + switch (op) { + case DW_LNE_end_sequence: +@@ -807,6 +809,18 @@ + DW_FORM_addrx4 = 0x2c + }; + ++/* Range list entry encodings */ ++enum { ++ DW_RLE_end_of_list = 0x00, ++ DW_RLE_base_addressx = 0x01, ++ DW_RLE_startx_endx = 0x02, ++ DW_RLE_startx_length = 0x03, ++ DW_RLE_offset_pair = 0x04, ++ DW_RLE_base_address = 0x05, ++ DW_RLE_start_end = 0x06, ++ DW_RLE_start_length = 0x07 ++}; ++ + enum { + VAL_none = 0, + VAL_cstr = 1, +@@ -961,6 +975,23 @@ + } + + static void ++di_skip_die_attributes(char **p) ++{ ++ for (;;) { ++ uint64_t at = uleb128(p); ++ uint64_t form = uleb128(p); ++ if (!at && !form) break; ++ switch (form) { ++ default: ++ break; ++ case DW_FORM_implicit_const: ++ sleb128(p); ++ break; ++ } ++ } ++} ++ ++static void + di_read_debug_abbrev_cu(DebugInfoReader *reader) + { + uint64_t prev = 0; +@@ -974,12 +1005,7 @@ + prev = abbrev_number; + uleb128(&p); /* tag */ + p++; /* has_children */ +- /* skip content */ +- for (;;) { +- uint64_t at = uleb128(&p); +- uint64_t form = uleb128(&p); +- if (!at && !form) break; +- } ++ di_skip_die_attributes(&p); + } + } + +@@ -1243,12 +1269,7 @@ + /* skip 255th record */ + uleb128(&p); /* tag */ + p++; /* has_children */ +- /* skip content */ +- for (;;) { +- uint64_t at = uleb128(&p); +- uint64_t form = uleb128(&p); +- if (!at && !form) break; +- } ++ di_skip_die_attributes(&p); + for (uint64_t n = uleb128(&p); abbrev_number != n; n = uleb128(&p)) { + if (n == 0) { + fprintf(stderr,"%d: Abbrev Number %"PRId64" not found\n",__LINE__, abbrev_number); +@@ -1256,12 +1277,7 @@ + } + uleb128(&p); /* tag */ + p++; /* has_children */ +- /* skip content */ +- for (;;) { +- uint64_t at = uleb128(&p); +- uint64_t form = uleb128(&p); +- if (!at && !form) break; +- } ++ di_skip_die_attributes(&p); + } + return p; + } +@@ -1389,6 +1405,21 @@ + } + } + ++static uint64_t ++read_dw_form_addr(DebugInfoReader *reader, char **ptr) ++{ ++ char *p = *ptr; ++ *ptr = p + reader->format; ++ if (reader->format == 4) { ++ return read_uint32(&p); ++ } else if (reader->format == 8) { ++ return read_uint64(&p); ++ } else { ++ fprintf(stderr,"unknown address_size:%d", reader->address_size); ++ abort(); ++ } ++} ++ + static uintptr_t + ranges_include(DebugInfoReader *reader, ranges_t *ptr, uint64_t addr) + { +@@ -1402,8 +1433,50 @@ + } + else if (ptr->ranges_set) { + /* TODO: support base address selection entry */ +- char *p = reader->obj->debug_ranges.ptr + ptr->ranges; ++ char *p; + uint64_t base = ptr->low_pc_set ? ptr->low_pc : reader->current_low_pc; ++ if (reader->obj->debug_rnglists.ptr) { ++ p = reader->obj->debug_rnglists.ptr + ptr->ranges; ++ for (;;) { ++ uint8_t rle = read_uint8(&p); ++ uintptr_t base_address = 0; ++ uintptr_t from, to; ++ if (rle == DW_RLE_end_of_list) break; ++ switch (rle) { ++ case DW_RLE_base_addressx: ++ uleb128(&p); ++ break; ++ case DW_RLE_startx_endx: ++ uleb128(&p); ++ uleb128(&p); ++ break; ++ case DW_RLE_startx_length: ++ uleb128(&p); ++ uleb128(&p); ++ break; ++ case DW_RLE_offset_pair: ++ from = base_address + uleb128(&p); ++ to = base_address + uleb128(&p); ++ if (base + from <= addr && addr < base + to) { ++ return from; ++ } ++ break; ++ case DW_RLE_base_address: ++ base_address = read_dw_form_addr(reader, &p); ++ break; ++ case DW_RLE_start_end: ++ read_dw_form_addr(reader, &p); ++ read_dw_form_addr(reader, &p); ++ break; ++ case DW_RLE_start_length: ++ read_dw_form_addr(reader, &p); ++ uleb128(&p); ++ break; ++ } ++ } ++ return false; ++ } ++ p = reader->obj->debug_ranges.ptr + ptr->ranges; + for (;;) { + uintptr_t from = read_uintptr(&p); + uintptr_t to = read_uintptr(&p); +@@ -1747,6 +1820,7 @@ + ".debug_info", + ".debug_line", + ".debug_ranges", ++ ".debug_rnglists", + ".debug_str" + }; + +@@ -2003,6 +2077,7 @@ + "__debug_info", + "__debug_line", + "__debug_ranges", ++ "__debug_rnglists", + "__debug_str" + }; + struct LP(segment_command) *scmd = (struct LP(segment_command) *)lcmd; diff --git a/ruby.spec b/ruby.spec index cc9f9a8..c43fb0a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -162,6 +162,10 @@ Patch13: ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch # Fix flaky excon test suite. # https://bugs.ruby-lang.org/issues/17653 Patch14: ruby-3.0.0-Do-not-allocate-ractor-local-storage-in-dfree-function-during-GC.patch +# Fix DWARF5 support. +# https://bugzilla.redhat.com/show_bug.cgi?id=1920533 +# https://bugs.ruby-lang.org/issues/17585 +Patch15: ruby-dwarf5-avoid_crash-r1.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -615,6 +619,7 @@ rm -rf ext/fiddle/libffi* %patch12 -p1 %patch13 -p1 %patch14 -p1 +%patch15 -p1 %patch19 -p1 # Provide an example of usage of the tapset: @@ -887,15 +892,6 @@ make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}" DISABLE_TESTS="" MSPECOPTS="" -%ifarch armv7hl ppc64le -# Disable test which started to fail presumably after move to DWARF5: -# https://bugzilla.redhat.com/show_bug.cgi?id=1920533 -# Unfortunately, these used to be problematic already before: -# https://bugs.ruby-lang.org/issues/13758 -DISABLE_TESTS="$DISABLE_TESTS -n !/test_segv_\(setproctitle\|test\|loaded_features\)/" -DISABLE_TESTS="$DISABLE_TESTS -n !/test_bug_reporter_add/" -%endif - # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} @@ -1381,6 +1377,8 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/test_bug_reporter_add/" %changelog * Tue Mar 02 2021 Vít Ondruch - 3.0.0-146 - Fix flaky excon test suite. +- Properly support DWARF5 debug information. + Resolves: rhbz#1920533 * Mon Jan 25 2021 Vít Ondruch - 3.0.0-145 - Bundle OpenSSL into StdLib. From cb0039f53c1eb8d4c58aa4eb100191a0b1c4eacb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 5 Mar 2021 14:06:28 +0100 Subject: [PATCH 383/530] Remove excesive space. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index c43fb0a..f9c7d7e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -681,7 +681,7 @@ do rm -d $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) || : done # Ensure there is not forgotten any certificate. -test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" +test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" # Move macros file into proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. From dae90ef93d0f3eb43b09780368a236cb4f2b850f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 22 Mar 2021 10:10:27 +0100 Subject: [PATCH 384/530] Summary should not end with `.` --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index f9c7d7e..47aae18 100644 --- a/ruby.spec +++ b/ruby.spec @@ -293,7 +293,7 @@ Macros and development tools for packaging RubyGems. # with disabled RubyGems. %package default-gems -Summary: Default gems which are part of Ruby StdLib. +Summary: Default gems which are part of Ruby StdLib Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) # Include the io-console dependency for reline. From 303495d1bfde6dbc048cb43609df939ab6365974 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Tue, 23 Mar 2021 16:31:10 +0100 Subject: [PATCH 385/530] Add ruby.rpmlintrc. Ignore the false positive errors and warnings by the `rpmlint --file ruby.rpmlintrc`, that is executed by Zuul CI. You can run the command on your local like this. ``` $ rpmlint --file ruby.rpmlintrc ruby.spec /var/lib/mock/fedora-rawhide-x86_64/result/*.rpm ``` The `rpmlint` without `--file` option shows the original result. --- ruby.rpmlintrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 ruby.rpmlintrc diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc new file mode 100644 index 0000000..3fca5a2 --- /dev/null +++ b/ruby.rpmlintrc @@ -0,0 +1 @@ +# Keep matching patterns enough not to hide unintended errors and warnings. From b65d1d30903186f031760aa2f81002281a82ec58 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Tue, 23 Mar 2021 16:31:10 +0100 Subject: [PATCH 386/530] Ignore the rpmlint "E: use-of-RPM_SOURCE_DIR". Ignore the following errors. ``` ruby.spec:20: E: use-of-RPM_SOURCE_DIR ruby.src:20: E: use-of-RPM_SOURCE_DIR ``` --- ruby.rpmlintrc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index 3fca5a2..151490d 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -1 +1,5 @@ # Keep matching patterns enough not to hide unintended errors and warnings. + +# There is no way to implement this with `%{SOURCE0}` without `%{_sourcedir}`. +# The order in the .spec file could be possibly different. +addFilter(r'^ruby\.(spec|src):20: E: use-of-RPM_SOURCE_DIR$') From 4108f57be7468c5392a99a2e609150028f145eb1 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Tue, 23 Mar 2021 16:31:10 +0100 Subject: [PATCH 387/530] Ignore the rpmlint "W: unversioned-explicit-provides". Ignore the following warnings for bundled ccan-* libraries. ``` ruby.spec:231: W: unversioned-explicit-provides bundled(ccan-build_assert) ruby.spec:232: W: unversioned-explicit-provides bundled(ccan-check_type) ruby.spec:233: W: unversioned-explicit-provides bundled(ccan-container_of) ruby.spec:234: W: unversioned-explicit-provides bundled(ccan-list) ruby.src:231: W: unversioned-explicit-provides bundled(ccan-build_assert) ruby.src:232: W: unversioned-explicit-provides bundled(ccan-check_type) ruby.src:233: W: unversioned-explicit-provides bundled(ccan-container_of) ruby.src:234: W: unversioned-explicit-provides bundled(ccan-list) ``` --- ruby.rpmlintrc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index 151490d..823778b 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -3,3 +3,9 @@ # There is no way to implement this with `%{SOURCE0}` without `%{_sourcedir}`. # The order in the .spec file could be possibly different. addFilter(r'^ruby\.(spec|src):20: E: use-of-RPM_SOURCE_DIR$') + +# The used version is not obvious. +addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-build_assert\)$') +addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-check_type\)$') +addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-container_of\)$') +addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-list\)$') From fd8c8ee7656facfbc0e963b4de83b824c85656f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 1 Apr 2021 12:31:44 +0200 Subject: [PATCH 388/530] Remove IRB dependency from rubygem-rdoc. The IRB dependency was dropped in RDoc 6.0.0 already, but nobody noticed: https://github.com/ruby/rdoc/pull/512 --- ruby.spec | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 47aae18..b020727 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 146 +%global release 147 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -339,7 +339,6 @@ Version: %{rdoc_version} License: GPLv2 and Ruby and MIT and OFL Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(irb) >= %{irb_version} Requires: rubygem(io-console) >= %{io_console_version} Requires: rubygem(json) >= %{json_version} Provides: rdoc = %{version}-%{release} @@ -1375,6 +1374,9 @@ MSPECOPTS="" %changelog +* Thu Apr 01 2021 Vít Ondruch - 3.0.0-147 +- Remove IRB dependency from rubygem-rdoc. + * Tue Mar 02 2021 Vít Ondruch - 3.0.0-146 - Fix flaky excon test suite. - Properly support DWARF5 debug information. From 9e656cf65808593d71a548277e402e3888f6e0b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 6 Apr 2021 12:51:08 +0200 Subject: [PATCH 389/530] Upgrade to Ruby 3.0.1. --- ruby-2.3.0-ruby_version.patch | 4 +- ...-storage-in-dfree-function-during-GC.patch | 24 ------- ...ry-to-clear-cache-on-garbage-objects.patch | 31 --------- ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch | 30 --------- ...a_list-args-in-rb_vrescue2-is-reused.patch | 65 ------------------- ruby.spec | 56 ++++++---------- ...ugin-wrappers-with-relative-requires.patch | 47 -------------- sources | 2 +- 8 files changed, 23 insertions(+), 236 deletions(-) delete mode 100644 ruby-3.0.0-Do-not-allocate-ractor-local-storage-in-dfree-function-during-GC.patch delete mode 100644 ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch delete mode 100644 ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch delete mode 100644 ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch delete mode 100644 rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 9dc9cc4..f596602 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -237,7 +237,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1369,7 +1369,8 @@ def test_self_use_paths +@@ -1452,7 +1452,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -247,7 +247,7 @@ index b25068405d..e9fef4a311 100644 FileUtils.mkdir_p File.join(parts) -@@ -1447,7 +1448,7 @@ def test_self_vendor_dir +@@ -1530,7 +1531,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, 'vendor')) do expected = File.join RbConfig::CONFIG['vendordir'], 'gems', diff --git a/ruby-3.0.0-Do-not-allocate-ractor-local-storage-in-dfree-function-during-GC.patch b/ruby-3.0.0-Do-not-allocate-ractor-local-storage-in-dfree-function-during-GC.patch deleted file mode 100644 index c63c7c3..0000000 --- a/ruby-3.0.0-Do-not-allocate-ractor-local-storage-in-dfree-function-during-GC.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 265c0022390e3dcd4ff692fc77d29b94e652c877 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Tue, 9 Feb 2021 01:00:00 +0900 -Subject: [PATCH] Do not allocate ractor-local storage in dfree function during - GC - ---- - random.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/random.c b/random.c -index c11cd803f2cb..83df6d1eb537 100644 ---- a/random.c -+++ b/random.c -@@ -257,7 +257,8 @@ const rb_data_type_t rb_random_data_type = { - static void - random_mt_free(void *ptr) - { -- if (ptr != default_rand()) -+ rb_random_mt_t *rnd = rb_ractor_local_storage_ptr(default_rand_key); -+ if (ptr != rnd) - xfree(ptr); - } - diff --git a/ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch b/ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch deleted file mode 100644 index f97b2d0..0000000 --- a/ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 0b54279d63c4be355e0ce9cc0b81e3df75045791 Mon Sep 17 00:00:00 2001 -From: Aaron Patterson -Date: Fri, 15 Jan 2021 14:14:43 -0800 -Subject: [PATCH] Don't try to clear cache on garbage objects - -Method cache can be cleared during lazy sweeping. An object that will -be collected during lazy sweep *should not* have it's method cache -cleared. Soon-to-be-collected objects can be in an inconsistent state and -this can lead to a crash. This patch just leaves early if the object is -going to be collected. - -Fixes [Bug #17536] - -Co-Authored-By: John Hawthorn -Co-Authored-By: Alan Wu ---- - vm_method.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/vm_method.c b/vm_method.c -index 287d4aee6dea..81920bbe5bfb 100644 ---- a/vm_method.c -+++ b/vm_method.c -@@ -136,6 +136,7 @@ static void - clear_method_cache_by_id_in_class(VALUE klass, ID mid) - { - VM_ASSERT(RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_ICLASS)); -+ if (rb_objspace_garbage_object_p(klass)) return; - - if (LIKELY(RCLASS_EXT(klass)->subclasses == NULL)) { - // no subclasses diff --git a/ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch b/ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch deleted file mode 100644 index 416f85e..0000000 --- a/ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch +++ /dev/null @@ -1,30 +0,0 @@ -From f690eb34e28b000627e5f0649dd81a04e252286f Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Sat, 2 Jan 2021 12:11:52 +0900 -Subject: [PATCH] Fixed dangling imemo_tmpbuf - -The count of rb_alloc_tmp_buffer_with_count is the allocation size -counted in VALUE size but not in the requested element size. - -Co-authored-by: Yusuke Endoh -Co-authored-by: Koichi Sasada ---- - include/ruby/internal/memory.h | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/include/ruby/internal/memory.h b/include/ruby/internal/memory.h -index 974c21e19ce8..7d24df494512 100644 ---- a/include/ruby/internal/memory.h -+++ b/include/ruby/internal/memory.h -@@ -250,8 +250,9 @@ rbimpl_size_mul_or_raise(size_t x, size_t y) - static inline void * - rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize) - { -- return rb_alloc_tmp_buffer_with_count( -- store, rbimpl_size_mul_or_raise(count, elsize), count); -+ const size_t total_size = rbimpl_size_mul_or_raise(count, elsize); -+ const size_t cnt = (total_size + sizeof(VALUE) - 1) / sizeof(VALUE); -+ return rb_alloc_tmp_buffer_with_count(store, total_size, cnt); - } - - #ifndef __MINGW32__ diff --git a/ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch b/ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch deleted file mode 100644 index 996d528..0000000 --- a/ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 85310ad82ede533681c4f8a423cc8f140e6adf76 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Tue, 9 Feb 2021 10:08:30 +0900 -Subject: [PATCH 1/2] Also `eclass` loop can raise in `rb_obj_is_kind_of` - ---- - eval.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/eval.c b/eval.c -index 56d7c2b81c93..2c9e375e2545 100644 ---- a/eval.c -+++ b/eval.c -@@ -1034,6 +1034,7 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1, - int handle = FALSE; - VALUE eclass; - -+ result = Qnil; - while ((eclass = va_arg(args, VALUE)) != 0) { - if (rb_obj_is_kind_of(ec->errinfo, eclass)) { - handle = TRUE; -@@ -1042,7 +1043,6 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1, - } - - if (handle) { -- result = Qnil; - state = 0; - if (r_proc) { - result = (*r_proc) (data2, ec->errinfo); - -From 601d38efa21dbed0084629d909752e52e3d6092d Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Tue, 9 Feb 2021 00:42:12 +0900 -Subject: [PATCH 2/2] Copy va_list of exception classes - -The list is reused when an exception raised again after retrying -in the rescue procedure. ---- - eval.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/eval.c b/eval.c -index 2c9e375e2545..55d66b550854 100644 ---- a/eval.c -+++ b/eval.c -@@ -1033,14 +1033,18 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1, - if (state == TAG_RAISE) { - int handle = FALSE; - VALUE eclass; -+ va_list ap; - - result = Qnil; -- while ((eclass = va_arg(args, VALUE)) != 0) { -+ /* reuses args when raised again after retrying in r_proc */ -+ va_copy(ap, args); -+ while ((eclass = va_arg(ap, VALUE)) != 0) { - if (rb_obj_is_kind_of(ec->errinfo, eclass)) { - handle = TRUE; - break; - } - } -+ va_end(ap); - - if (handle) { - state = 0; diff --git a/ruby.spec b/ruby.spec index b020727..1f5b66c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 0 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -22,7 +22,7 @@ %endif -%global release 147 +%global release 148 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -30,24 +30,24 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.2.3 +%global rubygems_version 3.2.15 %global rubygems_molinillo_version 0.7.0 # Default gems. -%global bundler_version 2.2.3 +%global bundler_version 2.2.15 %global bundler_connection_pool_version 2.2.2 %global bundler_fileutils_version 1.4.1 %global bundler_molinillo_version 0.7.0 %global bundler_net_http_persistent_version 4.0.0 -%global bundler_thor_version 1.0.1 +%global bundler_thor_version 1.1.0 %global bundler_tmpdir_version 0.1.0 %global bundler_uri_version 0.10.0 %global bigdecimal_version 3.0.0 %global did_you_mean_version 1.5.0 %global erb_version 2.2.0 -%global io_console_version 0.5.6 -%global irb_version 1.3.0 +%global io_console_version 0.5.7 +%global irb_version 1.3.5 %global json_version 2.5.1 %global openssl_version 2.2.0 %global psych_version 3.3.0 @@ -58,11 +58,11 @@ %global minitest_version 5.14.2 %global power_assert_version 1.2.0 %global rake_version 13.0.3 -%global rbs_version 1.0.0 +%global rbs_version 1.0.4 %global test_unit_version 3.3.7 -%global rexml_version 3.2.4 +%global rexml_version 3.2.5 %global rss_version 0.2.9 -%global typeprof_version 0.11.0 +%global typeprof_version 0.12.0 %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* @@ -146,22 +146,6 @@ Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch -# Fix SEGFAULT preventing rubygem-unicode to build on armv7hl. -# https://bugs.ruby-lang.org/issues/17518 -Patch10: ruby-3.0.0-Fixed-dangling-imemo_tmpbuf.patch -# Fix SEGFAULT in rubygem-shoulda-matchers test suite. -# https://bugs.ruby-lang.org/issues/17536 -# https://github.com/ruby/ruby/pull/4077 -Patch11: ruby-3.0.0-Dont-try-to-clear-cache-on-garbage-objects.patch -# Use proper path for plugin wrappers. -# https://github.com/rubygems/rubygems/pull/4317 -Patch12: rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch -# Avoid ruby-spec to be stuck in "C-API Kernel function rb_rescue2". -# https://bugs.ruby-lang.org/issues/17338 -Patch13: ruby-3.0.0-va_list-args-in-rb_vrescue2-is-reused.patch -# Fix flaky excon test suite. -# https://bugs.ruby-lang.org/issues/17653 -Patch14: ruby-3.0.0-Do-not-allocate-ractor-local-storage-in-dfree-function-during-GC.patch # Fix DWARF5 support. # https://bugzilla.redhat.com/show_bug.cgi?id=1920533 # https://bugs.ruby-lang.org/issues/17585 @@ -613,11 +597,6 @@ rm -rf ext/fiddle/libffi* %patch5 -p1 %patch6 -p1 %patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 %patch15 -p1 %patch19 -p1 @@ -780,7 +759,11 @@ find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{ruby_version}/* -maxdep || echo "No gem binary extensions to move." # Move man pages into proper location +mkdir -p %{buildroot}%{_mandir}/man{1,5} mv %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/doc/rake.1 %{buildroot}%{_mandir}/man1 +# https://bugs.ruby-lang.org/issues/17778 +cp -a %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib/bundler/man/*.1 %{buildroot}%{_mandir}/man1 +cp -a %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib/bundler/man/*.5 %{buildroot}%{_mandir}/man5 %if %{with systemtap} # Install a tapset and fix up the path to the library. @@ -1200,7 +1183,7 @@ MSPECOPTS="" %{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{gem_dir}/specifications/default/readline-0.0.2.gemspec %{gem_dir}/specifications/default/readline-ext-0.1.1.gemspec -%{gem_dir}/specifications/default/reline-0.2.0.gemspec +%{gem_dir}/specifications/default/reline-0.2.5.gemspec %{gem_dir}/specifications/default/resolv-0.2.0.gemspec %{gem_dir}/specifications/default/resolv-replace-0.1.0.gemspec %{gem_dir}/specifications/default/rinda-0.1.0.gemspec @@ -1214,7 +1197,7 @@ MSPECOPTS="" %{gem_dir}/specifications/default/tempfile-0.1.1.gemspec %{gem_dir}/specifications/default/time-0.1.0.gemspec %{gem_dir}/specifications/default/timeout-0.1.1.gemspec -%{gem_dir}/specifications/default/tmpdir-0.1.1.gemspec +%{gem_dir}/specifications/default/tmpdir-0.1.2.gemspec %{gem_dir}/specifications/default/tsort-0.1.0.gemspec %{gem_dir}/specifications/default/tracer-0.1.1.gemspec %{gem_dir}/specifications/default/un-0.1.0.gemspec @@ -1334,14 +1317,12 @@ MSPECOPTS="" %files -n rubygem-rexml %dir %{gem_dir}/gems/rexml-%{rexml_version} -%exclude %{gem_dir}/gems/rexml-%{rexml_version}/.* %license %{gem_dir}/gems/rexml-%{rexml_version}/LICENSE.txt %doc %{gem_dir}/gems/rexml-%{rexml_version}/NEWS.md +%doc %{gem_dir}/gems/rexml-%{rexml_version}/doc %{gem_dir}/gems/rexml-%{rexml_version}/lib %{gem_dir}/specifications/rexml-%{rexml_version}.gemspec -%doc %{gem_dir}/gems/rexml-%{rexml_version}/Gemfile %doc %{gem_dir}/gems/rexml-%{rexml_version}/README.md -%doc %{gem_dir}/gems/rexml-%{rexml_version}/Rakefile %files -n rubygem-rss %dir %{gem_dir}/gems/rss-%{rss_version} @@ -1374,6 +1355,9 @@ MSPECOPTS="" %changelog +* Tue Apr 06 2021 Vít Ondruch - 3.0.1-148 +- Upgrade to Ruby 3.0.1. + * Thu Apr 01 2021 Vít Ondruch - 3.0.0-147 - Remove IRB dependency from rubygem-rdoc. diff --git a/rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch b/rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch deleted file mode 100644 index d58c987..0000000 --- a/rubygems-3.2.7-Generate-plugin-wrappers-with-relative-requires.patch +++ /dev/null @@ -1,47 +0,0 @@ -From db4157e9aa7b7f720ee06fb866b53ad11879c016 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Mon, 25 Jan 2021 15:40:26 +0100 -Subject: [PATCH] Generate plugin wrappers with relative requires - -It shouldn't change behaviour and it fixes broken wrappers generated -with `--build-root` flag is used. ---- - lib/rubygems/installer_uninstaller_utils.rb | 7 ++++++- - test/rubygems/test_gem_installer.rb | 2 ++ - 2 files changed, 8 insertions(+), 1 deletion(-) - -diff --git a/lib/rubygems/installer_uninstaller_utils.rb b/lib/rubygems/installer_uninstaller_utils.rb -index e81ed4cba38..2c8b7c635e1 100644 ---- a/lib/rubygems/installer_uninstaller_utils.rb -+++ b/lib/rubygems/installer_uninstaller_utils.rb -@@ -6,11 +6,16 @@ - module Gem::InstallerUninstallerUtils - - def regenerate_plugins_for(spec, plugins_dir) -+ plugins = spec.plugins -+ return if plugins.empty? -+ -+ require 'pathname' -+ - spec.plugins.each do |plugin| - plugin_script_path = File.join plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}" - - File.open plugin_script_path, 'wb' do |file| -- file.puts "require '#{plugin}'" -+ file.puts "require_relative '#{Pathname.new(plugin).relative_path_from(Pathname.new(plugins_dir))}'" - end - - verbose plugin_script_path -diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb -index 4ce7e92442a..5652d863316 100644 ---- a/test/rubygems/test_gem_installer.rb -+++ b/test/rubygems/test_gem_installer.rb -@@ -821,6 +821,8 @@ def test_generate_plugins_with_build_root - - assert !File.exist?(system_path), 'plugin written incorrect written to system plugins_dir' - assert File.exist?(build_root_path), 'plugin not written to build_root' -+ -+ refute_includes File.read(build_root_path), build_root - end - - def test_keeps_plugins_up_to_date diff --git a/sources b/sources index 2b68f2e..bed9a6d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.0.0.tar.xz) = 2a23c2894e62e24bb20cec6b2a016b66d7df05083668726b6f70af8338211cfec417aa3624290d1f5ccd130f65ee7b52b5db7d428abc4a9460459c9a5dd1a450 +SHA512 (ruby-3.0.1.tar.xz) = 97d2e883656060846b304368d9d836e2f3ef39859c36171c9398a0573818e4ed75bfd7460f901a9553f7f53518c505327a66e74f83704a881469f5ac61fe13d7 From 1b641ac57f5a8f196c2cbf62818b5c37ff5ef9e9 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Wed, 5 May 2021 13:30:43 +0200 Subject: [PATCH 390/530] Fix FTBFS due to an incompatible load. The FTBFS has started to happen with rpm-4.16.90-0.git15395.2.fc35. root.log ``` DEBUG util.py:444: error: line 116: Unknown tag: /chroot_tmpdir/srpm_unpacked/SOURCES/macros.ruby ``` As the `%{?load:...}` is undocumented, it is gone. https://github.com/rpm-software-management/rpm/issues/1669 --- ruby.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 1f5b66c..1b70681 100644 --- a/ruby.spec +++ b/ruby.spec @@ -113,8 +113,8 @@ Source14: test_systemtap.rb # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. -%{?load:%{SOURCE4}} -%{?load:%{SOURCE5}} +%{load:%{SOURCE4}} +%{load:%{SOURCE5}} # Fix ruby_version abuse. # https://bugs.ruby-lang.org/issues/11002 From fbaee91204d6c968dd3f45eb5e038b0a14e4b518 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 14 May 2021 17:16:38 +0200 Subject: [PATCH 391/530] ruby.rpmlintrc: Ignore non executable template files for Bundler. The template files do not have to have executable bits. Ignore the following errors. ``` rubygem-bundler.noarch: E: non-executable-script /usr/share/gems/gems/bundler-2.2.15/lib/bundler/templates/Executable 644 /usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %> rubygem-bundler.noarch: E: non-executable-script /usr/share/gems/gems/bundler-2.2.15/lib/bundler/templates/Executable.bundler 644 /usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %> rubygem-bundler.noarch: E: non-executable-script /usr/share/gems/gems/bundler-2.2.15/lib/bundler/templates/Executable.standalone 644 /usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %> rubygem-bundler.noarch: E: non-executable-script /usr/share/gems/gems/bundler-2.2.15/lib/bundler/templates/newgem/bin/console.tt 644 /usr/bin/env ruby rubygem-bundler.noarch: E: non-executable-script /usr/share/gems/gems/bundler-2.2.15/lib/bundler/templates/newgem/bin/setup.tt 644 /usr/bin/env bash rubygem-bundler.noarch: E: non-executable-script /usr/share/gems/gems/bundler-2.2.15/lib/bundler/templates/newgem/exe/newgem.tt 644 /usr/bin/env ruby ``` --- ruby.rpmlintrc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index 823778b..37ba619 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -9,3 +9,6 @@ addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(cca addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-check_type\)$') addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-container_of\)$') addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-list\)$') + +# The template files do not have to have executable bits. +addFilter(r'^rubygem-bundler\.noarch: E: non-executable-script /usr/share/gems/gems/bundler-[\d\.]+/lib/bundler/templates/[\w/\.]+ 644 /usr/bin/env ') From 26bc979446231456744eb95d11a8888160797db4 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Wed, 28 Apr 2021 20:53:04 +0200 Subject: [PATCH 392/530] ruby.rpmlintrc: Ignore the non-executable-script errors in bundled gems. The bundled gem files permissions are overridden as 644 by `make install`. Ignore following errors in bundled gems. ``` rubygem-power_assert.noarch: E: non-executable-script /usr/share/gems/gems/power_assert-1.2.0/bin/console 644 /usr/bin/env ruby rubygem-power_assert.noarch: E: non-executable-script /usr/share/gems/gems/power_assert-1.2.0/bin/setup 644 /usr/bin/env bash rubygem-rake.noarch: E: non-executable-script /usr/share/gems/gems/rake-13.0.3/bin/bundle 644 /usr/bin/env ruby rubygem-rake.noarch: E: non-executable-script /usr/share/gems/gems/rake-13.0.3/bin/console 644 /usr/bin/env ruby rubygem-rake.noarch: E: non-executable-script /usr/share/gems/gems/rake-13.0.3/bin/rake 644 /usr/bin/env ruby rubygem-rake.noarch: E: non-executable-script /usr/share/gems/gems/rake-13.0.3/bin/rdoc 644 /usr/bin/env ruby rubygem-rake.noarch: E: non-executable-script /usr/share/gems/gems/rake-13.0.3/bin/rubocop 644 /usr/bin/env ruby rubygem-rake.noarch: E: non-executable-script /usr/share/gems/gems/rake-13.0.3/bin/setup 644 /usr/bin/env bash rubygem-rbs.noarch: E: non-executable-script /usr/share/gems/gems/rbs-1.0.4/bin/annotate-with-rdoc 644 /usr/bin/env ruby rubygem-rbs.noarch: E: non-executable-script /usr/share/gems/gems/rbs-1.0.4/bin/console 644 /usr/bin/env ruby rubygem-rbs.noarch: E: non-executable-script /usr/share/gems/gems/rbs-1.0.4/bin/query-rdoc 644 /usr/bin/env ruby rubygem-rbs.noarch: E: non-executable-script /usr/share/gems/gems/rbs-1.0.4/bin/rbs-prof 644 /usr/bin/env ruby rubygem-rbs.noarch: E: non-executable-script /usr/share/gems/gems/rbs-1.0.4/bin/setup 644 /usr/bin/env bash rubygem-rbs.noarch: E: non-executable-script /usr/share/gems/gems/rbs-1.0.4/bin/sort 644 /usr/bin/env ruby rubygem-rbs.noarch: E: non-executable-script /usr/share/gems/gems/rbs-1.0.4/bin/steep 644 /bin/sh rubygem-rbs.noarch: E: non-executable-script /usr/share/gems/gems/rbs-1.0.4/bin/test_runner.rb 644 /usr/bin/env ruby rubygem-test-unit.noarch: E: non-executable-script /usr/share/gems/gems/test-unit-3.3.7/test/run-test.rb 644 /usr/bin/env ruby ``` --- ruby.rpmlintrc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index 37ba619..e39116f 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -12,3 +12,30 @@ addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(cca # The template files do not have to have executable bits. addFilter(r'^rubygem-bundler\.noarch: E: non-executable-script /usr/share/gems/gems/bundler-[\d\.]+/lib/bundler/templates/[\w/\.]+ 644 /usr/bin/env ') + +# The bundled gem files permissions are overridden as 644 by `make install`. +# https://bugs.ruby-lang.org/issues/17840 +# power_assert +# https://github.com/ruby/power_assert/issues/35 +addFilter(r'^rubygem-power_assert\.noarch: E: non-executable-script /usr/share/gems/gems/power_assert-[\d\.]+/bin/console 644 ') +addFilter(r'^rubygem-power_assert\.noarch: E: non-executable-script /usr/share/gems/gems/power_assert-[\d\.]+/bin/setup 644 ') +# rake +# https://github.com/ruby/rake/issues/385 +addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/bundle 644 ') +addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/console 644 ') +addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/rake 644 ') +addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/rdoc 644 ') +addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/rubocop 644 ') +addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/setup 644 ') +# rbs +# https://github.com/ruby/rbs/issues/673 +addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/annotate-with-rdoc 644 ') +addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/console 644 ') +addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/query-rdoc 644 ') +addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/rbs-prof 644 ') +addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/setup 644 ') +addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/sort 644 ') +addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/steep 644 ') +addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/test_runner.rb 644 ') +# test-unit +addFilter(r'^rubygem-test-unit\.noarch: E: non-executable-script /usr/share/gems/gems/test-unit-[\d\.]+/test/run-test.rb 644 ') From 882d68b75c2161208e006b74f1c9bccd2db608e9 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Wed, 28 Apr 2021 20:53:04 +0200 Subject: [PATCH 393/530] ruby.rpmlintrc: Ignore a false positive missing-call-to-chdir-with-chroot error. The `chroot` in the `dir.c` is just used as a Ruby binding `Dir.chroot` for the function. Ignore the following error. ``` ruby-libs.x86_64: E: missing-call-to-chdir-with-chroot /usr/lib64/libruby.so.3.0.1 ``` --- ruby.rpmlintrc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index e39116f..1a67b89 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -39,3 +39,14 @@ addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/ addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/test_runner.rb 644 ') # test-unit addFilter(r'^rubygem-test-unit\.noarch: E: non-executable-script /usr/share/gems/gems/test-unit-[\d\.]+/test/run-test.rb 644 ') + +# The function `chroot` without using `chdir` is detected by rpmlint with the +# following message. However it looks a false positive as the `chroot` in the +# `dir.c` is just used as a Ruby binding `Dir.chroot` for the function. +# +# ruby-libs.x86_64: E: missing-call-to-chdir-with-chroot /usr/lib64/libruby.so.3.0.1 +# This executable appears to call chroot without using chdir to change the +# current directory. This is likely an error and permits an attacker to break +# out of the chroot by using fchdir. While that's not always a security issue, +# this has to be checked. +addFilter(r'^ruby-libs\.\w+: E: missing-call-to-chdir-with-chroot /usr/lib(64)?/libruby.so.[\d/.]+$') From a09dbbec17022249e57af69d5b1aeb12a95c23c6 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 14 May 2021 18:00:25 +0200 Subject: [PATCH 394/530] ruby.rpmlintrc: Ignore a shared-lib-without-dependency-information error. Nothing referred and no dependency information should be no problem. Ignore the following error. ``` ruby-libs.x86_64: E: shared-lib-without-dependency-information /usr/lib64/ruby/enc/gb2312.so ``` --- ruby.rpmlintrc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index 1a67b89..fd3c655 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -50,3 +50,7 @@ addFilter(r'^rubygem-test-unit\.noarch: E: non-executable-script /usr/share/gems # out of the chroot by using fchdir. While that's not always a security issue, # this has to be checked. addFilter(r'^ruby-libs\.\w+: E: missing-call-to-chdir-with-chroot /usr/lib(64)?/libruby.so.[\d/.]+$') + +# Nothing referred and no dependency information should be no problem. +# https://bugs.ruby-lang.org/issues/16558#note-2 +addFilter(r'^ruby-libs\.\w+: E: shared-lib-without-dependency-information /usr/lib(64)?/ruby/enc/gb2312.so$') From e6a3dff909d08791a7a2cf99b7c232673fc50663 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Wed, 12 May 2021 14:52:37 +0200 Subject: [PATCH 395/530] ruby.rpmlintrc: Remove prefix match. A result of ruby.spec file depends on how the spec file is called by rpmlint. ``` $ rpmlint ruby.spec ruby.spec:20: E: use-of-RPM_SOURCE_DIR .. 0 packages and 1 specfiles checked; 3 errors, 4 warnings. $ rpmlint ./ruby.spec ./ruby.spec:20: E: use-of-RPM_SOURCE_DIR .. 0 packages and 1 specfiles checked; 3 errors, 4 warnings. ``` --- ruby.rpmlintrc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index fd3c655..bc72c06 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -2,13 +2,13 @@ # There is no way to implement this with `%{SOURCE0}` without `%{_sourcedir}`. # The order in the .spec file could be possibly different. -addFilter(r'^ruby\.(spec|src):20: E: use-of-RPM_SOURCE_DIR$') +addFilter(r'ruby\.(spec|src):20: E: use-of-RPM_SOURCE_DIR$') # The used version is not obvious. -addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-build_assert\)$') -addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-check_type\)$') -addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-container_of\)$') -addFilter(r'^ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-list\)$') +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-build_assert\)$') +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-check_type\)$') +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-container_of\)$') +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-list\)$') # The template files do not have to have executable bits. addFilter(r'^rubygem-bundler\.noarch: E: non-executable-script /usr/share/gems/gems/bundler-[\d\.]+/lib/bundler/templates/[\w/\.]+ 644 /usr/bin/env ') From 6b2ff68f33447f7769ad8265b0dd966f007eab9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Mon, 17 May 2021 08:54:53 +0200 Subject: [PATCH 396/530] Pass ldflags to gem install We have them, so we may as well pass them. This also fixes building ruby gems with clang. --- macros.rubygems | 2 +- ruby.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/macros.rubygems b/macros.rubygems index 3f72b14..8c4d067 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -22,7 +22,7 @@ %gem_install(d:n:) \ mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \ \ -CONFIGURE_ARGS="--with-cflags='%{optflags}' --with-cxxflags='%{optflags}' $CONFIGURE_ARGS" \\\ +CONFIGURE_ARGS="--with-cflags='%{optflags}' --with-cxxflags='%{optflags}' --with-ldflags='%{build_ldflags}' $CONFIGURE_ARGS" \\\ gem install \\\ -V \\\ --local \\\ diff --git a/ruby.spec b/ruby.spec index 1b70681..ecc0576 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 148 +%global release 149 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1355,6 +1355,9 @@ MSPECOPTS="" %changelog +* Mon May 17 2021 Timm Bäder - 3.0.1-149 +- Pass ldflags to gem install via CONFIGURE_ARGS + * Tue Apr 06 2021 Vít Ondruch - 3.0.1-148 - Upgrade to Ruby 3.0.1. From 63065e7db7a3b02085280efbc783435ae40b9f1a Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Tue, 13 Jul 2021 14:54:44 +0200 Subject: [PATCH 397/530] Upgrade to Ruby 3.0.2. - Fix command injection vulnerability in RDoc. Resolves: CVE-2021-31799 - Fix FTP PASV command response can cause Net::FTP to connect to arbitrary host. Resolves: CVE-2021-31810 - Fix StartTLS stripping vulnerability in Net::IMAP. Resolves: CVE-2021-32066 - Fix dependencies of gems with explicit source installed from a different source. Resolves: CVE-2020-36327 --- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 8 +++---- ruby-2.3.0-ruby_version.patch | 10 ++++---- ruby.spec | 24 ++++++++++++++----- sources | 2 +- 7 files changed, 31 insertions(+), 19 deletions(-) diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 9759776..32806da 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index d261ea57b5..3c13076b82 100644 --- a/configure.ac +++ b/configure.ac -@@ -3211,6 +3211,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3240,6 +3240,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 2e751cb..118203c 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index c42436c23d..d261ea57b5 100644 --- a/configure.ac +++ b/configure.ac -@@ -3852,7 +3852,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -3881,7 +3881,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index c1b3942..de58295 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 3c13076b82..93af30321d 100644 --- a/configure.ac +++ b/configure.ac -@@ -3916,6 +3916,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3945,6 +3945,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 1646675..b7157ff 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.ac b/configure.ac index 93af30321d..bc13397e0e 100644 --- a/configure.ac +++ b/configure.ac -@@ -3888,6 +3888,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -3917,6 +3917,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 93af30321d..bc13397e0e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -3912,6 +3916,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3941,6 +3941,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -67,7 +67,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index e9110a17ca..76a1f0a315 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -348,6 +348,7 @@ def CONFIG.[](name, mandatory = false) +@@ -349,6 +349,7 @@ def CONFIG.[](name, mandatory = false) vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] end @@ -75,7 +75,7 @@ index e9110a17ca..76a1f0a315 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -580,7 +581,16 @@ def stub +@@ -581,7 +581,16 @@ def stub install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index f596602..4fd6530 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -3803,9 +3803,6 @@ AS_CASE(["$target_os"], +@@ -3832,9 +3832,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 80b137e380..63cd3b4f8b 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -3828,56 +3825,62 @@ AC_ARG_WITH(ridir, +@@ -3857,56 +3857,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -3894,6 +3897,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -3923,6 +3923,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -171,7 +171,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index d4c110e..d39c9a6 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -438,7 +438,7 @@ def CONFIG.[](name, mandatory = false) +@@ -439,7 +439,7 @@ def CONFIG.[](name, mandatory = false) install?(:doc, :rdoc) do if $rdocdir @@ -274,7 +274,7 @@ diff --git a/configure.ac b/configure.ac index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -81,7 +81,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -107,7 +107,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) diff --git a/ruby.spec b/ruby.spec index ecc0576..50134e6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 0 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -22,7 +22,7 @@ %endif -%global release 149 +%global release 150 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -30,11 +30,11 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.2.15 +%global rubygems_version 3.2.22 %global rubygems_molinillo_version 0.7.0 # Default gems. -%global bundler_version 2.2.15 +%global bundler_version 2.2.22 %global bundler_connection_pool_version 2.2.2 %global bundler_fileutils_version 1.4.1 %global bundler_molinillo_version 0.7.0 @@ -52,7 +52,7 @@ %global openssl_version 2.2.0 %global psych_version 3.3.0 %global racc_version 1.5.1 -%global rdoc_version 6.3.0 +%global rdoc_version 6.3.1 # Bundled gems. %global minitest_version 5.14.2 @@ -1162,7 +1162,7 @@ MSPECOPTS="" %{gem_dir}/specifications/default/logger-1.4.3.gemspec %{gem_dir}/specifications/default/matrix-0.3.1.gemspec %{gem_dir}/specifications/default/mutex_m-0.1.1.gemspec -%{gem_dir}/specifications/default/net-ftp-0.1.1.gemspec +%{gem_dir}/specifications/default/net-ftp-0.1.2.gemspec %{gem_dir}/specifications/default/net-http-0.1.1.gemspec %{gem_dir}/specifications/default/net-imap-0.1.1.gemspec %{gem_dir}/specifications/default/net-pop-0.1.1.gemspec @@ -1355,6 +1355,18 @@ MSPECOPTS="" %changelog +* Tue Jul 13 2021 Jarek Prokop - 3.0.2-150 +- Upgrade to Ruby 3.0.2. +- Fix command injection vulnerability in RDoc. + Resolves: CVE-2021-31799 +- Fix FTP PASV command response can cause Net::FTP to connect to arbitrary host. + Resolves: CVE-2021-31810 +- Fix StartTLS stripping vulnerability in Net::IMAP. + Resolves: CVE-2021-32066 +- Fix dependencies of gems with explicit source installed from a different + source. + Resolves: CVE-2020-36327 + * Mon May 17 2021 Timm Bäder - 3.0.1-149 - Pass ldflags to gem install via CONFIGURE_ARGS diff --git a/sources b/sources index bed9a6d..fc750ca 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.0.1.tar.xz) = 97d2e883656060846b304368d9d836e2f3ef39859c36171c9398a0573818e4ed75bfd7460f901a9553f7f53518c505327a66e74f83704a881469f5ac61fe13d7 +SHA512 (ruby-3.0.2.tar.xz) = 0f702e2d8ca1342a9d4284dbdd234a3588e057b92566353aa7c21835cf09a3932864b2acf459a976960a1704e9befa562155d36b98b7cda8bd99526e10a374c4 From 089c0a1928d85de7827f8d79fc7d3cb4c822a7f1 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 23 Jul 2021 11:43:38 +0000 Subject: [PATCH 398/530] - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 50134e6..9f01a3a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 150 +%global release 151 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1355,6 +1355,9 @@ MSPECOPTS="" %changelog +* Fri Jul 23 2021 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + * Tue Jul 13 2021 Jarek Prokop - 3.0.2-150 - Upgrade to Ruby 3.0.2. - Fix command injection vulnerability in RDoc. From 1170d812fe0cd43aeddf7f15a63c2e6db3af8059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 24 Aug 2021 17:29:31 +0200 Subject: [PATCH 399/530] Enable LTO. --- ...et-rid-of-type-punning-pointer-casts.patch | 186 ++++++++++++++++++ ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch | 58 ++++++ ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch | 29 +++ ruby.spec | 24 ++- 4 files changed, 292 insertions(+), 5 deletions(-) create mode 100644 ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch create mode 100644 ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch create mode 100644 ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch diff --git a/ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch b/ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch new file mode 100644 index 0000000..b5c80ad --- /dev/null +++ b/ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch @@ -0,0 +1,186 @@ +From 104b009e26c050584e4d186c8cc4e1496a14061b Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Thu, 5 Aug 2021 20:09:25 +0900 +Subject: [PATCH] Get rid of type-punning pointer casts [Bug #18062] + +--- + vm_eval.c | 4 +++- + vm_insnhelper.c | 7 +++++-- + vm_method.c | 41 +++++++++++++++++++++++++--------------- + 3 files changed, 34 insertions(+), 18 deletions(-) + +diff --git a/vm_eval.c b/vm_eval.c +index 6d4b5c3c0b28..7ce9f157e671 100644 +--- a/vm_eval.c ++++ b/vm_eval.c +@@ -350,9 +350,11 @@ cc_new(VALUE klass, ID mid, int argc, const rb_callable_method_entry_t *cme) + { + struct rb_class_cc_entries *ccs; + struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); ++ VALUE ccs_data; + +- if (rb_id_table_lookup(cc_tbl, mid, (VALUE*)&ccs)) { ++ if (rb_id_table_lookup(cc_tbl, mid, &ccs_data)) { + // ok ++ ccs = (struct rb_class_cc_entries *)ccs_data; + } + else { + ccs = vm_ccs_create(klass, cme); +diff --git a/vm_insnhelper.c b/vm_insnhelper.c +index 14928b2afe8e..e186376b24d7 100644 +--- a/vm_insnhelper.c ++++ b/vm_insnhelper.c +@@ -1636,9 +1636,11 @@ vm_search_cc(const VALUE klass, const struct rb_callinfo * const ci) + const ID mid = vm_ci_mid(ci); + struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); + struct rb_class_cc_entries *ccs = NULL; ++ VALUE ccs_data; + + if (cc_tbl) { +- if (rb_id_table_lookup(cc_tbl, mid, (VALUE *)&ccs)) { ++ if (rb_id_table_lookup(cc_tbl, mid, &ccs_data)) { ++ ccs = (struct rb_class_cc_entries *)ccs_data; + const int ccs_len = ccs->len; + VM_ASSERT(vm_ccs_verify(ccs, mid, klass)); + +@@ -1705,8 +1707,9 @@ vm_search_cc(const VALUE klass, const struct rb_callinfo * const ci) + if (ccs == NULL) { + VM_ASSERT(cc_tbl != NULL); + +- if (LIKELY(rb_id_table_lookup(cc_tbl, mid, (VALUE*)&ccs))) { ++ if (LIKELY(rb_id_table_lookup(cc_tbl, mid, &ccs_data))) { + // rb_callable_method_entry() prepares ccs. ++ ccs = (struct rb_class_cc_entries *)ccs_data; + } + else { + // TODO: required? +diff --git a/vm_method.c b/vm_method.c +index 016dba1dbb18..1fd0bd57f7ca 100644 +--- a/vm_method.c ++++ b/vm_method.c +@@ -42,11 +42,11 @@ vm_ccs_dump(VALUE klass, ID target_mid) + { + struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); + if (cc_tbl) { +- const struct rb_class_cc_entries *ccs; ++ VALUE ccs; + if (target_mid) { +- if (rb_id_table_lookup(cc_tbl, target_mid, (VALUE *)&ccs)) { ++ if (rb_id_table_lookup(cc_tbl, target_mid, &ccs)) { + fprintf(stderr, " [CCTB] %p\n", (void *)cc_tbl); +- vm_ccs_dump_i(target_mid, (VALUE)ccs, NULL); ++ vm_ccs_dump_i(target_mid, ccs, NULL); + } + } + else { +@@ -72,11 +72,11 @@ vm_mtbl_dump(VALUE klass, ID target_mid) + fprintf(stderr, "# vm_mtbl\n"); + while (klass) { + rp_m(" -> ", klass); +- rb_method_entry_t *me; ++ VALUE me; + + if (RCLASS_M_TBL(klass)) { + if (target_mid != 0) { +- if (rb_id_table_lookup(RCLASS_M_TBL(klass), target_mid, (VALUE *)&me)) { ++ if (rb_id_table_lookup(RCLASS_M_TBL(klass), target_mid, &me)) { + rp_m(" [MTBL] ", me); + } + } +@@ -90,7 +90,7 @@ vm_mtbl_dump(VALUE klass, ID target_mid) + } + if (RCLASS_CALLABLE_M_TBL(klass)) { + if (target_mid != 0) { +- if (rb_id_table_lookup(RCLASS_CALLABLE_M_TBL(klass), target_mid, (VALUE *)&me)) { ++ if (rb_id_table_lookup(RCLASS_CALLABLE_M_TBL(klass), target_mid, &me)) { + rp_m(" [CM**] ", me); + } + } +@@ -144,10 +144,11 @@ clear_method_cache_by_id_in_class(VALUE klass, ID mid) + // check only current class + + struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); +- struct rb_class_cc_entries *ccs; ++ VALUE ccs_data; + + // invalidate CCs +- if (cc_tbl && rb_id_table_lookup(cc_tbl, mid, (VALUE *)&ccs)) { ++ if (cc_tbl && rb_id_table_lookup(cc_tbl, mid, &ccs_data)) { ++ struct rb_class_cc_entries *ccs = (struct rb_class_cc_entries *)ccs_data; + rb_vm_ccs_free(ccs); + rb_id_table_delete(cc_tbl, mid); + RB_DEBUG_COUNTER_INC(cc_invalidate_leaf_ccs); +@@ -205,9 +206,10 @@ clear_method_cache_by_id_in_class(VALUE klass, ID mid) + } + else { + rb_vm_t *vm = GET_VM(); +- if (rb_id_table_lookup(vm->negative_cme_table, mid, (VALUE *)&cme)) { ++ VALUE cme_data = (VALUE) cme; ++ if (rb_id_table_lookup(vm->negative_cme_table, mid, &cme_data)) { + rb_id_table_delete(vm->negative_cme_table, mid); +- vm_me_invalidate_cache((rb_callable_method_entry_t *)cme); ++ vm_me_invalidate_cache((rb_callable_method_entry_t *)cme_data); + + RB_DEBUG_COUNTER_INC(cc_invalidate_negative); + } +@@ -1023,6 +1024,7 @@ prepare_callable_method_entry(VALUE defined_class, ID id, const rb_method_entry_ + { + struct rb_id_table *mtbl; + const rb_callable_method_entry_t *cme; ++ VALUE cme_data; + + if (me) { + if (me->defined_class == 0) { +@@ -1032,7 +1034,8 @@ prepare_callable_method_entry(VALUE defined_class, ID id, const rb_method_entry_ + + mtbl = RCLASS_CALLABLE_M_TBL(defined_class); + +- if (mtbl && rb_id_table_lookup(mtbl, id, (VALUE *)&cme)) { ++ if (mtbl && rb_id_table_lookup(mtbl, id, &cme_data)) { ++ cme = (rb_callable_method_entry_t *)cme_data; + RB_DEBUG_COUNTER_INC(mc_cme_complement_hit); + VM_ASSERT(callable_method_entry_p(cme)); + VM_ASSERT(!METHOD_ENTRY_INVALIDATED(cme)); +@@ -1076,9 +1079,10 @@ cached_callable_method_entry(VALUE klass, ID mid) + ASSERT_vm_locking(); + + struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); +- struct rb_class_cc_entries *ccs; ++ VALUE ccs_data; + +- if (cc_tbl && rb_id_table_lookup(cc_tbl, mid, (VALUE *)&ccs)) { ++ if (cc_tbl && rb_id_table_lookup(cc_tbl, mid, &ccs_data)) { ++ struct rb_class_cc_entries *ccs = (struct rb_class_cc_entries *)ccs_data; + VM_ASSERT(vm_ccs_p(ccs)); + + if (LIKELY(!METHOD_ENTRY_INVALIDATED(ccs->cme))) { +@@ -1104,12 +1108,14 @@ cache_callable_method_entry(VALUE klass, ID mid, const rb_callable_method_entry_ + + struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); + struct rb_class_cc_entries *ccs; ++ VALUE ccs_data; + + if (!cc_tbl) { + cc_tbl = RCLASS_CC_TBL(klass) = rb_id_table_create(2); + } + +- if (rb_id_table_lookup(cc_tbl, mid, (VALUE *)&ccs)) { ++ if (rb_id_table_lookup(cc_tbl, mid, &ccs_data)) { ++ ccs = (struct rb_class_cc_entries *)ccs_data; + VM_ASSERT(ccs->cme == cme); + } + else { +@@ -1123,8 +1129,12 @@ negative_cme(ID mid) + { + rb_vm_t *vm = GET_VM(); + const rb_callable_method_entry_t *cme; ++ VALUE cme_data; + +- if (!rb_id_table_lookup(vm->negative_cme_table, mid, (VALUE *)&cme)) { ++ if (rb_id_table_lookup(vm->negative_cme_table, mid, &cme_data)) { ++ cme = (rb_callable_method_entry_t *)cme_data; ++ } ++ else { + cme = (rb_callable_method_entry_t *)rb_method_entry_alloc(mid, Qnil, Qnil, NULL); + rb_id_table_insert(vm->negative_cme_table, mid, (VALUE)cme); + } diff --git a/ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch b/ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch new file mode 100644 index 0000000..9d218e5 --- /dev/null +++ b/ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch @@ -0,0 +1,58 @@ +From 72317b333b85eed483ad00bcd4f40944019a7c13 Mon Sep 17 00:00:00 2001 +From: "xtkoba+ruby@gmail.com" +Date: Fri, 13 Aug 2021 13:45:53 +0000 +Subject: [PATCH] Ignore `DW_FORM_ref_addr` [Bug #17052] + +Ignore `DW_FORM_ref_addr` form and other forms that are not supposed +to be used currently. +--- + addr2line.c | 23 ++++++++++++++++++++--- + 1 file changed, 20 insertions(+), 3 deletions(-) + +diff --git a/addr2line.c b/addr2line.c +index fed1a8da84e5..92c6da5e3bea 100644 +--- a/addr2line.c ++++ b/addr2line.c +@@ -1592,14 +1592,31 @@ di_read_cu(DebugInfoReader *reader) + } + + static void +-read_abstract_origin(DebugInfoReader *reader, uint64_t abstract_origin, line_info_t *line) ++read_abstract_origin(DebugInfoReader *reader, uint64_t form, uint64_t abstract_origin, line_info_t *line) + { + char *p = reader->p; + char *q = reader->q; + int level = reader->level; + DIE die; + +- reader->p = reader->current_cu + abstract_origin; ++ switch (form) { ++ case DW_FORM_ref1: ++ case DW_FORM_ref2: ++ case DW_FORM_ref4: ++ case DW_FORM_ref8: ++ case DW_FORM_ref_udata: ++ reader->p = reader->current_cu + abstract_origin; ++ break; ++ case DW_FORM_ref_addr: ++ goto finish; /* not supported yet */ ++ case DW_FORM_ref_sig8: ++ goto finish; /* not supported yet */ ++ case DW_FORM_ref_sup4: ++ case DW_FORM_ref_sup8: ++ goto finish; /* not supported yet */ ++ default: ++ goto finish; ++ } + if (!di_read_die(reader, &die)) goto finish; + + /* enumerate abbrev */ +@@ -1664,7 +1681,7 @@ debug_info_read(DebugInfoReader *reader, int num_traces, void **traces, + /* 1 or 3 */ + break; /* goto skip_die; */ + case DW_AT_abstract_origin: +- read_abstract_origin(reader, v.as.uint64, &line); ++ read_abstract_origin(reader, v.form, v.as.uint64, &line); + break; /* goto skip_die; */ + } + } diff --git a/ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch b/ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch new file mode 100644 index 0000000..74636e5 --- /dev/null +++ b/ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch @@ -0,0 +1,29 @@ +From a9977ba2f9863e3fb1b2346589ebbca67d80536c Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Sat, 14 Aug 2021 10:08:19 +0900 +Subject: [PATCH] Constified addr2line.c + +--- + addr2line.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/addr2line.c b/addr2line.c +index 8ee4416650d3..fed1a8da84e5 100644 +--- a/addr2line.c ++++ b/addr2line.c +@@ -1137,12 +1137,12 @@ debug_info_reader_read_value(DebugInfoReader *reader, uint64_t form, DebugInfoVa + set_uint_value(v, read_uleb128(reader)); + break; + case DW_FORM_ref_addr: +- if (reader->address_size == 4) { ++ if (reader->format == 4) { + set_uint_value(v, read_uint32(&reader->p)); +- } else if (reader->address_size == 8) { ++ } else if (reader->format == 8) { + set_uint_value(v, read_uint64(&reader->p)); + } else { +- fprintf(stderr,"unknown address_size:%d", reader->address_size); ++ fprintf(stderr,"unknown format:%d", reader->format); + abort(); + } + break; diff --git a/ruby.spec b/ruby.spec index 9f01a3a..2b92a6d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 151 +%global release 152 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -80,10 +80,6 @@ %bcond_without hardening_test %endif -# LTO appears to cause some issue to SEGV handler. -# https://bugs.ruby-lang.org/issues/17052 -%define _lto_cflags %{nil} - Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version} @@ -150,6 +146,18 @@ Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1920533 # https://bugs.ruby-lang.org/issues/17585 Patch15: ruby-dwarf5-avoid_crash-r1.patch +# Fix segfaults with enabled LTO. +# https://bugs.ruby-lang.org/issues/18062 +# https://github.com/ruby/ruby/pull/4716 +Patch16: ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch +# DWARF5/LTO fixes for SIGSEV handler. +# https://bugs.ruby-lang.org/issues/17052 +# https://github.com/ruby/ruby/commit/72317b333b85eed483ad00bcd4f40944019a7c13 +Patch17: ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch +# https://bugs.ruby-lang.org/issues/17052#note-9 +# https://bugs.ruby-lang.org/attachments/download/8974/ruby-addr2line-DW_FORM_ref_addr.patch +# https://github.com/ruby/ruby/commit/a9977ba2f9863e3fb1b2346589ebbca67d80536c +Patch18: ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -598,6 +606,9 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch9 -p1 %patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 %patch19 -p1 # Provide an example of usage of the tapset: @@ -1355,6 +1366,9 @@ MSPECOPTS="" %changelog +* Tue Aug 24 2021 Vít Ondruch - 3.0.2-152 +- Enable LTO. + * Fri Jul 23 2021 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild From 11a27766bd500e054f71bcbc283e12bacb2a275e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 24 Aug 2021 18:23:20 +0200 Subject: [PATCH 400/530] Load user installed RubyGems plugins. --- ruby.spec | 5 ++ ...load-user-installed-rubygems-plugins.patch | 61 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 rubygems-3.2.26-Also-load-user-installed-rubygems-plugins.patch diff --git a/ruby.spec b/ruby.spec index 2b92a6d..6ad233c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -142,6 +142,9 @@ Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +# Load user installed RubyGems plugins. +# https://github.com/rubygems/rubygems/issues/4823 +Patch10: rubygems-3.2.26-Also-load-user-installed-rubygems-plugins.patch # Fix DWARF5 support. # https://bugzilla.redhat.com/show_bug.cgi?id=1920533 # https://bugs.ruby-lang.org/issues/17585 @@ -605,6 +608,7 @@ rm -rf ext/fiddle/libffi* %patch5 -p1 %patch6 -p1 %patch9 -p1 +%patch10 -p1 %patch15 -p1 %patch16 -p1 %patch17 -p1 @@ -1368,6 +1372,7 @@ MSPECOPTS="" %changelog * Tue Aug 24 2021 Vít Ondruch - 3.0.2-152 - Enable LTO. +- Load user installed RubyGems plugins. * Fri Jul 23 2021 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild diff --git a/rubygems-3.2.26-Also-load-user-installed-rubygems-plugins.patch b/rubygems-3.2.26-Also-load-user-installed-rubygems-plugins.patch new file mode 100644 index 0000000..7af6df6 --- /dev/null +++ b/rubygems-3.2.26-Also-load-user-installed-rubygems-plugins.patch @@ -0,0 +1,61 @@ +From 82960c262fea081cdd3df14ebe573ff1c4925d0c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Fri, 6 Aug 2021 12:21:23 +0200 +Subject: [PATCH] Also load user installed rubygems plugins + +--- + lib/rubygems.rb | 4 +++- + test/rubygems/test_gem.rb | 25 +++++++++++++++++++++++++ + 2 files changed, 28 insertions(+), 1 deletion(-) + +diff --git a/lib/rubygems.rb b/lib/rubygems.rb +index a631cde8bf8..17881e2e0e9 100644 +--- a/lib/rubygems.rb ++++ b/lib/rubygems.rb +@@ -1063,7 +1063,9 @@ def self.load_plugin_files(plugins) # :nodoc: + # Find rubygems plugin files in the standard location and load them + + def self.load_plugins +- load_plugin_files Gem::Util.glob_files_in_dir("*#{Gem.plugin_suffix_pattern}", plugindir) ++ Gem.path.each do |gem_path| ++ load_plugin_files Gem::Util.glob_files_in_dir("*#{Gem.plugin_suffix_pattern}", plugindir(gem_path)) ++ end + end + + ## +diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb +index 0d4b1571ca7..da154dac75b 100644 +--- a/test/rubygems/test_gem.rb ++++ b/test/rubygems/test_gem.rb +@@ -1581,6 +1581,31 @@ def test_load_plugins + assert_equal %w[plugin], PLUGINS_LOADED + end + ++ def test_load_user_installed_plugins ++ plugin_path = File.join "lib", "rubygems_plugin.rb" ++ ++ Dir.chdir @tempdir do ++ FileUtils.mkdir_p 'lib' ++ File.open plugin_path, "w" do |fp| ++ fp.puts "class TestGem; PLUGINS_LOADED << 'plugin'; end" ++ end ++ ++ foo = util_spec 'foo', '1' do |s| ++ s.files << plugin_path ++ end ++ ++ install_gem_user foo ++ end ++ ++ Gem.paths = { "GEM_PATH" => [Gem.dir, Gem.user_dir].join(File::PATH_SEPARATOR) } ++ ++ gem 'foo' ++ ++ Gem.load_plugins ++ ++ assert_equal %w[plugin], PLUGINS_LOADED ++ end ++ + def test_load_env_plugins + with_plugin('load') { Gem.load_env_plugins } + assert_equal :loaded, TEST_PLUGIN_LOAD rescue nil From d75a6c86f9dde0e5d79e67a962a1846718a2965e Mon Sep 17 00:00:00 2001 From: Sahana Prasad Date: Tue, 14 Sep 2021 19:13:53 +0200 Subject: [PATCH 401/530] Rebuilt with OpenSSL 3.0.0 --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 6ad233c..414eb19 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 152 +%global release 153 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1370,6 +1370,9 @@ MSPECOPTS="" %changelog +* Tue Sep 14 2021 Sahana Prasad +- Rebuilt with OpenSSL 3.0.0 + * Tue Aug 24 2021 Vít Ondruch - 3.0.2-152 - Enable LTO. - Load user installed RubyGems plugins. From 78a9fbc351cf0e12b653a69438a9e6b9d1292246 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 1 Oct 2021 14:30:59 +0200 Subject: [PATCH 402/530] Add AC_PROG_CC to make C++ compiler dependency optional on autoconf >= 2.70. Resolves: rhbz#1999479 --- ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch | 27 +++++++++++++++++++ ruby.spec | 4 +++ 2 files changed, 31 insertions(+) create mode 100644 ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch diff --git a/ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch b/ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch new file mode 100644 index 0000000..1bd20bd --- /dev/null +++ b/ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch @@ -0,0 +1,27 @@ +From 912a8dcfc5369d840dcd6bf0f88ee0bac7d902d6 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Thu, 30 Sep 2021 18:24:37 +0900 +Subject: [PATCH] Needs `AC_PROG_CC` + +Although `AC_PROG_CC_C99` has been obsolete, `AC_PROG_CC` is not +and the latter is necessary not to make C++ compiler mandatory. +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index b24a8f59b0..c7059ee1ec 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -203,7 +203,7 @@ rb_test_CXXFLAGS=${CXXFLAGS+yes} + # BSD's ports and MacPorts prefix GNU binutils with 'g' + + dnl Seems necessarily in order to add -std=gnu99 option for gcc 4.9. +-m4_version_prereq([2.70], [], [AC_PROG_CC_C99]) ++m4_version_prereq([2.70], [AC_PROG_CC], [AC_PROG_CC_C99]) + + AC_PROG_CXX + AC_PROG_CPP +-- +2.31.1 + diff --git a/ruby.spec b/ruby.spec index 414eb19..eb43d42 100644 --- a/ruby.spec +++ b/ruby.spec @@ -164,6 +164,9 @@ Patch18: ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch +# Add AC_PROG_CC to make C++ compiler dependency optional on autoconf >= 2.70. +# https://github.com/ruby/ruby/commit/912a8dcfc5369d840dcd6bf0f88ee0bac7d902d6 +Patch20: ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -614,6 +617,7 @@ rm -rf ext/fiddle/libffi* %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . From c4f8814a9393d7c0fb5870a5d6c7c1a4dd6958d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 5 Nov 2021 20:55:56 +0100 Subject: [PATCH 403/530] Fix OpenSSL 3.0 compatibility. Resolves: rhbz#2021922 --- ...-more-support-for-generic-pkey-types.patch | 1004 ++++++++++++ ...-specific-options-in-sign-and-verify.patch | 358 ++++ ...gn_raw-verify_raw-and-verify_recover.patch | 1319 +++++++++++++++ ...eous-changes-for-OpenSSL-3.0-support.patch | 142 ++ ruby-3.1.0-Properly-exclude-test-cases.patch | 93 ++ ...-Refactor-PEM-DER-serialization-code.patch | 1450 +++++++++++++++++ ruby-3.1.0-SSL_read-EOF-handling.patch | 16 + ruby-3.1.0-Support-OpenSSL-3.0.patch | 1101 +++++++++++++ ruby-3.1.0-Use-EVP-API-in-more-places.patch | 831 ++++++++++ ...face-to-generate-parameters-and-keys.patch | 1113 +++++++++++++ ...t_digest-do-not-test-constants-for-l.patch | 29 + ...t_pkcs12-fix-test-failures-with-Open.patch | 439 +++++ ...t_pkey-use-EC-keys-for-PKey.generate.patch | 67 + ...t_ssl-relax-regex-to-match-OpenSSL-s.patch | 31 + ...tils-remove-dup_public-helper-method.patch | 265 +++ ruby.spec | 94 ++ ...ished-name-which-will-be-correctly-p.patch | 44 + ...0-Switch-from-DES-CBC-to-AES-256-CBC.patch | 106 ++ ...se-OpenSSL-constants-for-error-codes.patch | 75 + 19 files changed, 8577 insertions(+) create mode 100644 ruby-3.1.0-Add-more-support-for-generic-pkey-types.patch create mode 100644 ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch create mode 100644 ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch create mode 100644 ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch create mode 100644 ruby-3.1.0-Properly-exclude-test-cases.patch create mode 100644 ruby-3.1.0-Refactor-PEM-DER-serialization-code.patch create mode 100644 ruby-3.1.0-SSL_read-EOF-handling.patch create mode 100644 ruby-3.1.0-Support-OpenSSL-3.0.patch create mode 100644 ruby-3.1.0-Use-EVP-API-in-more-places.patch create mode 100644 ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch create mode 100644 ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch create mode 100644 ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch create mode 100644 ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch create mode 100644 ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch create mode 100644 ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch create mode 100644 rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch create mode 100644 rubygems-3.2.30-Switch-from-DES-CBC-to-AES-256-CBC.patch create mode 100644 rubygems-3.2.30-Use-OpenSSL-constants-for-error-codes.patch diff --git a/ruby-3.1.0-Add-more-support-for-generic-pkey-types.patch b/ruby-3.1.0-Add-more-support-for-generic-pkey-types.patch new file mode 100644 index 0000000..cede1aa --- /dev/null +++ b/ruby-3.1.0-Add-more-support-for-generic-pkey-types.patch @@ -0,0 +1,1004 @@ +From 6bbdaef1a578fdbfc6a5bf82402ba4d3fd733d4a Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Tue, 21 Mar 2017 18:23:53 +0900 +Subject: [PATCH 1/6] pkey: assume generic PKeys contain private components + +The EVP interface cannot tell whether if a pkey contains the private +components or not. Assume it does if it does not respond to #private?. +This fixes the NoMethodError on calling #sign on a generic PKey. +--- + ext/openssl/ossl_pkey.c | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 610a83fd2d..8d41623e80 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -252,12 +252,19 @@ GetPrivPKeyPtr(VALUE obj) + { + EVP_PKEY *pkey; + +- if (rb_funcallv(obj, id_private_q, 0, NULL) != Qtrue) { +- ossl_raise(rb_eArgError, "Private key is needed."); +- } + GetPKey(obj, pkey); ++ if (OSSL_PKEY_IS_PRIVATE(obj)) ++ return pkey; ++ /* ++ * The EVP API does not provide a way to check if the EVP_PKEY has private ++ * components. Assuming it does... ++ */ ++ if (!rb_respond_to(obj, id_private_q)) ++ return pkey; ++ if (RTEST(rb_funcallv(obj, id_private_q, 0, NULL))) ++ return pkey; + +- return pkey; ++ rb_raise(rb_eArgError, "private key is needed"); + } + + EVP_PKEY * +-- +2.32.0 + + +From 86508f74b3d41166ed6091b7b31f18a26478c347 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 20 Mar 2017 23:18:26 +0900 +Subject: [PATCH 2/6] pkey: add PKey.generate_parameters and .generate_key + +Add two methods to create a PKey using the generic EVP interface. This +is useful for the PKey types we don't have a dedicated class. +--- + ext/openssl/ossl_pkey.c | 222 ++++++++++++++++++++++++++++++++++++++ + test/openssl/test_pkey.rb | 43 ++++++++ + 2 files changed, 265 insertions(+) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 8d41623e80..1f3dd39b9b 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -197,6 +197,226 @@ ossl_pkey_new_from_data(int argc, VALUE *argv, VALUE self) + return ossl_pkey_new(pkey); + } + ++static VALUE ++pkey_gen_apply_options_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ctx_v)) ++{ ++ VALUE key = rb_ary_entry(i, 0), value = rb_ary_entry(i, 1); ++ EVP_PKEY_CTX *ctx = (EVP_PKEY_CTX *)ctx_v; ++ ++ if (SYMBOL_P(key)) ++ key = rb_sym2str(key); ++ value = rb_String(value); ++ ++ if (EVP_PKEY_CTX_ctrl_str(ctx, StringValueCStr(key), StringValueCStr(value)) <= 0) ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_ctrl_str(ctx, %+"PRIsVALUE", %+"PRIsVALUE")", ++ key, value); ++ return Qnil; ++} ++ ++static VALUE ++pkey_gen_apply_options0(VALUE args_v) ++{ ++ VALUE *args = (VALUE *)args_v; ++ ++ rb_block_call(args[1], rb_intern("each"), 0, NULL, ++ pkey_gen_apply_options_i, args[0]); ++ return Qnil; ++} ++ ++struct pkey_blocking_generate_arg { ++ EVP_PKEY_CTX *ctx; ++ EVP_PKEY *pkey; ++ int state; ++ int yield: 1; ++ int genparam: 1; ++ int stop: 1; ++}; ++ ++static VALUE ++pkey_gen_cb_yield(VALUE ctx_v) ++{ ++ EVP_PKEY_CTX *ctx = (void *)ctx_v; ++ int i, info_num; ++ VALUE *argv; ++ ++ info_num = EVP_PKEY_CTX_get_keygen_info(ctx, -1); ++ argv = ALLOCA_N(VALUE, info_num); ++ for (i = 0; i < info_num; i++) ++ argv[i] = INT2NUM(EVP_PKEY_CTX_get_keygen_info(ctx, i)); ++ ++ return rb_yield_values2(info_num, argv); ++} ++ ++static int ++pkey_gen_cb(EVP_PKEY_CTX *ctx) ++{ ++ struct pkey_blocking_generate_arg *arg = EVP_PKEY_CTX_get_app_data(ctx); ++ ++ if (arg->yield) { ++ int state; ++ rb_protect(pkey_gen_cb_yield, (VALUE)ctx, &state); ++ if (state) { ++ arg->stop = 1; ++ arg->state = state; ++ } ++ } ++ return !arg->stop; ++} ++ ++static void ++pkey_blocking_gen_stop(void *ptr) ++{ ++ struct pkey_blocking_generate_arg *arg = ptr; ++ arg->stop = 1; ++} ++ ++static void * ++pkey_blocking_gen(void *ptr) ++{ ++ struct pkey_blocking_generate_arg *arg = ptr; ++ ++ if (arg->genparam && EVP_PKEY_paramgen(arg->ctx, &arg->pkey) <= 0) ++ return NULL; ++ if (!arg->genparam && EVP_PKEY_keygen(arg->ctx, &arg->pkey) <= 0) ++ return NULL; ++ return arg->pkey; ++} ++ ++static VALUE ++pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) ++{ ++ EVP_PKEY_CTX *ctx; ++ VALUE alg, options; ++ struct pkey_blocking_generate_arg gen_arg = { 0 }; ++ int state; ++ ++ rb_scan_args(argc, argv, "11", &alg, &options); ++ if (rb_obj_is_kind_of(alg, cPKey)) { ++ EVP_PKEY *base_pkey; ++ ++ GetPKey(alg, base_pkey); ++ ctx = EVP_PKEY_CTX_new(base_pkey, NULL/* engine */); ++ if (!ctx) ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); ++ } ++ else { ++ const EVP_PKEY_ASN1_METHOD *ameth; ++ ENGINE *tmpeng; ++ int pkey_id; ++ ++ StringValue(alg); ++ ameth = EVP_PKEY_asn1_find_str(&tmpeng, RSTRING_PTR(alg), ++ RSTRING_LENINT(alg)); ++ if (!ameth) ++ ossl_raise(ePKeyError, "algorithm %"PRIsVALUE" not found", alg); ++ EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); ++#if !defined(OPENSSL_NO_ENGINE) ++ if (tmpeng) ++ ENGINE_finish(tmpeng); ++#endif ++ ++ ctx = EVP_PKEY_CTX_new_id(pkey_id, NULL/* engine */); ++ if (!ctx) ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_id"); ++ } ++ ++ if (genparam && EVP_PKEY_paramgen_init(ctx) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_paramgen_init"); ++ } ++ if (!genparam && EVP_PKEY_keygen_init(ctx) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_keygen_init"); ++ } ++ ++ if (!NIL_P(options)) { ++ VALUE args[2]; ++ ++ args[0] = (VALUE)ctx; ++ args[1] = options; ++ rb_protect(pkey_gen_apply_options0, (VALUE)args, &state); ++ if (state) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ } ++ ++ gen_arg.genparam = genparam; ++ gen_arg.ctx = ctx; ++ gen_arg.yield = rb_block_given_p(); ++ EVP_PKEY_CTX_set_app_data(ctx, &gen_arg); ++ EVP_PKEY_CTX_set_cb(ctx, pkey_gen_cb); ++ if (gen_arg.yield) ++ pkey_blocking_gen(&gen_arg); ++ else ++ rb_thread_call_without_gvl(pkey_blocking_gen, &gen_arg, ++ pkey_blocking_gen_stop, &gen_arg); ++ EVP_PKEY_CTX_free(ctx); ++ if (!gen_arg.pkey) { ++ if (gen_arg.state) { ++ ossl_clear_error(); ++ rb_jump_tag(gen_arg.state); ++ } ++ else { ++ ossl_raise(ePKeyError, genparam ? "EVP_PKEY_paramgen" : "EVP_PKEY_keygen"); ++ } ++ } ++ ++ return ossl_pkey_new(gen_arg.pkey); ++} ++ ++/* ++ * call-seq: ++ * OpenSSL::PKey.generate_parameters(algo_name [, options]) -> pkey ++ * ++ * Generates new parameters for the algorithm. _algo_name_ is a String that ++ * represents the algorithm. The optional argument _options_ is a Hash that ++ * specifies the options specific to the algorithm. The order of the options ++ * can be important. ++ * ++ * A block can be passed optionally. The meaning of the arguments passed to ++ * the block varies depending on the implementation of the algorithm. The block ++ * may be called once or multiple times, or may not even be called. ++ * ++ * For the supported options, see the documentation for the 'openssl genpkey' ++ * utility command. ++ * ++ * == Example ++ * pkey = OpenSSL::PKey.generate_parameters("DSA", "dsa_paramgen_bits" => 2048) ++ * p pkey.p.num_bits #=> 2048 ++ */ ++static VALUE ++ossl_pkey_s_generate_parameters(int argc, VALUE *argv, VALUE self) ++{ ++ return pkey_generate(argc, argv, self, 1); ++} ++ ++/* ++ * call-seq: ++ * OpenSSL::PKey.generate_key(algo_name [, options]) -> pkey ++ * OpenSSL::PKey.generate_key(pkey [, options]) -> pkey ++ * ++ * Generates a new key (pair). ++ * ++ * If a String is given as the first argument, it generates a new random key ++ * for the algorithm specified by the name just as ::generate_parameters does. ++ * If an OpenSSL::PKey::PKey is given instead, it generates a new random key ++ * for the same algorithm as the key, using the parameters the key contains. ++ * ++ * See ::generate_parameters for the details of _options_ and the given block. ++ * ++ * == Example ++ * pkey_params = OpenSSL::PKey.generate_parameters("DSA", "dsa_paramgen_bits" => 2048) ++ * pkey_params.priv_key #=> nil ++ * pkey = OpenSSL::PKey.generate_key(pkey_params) ++ * pkey.priv_key #=> # 512, ++ "dsa_paramgen_q_bits" => 256, ++ }) ++ assert_instance_of OpenSSL::PKey::DSA, pkey ++ assert_equal 512, pkey.p.num_bits ++ assert_equal 256, pkey.q.num_bits ++ assert_equal nil, pkey.priv_key ++ ++ # Invalid options are checked ++ assert_raise(OpenSSL::PKey::PKeyError) { ++ OpenSSL::PKey.generate_parameters("DSA", "invalid" => "option") ++ } ++ ++ # Parameter generation callback is called ++ cb_called = [] ++ assert_raise(RuntimeError) { ++ OpenSSL::PKey.generate_parameters("DSA") { |*args| ++ cb_called << args ++ raise "exit!" if cb_called.size == 3 ++ } ++ } ++ assert_not_empty cb_called ++ end ++ ++ def test_s_generate_key ++ assert_raise(OpenSSL::PKey::PKeyError) { ++ # DSA key pair cannot be generated without parameters ++ OpenSSL::PKey.generate_key("DSA") ++ } ++ pkey_params = OpenSSL::PKey.generate_parameters("DSA", { ++ "dsa_paramgen_bits" => 512, ++ "dsa_paramgen_q_bits" => 256, ++ }) ++ pkey = OpenSSL::PKey.generate_key(pkey_params) ++ assert_instance_of OpenSSL::PKey::DSA, pkey ++ assert_equal 512, pkey.p.num_bits ++ assert_not_equal nil, pkey.priv_key ++ end + end +-- +2.32.0 + + +From 5713605e70c96e3215aab0e0341548af29b5088e Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 15 May 2017 23:47:47 +0900 +Subject: [PATCH 3/6] pkey: port PKey::PKey#sign and #verify to the EVP_Digest* + interface + +Use EVP_DigestSign*() and EVP_DigestVerify*() interface instead of the +old EVP_Sign*() and EVP_Verify*() functions. They were added in OpenSSL +1.0.0. + +Also, allow the digest to be specified as nil, as certain EVP_PKEY types +don't expect a digest algorithm. +--- + ext/openssl/ossl_pkey.c | 90 ++++++++++++++++++++++----------------- + test/openssl/test_pkey.rb | 12 ++++++ + 2 files changed, 63 insertions(+), 39 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 1f3dd39b9b..a0d73f5821 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -753,35 +753,47 @@ static VALUE + ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) + { + EVP_PKEY *pkey; +- const EVP_MD *md; ++ const EVP_MD *md = NULL; + EVP_MD_CTX *ctx; +- unsigned int buf_len; +- VALUE str; +- int result; ++ size_t siglen; ++ int state; ++ VALUE sig; + + pkey = GetPrivPKeyPtr(self); +- md = ossl_evp_get_digestbyname(digest); ++ if (!NIL_P(digest)) ++ md = ossl_evp_get_digestbyname(digest); + StringValue(data); +- str = rb_str_new(0, EVP_PKEY_size(pkey)); + + ctx = EVP_MD_CTX_new(); + if (!ctx) +- ossl_raise(ePKeyError, "EVP_MD_CTX_new"); +- if (!EVP_SignInit_ex(ctx, md, NULL)) { +- EVP_MD_CTX_free(ctx); +- ossl_raise(ePKeyError, "EVP_SignInit_ex"); ++ ossl_raise(ePKeyError, "EVP_MD_CTX_new"); ++ if (EVP_DigestSignInit(ctx, NULL, md, /* engine */NULL, pkey) < 1) { ++ EVP_MD_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_DigestSignInit"); ++ } ++ if (EVP_DigestSignUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) < 1) { ++ EVP_MD_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_DigestSignUpdate"); ++ } ++ if (EVP_DigestSignFinal(ctx, NULL, &siglen) < 1) { ++ EVP_MD_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_DigestSignFinal"); + } +- if (!EVP_SignUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data))) { +- EVP_MD_CTX_free(ctx); +- ossl_raise(ePKeyError, "EVP_SignUpdate"); ++ if (siglen > LONG_MAX) ++ rb_raise(ePKeyError, "signature would be too large"); ++ sig = ossl_str_new(NULL, (long)siglen, &state); ++ if (state) { ++ EVP_MD_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ if (EVP_DigestSignFinal(ctx, (unsigned char *)RSTRING_PTR(sig), ++ &siglen) < 1) { ++ EVP_MD_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_DigestSignFinal"); + } +- result = EVP_SignFinal(ctx, (unsigned char *)RSTRING_PTR(str), &buf_len, pkey); + EVP_MD_CTX_free(ctx); +- if (!result) +- ossl_raise(ePKeyError, "EVP_SignFinal"); +- rb_str_set_len(str, buf_len); +- +- return str; ++ rb_str_set_len(sig, siglen); ++ return sig; + } + + /* +@@ -809,38 +821,38 @@ static VALUE + ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) + { + EVP_PKEY *pkey; +- const EVP_MD *md; ++ const EVP_MD *md = NULL; + EVP_MD_CTX *ctx; +- int siglen, result; ++ int ret; + + GetPKey(self, pkey); + ossl_pkey_check_public_key(pkey); +- md = ossl_evp_get_digestbyname(digest); ++ if (!NIL_P(digest)) ++ md = ossl_evp_get_digestbyname(digest); + StringValue(sig); +- siglen = RSTRING_LENINT(sig); + StringValue(data); + + ctx = EVP_MD_CTX_new(); + if (!ctx) +- ossl_raise(ePKeyError, "EVP_MD_CTX_new"); +- if (!EVP_VerifyInit_ex(ctx, md, NULL)) { +- EVP_MD_CTX_free(ctx); +- ossl_raise(ePKeyError, "EVP_VerifyInit_ex"); ++ ossl_raise(ePKeyError, "EVP_MD_CTX_new"); ++ if (EVP_DigestVerifyInit(ctx, NULL, md, /* engine */NULL, pkey) < 1) { ++ EVP_MD_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_DigestVerifyInit"); + } +- if (!EVP_VerifyUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data))) { +- EVP_MD_CTX_free(ctx); +- ossl_raise(ePKeyError, "EVP_VerifyUpdate"); ++ if (EVP_DigestVerifyUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) < 1) { ++ EVP_MD_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_DigestVerifyUpdate"); + } +- result = EVP_VerifyFinal(ctx, (unsigned char *)RSTRING_PTR(sig), siglen, pkey); ++ ret = EVP_DigestVerifyFinal(ctx, (unsigned char *)RSTRING_PTR(sig), ++ RSTRING_LEN(sig)); + EVP_MD_CTX_free(ctx); +- switch (result) { +- case 0: +- ossl_clear_error(); +- return Qfalse; +- case 1: +- return Qtrue; +- default: +- ossl_raise(ePKeyError, "EVP_VerifyFinal"); ++ if (ret < 0) ++ ossl_raise(ePKeyError, "EVP_DigestVerifyFinal"); ++ if (ret) ++ return Qtrue; ++ else { ++ ossl_clear_error(); ++ return Qfalse; + } + } + +diff --git a/test/openssl/test_pkey.rb b/test/openssl/test_pkey.rb +index a325a1ea2b..247ba84f83 100644 +--- a/test/openssl/test_pkey.rb ++++ b/test/openssl/test_pkey.rb +@@ -68,4 +68,16 @@ def test_s_generate_key + assert_equal 512, pkey.p.num_bits + assert_not_equal nil, pkey.priv_key + end ++ ++ def test_hmac_sign_verify ++ pkey = OpenSSL::PKey.generate_key("HMAC", { "key" => "abcd" }) ++ ++ hmac = OpenSSL::HMAC.new("abcd", "SHA256").update("data").digest ++ assert_equal hmac, pkey.sign("SHA256", "data") ++ ++ # EVP_PKEY_HMAC does not support verify ++ assert_raise(OpenSSL::PKey::PKeyError) { ++ pkey.verify("SHA256", "data", hmac) ++ } ++ end + end +-- +2.32.0 + + +From 76566a2e1bab42a2e1587ecbec23779ee00020fc Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 15 May 2017 23:47:47 +0900 +Subject: [PATCH 4/6] pkey: support 'one-shot' signing and verification + +OpenSSL 1.1.1 added EVP_DigestSign() and EVP_DigestVerify() functions +to the interface. Some EVP_PKEY methods such as PureEdDSA algorithms +do not support the streaming mechanism and require us to use them. +--- + ext/openssl/ossl_pkey.c | 30 ++++++++++++++++++++++++++ + test/openssl/test_pkey.rb | 45 +++++++++++++++++++++++++++++++++++++++ + 2 files changed, 75 insertions(+) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index a0d73f5821..19544ec7f0 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -771,6 +771,26 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSignInit"); + } ++#if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) ++ if (EVP_DigestSign(ctx, NULL, &siglen, (unsigned char *)RSTRING_PTR(data), ++ RSTRING_LEN(data)) < 1) { ++ EVP_MD_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_DigestSign"); ++ } ++ if (siglen > LONG_MAX) ++ rb_raise(ePKeyError, "signature would be too large"); ++ sig = ossl_str_new(NULL, (long)siglen, &state); ++ if (state) { ++ EVP_MD_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ if (EVP_DigestSign(ctx, (unsigned char *)RSTRING_PTR(sig), &siglen, ++ (unsigned char *)RSTRING_PTR(data), ++ RSTRING_LEN(data)) < 1) { ++ EVP_MD_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_DigestSign"); ++ } ++#else + if (EVP_DigestSignUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSignUpdate"); +@@ -791,6 +811,7 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSignFinal"); + } ++#endif + EVP_MD_CTX_free(ctx); + rb_str_set_len(sig, siglen); + return sig; +@@ -839,6 +860,14 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestVerifyInit"); + } ++#if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) ++ ret = EVP_DigestVerify(ctx, (unsigned char *)RSTRING_PTR(sig), ++ RSTRING_LEN(sig), (unsigned char *)RSTRING_PTR(data), ++ RSTRING_LEN(data)); ++ EVP_MD_CTX_free(ctx); ++ if (ret < 0) ++ ossl_raise(ePKeyError, "EVP_DigestVerify"); ++#else + if (EVP_DigestVerifyUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestVerifyUpdate"); +@@ -848,6 +877,7 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) + EVP_MD_CTX_free(ctx); + if (ret < 0) + ossl_raise(ePKeyError, "EVP_DigestVerifyFinal"); ++#endif + if (ret) + return Qtrue; + else { +diff --git a/test/openssl/test_pkey.rb b/test/openssl/test_pkey.rb +index 247ba84f83..d811b9c75f 100644 +--- a/test/openssl/test_pkey.rb ++++ b/test/openssl/test_pkey.rb +@@ -80,4 +80,49 @@ def test_hmac_sign_verify + pkey.verify("SHA256", "data", hmac) + } + end ++ ++ def test_ed25519 ++ # Test vector from RFC 8032 Section 7.1 TEST 2 ++ priv_pem = <<~EOF ++ -----BEGIN PRIVATE KEY----- ++ MC4CAQAwBQYDK2VwBCIEIEzNCJso/5banbbDRuwRTg9bijGfNaumJNqM9u1PuKb7 ++ -----END PRIVATE KEY----- ++ EOF ++ pub_pem = <<~EOF ++ -----BEGIN PUBLIC KEY----- ++ MCowBQYDK2VwAyEAPUAXw+hDiVqStwqnTRt+vJyYLM8uxJaMwM1V8Sr0Zgw= ++ -----END PUBLIC KEY----- ++ EOF ++ begin ++ priv = OpenSSL::PKey.read(priv_pem) ++ pub = OpenSSL::PKey.read(pub_pem) ++ rescue OpenSSL::PKey::PKeyError ++ # OpenSSL < 1.1.1 ++ pend "Ed25519 is not implemented" ++ end ++ assert_instance_of OpenSSL::PKey::PKey, priv ++ assert_instance_of OpenSSL::PKey::PKey, pub ++ assert_equal priv_pem, priv.private_to_pem ++ assert_equal pub_pem, priv.public_to_pem ++ assert_equal pub_pem, pub.public_to_pem ++ ++ sig = [<<~EOF.gsub(/[^0-9a-f]/, "")].pack("H*") ++ 92a009a9f0d4cab8720e820b5f642540 ++ a2b27b5416503f8fb3762223ebdb69da ++ 085ac1e43e15996e458f3613d0f11d8c ++ 387b2eaeb4302aeeb00d291612bb0c00 ++ EOF ++ data = ["72"].pack("H*") ++ assert_equal sig, priv.sign(nil, data) ++ assert_equal true, priv.verify(nil, sig, data) ++ assert_equal true, pub.verify(nil, sig, data) ++ assert_equal false, pub.verify(nil, sig, data.succ) ++ ++ # PureEdDSA wants nil as the message digest ++ assert_raise(OpenSSL::PKey::PKeyError) { priv.sign("SHA512", data) } ++ assert_raise(OpenSSL::PKey::PKeyError) { pub.verify("SHA512", sig, data) } ++ ++ # Ed25519 pkey type does not support key derivation ++ assert_raise(OpenSSL::PKey::PKeyError) { priv.derive(pub) } ++ end + end +-- +2.32.0 + + +From fabdd22bddc572ba3342ec0b09e3fef8ed6245b8 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sat, 18 Mar 2017 21:58:46 +0900 +Subject: [PATCH 5/6] pkey: add PKey::PKey#derive + +Add OpenSSL::PKey::PKey#derive as the wrapper for EVP_PKEY_CTX_derive(). +This is useful for pkey types that we don't have dedicated classes, such +as X25519. +--- + ext/openssl/ossl_pkey.c | 52 ++++++++++++++++++++++++++++++++++++ + test/openssl/test_pkey.rb | 26 ++++++++++++++++++ + test/openssl/test_pkey_dh.rb | 13 +++++++++ + test/openssl/test_pkey_ec.rb | 16 +++++++++++ + 4 files changed, 107 insertions(+) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 19544ec7f0..df8b425a0f 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -886,6 +886,57 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) + } + } + ++/* ++ * call-seq: ++ * pkey.derive(peer_pkey) -> string ++ * ++ * Derives a shared secret from _pkey_ and _peer_pkey_. _pkey_ must contain ++ * the private components, _peer_pkey_ must contain the public components. ++ */ ++static VALUE ++ossl_pkey_derive(int argc, VALUE *argv, VALUE self) ++{ ++ EVP_PKEY *pkey, *peer_pkey; ++ EVP_PKEY_CTX *ctx; ++ VALUE peer_pkey_obj, str; ++ size_t keylen; ++ int state; ++ ++ GetPKey(self, pkey); ++ rb_scan_args(argc, argv, "1", &peer_pkey_obj); ++ GetPKey(peer_pkey_obj, peer_pkey); ++ ++ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); ++ if (!ctx) ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); ++ if (EVP_PKEY_derive_init(ctx) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_derive_init"); ++ } ++ if (EVP_PKEY_derive_set_peer(ctx, peer_pkey) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_derive_set_peer"); ++ } ++ if (EVP_PKEY_derive(ctx, NULL, &keylen) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_derive"); ++ } ++ if (keylen > LONG_MAX) ++ rb_raise(ePKeyError, "derived key would be too large"); ++ str = ossl_str_new(NULL, (long)keylen, &state); ++ if (state) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ if (EVP_PKEY_derive(ctx, (unsigned char *)RSTRING_PTR(str), &keylen) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_derive"); ++ } ++ EVP_PKEY_CTX_free(ctx); ++ rb_str_set_len(str, keylen); ++ return str; ++} ++ + /* + * INIT + */ +@@ -983,6 +1034,7 @@ Init_ossl_pkey(void) + + rb_define_method(cPKey, "sign", ossl_pkey_sign, 2); + rb_define_method(cPKey, "verify", ossl_pkey_verify, 3); ++ rb_define_method(cPKey, "derive", ossl_pkey_derive, -1); + + id_private_q = rb_intern("private?"); + +diff --git a/test/openssl/test_pkey.rb b/test/openssl/test_pkey.rb +index d811b9c75f..5307fe5b08 100644 +--- a/test/openssl/test_pkey.rb ++++ b/test/openssl/test_pkey.rb +@@ -125,4 +125,30 @@ def test_ed25519 + # Ed25519 pkey type does not support key derivation + assert_raise(OpenSSL::PKey::PKeyError) { priv.derive(pub) } + end ++ ++ def test_x25519 ++ # Test vector from RFC 7748 Section 6.1 ++ alice_pem = <<~EOF ++ -----BEGIN PRIVATE KEY----- ++ MC4CAQAwBQYDK2VuBCIEIHcHbQpzGKV9PBbBclGyZkXfTC+H68CZKrF3+6UduSwq ++ -----END PRIVATE KEY----- ++ EOF ++ bob_pem = <<~EOF ++ -----BEGIN PUBLIC KEY----- ++ MCowBQYDK2VuAyEA3p7bfXt9wbTTW2HC7OQ1Nz+DQ8hbeGdNrfx+FG+IK08= ++ -----END PUBLIC KEY----- ++ EOF ++ shared_secret = "4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742" ++ begin ++ alice = OpenSSL::PKey.read(alice_pem) ++ bob = OpenSSL::PKey.read(bob_pem) ++ rescue OpenSSL::PKey::PKeyError ++ # OpenSSL < 1.1.0 ++ pend "X25519 is not implemented" ++ end ++ assert_instance_of OpenSSL::PKey::PKey, alice ++ assert_equal alice_pem, alice.private_to_pem ++ assert_equal bob_pem, bob.public_to_pem ++ assert_equal [shared_secret].pack("H*"), alice.derive(bob) ++ end + end +diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb +index 4a05626a12..9efc3ba68d 100644 +--- a/test/openssl/test_pkey_dh.rb ++++ b/test/openssl/test_pkey_dh.rb +@@ -18,6 +18,19 @@ def test_new_break + end + end + ++ def test_derive_key ++ dh1 = Fixtures.pkey("dh1024").generate_key! ++ dh2 = Fixtures.pkey("dh1024").generate_key! ++ dh1_pub = OpenSSL::PKey.read(dh1.public_to_der) ++ dh2_pub = OpenSSL::PKey.read(dh2.public_to_der) ++ z = dh1.g.mod_exp(dh1.priv_key, dh1.p).mod_exp(dh2.priv_key, dh1.p).to_s(2) ++ assert_equal z, dh1.derive(dh2_pub) ++ assert_equal z, dh2.derive(dh1_pub) ++ ++ assert_equal z, dh1.compute_key(dh2.pub_key) ++ assert_equal z, dh2.compute_key(dh1.pub_key) ++ end ++ + def test_DHparams + dh1024 = Fixtures.pkey("dh1024") + asn1 = OpenSSL::ASN1::Sequence([ +diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb +index a0e6a23ff8..95d4338a51 100644 +--- a/test/openssl/test_pkey_ec.rb ++++ b/test/openssl/test_pkey_ec.rb +@@ -93,6 +93,22 @@ def test_sign_verify + assert_equal false, p256.verify("SHA256", signature1, data) + end + ++ def test_derive_key ++ # NIST CAVP, KAS_ECC_CDH_PrimitiveTest.txt, P-256 COUNT = 0 ++ qCAVSx = "700c48f77f56584c5cc632ca65640db91b6bacce3a4df6b42ce7cc838833d287" ++ qCAVSy = "db71e509e3fd9b060ddb20ba5c51dcc5948d46fbf640dfe0441782cab85fa4ac" ++ dIUT = "7d7dc5f71eb29ddaf80d6214632eeae03d9058af1fb6d22ed80badb62bc1a534" ++ zIUT = "46fc62106420ff012e54a434fbdd2d25ccc5852060561e68040dd7778997bd7b" ++ a = OpenSSL::PKey::EC.new("prime256v1") ++ a.private_key = OpenSSL::BN.new(dIUT, 16) ++ b = OpenSSL::PKey::EC.new("prime256v1") ++ uncompressed = OpenSSL::BN.new("04" + qCAVSx + qCAVSy, 16) ++ b.public_key = OpenSSL::PKey::EC::Point.new(b.group, uncompressed) ++ assert_equal [zIUT].pack("H*"), a.derive(b) ++ ++ assert_equal a.derive(b), a.dh_compute_key(b.public_key) ++ end ++ + def test_dsa_sign_verify + data1 = "foo" + data2 = "bar" +-- +2.32.0 + + +From 97078c7fa8a724c7c71f9850d31fc401239da228 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sat, 18 Mar 2017 22:34:19 +0900 +Subject: [PATCH 6/6] pkey: reimplement PKey::DH#compute_key and + PKey::EC#dh_compute_key + +Use the new OpenSSL::PKey::PKey#derive instead of the raw +{EC,}DH_compute_key(), mainly to reduce amount of the C code. +--- + ext/openssl/lib/openssl/pkey.rb | 33 +++++++++++++++++++++++++++++++ + ext/openssl/ossl_pkey_dh.c | 35 --------------------------------- + ext/openssl/ossl_pkey_ec.c | 32 ------------------------------ + 3 files changed, 33 insertions(+), 67 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index 9cc3276356..be60ac2beb 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -9,6 +9,24 @@ + module OpenSSL::PKey + class DH + include OpenSSL::Marshal ++ ++ # :call-seq: ++ # dh.compute_key(pub_bn) -> string ++ # ++ # Returns a String containing a shared secret computed from the other ++ # party's public value. ++ # ++ # This method is provided for backwards compatibility, and calls #derive ++ # internally. ++ # ++ # === Parameters ++ # * _pub_bn_ is a OpenSSL::BN, *not* the DH instance returned by ++ # DH#public_key as that contains the DH parameters only. ++ def compute_key(pub_bn) ++ peer = dup ++ peer.set_key(pub_bn, nil) ++ derive(peer) ++ end + end + + class DSA +@@ -18,7 +36,22 @@ class DSA + if defined?(EC) + class EC + include OpenSSL::Marshal ++ ++ # :call-seq: ++ # ec.dh_compute_key(pubkey) -> string ++ # ++ # Derives a shared secret by ECDH. _pubkey_ must be an instance of ++ # OpenSSL::PKey::EC::Point and must belong to the same group. ++ # ++ # This method is provided for backwards compatibility, and calls #derive ++ # internally. ++ def dh_compute_key(pubkey) ++ peer = OpenSSL::PKey::EC.new(group) ++ peer.public_key = pubkey ++ derive(peer) ++ end + end ++ + class EC::Point + # :call-seq: + # point.to_bn([conversion_form]) -> OpenSSL::BN +diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c +index bc50e5566b..5bc1c49ca1 100644 +--- a/ext/openssl/ossl_pkey_dh.c ++++ b/ext/openssl/ossl_pkey_dh.c +@@ -476,40 +476,6 @@ ossl_dh_generate_key(VALUE self) + return self; + } + +-/* +- * call-seq: +- * dh.compute_key(pub_bn) -> aString +- * +- * Returns a String containing a shared secret computed from the other party's public value. +- * See DH_compute_key() for further information. +- * +- * === Parameters +- * * _pub_bn_ is a OpenSSL::BN, *not* the DH instance returned by +- * DH#public_key as that contains the DH parameters only. +- */ +-static VALUE +-ossl_dh_compute_key(VALUE self, VALUE pub) +-{ +- DH *dh; +- const BIGNUM *pub_key, *dh_p; +- VALUE str; +- int len; +- +- GetDH(self, dh); +- DH_get0_pqg(dh, &dh_p, NULL, NULL); +- if (!dh_p) +- ossl_raise(eDHError, "incomplete DH"); +- pub_key = GetBNPtr(pub); +- len = DH_size(dh); +- str = rb_str_new(0, len); +- if ((len = DH_compute_key((unsigned char *)RSTRING_PTR(str), pub_key, dh)) < 0) { +- ossl_raise(eDHError, NULL); +- } +- rb_str_set_len(str, len); +- +- return str; +-} +- + /* + * Document-method: OpenSSL::PKey::DH#set_pqg + * call-seq: +@@ -587,7 +553,6 @@ Init_ossl_dh(void) + rb_define_method(cDH, "public_key", ossl_dh_to_public_key, 0); + rb_define_method(cDH, "params_ok?", ossl_dh_check_params, 0); + rb_define_method(cDH, "generate_key!", ossl_dh_generate_key, 0); +- rb_define_method(cDH, "compute_key", ossl_dh_compute_key, 1); + + DEF_OSSL_PKEY_BN(cDH, dh, p); + DEF_OSSL_PKEY_BN(cDH, dh, q); +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index 6fe2533e2a..c2534251c3 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -487,37 +487,6 @@ static VALUE ossl_ec_key_check_key(VALUE self) + return Qtrue; + } + +-/* +- * call-seq: +- * key.dh_compute_key(pubkey) => String +- * +- * See the OpenSSL documentation for ECDH_compute_key() +- */ +-static VALUE ossl_ec_key_dh_compute_key(VALUE self, VALUE pubkey) +-{ +- EC_KEY *ec; +- EC_POINT *point; +- int buf_len; +- VALUE str; +- +- GetEC(self, ec); +- GetECPoint(pubkey, point); +- +-/* BUG: need a way to figure out the maximum string size */ +- buf_len = 1024; +- str = rb_str_new(0, buf_len); +-/* BUG: take KDF as a block */ +- buf_len = ECDH_compute_key(RSTRING_PTR(str), buf_len, point, ec, NULL); +- if (buf_len < 0) +- ossl_raise(eECError, "ECDH_compute_key"); +- +- rb_str_resize(str, buf_len); +- +- return str; +-} +- +-/* sign_setup */ +- + /* + * call-seq: + * key.dsa_sign_asn1(data) => String +@@ -1657,7 +1626,6 @@ void Init_ossl_ec(void) + rb_define_alias(cEC, "generate_key", "generate_key!"); + rb_define_method(cEC, "check_key", ossl_ec_key_check_key, 0); + +- rb_define_method(cEC, "dh_compute_key", ossl_ec_key_dh_compute_key, 1); + rb_define_method(cEC, "dsa_sign_asn1", ossl_ec_key_dsa_sign_asn1, 1); + rb_define_method(cEC, "dsa_verify_asn1", ossl_ec_key_dsa_verify_asn1, 2); + /* do_sign/do_verify */ +-- +2.32.0 + diff --git a/ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch b/ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch new file mode 100644 index 0000000..679411a --- /dev/null +++ b/ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch @@ -0,0 +1,358 @@ +From f2cf3afc6fa1e13e960f732c0bc658ad408ee219 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 12 Jun 2020 14:12:59 +0900 +Subject: [PATCH 1/3] pkey: fix potential memory leak in PKey#sign + +Fix potential leak of EVP_MD_CTX object in an error path. This path is +normally unreachable, since the size of a signature generated by any +supported algorithms would not be larger than LONG_MAX. +--- + ext/openssl/ossl_pkey.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index df8b425a0f..7488190e0e 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -777,8 +777,10 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSign"); + } +- if (siglen > LONG_MAX) ++ if (siglen > LONG_MAX) { ++ EVP_MD_CTX_free(ctx); + rb_raise(ePKeyError, "signature would be too large"); ++ } + sig = ossl_str_new(NULL, (long)siglen, &state); + if (state) { + EVP_MD_CTX_free(ctx); +@@ -799,8 +801,10 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSignFinal"); + } +- if (siglen > LONG_MAX) ++ if (siglen > LONG_MAX) { ++ EVP_MD_CTX_free(ctx); + rb_raise(ePKeyError, "signature would be too large"); ++ } + sig = ossl_str_new(NULL, (long)siglen, &state); + if (state) { + EVP_MD_CTX_free(ctx); +-- +2.32.0 + + +From 8b30ce20eb9e03180c28288e29a96308e594f860 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 2 Apr 2021 23:58:48 +0900 +Subject: [PATCH 2/3] pkey: prepare pkey_ctx_apply_options() for usage by other + operations + +The routine to apply Hash to EVP_PKEY_CTX_ctrl_str() is currently used +by key generation, but it is useful for other operations too. Let's +change it to a slightly more generic name. +--- + ext/openssl/ossl_pkey.c | 22 ++++++++++++++-------- + 1 file changed, 14 insertions(+), 8 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 7488190e0e..fed4a2b81f 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -198,7 +198,7 @@ ossl_pkey_new_from_data(int argc, VALUE *argv, VALUE self) + } + + static VALUE +-pkey_gen_apply_options_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ctx_v)) ++pkey_ctx_apply_options_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ctx_v)) + { + VALUE key = rb_ary_entry(i, 0), value = rb_ary_entry(i, 1); + EVP_PKEY_CTX *ctx = (EVP_PKEY_CTX *)ctx_v; +@@ -214,15 +214,25 @@ pkey_gen_apply_options_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ctx_v)) + } + + static VALUE +-pkey_gen_apply_options0(VALUE args_v) ++pkey_ctx_apply_options0(VALUE args_v) + { + VALUE *args = (VALUE *)args_v; + + rb_block_call(args[1], rb_intern("each"), 0, NULL, +- pkey_gen_apply_options_i, args[0]); ++ pkey_ctx_apply_options_i, args[0]); + return Qnil; + } + ++static void ++pkey_ctx_apply_options(EVP_PKEY_CTX *ctx, VALUE options, int *state) ++{ ++ VALUE args[2]; ++ args[0] = (VALUE)ctx; ++ args[1] = options; ++ ++ rb_protect(pkey_ctx_apply_options0, (VALUE)args, state); ++} ++ + struct pkey_blocking_generate_arg { + EVP_PKEY_CTX *ctx; + EVP_PKEY *pkey; +@@ -330,11 +340,7 @@ pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) + } + + if (!NIL_P(options)) { +- VALUE args[2]; +- +- args[0] = (VALUE)ctx; +- args[1] = options; +- rb_protect(pkey_gen_apply_options0, (VALUE)args, &state); ++ pkey_ctx_apply_options(ctx, options, &state); + if (state) { + EVP_PKEY_CTX_free(ctx); + rb_jump_tag(state); +-- +2.32.0 + + +From 4c7b0f91da666961d11908b94520db4e09ce4e67 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sat, 18 Jul 2020 20:40:39 +0900 +Subject: [PATCH 3/3] pkey: allow setting algorithm-specific options in #sign + and #verify + +Similarly to OpenSSL::PKey.generate_key and .generate_parameters, let +OpenSSL::PKey::PKey#sign and #verify take an optional parameter for +specifying control strings for EVP_PKEY_CTX_ctrl_str(). +--- + ext/openssl/ossl_pkey.c | 113 ++++++++++++++++++++++------------ + test/openssl/test_pkey_rsa.rb | 34 +++++----- + 2 files changed, 89 insertions(+), 58 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index fed4a2b81f..22e9f19982 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -739,33 +739,51 @@ ossl_pkey_public_to_pem(VALUE self) + } + + /* +- * call-seq: +- * pkey.sign(digest, data) -> String ++ * call-seq: ++ * pkey.sign(digest, data [, options]) -> string + * +- * To sign the String _data_, _digest_, an instance of OpenSSL::Digest, must +- * be provided. The return value is again a String containing the signature. +- * A PKeyError is raised should errors occur. +- * Any previous state of the Digest instance is irrelevant to the signature +- * outcome, the digest instance is reset to its initial state during the +- * operation. ++ * Hashes and signs the +data+ using a message digest algorithm +digest+ and ++ * a private key +pkey+. + * +- * == Example +- * data = 'Sign me!' +- * digest = OpenSSL::Digest.new('SHA256') +- * pkey = OpenSSL::PKey::RSA.new(2048) +- * signature = pkey.sign(digest, data) ++ * See #verify for the verification operation. ++ * ++ * See also the man page EVP_DigestSign(3). ++ * ++ * +digest+:: ++ * A String that represents the message digest algorithm name, or +nil+ ++ * if the PKey type requires no digest algorithm. ++ * For backwards compatibility, this can be an instance of OpenSSL::Digest. ++ * Its state will not affect the signature. ++ * +data+:: ++ * A String. The data to be hashed and signed. ++ * +options+:: ++ * A Hash that contains algorithm specific control operations to \OpenSSL. ++ * See OpenSSL's man page EVP_PKEY_CTX_ctrl_str(3) for details. ++ * +options+ parameter was added in version 2.3. ++ * ++ * Example: ++ * data = "Sign me!" ++ * pkey = OpenSSL::PKey.generate_key("RSA", rsa_keygen_bits: 2048) ++ * signopts = { rsa_padding_mode: "pss" } ++ * signature = pkey.sign("SHA256", data, signopts) ++ * ++ * # Creates a copy of the RSA key pkey, but without the private components ++ * pub_key = pkey.public_key ++ * puts pub_key.verify("SHA256", signature, data, signopts) # => true + */ + static VALUE +-ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) ++ossl_pkey_sign(int argc, VALUE *argv, VALUE self) + { + EVP_PKEY *pkey; ++ VALUE digest, data, options, sig; + const EVP_MD *md = NULL; + EVP_MD_CTX *ctx; ++ EVP_PKEY_CTX *pctx; + size_t siglen; + int state; +- VALUE sig; + + pkey = GetPrivPKeyPtr(self); ++ rb_scan_args(argc, argv, "21", &digest, &data, &options); + if (!NIL_P(digest)) + md = ossl_evp_get_digestbyname(digest); + StringValue(data); +@@ -773,10 +791,17 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) + ctx = EVP_MD_CTX_new(); + if (!ctx) + ossl_raise(ePKeyError, "EVP_MD_CTX_new"); +- if (EVP_DigestSignInit(ctx, NULL, md, /* engine */NULL, pkey) < 1) { ++ if (EVP_DigestSignInit(ctx, &pctx, md, /* engine */NULL, pkey) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestSignInit"); + } ++ if (!NIL_P(options)) { ++ pkey_ctx_apply_options(pctx, options, &state); ++ if (state) { ++ EVP_MD_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ } + #if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) + if (EVP_DigestSign(ctx, NULL, &siglen, (unsigned char *)RSTRING_PTR(data), + RSTRING_LEN(data)) < 1) { +@@ -828,35 +853,40 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) + } + + /* +- * call-seq: +- * pkey.verify(digest, signature, data) -> String ++ * call-seq: ++ * pkey.verify(digest, signature, data [, options]) -> true or false + * +- * To verify the String _signature_, _digest_, an instance of +- * OpenSSL::Digest, must be provided to re-compute the message digest of the +- * original _data_, also a String. The return value is +true+ if the +- * signature is valid, +false+ otherwise. A PKeyError is raised should errors +- * occur. +- * Any previous state of the Digest instance is irrelevant to the validation +- * outcome, the digest instance is reset to its initial state during the +- * operation. ++ * Verifies the +signature+ for the +data+ using a message digest algorithm ++ * +digest+ and a public key +pkey+. + * +- * == Example +- * data = 'Sign me!' +- * digest = OpenSSL::Digest.new('SHA256') +- * pkey = OpenSSL::PKey::RSA.new(2048) +- * signature = pkey.sign(digest, data) +- * pub_key = pkey.public_key +- * puts pub_key.verify(digest, signature, data) # => true ++ * Returns +true+ if the signature is successfully verified, +false+ otherwise. ++ * The caller must check the return value. ++ * ++ * See #sign for the signing operation and an example. ++ * ++ * See also the man page EVP_DigestVerify(3). ++ * ++ * +digest+:: ++ * See #sign. ++ * +signature+:: ++ * A String containing the signature to be verified. ++ * +data+:: ++ * See #sign. ++ * +options+:: ++ * See #sign. +options+ parameter was added in version 2.3. + */ + static VALUE +-ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) ++ossl_pkey_verify(int argc, VALUE *argv, VALUE self) + { + EVP_PKEY *pkey; ++ VALUE digest, sig, data, options; + const EVP_MD *md = NULL; + EVP_MD_CTX *ctx; +- int ret; ++ EVP_PKEY_CTX *pctx; ++ int state, ret; + + GetPKey(self, pkey); ++ rb_scan_args(argc, argv, "31", &digest, &sig, &data, &options); + ossl_pkey_check_public_key(pkey); + if (!NIL_P(digest)) + md = ossl_evp_get_digestbyname(digest); +@@ -866,10 +896,17 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) + ctx = EVP_MD_CTX_new(); + if (!ctx) + ossl_raise(ePKeyError, "EVP_MD_CTX_new"); +- if (EVP_DigestVerifyInit(ctx, NULL, md, /* engine */NULL, pkey) < 1) { ++ if (EVP_DigestVerifyInit(ctx, &pctx, md, /* engine */NULL, pkey) < 1) { + EVP_MD_CTX_free(ctx); + ossl_raise(ePKeyError, "EVP_DigestVerifyInit"); + } ++ if (!NIL_P(options)) { ++ pkey_ctx_apply_options(pctx, options, &state); ++ if (state) { ++ EVP_MD_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ } + #if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) + ret = EVP_DigestVerify(ctx, (unsigned char *)RSTRING_PTR(sig), + RSTRING_LEN(sig), (unsigned char *)RSTRING_PTR(data), +@@ -1042,8 +1079,8 @@ Init_ossl_pkey(void) + rb_define_method(cPKey, "public_to_der", ossl_pkey_public_to_der, 0); + rb_define_method(cPKey, "public_to_pem", ossl_pkey_public_to_pem, 0); + +- rb_define_method(cPKey, "sign", ossl_pkey_sign, 2); +- rb_define_method(cPKey, "verify", ossl_pkey_verify, 3); ++ rb_define_method(cPKey, "sign", ossl_pkey_sign, -1); ++ rb_define_method(cPKey, "verify", ossl_pkey_verify, -1); + rb_define_method(cPKey, "derive", ossl_pkey_derive, -1); + + id_private_q = rb_intern("private?"); +diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb +index 88164c3b52..d1e68dbc9f 100644 +--- a/test/openssl/test_pkey_rsa.rb ++++ b/test/openssl/test_pkey_rsa.rb +@@ -117,27 +117,21 @@ def test_sign_verify + assert_equal false, rsa1024.verify("SHA256", signature1, data) + end + +- def test_digest_state_irrelevant_sign ++ def test_sign_verify_options + key = Fixtures.pkey("rsa1024") +- digest1 = OpenSSL::Digest.new('SHA1') +- digest2 = OpenSSL::Digest.new('SHA1') +- data = 'Sign me!' +- digest1 << 'Change state of digest1' +- sig1 = key.sign(digest1, data) +- sig2 = key.sign(digest2, data) +- assert_equal(sig1, sig2) +- end +- +- def test_digest_state_irrelevant_verify +- key = Fixtures.pkey("rsa1024") +- digest1 = OpenSSL::Digest.new('SHA1') +- digest2 = OpenSSL::Digest.new('SHA1') +- data = 'Sign me!' +- sig = key.sign(digest1, data) +- digest1.reset +- digest1 << 'Change state of digest1' +- assert(key.verify(digest1, sig, data)) +- assert(key.verify(digest2, sig, data)) ++ data = "Sign me!" ++ pssopts = { ++ "rsa_padding_mode" => "pss", ++ "rsa_pss_saltlen" => 20, ++ "rsa_mgf1_md" => "SHA1" ++ } ++ sig_pss = key.sign("SHA256", data, pssopts) ++ assert_equal 128, sig_pss.bytesize ++ assert_equal true, key.verify("SHA256", sig_pss, data, pssopts) ++ assert_equal true, key.verify_pss("SHA256", sig_pss, data, ++ salt_length: 20, mgf1_hash: "SHA1") ++ # Defaults to PKCS #1 v1.5 padding => verification failure ++ assert_equal false, key.verify("SHA256", sig_pss, data) + end + + def test_verify_empty_rsa +-- +2.32.0 + diff --git a/ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch b/ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch new file mode 100644 index 0000000..afb3a87 --- /dev/null +++ b/ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch @@ -0,0 +1,1319 @@ +From 3e6cd88c621d8834712d2279f925b9af83c2bb34 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 18 May 2020 20:06:16 +0900 +Subject: [PATCH 1/6] pkey: implement PKey#encrypt and #decrypt + +Support public key encryption and decryption operations using the EVP +API. +--- + ext/openssl/ossl_pkey.c | 141 ++++++++++++++++++++++++++++++++++ + test/openssl/test_pkey_rsa.rb | 34 ++++++++ + 2 files changed, 175 insertions(+) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 21cd4b2cda..baf8ce9f20 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -986,6 +986,145 @@ ossl_pkey_derive(int argc, VALUE *argv, VALUE self) + return str; + } + ++/* ++ * call-seq: ++ * pkey.encrypt(data [, options]) -> string ++ * ++ * Performs a public key encryption operation using +pkey+. ++ * ++ * See #decrypt for the reverse operation. ++ * ++ * Added in version 3.0. See also the man page EVP_PKEY_encrypt(3). ++ * ++ * +data+:: ++ * A String to be encrypted. ++ * +options+:: ++ * A Hash that contains algorithm specific control operations to \OpenSSL. ++ * See OpenSSL's man page EVP_PKEY_CTX_ctrl_str(3) for details. ++ * ++ * Example: ++ * pkey = OpenSSL::PKey.generate_key("RSA", rsa_keygen_bits: 2048) ++ * data = "secret data" ++ * encrypted = pkey.encrypt(data, rsa_padding_mode: "oaep") ++ * decrypted = pkey.decrypt(data, rsa_padding_mode: "oaep") ++ * p decrypted #=> "secret data" ++ */ ++static VALUE ++ossl_pkey_encrypt(int argc, VALUE *argv, VALUE self) ++{ ++ EVP_PKEY *pkey; ++ EVP_PKEY_CTX *ctx; ++ VALUE data, options, str; ++ size_t outlen; ++ int state; ++ ++ GetPKey(self, pkey); ++ rb_scan_args(argc, argv, "11", &data, &options); ++ StringValue(data); ++ ++ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); ++ if (!ctx) ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); ++ if (EVP_PKEY_encrypt_init(ctx) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_encrypt_init"); ++ } ++ if (!NIL_P(options)) { ++ pkey_ctx_apply_options(ctx, options, &state); ++ if (state) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ } ++ if (EVP_PKEY_encrypt(ctx, NULL, &outlen, ++ (unsigned char *)RSTRING_PTR(data), ++ RSTRING_LEN(data)) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_encrypt"); ++ } ++ if (outlen > LONG_MAX) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_raise(ePKeyError, "encrypted data would be too large"); ++ } ++ str = ossl_str_new(NULL, (long)outlen, &state); ++ if (state) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ if (EVP_PKEY_encrypt(ctx, (unsigned char *)RSTRING_PTR(str), &outlen, ++ (unsigned char *)RSTRING_PTR(data), ++ RSTRING_LEN(data)) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_encrypt"); ++ } ++ EVP_PKEY_CTX_free(ctx); ++ rb_str_set_len(str, outlen); ++ return str; ++} ++ ++/* ++ * call-seq: ++ * pkey.decrypt(data [, options]) -> string ++ * ++ * Performs a public key decryption operation using +pkey+. ++ * ++ * See #encrypt for a description of the parameters and an example. ++ * ++ * Added in version 3.0. See also the man page EVP_PKEY_decrypt(3). ++ */ ++static VALUE ++ossl_pkey_decrypt(int argc, VALUE *argv, VALUE self) ++{ ++ EVP_PKEY *pkey; ++ EVP_PKEY_CTX *ctx; ++ VALUE data, options, str; ++ size_t outlen; ++ int state; ++ ++ GetPKey(self, pkey); ++ rb_scan_args(argc, argv, "11", &data, &options); ++ StringValue(data); ++ ++ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); ++ if (!ctx) ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); ++ if (EVP_PKEY_decrypt_init(ctx) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_decrypt_init"); ++ } ++ if (!NIL_P(options)) { ++ pkey_ctx_apply_options(ctx, options, &state); ++ if (state) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ } ++ if (EVP_PKEY_decrypt(ctx, NULL, &outlen, ++ (unsigned char *)RSTRING_PTR(data), ++ RSTRING_LEN(data)) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_decrypt"); ++ } ++ if (outlen > LONG_MAX) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_raise(ePKeyError, "decrypted data would be too large"); ++ } ++ str = ossl_str_new(NULL, (long)outlen, &state); ++ if (state) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ if (EVP_PKEY_decrypt(ctx, (unsigned char *)RSTRING_PTR(str), &outlen, ++ (unsigned char *)RSTRING_PTR(data), ++ RSTRING_LEN(data)) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_decrypt"); ++ } ++ EVP_PKEY_CTX_free(ctx); ++ rb_str_set_len(str, outlen); ++ return str; ++} ++ + /* + * INIT + */ +@@ -1085,6 +1224,8 @@ Init_ossl_pkey(void) + rb_define_method(cPKey, "sign", ossl_pkey_sign, -1); + rb_define_method(cPKey, "verify", ossl_pkey_verify, -1); + rb_define_method(cPKey, "derive", ossl_pkey_derive, -1); ++ rb_define_method(cPKey, "encrypt", ossl_pkey_encrypt, -1); ++ rb_define_method(cPKey, "decrypt", ossl_pkey_decrypt, -1); + + id_private_q = rb_intern("private?"); + +diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb +index 5f8d04e754..d6bfca3ac5 100644 +--- a/test/openssl/test_pkey_rsa.rb ++++ b/test/openssl/test_pkey_rsa.rb +@@ -173,6 +173,40 @@ def test_sign_verify_pss + } + end + ++ def test_encrypt_decrypt ++ rsapriv = Fixtures.pkey("rsa-1") ++ rsapub = dup_public(rsapriv) ++ ++ # Defaults to PKCS #1 v1.5 ++ raw = "data" ++ enc = rsapub.encrypt(raw) ++ assert_equal raw, rsapriv.decrypt(enc) ++ ++ # Invalid options ++ assert_raise(OpenSSL::PKey::PKeyError) { ++ rsapub.encrypt(raw, { "nonexistent" => "option" }) ++ } ++ end ++ ++ def test_encrypt_decrypt_legacy ++ rsapriv = Fixtures.pkey("rsa-1") ++ rsapub = dup_public(rsapriv) ++ ++ # Defaults to PKCS #1 v1.5 ++ raw = "data" ++ enc_legacy = rsapub.public_encrypt(raw) ++ assert_equal raw, rsapriv.decrypt(enc_legacy) ++ enc_new = rsapub.encrypt(raw) ++ assert_equal raw, rsapriv.private_decrypt(enc_new) ++ ++ # OAEP with default parameters ++ raw = "data" ++ enc_legacy = rsapub.public_encrypt(raw, OpenSSL::PKey::RSA::PKCS1_OAEP_PADDING) ++ assert_equal raw, rsapriv.decrypt(enc_legacy, { "rsa_padding_mode" => "oaep" }) ++ enc_new = rsapub.encrypt(raw, { "rsa_padding_mode" => "oaep" }) ++ assert_equal raw, rsapriv.private_decrypt(enc_legacy, OpenSSL::PKey::RSA::PKCS1_OAEP_PADDING) ++ end ++ + def test_export + rsa1024 = Fixtures.pkey("rsa1024") + key = OpenSSL::PKey::RSA.new +-- +2.32.0 + + +From 6f5c75b06967b5b2db1d13646d74310e1cdc563e Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Tue, 25 May 2021 18:43:29 +0900 +Subject: [PATCH 2/6] pkey: update version reference in #sign and #verify + documentation + +The next release is decided to be 3.0 rather than 2.3. +--- + ext/openssl/ossl_pkey.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index baf8ce9f20..d08f6f7e60 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -761,7 +761,7 @@ ossl_pkey_public_to_pem(VALUE self) + * +options+:: + * A Hash that contains algorithm specific control operations to \OpenSSL. + * See OpenSSL's man page EVP_PKEY_CTX_ctrl_str(3) for details. +- * +options+ parameter was added in version 2.3. ++ * +options+ parameter was added in version 3.0. + * + * Example: + * data = "Sign me!" +@@ -875,7 +875,7 @@ ossl_pkey_sign(int argc, VALUE *argv, VALUE self) + * +data+:: + * See #sign. + * +options+:: +- * See #sign. +options+ parameter was added in version 2.3. ++ * See #sign. +options+ parameter was added in version 3.0. + */ + static VALUE + ossl_pkey_verify(int argc, VALUE *argv, VALUE self) +-- +2.32.0 + + +From 99fc31a9b4843b7f8923b5ce8b36115b2c66f4db Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 22 May 2020 16:10:35 +0900 +Subject: [PATCH 3/6] pkey: implement PKey#sign_raw, #verify_raw, and + #verify_recover + +Add a variant of PKey#sign and #verify that do not hash the data +automatically. + +Sometimes the caller has the hashed data only, but not the plaintext +to be signed. In that case, users would have to use the low-level API +such as RSA#private_encrypt or #public_decrypt directly. + +OpenSSL 1.0.0 and later supports EVP_PKEY_sign() and EVP_PKEY_verify() +which provide the same functionality as part of the EVP API. This patch +adds wrappers for them. +--- + ext/openssl/ossl_pkey.c | 232 ++++++++++++++++++++++++++++++++++ + test/openssl/test_pkey_dsa.rb | 25 +++- + test/openssl/test_pkey_ec.rb | 21 ++- + test/openssl/test_pkey_rsa.rb | 78 ++++++++---- + 4 files changed, 325 insertions(+), 31 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index d08f6f7e60..ba909c7632 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -935,6 +935,235 @@ ossl_pkey_verify(int argc, VALUE *argv, VALUE self) + } + } + ++/* ++ * call-seq: ++ * pkey.sign_raw(digest, data [, options]) -> string ++ * ++ * Signs +data+ using a private key +pkey+. Unlike #sign, +data+ will not be ++ * hashed by +digest+ automatically. ++ * ++ * See #verify_raw for the verification operation. ++ * ++ * Added in version 3.0. See also the man page EVP_PKEY_sign(3). ++ * ++ * +digest+:: ++ * A String that represents the message digest algorithm name, or +nil+ ++ * if the PKey type requires no digest algorithm. ++ * Although this method will not hash +data+ with it, this parameter may still ++ * be required depending on the signature algorithm. ++ * +data+:: ++ * A String. The data to be signed. ++ * +options+:: ++ * A Hash that contains algorithm specific control operations to \OpenSSL. ++ * See OpenSSL's man page EVP_PKEY_CTX_ctrl_str(3) for details. ++ * ++ * Example: ++ * data = "Sign me!" ++ * hash = OpenSSL::Digest.digest("SHA256", data) ++ * pkey = OpenSSL::PKey.generate_key("RSA", rsa_keygen_bits: 2048) ++ * signopts = { rsa_padding_mode: "pss" } ++ * signature = pkey.sign_raw("SHA256", hash, signopts) ++ * ++ * # Creates a copy of the RSA key pkey, but without the private components ++ * pub_key = pkey.public_key ++ * puts pub_key.verify_raw("SHA256", signature, hash, signopts) # => true ++ */ ++static VALUE ++ossl_pkey_sign_raw(int argc, VALUE *argv, VALUE self) ++{ ++ EVP_PKEY *pkey; ++ VALUE digest, data, options, sig; ++ const EVP_MD *md = NULL; ++ EVP_PKEY_CTX *ctx; ++ size_t outlen; ++ int state; ++ ++ GetPKey(self, pkey); ++ rb_scan_args(argc, argv, "21", &digest, &data, &options); ++ if (!NIL_P(digest)) ++ md = ossl_evp_get_digestbyname(digest); ++ StringValue(data); ++ ++ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); ++ if (!ctx) ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); ++ if (EVP_PKEY_sign_init(ctx) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_sign_init"); ++ } ++ if (md && EVP_PKEY_CTX_set_signature_md(ctx, md) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_set_signature_md"); ++ } ++ if (!NIL_P(options)) { ++ pkey_ctx_apply_options(ctx, options, &state); ++ if (state) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ } ++ if (EVP_PKEY_sign(ctx, NULL, &outlen, (unsigned char *)RSTRING_PTR(data), ++ RSTRING_LEN(data)) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_sign"); ++ } ++ if (outlen > LONG_MAX) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_raise(ePKeyError, "signature would be too large"); ++ } ++ sig = ossl_str_new(NULL, (long)outlen, &state); ++ if (state) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ if (EVP_PKEY_sign(ctx, (unsigned char *)RSTRING_PTR(sig), &outlen, ++ (unsigned char *)RSTRING_PTR(data), ++ RSTRING_LEN(data)) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_sign"); ++ } ++ EVP_PKEY_CTX_free(ctx); ++ rb_str_set_len(sig, outlen); ++ return sig; ++} ++ ++/* ++ * call-seq: ++ * pkey.verify_raw(digest, signature, data [, options]) -> true or false ++ * ++ * Verifies the +signature+ for the +data+ using a public key +pkey+. Unlike ++ * #verify, this method will not hash +data+ with +digest+ automatically. ++ * ++ * Returns +true+ if the signature is successfully verified, +false+ otherwise. ++ * The caller must check the return value. ++ * ++ * See #sign_raw for the signing operation and an example code. ++ * ++ * Added in version 3.0. See also the man page EVP_PKEY_verify(3). ++ * ++ * +signature+:: ++ * A String containing the signature to be verified. ++ */ ++static VALUE ++ossl_pkey_verify_raw(int argc, VALUE *argv, VALUE self) ++{ ++ EVP_PKEY *pkey; ++ VALUE digest, sig, data, options; ++ const EVP_MD *md = NULL; ++ EVP_PKEY_CTX *ctx; ++ int state, ret; ++ ++ GetPKey(self, pkey); ++ rb_scan_args(argc, argv, "31", &digest, &sig, &data, &options); ++ ossl_pkey_check_public_key(pkey); ++ if (!NIL_P(digest)) ++ md = ossl_evp_get_digestbyname(digest); ++ StringValue(sig); ++ StringValue(data); ++ ++ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); ++ if (!ctx) ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); ++ if (EVP_PKEY_verify_init(ctx) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_verify_init"); ++ } ++ if (md && EVP_PKEY_CTX_set_signature_md(ctx, md) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_set_signature_md"); ++ } ++ if (!NIL_P(options)) { ++ pkey_ctx_apply_options(ctx, options, &state); ++ if (state) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ } ++ ret = EVP_PKEY_verify(ctx, (unsigned char *)RSTRING_PTR(sig), ++ RSTRING_LEN(sig), ++ (unsigned char *)RSTRING_PTR(data), ++ RSTRING_LEN(data)); ++ EVP_PKEY_CTX_free(ctx); ++ if (ret < 0) ++ ossl_raise(ePKeyError, "EVP_PKEY_verify"); ++ ++ if (ret) ++ return Qtrue; ++ else { ++ ossl_clear_error(); ++ return Qfalse; ++ } ++} ++ ++/* ++ * call-seq: ++ * pkey.verify_recover(digest, signature [, options]) -> string ++ * ++ * Recovers the signed data from +signature+ using a public key +pkey+. Not all ++ * signature algorithms support this operation. ++ * ++ * Added in version 3.0. See also the man page EVP_PKEY_verify_recover(3). ++ * ++ * +signature+:: ++ * A String containing the signature to be verified. ++ */ ++static VALUE ++ossl_pkey_verify_recover(int argc, VALUE *argv, VALUE self) ++{ ++ EVP_PKEY *pkey; ++ VALUE digest, sig, options, out; ++ const EVP_MD *md = NULL; ++ EVP_PKEY_CTX *ctx; ++ int state; ++ size_t outlen; ++ ++ GetPKey(self, pkey); ++ rb_scan_args(argc, argv, "21", &digest, &sig, &options); ++ ossl_pkey_check_public_key(pkey); ++ if (!NIL_P(digest)) ++ md = ossl_evp_get_digestbyname(digest); ++ StringValue(sig); ++ ++ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); ++ if (!ctx) ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); ++ if (EVP_PKEY_verify_recover_init(ctx) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_verify_recover_init"); ++ } ++ if (md && EVP_PKEY_CTX_set_signature_md(ctx, md) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_set_signature_md"); ++ } ++ if (!NIL_P(options)) { ++ pkey_ctx_apply_options(ctx, options, &state); ++ if (state) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ } ++ if (EVP_PKEY_verify_recover(ctx, NULL, &outlen, ++ (unsigned char *)RSTRING_PTR(sig), ++ RSTRING_LEN(sig)) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_verify_recover"); ++ } ++ out = ossl_str_new(NULL, (long)outlen, &state); ++ if (state) { ++ EVP_PKEY_CTX_free(ctx); ++ rb_jump_tag(state); ++ } ++ if (EVP_PKEY_verify_recover(ctx, (unsigned char *)RSTRING_PTR(out), &outlen, ++ (unsigned char *)RSTRING_PTR(sig), ++ RSTRING_LEN(sig)) <= 0) { ++ EVP_PKEY_CTX_free(ctx); ++ ossl_raise(ePKeyError, "EVP_PKEY_verify_recover"); ++ } ++ EVP_PKEY_CTX_free(ctx); ++ rb_str_set_len(out, outlen); ++ return out; ++} ++ + /* + * call-seq: + * pkey.derive(peer_pkey) -> string +@@ -1223,6 +1452,9 @@ Init_ossl_pkey(void) + + rb_define_method(cPKey, "sign", ossl_pkey_sign, -1); + rb_define_method(cPKey, "verify", ossl_pkey_verify, -1); ++ rb_define_method(cPKey, "sign_raw", ossl_pkey_sign_raw, -1); ++ rb_define_method(cPKey, "verify_raw", ossl_pkey_verify_raw, -1); ++ rb_define_method(cPKey, "verify_recover", ossl_pkey_verify_recover, -1); + rb_define_method(cPKey, "derive", ossl_pkey_derive, -1); + rb_define_method(cPKey, "encrypt", ossl_pkey_encrypt, -1); + rb_define_method(cPKey, "decrypt", ossl_pkey_decrypt, -1); +diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb +index 85bb6ec0ae..147e50176b 100644 +--- a/test/openssl/test_pkey_dsa.rb ++++ b/test/openssl/test_pkey_dsa.rb +@@ -48,12 +48,31 @@ def test_sign_verify + assert_equal false, dsa512.verify("SHA256", signature1, data) + end + +- def test_sys_sign_verify +- key = Fixtures.pkey("dsa256") ++ def test_sign_verify_raw ++ key = Fixtures.pkey("dsa512") + data = 'Sign me!' + digest = OpenSSL::Digest.digest('SHA1', data) ++ ++ invalid_sig = key.sign_raw(nil, digest.succ) ++ malformed_sig = "*" * invalid_sig.bytesize ++ ++ # Sign by #syssign + sig = key.syssign(digest) +- assert(key.sysverify(digest, sig)) ++ assert_equal true, key.sysverify(digest, sig) ++ assert_equal false, key.sysverify(digest, invalid_sig) ++ assert_raise(OpenSSL::PKey::DSAError) { key.sysverify(digest, malformed_sig) } ++ assert_equal true, key.verify_raw(nil, sig, digest) ++ assert_equal false, key.verify_raw(nil, invalid_sig, digest) ++ assert_raise(OpenSSL::PKey::PKeyError) { key.verify_raw(nil, malformed_sig, digest) } ++ ++ # Sign by #sign_raw ++ sig = key.sign_raw(nil, digest) ++ assert_equal true, key.sysverify(digest, sig) ++ assert_equal false, key.sysverify(digest, invalid_sig) ++ assert_raise(OpenSSL::PKey::DSAError) { key.sysverify(digest, malformed_sig) } ++ assert_equal true, key.verify_raw(nil, sig, digest) ++ assert_equal false, key.verify_raw(nil, invalid_sig, digest) ++ assert_raise(OpenSSL::PKey::PKeyError) { key.verify_raw(nil, malformed_sig, digest) } + end + + def test_DSAPrivateKey +diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb +index 95d4338a51..4b6df0290f 100644 +--- a/test/openssl/test_pkey_ec.rb ++++ b/test/openssl/test_pkey_ec.rb +@@ -109,13 +109,30 @@ def test_derive_key + assert_equal a.derive(b), a.dh_compute_key(b.public_key) + end + +- def test_dsa_sign_verify ++ def test_sign_verify_raw ++ key = Fixtures.pkey("p256") + data1 = "foo" + data2 = "bar" +- key = OpenSSL::PKey::EC.new("prime256v1").generate_key! ++ ++ malformed_sig = "*" * 30 ++ ++ # Sign by #dsa_sign_asn1 + sig = key.dsa_sign_asn1(data1) + assert_equal true, key.dsa_verify_asn1(data1, sig) + assert_equal false, key.dsa_verify_asn1(data2, sig) ++ assert_raise(OpenSSL::PKey::ECError) { key.dsa_verify_asn1(data1, malformed_sig) } ++ assert_equal true, key.verify_raw(nil, sig, data1) ++ assert_equal false, key.verify_raw(nil, sig, data2) ++ assert_raise(OpenSSL::PKey::PKeyError) { key.verify_raw(nil, malformed_sig, data1) } ++ ++ # Sign by #sign_raw ++ sig = key.sign_raw(nil, data1) ++ assert_equal true, key.dsa_verify_asn1(data1, sig) ++ assert_equal false, key.dsa_verify_asn1(data2, sig) ++ assert_raise(OpenSSL::PKey::ECError) { key.dsa_verify_asn1(data1, malformed_sig) } ++ assert_equal true, key.verify_raw(nil, sig, data1) ++ assert_equal false, key.verify_raw(nil, sig, data2) ++ assert_raise(OpenSSL::PKey::PKeyError) { key.verify_raw(nil, malformed_sig, data1) } + end + + def test_dsa_sign_asn1_FIPS186_3 +diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb +index d6bfca3ac5..5e127f5407 100644 +--- a/test/openssl/test_pkey_rsa.rb ++++ b/test/openssl/test_pkey_rsa.rb +@@ -13,32 +13,6 @@ def test_no_private_exp + assert_raise(OpenSSL::PKey::RSAError){ key.private_decrypt("foo") } + end + +- def test_padding +- key = OpenSSL::PKey::RSA.new(512, 3) +- +- # Need right size for raw mode +- plain0 = "x" * (512/8) +- cipher = key.private_encrypt(plain0, OpenSSL::PKey::RSA::NO_PADDING) +- plain1 = key.public_decrypt(cipher, OpenSSL::PKey::RSA::NO_PADDING) +- assert_equal(plain0, plain1) +- +- # Need smaller size for pkcs1 mode +- plain0 = "x" * (512/8 - 11) +- cipher1 = key.private_encrypt(plain0, OpenSSL::PKey::RSA::PKCS1_PADDING) +- plain1 = key.public_decrypt(cipher1, OpenSSL::PKey::RSA::PKCS1_PADDING) +- assert_equal(plain0, plain1) +- +- cipherdef = key.private_encrypt(plain0) # PKCS1_PADDING is default +- plain1 = key.public_decrypt(cipherdef) +- assert_equal(plain0, plain1) +- assert_equal(cipher1, cipherdef) +- +- # Failure cases +- assert_raise(ArgumentError){ key.private_encrypt() } +- assert_raise(ArgumentError){ key.private_encrypt("hi", 1, nil) } +- assert_raise(OpenSSL::PKey::RSAError){ key.private_encrypt(plain0, 666) } +- end +- + def test_private + # Generated by key size and public exponent + key = OpenSSL::PKey::RSA.new(512, 3) +@@ -133,6 +107,58 @@ def test_sign_verify_options + assert_equal false, key.verify("SHA256", sig_pss, data) + end + ++ def test_sign_verify_raw ++ key = Fixtures.pkey("rsa-1") ++ data = "Sign me!" ++ hash = OpenSSL::Digest.digest("SHA1", data) ++ signature = key.sign_raw("SHA1", hash) ++ assert_equal true, key.verify_raw("SHA1", signature, hash) ++ assert_equal true, key.verify("SHA1", signature, data) ++ ++ # Too long data ++ assert_raise(OpenSSL::PKey::PKeyError) { ++ key.sign_raw("SHA1", "x" * (key.n.num_bytes + 1)) ++ } ++ ++ # With options ++ pssopts = { ++ "rsa_padding_mode" => "pss", ++ "rsa_pss_saltlen" => 20, ++ "rsa_mgf1_md" => "SHA256" ++ } ++ sig_pss = key.sign_raw("SHA1", hash, pssopts) ++ assert_equal true, key.verify("SHA1", sig_pss, data, pssopts) ++ assert_equal true, key.verify_raw("SHA1", sig_pss, hash, pssopts) ++ end ++ ++ def test_sign_verify_raw_legacy ++ key = Fixtures.pkey("rsa-1") ++ bits = key.n.num_bits ++ ++ # Need right size for raw mode ++ plain0 = "x" * (bits/8) ++ cipher = key.private_encrypt(plain0, OpenSSL::PKey::RSA::NO_PADDING) ++ plain1 = key.public_decrypt(cipher, OpenSSL::PKey::RSA::NO_PADDING) ++ assert_equal(plain0, plain1) ++ ++ # Need smaller size for pkcs1 mode ++ plain0 = "x" * (bits/8 - 11) ++ cipher1 = key.private_encrypt(plain0, OpenSSL::PKey::RSA::PKCS1_PADDING) ++ plain1 = key.public_decrypt(cipher1, OpenSSL::PKey::RSA::PKCS1_PADDING) ++ assert_equal(plain0, plain1) ++ ++ cipherdef = key.private_encrypt(plain0) # PKCS1_PADDING is default ++ plain1 = key.public_decrypt(cipherdef) ++ assert_equal(plain0, plain1) ++ assert_equal(cipher1, cipherdef) ++ ++ # Failure cases ++ assert_raise(ArgumentError){ key.private_encrypt() } ++ assert_raise(ArgumentError){ key.private_encrypt("hi", 1, nil) } ++ assert_raise(OpenSSL::PKey::RSAError){ key.private_encrypt(plain0, 666) } ++ end ++ ++ + def test_verify_empty_rsa + rsa = OpenSSL::PKey::RSA.new + assert_raise(OpenSSL::PKey::PKeyError, "[Bug #12783]") { +-- +2.32.0 + + +From 4330b1b9661fcab1172473f4fdd9986602c1e78c Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 18 May 2020 20:24:08 +0900 +Subject: [PATCH 4/6] pkey/rsa: port RSA#{private,public}_{encrypt,decrypt} to + the EVP API + +Implement these methods using the new OpenSSL::PKey::PKey#{encrypt,sign} +family. The definitions are now in lib/openssl/pkey.rb. + +Also, recommend using those generic methods in the documentation. +--- + ext/openssl/lib/openssl/pkey.rb | 106 ++++++++++++++++++++++++ + ext/openssl/ossl_pkey_rsa.c | 141 -------------------------------- + 2 files changed, 106 insertions(+), 141 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index 569559e1ce..dd8c7c0b09 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -243,5 +243,111 @@ def new(*args, &blk) # :nodoc: + end + end + end ++ ++ # :call-seq: ++ # rsa.private_encrypt(string) -> String ++ # rsa.private_encrypt(string, padding) -> String ++ # ++ # Encrypt +string+ with the private key. +padding+ defaults to ++ # PKCS1_PADDING. The encrypted string output can be decrypted using ++ # #public_decrypt. ++ # ++ # Deprecated in version 3.0. ++ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw, and ++ # PKey::PKey#verify_recover instead. ++ def private_encrypt(string, padding = PKCS1_PADDING) ++ n or raise OpenSSL::PKey::RSAError, "incomplete RSA" ++ private? or raise OpenSSL::PKey::RSAError, "private key needed." ++ begin ++ sign_raw(nil, string, { ++ "rsa_padding_mode" => translate_padding_mode(padding), ++ }) ++ rescue OpenSSL::PKey::PKeyError ++ raise OpenSSL::PKey::RSAError, $!.message ++ end ++ end ++ ++ # :call-seq: ++ # rsa.public_decrypt(string) -> String ++ # rsa.public_decrypt(string, padding) -> String ++ # ++ # Decrypt +string+, which has been encrypted with the private key, with the ++ # public key. +padding+ defaults to PKCS1_PADDING. ++ # ++ # Deprecated in version 3.0. ++ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw, and ++ # PKey::PKey#verify_recover instead. ++ def public_decrypt(string, padding = PKCS1_PADDING) ++ n or raise OpenSSL::PKey::RSAError, "incomplete RSA" ++ begin ++ verify_recover(nil, string, { ++ "rsa_padding_mode" => translate_padding_mode(padding), ++ }) ++ rescue OpenSSL::PKey::PKeyError ++ raise OpenSSL::PKey::RSAError, $!.message ++ end ++ end ++ ++ # :call-seq: ++ # rsa.public_encrypt(string) -> String ++ # rsa.public_encrypt(string, padding) -> String ++ # ++ # Encrypt +string+ with the public key. +padding+ defaults to ++ # PKCS1_PADDING. The encrypted string output can be decrypted using ++ # #private_decrypt. ++ # ++ # Deprecated in version 3.0. ++ # Consider using PKey::PKey#encrypt and PKey::PKey#decrypt instead. ++ def public_encrypt(data, padding = PKCS1_PADDING) ++ n or raise OpenSSL::PKey::RSAError, "incomplete RSA" ++ begin ++ encrypt(data, { ++ "rsa_padding_mode" => translate_padding_mode(padding), ++ }) ++ rescue OpenSSL::PKey::PKeyError ++ raise OpenSSL::PKey::RSAError, $!.message ++ end ++ end ++ ++ # :call-seq: ++ # rsa.private_decrypt(string) -> String ++ # rsa.private_decrypt(string, padding) -> String ++ # ++ # Decrypt +string+, which has been encrypted with the public key, with the ++ # private key. +padding+ defaults to PKCS1_PADDING. ++ # ++ # Deprecated in version 3.0. ++ # Consider using PKey::PKey#encrypt and PKey::PKey#decrypt instead. ++ def private_decrypt(data, padding = PKCS1_PADDING) ++ n or raise OpenSSL::PKey::RSAError, "incomplete RSA" ++ private? or raise OpenSSL::PKey::RSAError, "private key needed." ++ begin ++ decrypt(data, { ++ "rsa_padding_mode" => translate_padding_mode(padding), ++ }) ++ rescue OpenSSL::PKey::PKeyError ++ raise OpenSSL::PKey::RSAError, $!.message ++ end ++ end ++ ++ PKCS1_PADDING = 1 ++ SSLV23_PADDING = 2 ++ NO_PADDING = 3 ++ PKCS1_OAEP_PADDING = 4 ++ ++ private def translate_padding_mode(num) ++ case num ++ when PKCS1_PADDING ++ "pkcs1" ++ when SSLV23_PADDING ++ "sslv23" ++ when NO_PADDING ++ "none" ++ when PKCS1_OAEP_PADDING ++ "oaep" ++ else ++ raise OpenSSL::PKey::PKeyError, "unsupported padding mode" ++ end ++ end + end + end +diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c +index 1c5476cdcd..8ebd3ec559 100644 +--- a/ext/openssl/ossl_pkey_rsa.c ++++ b/ext/openssl/ossl_pkey_rsa.c +@@ -229,138 +229,6 @@ ossl_rsa_to_der(VALUE self) + return ossl_pkey_export_spki(self, 1); + } + +-/* +- * call-seq: +- * rsa.public_encrypt(string) => String +- * rsa.public_encrypt(string, padding) => String +- * +- * Encrypt _string_ with the public key. _padding_ defaults to PKCS1_PADDING. +- * The encrypted string output can be decrypted using #private_decrypt. +- */ +-static VALUE +-ossl_rsa_public_encrypt(int argc, VALUE *argv, VALUE self) +-{ +- RSA *rsa; +- const BIGNUM *rsa_n; +- int buf_len, pad; +- VALUE str, buffer, padding; +- +- GetRSA(self, rsa); +- RSA_get0_key(rsa, &rsa_n, NULL, NULL); +- if (!rsa_n) +- ossl_raise(eRSAError, "incomplete RSA"); +- rb_scan_args(argc, argv, "11", &buffer, &padding); +- pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); +- StringValue(buffer); +- str = rb_str_new(0, RSA_size(rsa)); +- buf_len = RSA_public_encrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), +- (unsigned char *)RSTRING_PTR(str), rsa, pad); +- if (buf_len < 0) ossl_raise(eRSAError, NULL); +- rb_str_set_len(str, buf_len); +- +- return str; +-} +- +-/* +- * call-seq: +- * rsa.public_decrypt(string) => String +- * rsa.public_decrypt(string, padding) => String +- * +- * Decrypt _string_, which has been encrypted with the private key, with the +- * public key. _padding_ defaults to PKCS1_PADDING. +- */ +-static VALUE +-ossl_rsa_public_decrypt(int argc, VALUE *argv, VALUE self) +-{ +- RSA *rsa; +- const BIGNUM *rsa_n; +- int buf_len, pad; +- VALUE str, buffer, padding; +- +- GetRSA(self, rsa); +- RSA_get0_key(rsa, &rsa_n, NULL, NULL); +- if (!rsa_n) +- ossl_raise(eRSAError, "incomplete RSA"); +- rb_scan_args(argc, argv, "11", &buffer, &padding); +- pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); +- StringValue(buffer); +- str = rb_str_new(0, RSA_size(rsa)); +- buf_len = RSA_public_decrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), +- (unsigned char *)RSTRING_PTR(str), rsa, pad); +- if (buf_len < 0) ossl_raise(eRSAError, NULL); +- rb_str_set_len(str, buf_len); +- +- return str; +-} +- +-/* +- * call-seq: +- * rsa.private_encrypt(string) => String +- * rsa.private_encrypt(string, padding) => String +- * +- * Encrypt _string_ with the private key. _padding_ defaults to PKCS1_PADDING. +- * The encrypted string output can be decrypted using #public_decrypt. +- */ +-static VALUE +-ossl_rsa_private_encrypt(int argc, VALUE *argv, VALUE self) +-{ +- RSA *rsa; +- const BIGNUM *rsa_n; +- int buf_len, pad; +- VALUE str, buffer, padding; +- +- GetRSA(self, rsa); +- RSA_get0_key(rsa, &rsa_n, NULL, NULL); +- if (!rsa_n) +- ossl_raise(eRSAError, "incomplete RSA"); +- if (!RSA_PRIVATE(self, rsa)) +- ossl_raise(eRSAError, "private key needed."); +- rb_scan_args(argc, argv, "11", &buffer, &padding); +- pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); +- StringValue(buffer); +- str = rb_str_new(0, RSA_size(rsa)); +- buf_len = RSA_private_encrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), +- (unsigned char *)RSTRING_PTR(str), rsa, pad); +- if (buf_len < 0) ossl_raise(eRSAError, NULL); +- rb_str_set_len(str, buf_len); +- +- return str; +-} +- +-/* +- * call-seq: +- * rsa.private_decrypt(string) => String +- * rsa.private_decrypt(string, padding) => String +- * +- * Decrypt _string_, which has been encrypted with the public key, with the +- * private key. _padding_ defaults to PKCS1_PADDING. +- */ +-static VALUE +-ossl_rsa_private_decrypt(int argc, VALUE *argv, VALUE self) +-{ +- RSA *rsa; +- const BIGNUM *rsa_n; +- int buf_len, pad; +- VALUE str, buffer, padding; +- +- GetRSA(self, rsa); +- RSA_get0_key(rsa, &rsa_n, NULL, NULL); +- if (!rsa_n) +- ossl_raise(eRSAError, "incomplete RSA"); +- if (!RSA_PRIVATE(self, rsa)) +- ossl_raise(eRSAError, "private key needed."); +- rb_scan_args(argc, argv, "11", &buffer, &padding); +- pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); +- StringValue(buffer); +- str = rb_str_new(0, RSA_size(rsa)); +- buf_len = RSA_private_decrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), +- (unsigned char *)RSTRING_PTR(str), rsa, pad); +- if (buf_len < 0) ossl_raise(eRSAError, NULL); +- rb_str_set_len(str, buf_len); +- +- return str; +-} +- + /* + * call-seq: + * rsa.sign_pss(digest, data, salt_length:, mgf1_hash:) -> String +@@ -657,10 +525,6 @@ Init_ossl_rsa(void) + rb_define_alias(cRSA, "to_pem", "export"); + rb_define_alias(cRSA, "to_s", "export"); + rb_define_method(cRSA, "to_der", ossl_rsa_to_der, 0); +- rb_define_method(cRSA, "public_encrypt", ossl_rsa_public_encrypt, -1); +- rb_define_method(cRSA, "public_decrypt", ossl_rsa_public_decrypt, -1); +- rb_define_method(cRSA, "private_encrypt", ossl_rsa_private_encrypt, -1); +- rb_define_method(cRSA, "private_decrypt", ossl_rsa_private_decrypt, -1); + rb_define_method(cRSA, "sign_pss", ossl_rsa_sign_pss, -1); + rb_define_method(cRSA, "verify_pss", ossl_rsa_verify_pss, -1); + +@@ -678,11 +542,6 @@ Init_ossl_rsa(void) + + rb_define_method(cRSA, "params", ossl_rsa_get_params, 0); + +- DefRSAConst(PKCS1_PADDING); +- DefRSAConst(SSLV23_PADDING); +- DefRSAConst(NO_PADDING); +- DefRSAConst(PKCS1_OAEP_PADDING); +- + /* + * TODO: Test it + rb_define_method(cRSA, "blinding_on!", ossl_rsa_blinding_on, 0); +-- +2.32.0 + + +From d45a31cf70f5a55d7f6cf5082efc4dbb68d1169d Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 10 Jul 2020 13:43:20 +0900 +Subject: [PATCH 5/6] pkey/ec: refactor EC#dsa_{sign,verify}_asn1 with + PKey#{sign,verify}_raw + +With the newly added OpenSSL::PKey::PKey#{sign,verify}_raw, +OpenSSL::PKey::EC's low level signing operation methods can be +implemented in Ruby. The definitions are now in lib/openssl/pkey.rb. +--- + ext/openssl/lib/openssl/pkey.rb | 22 +++++++++++++ + ext/openssl/ossl_pkey_ec.c | 55 --------------------------------- + 2 files changed, 22 insertions(+), 55 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index dd8c7c0b09..e587109694 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -164,6 +164,28 @@ def new(*args, &blk) # :nodoc: + class EC + include OpenSSL::Marshal + ++ # :call-seq: ++ # key.dsa_sign_asn1(data) -> String ++ # ++ # Deprecated in version 3.0. ++ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. ++ def dsa_sign_asn1(data) ++ sign_raw(nil, data) ++ rescue OpenSSL::PKey::PKeyError ++ raise OpenSSL::PKey::ECError, $!.message ++ end ++ ++ # :call-seq: ++ # key.dsa_verify_asn1(data, sig) -> true | false ++ # ++ # Deprecated in version 3.0. ++ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. ++ def dsa_verify_asn1(data, sig) ++ verify_raw(nil, sig, data) ++ rescue OpenSSL::PKey::PKeyError ++ raise OpenSSL::PKey::ECError, $!.message ++ end ++ + # :call-seq: + # ec.dh_compute_key(pubkey) -> string + # +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index 829529d4b9..f52e67079d 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -476,57 +476,6 @@ static VALUE ossl_ec_key_check_key(VALUE self) + return Qtrue; + } + +-/* +- * call-seq: +- * key.dsa_sign_asn1(data) => String +- * +- * See the OpenSSL documentation for ECDSA_sign() +- */ +-static VALUE ossl_ec_key_dsa_sign_asn1(VALUE self, VALUE data) +-{ +- EC_KEY *ec; +- unsigned int buf_len; +- VALUE str; +- +- GetEC(self, ec); +- StringValue(data); +- +- if (EC_KEY_get0_private_key(ec) == NULL) +- ossl_raise(eECError, "Private EC key needed!"); +- +- str = rb_str_new(0, ECDSA_size(ec)); +- if (ECDSA_sign(0, (unsigned char *) RSTRING_PTR(data), RSTRING_LENINT(data), (unsigned char *) RSTRING_PTR(str), &buf_len, ec) != 1) +- ossl_raise(eECError, "ECDSA_sign"); +- rb_str_set_len(str, buf_len); +- +- return str; +-} +- +-/* +- * call-seq: +- * key.dsa_verify_asn1(data, sig) => true or false +- * +- * See the OpenSSL documentation for ECDSA_verify() +- */ +-static VALUE ossl_ec_key_dsa_verify_asn1(VALUE self, VALUE data, VALUE sig) +-{ +- EC_KEY *ec; +- +- GetEC(self, ec); +- StringValue(data); +- StringValue(sig); +- +- switch (ECDSA_verify(0, (unsigned char *) RSTRING_PTR(data), RSTRING_LENINT(data), (unsigned char *) RSTRING_PTR(sig), (int)RSTRING_LEN(sig), ec)) { +- case 1: return Qtrue; +- case 0: return Qfalse; +- default: break; +- } +- +- ossl_raise(eECError, "ECDSA_verify"); +- +- UNREACHABLE; +-} +- + /* + * OpenSSL::PKey::EC::Group + */ +@@ -1615,10 +1564,6 @@ void Init_ossl_ec(void) + rb_define_alias(cEC, "generate_key", "generate_key!"); + rb_define_method(cEC, "check_key", ossl_ec_key_check_key, 0); + +- rb_define_method(cEC, "dsa_sign_asn1", ossl_ec_key_dsa_sign_asn1, 1); +- rb_define_method(cEC, "dsa_verify_asn1", ossl_ec_key_dsa_verify_asn1, 2); +-/* do_sign/do_verify */ +- + rb_define_method(cEC, "export", ossl_ec_key_export, -1); + rb_define_alias(cEC, "to_pem", "export"); + rb_define_method(cEC, "to_der", ossl_ec_key_to_der, 0); +-- +2.32.0 + + +From 2494043e302c920e90e06cce443c5cd428e183f7 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 10 Jul 2020 13:51:18 +0900 +Subject: [PATCH 6/6] pkey/dsa: refactor DSA#sys{sign,verify} with + PKey#{sign,verify}_raw + +With the newly added OpenSSL::PKey::PKey#{sign,verify}_raw, +OpenSSL::PKey::DSA's low level signing operation methods can be +implemented in Ruby. The definitions are now in lib/openssl/pkey.rb. +--- + ext/openssl/lib/openssl/pkey.rb | 54 ++++++++++++++++++++ + ext/openssl/ossl_pkey_dsa.c | 88 --------------------------------- + 2 files changed, 54 insertions(+), 88 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index e587109694..f6bf5892b0 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -158,6 +158,60 @@ def new(*args, &blk) # :nodoc: + end + end + end ++ ++ # :call-seq: ++ # dsa.syssign(string) -> string ++ # ++ # Computes and returns the \DSA signature of +string+, where +string+ is ++ # expected to be an already-computed message digest of the original input ++ # data. The signature is issued using the private key of this DSA instance. ++ # ++ # Deprecated in version 3.0. ++ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. ++ # ++ # +string+:: ++ # A message digest of the original input data to be signed. ++ # ++ # Example: ++ # dsa = OpenSSL::PKey::DSA.new(2048) ++ # doc = "Sign me" ++ # digest = OpenSSL::Digest.digest('SHA1', doc) ++ # ++ # # With legacy #syssign and #sysverify: ++ # sig = dsa.syssign(digest) ++ # p dsa.sysverify(digest, sig) #=> true ++ # ++ # # With #sign_raw and #verify_raw: ++ # sig = dsa.sign_raw(nil, digest) ++ # p dsa.verify_raw(nil, sig, digest) #=> true ++ def syssign(string) ++ q or raise OpenSSL::PKey::DSAError, "incomplete DSA" ++ private? or raise OpenSSL::PKey::DSAError, "Private DSA key needed!" ++ begin ++ sign_raw(nil, string) ++ rescue OpenSSL::PKey::PKeyError ++ raise OpenSSL::PKey::DSAError, $!.message ++ end ++ end ++ ++ # :call-seq: ++ # dsa.sysverify(digest, sig) -> true | false ++ # ++ # Verifies whether the signature is valid given the message digest input. ++ # It does so by validating +sig+ using the public key of this DSA instance. ++ # ++ # Deprecated in version 3.0. ++ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. ++ # ++ # +digest+:: ++ # A message digest of the original input data to be signed. ++ # +sig+:: ++ # A \DSA signature value. ++ def sysverify(digest, sig) ++ verify_raw(nil, sig, digest) ++ rescue OpenSSL::PKey::PKeyError ++ raise OpenSSL::PKey::DSAError, $!.message ++ end + end + + if defined?(EC) +diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c +index ab9ac781e8..7af00eebec 100644 +--- a/ext/openssl/ossl_pkey_dsa.c ++++ b/ext/openssl/ossl_pkey_dsa.c +@@ -264,92 +264,6 @@ ossl_dsa_get_params(VALUE self) + return hash; + } + +-/* +- * call-seq: +- * dsa.syssign(string) -> aString +- * +- * Computes and returns the DSA signature of _string_, where _string_ is +- * expected to be an already-computed message digest of the original input +- * data. The signature is issued using the private key of this DSA instance. +- * +- * === Parameters +- * * _string_ is a message digest of the original input data to be signed. +- * +- * === Example +- * dsa = OpenSSL::PKey::DSA.new(2048) +- * doc = "Sign me" +- * digest = OpenSSL::Digest.digest('SHA1', doc) +- * sig = dsa.syssign(digest) +- * +- * +- */ +-static VALUE +-ossl_dsa_sign(VALUE self, VALUE data) +-{ +- DSA *dsa; +- const BIGNUM *dsa_q; +- unsigned int buf_len; +- VALUE str; +- +- GetDSA(self, dsa); +- DSA_get0_pqg(dsa, NULL, &dsa_q, NULL); +- if (!dsa_q) +- ossl_raise(eDSAError, "incomplete DSA"); +- if (!DSA_PRIVATE(self, dsa)) +- ossl_raise(eDSAError, "Private DSA key needed!"); +- StringValue(data); +- str = rb_str_new(0, DSA_size(dsa)); +- if (!DSA_sign(0, (unsigned char *)RSTRING_PTR(data), RSTRING_LENINT(data), +- (unsigned char *)RSTRING_PTR(str), +- &buf_len, dsa)) { /* type is ignored (0) */ +- ossl_raise(eDSAError, NULL); +- } +- rb_str_set_len(str, buf_len); +- +- return str; +-} +- +-/* +- * call-seq: +- * dsa.sysverify(digest, sig) -> true | false +- * +- * Verifies whether the signature is valid given the message digest input. It +- * does so by validating _sig_ using the public key of this DSA instance. +- * +- * === Parameters +- * * _digest_ is a message digest of the original input data to be signed +- * * _sig_ is a DSA signature value +- * +- * === Example +- * dsa = OpenSSL::PKey::DSA.new(2048) +- * doc = "Sign me" +- * digest = OpenSSL::Digest.digest('SHA1', doc) +- * sig = dsa.syssign(digest) +- * puts dsa.sysverify(digest, sig) # => true +- * +- */ +-static VALUE +-ossl_dsa_verify(VALUE self, VALUE digest, VALUE sig) +-{ +- DSA *dsa; +- int ret; +- +- GetDSA(self, dsa); +- StringValue(digest); +- StringValue(sig); +- /* type is ignored (0) */ +- ret = DSA_verify(0, (unsigned char *)RSTRING_PTR(digest), RSTRING_LENINT(digest), +- (unsigned char *)RSTRING_PTR(sig), RSTRING_LENINT(sig), dsa); +- if (ret < 0) { +- ossl_raise(eDSAError, NULL); +- } +- else if (ret == 1) { +- return Qtrue; +- } +- +- return Qfalse; +-} +- + /* + * Document-method: OpenSSL::PKey::DSA#set_pqg + * call-seq: +@@ -404,8 +318,6 @@ Init_ossl_dsa(void) + rb_define_alias(cDSA, "to_pem", "export"); + rb_define_alias(cDSA, "to_s", "export"); + rb_define_method(cDSA, "to_der", ossl_dsa_to_der, 0); +- rb_define_method(cDSA, "syssign", ossl_dsa_sign, 1); +- rb_define_method(cDSA, "sysverify", ossl_dsa_verify, 2); + + DEF_OSSL_PKEY_BN(cDSA, dsa, p); + DEF_OSSL_PKEY_BN(cDSA, dsa, q); +-- +2.32.0 + diff --git a/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch b/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch new file mode 100644 index 0000000..3a0e03b --- /dev/null +++ b/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch @@ -0,0 +1,142 @@ +From 8f948ed68a4ed6c05ff66d822711e3b70ae4bb3f Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 27 Sep 2021 13:32:03 +0900 +Subject: [PATCH 1/3] ext/openssl/ossl.h: add helper macros for + OpenSSL/LibreSSL versions + +Add following convenient macros: + + - OSSL_IS_LIBRESSL + - OSSL_OPENSSL_PREREQ(maj, min, pat) + - OSSL_LIBRESSL_PREREQ(maj, min, pat) +--- + ext/openssl/ossl.h | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h +index c20f506bda..a0cef29d74 100644 +--- a/ext/openssl/ossl.h ++++ b/ext/openssl/ossl.h +@@ -43,6 +43,18 @@ + #include + #include + ++#ifndef LIBRESSL_VERSION_NUMBER ++# define OSSL_IS_LIBRESSL 0 ++# define OSSL_OPENSSL_PREREQ(maj, min, pat) \ ++ (OPENSSL_VERSION_NUMBER >= (maj << 28) | (min << 20) | (pat << 12)) ++# define OSSL_LIBRESSL_PREREQ(maj, min, pat) 0 ++#else ++# define OSSL_IS_LIBRESSL 1 ++# define OSSL_OPENSSL_PREREQ(maj, min, pat) 0 ++# define OSSL_LIBRESSL_PREREQ(maj, min, pat) \ ++ (LIBRESSL_VERSION_NUMBER >= (maj << 28) | (min << 20) | (pat << 12)) ++#endif ++ + /* + * Common Module + */ +-- +2.32.0 + + +From bbf235091e49807ece8f3a3df95bbfcc9d3ab43d Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sat, 22 Feb 2020 05:37:01 +0900 +Subject: [PATCH 2/3] ts: use TS_VERIFY_CTX_set_certs instead of + TS_VERIFY_CTS_set_certs + +OpenSSL 3.0 fixed the typo in the function name and replaced the +current 'CTS' version with a macro. +--- + ext/openssl/extconf.rb | 5 ++++- + ext/openssl/openssl_missing.h | 5 +++++ + ext/openssl/ossl_ts.c | 2 +- + 3 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb +index 17d93443fc..09cae05b72 100644 +--- a/ext/openssl/extconf.rb ++++ b/ext/openssl/extconf.rb +@@ -166,7 +166,7 @@ def find_openssl_library + have_func("TS_STATUS_INFO_get0_status") + have_func("TS_STATUS_INFO_get0_text") + have_func("TS_STATUS_INFO_get0_failure_info") +-have_func("TS_VERIFY_CTS_set_certs") ++have_func("TS_VERIFY_CTS_set_certs(NULL, NULL)", "openssl/ts.h") + have_func("TS_VERIFY_CTX_set_store") + have_func("TS_VERIFY_CTX_add_flags") + have_func("TS_RESP_CTX_set_time_cb") +@@ -175,6 +175,9 @@ def find_openssl_library + + # added in 1.1.1 + have_func("EVP_PKEY_check") ++ ++# added in 3.0.0 ++have_func("TS_VERIFY_CTX_set_certs(NULL, NULL)", "openssl/ts.h") + + Logging::message "=== Checking done. ===\n" + +diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h +index e575415f49..fe486bcfcf 100644 +--- a/ext/openssl/openssl_missing.h ++++ b/ext/openssl/openssl_missing.h +@@ -242,4 +242,9 @@ IMPL_PKEY_GETTER(EC_KEY, ec) + } while (0) + #endif + ++/* added in 3.0.0 */ ++#if !defined(HAVE_TS_VERIFY_CTX_SET_CERTS) ++# define TS_VERIFY_CTX_set_certs(ctx, crts) TS_VERIFY_CTS_set_certs(ctx, crts) ++#endif ++ + #endif /* _OSSL_OPENSSL_MISSING_H_ */ +diff --git a/ext/openssl/ossl_ts.c b/ext/openssl/ossl_ts.c +index 692c0d620f..f1da7c1947 100644 +--- a/ext/openssl/ossl_ts.c ++++ b/ext/openssl/ossl_ts.c +@@ -816,7 +816,7 @@ ossl_ts_resp_verify(int argc, VALUE *argv, VALUE self) + X509_up_ref(cert); + } + +- TS_VERIFY_CTS_set_certs(ctx, x509inter); ++ TS_VERIFY_CTX_set_certs(ctx, x509inter); + TS_VERIFY_CTX_add_flags(ctx, TS_VFY_SIGNATURE); + TS_VERIFY_CTX_set_store(ctx, x509st); + +-- +2.32.0 + + +From 5fba3bc1df93ab6abc3ea53be3393480f36ea259 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 19 Mar 2021 19:18:25 +0900 +Subject: [PATCH 3/3] ssl: use SSL_get_rbio() to check if SSL is started or not + +Use SSL_get_rbio() instead of SSL_get_fd(). SSL_get_fd() internally +calls SSL_get_rbio() and it's enough for our purpose. + +In OpenSSL 3.0, SSL_get_fd() leaves an entry in the OpenSSL error queue +if BIO has not been set up yet, and we would have to clean it up. +--- + ext/openssl/ossl_ssl.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c +index 4b7efa39f5..ec430bfb0c 100644 +--- a/ext/openssl/ossl_ssl.c ++++ b/ext/openssl/ossl_ssl.c +@@ -1522,8 +1522,8 @@ ossl_sslctx_flush_sessions(int argc, VALUE *argv, VALUE self) + static inline int + ssl_started(SSL *ssl) + { +- /* the FD is set in ossl_ssl_setup(), called by #connect or #accept */ +- return SSL_get_fd(ssl) >= 0; ++ /* BIO is created through ossl_ssl_setup(), called by #connect or #accept */ ++ return SSL_get_rbio(ssl) != NULL; + } + + static void +-- +2.32.0 + diff --git a/ruby-3.1.0-Properly-exclude-test-cases.patch b/ruby-3.1.0-Properly-exclude-test-cases.patch new file mode 100644 index 0000000..3b88433 --- /dev/null +++ b/ruby-3.1.0-Properly-exclude-test-cases.patch @@ -0,0 +1,93 @@ +From 96684439e96aa92e10376b5be45f006772028295 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 21 Oct 2021 13:02:38 +0200 +Subject: [PATCH] Properly exclude test cases. + +Lets consider the following scenario: + +~~~ +irb(#):001:0> p suite +OpenSSL::TestEC +=> OpenSSL::TestEC + +irb(#):002:0> p all_test_methods +["test_ECPrivateKey", "test_ECPrivateKey_encrypted", "test_PUBKEY", "test_check_key", "test_derive_key", "test_dh_compute_key", "test_dsa_sign_asn1_FIPS186_3", "test_ec_group", "test_ec_key", "test_ec_point", "test_ec_point_add", "test_ec_point_mul", "test_generate", "test_marshal", "test_sign_verify", "test_sign_verify_raw"] +=> +["test_ECPrivateKey", + "test_ECPrivateKey_encrypted", + "test_PUBKEY", + "test_check_key", + "test_derive_key", + "test_dh_compute_key", + "test_dsa_sign_asn1_FIPS186_3", + "test_ec_group", + "test_ec_key", + "test_ec_point", + "test_ec_point_add", + "test_ec_point_mul", + "test_generate", + "test_marshal", + "test_sign_verify", + "test_sign_verify_raw"] + +irb(#):003:0> p filter +/\A(?=.*)(?!.*(?-mix:(?-mix:memory_leak)|(?-mix:OpenSSL::TestEC.test_check_key)))/ +=> /\A(?=.*)(?!.*(?-mix:(?-mix:memory_leak)|(?-mix:OpenSSL::TestEC.test_check_key)))/ + +irb(#):004:0> method = "test_check_key" +=> "test_check_key" +~~~ + +The intention here is to exclude the `test_check_key` test case. +Unfortunately this does not work as expected, because the negative filter +is never checked: + +~~~ + +irb(#):005:0> filter === method +=> true + +irb(#):006:0> filter === "#{suite}##{method}" +=> false + +irb(#):007:0> filter === method || filter === "#{suite}##{method}" +=> true +~~~ + +Therefore always filter against the fully qualified method name +`#{suite}##{method}`, which should provide the expected result. + +However, if plain string filter is used, keep checking also only the +method name. + +This resolves [Bug #16936]. +--- + tool/lib/minitest/unit.rb | 12 +++++++++--- + 1 file changed, 9 insertion(+), 3 deletion(-) + +diff --git a/tool/lib/minitest/unit.rb b/tool/lib/minitest/unit.rb +index c58a609bfa..d5af6cb906 100644 +--- a/tool/lib/minitest/unit.rb ++++ b/tool/lib/minitest/unit.rb +@@ -956,9 +956,15 @@ def _run_suite suite, type + + all_test_methods = suite.send "#{type}_methods" + +- filtered_test_methods = all_test_methods.find_all { |m| +- filter === m || filter === "#{suite}##{m}" +- } ++ filtered_test_methods = if Regexp === filter ++ all_test_methods.find_all { |m| ++ filter === "#{suite}##{m}" ++ } ++ else ++ all_test_methods.find_all {|m| ++ filter === m || filter === "#{suite}##{m}" ++ } ++ end + + leakchecker = LeakChecker.new + +-- +2.32.0 + diff --git a/ruby-3.1.0-Refactor-PEM-DER-serialization-code.patch b/ruby-3.1.0-Refactor-PEM-DER-serialization-code.patch new file mode 100644 index 0000000..d1de216 --- /dev/null +++ b/ruby-3.1.0-Refactor-PEM-DER-serialization-code.patch @@ -0,0 +1,1450 @@ +From 8b8e1d7f9b6b5a335864bbd0716df2af1ec41d91 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Thu, 16 Mar 2017 16:06:53 +0900 +Subject: [PATCH 1/5] pkey: simplify ossl_pkey_new() + +ossl_{rsa,dsa,dh,ec}_new() called from this function are not used +anywhere else. Inline them into pkey_new0() and reduce code +duplication. +--- + ext/openssl/ossl_pkey.c | 22 +++++++++------------- + ext/openssl/ossl_pkey.h | 3 --- + ext/openssl/ossl_pkey_dh.c | 21 --------------------- + ext/openssl/ossl_pkey_dsa.c | 21 --------------------- + ext/openssl/ossl_pkey_ec.c | 20 -------------------- + ext/openssl/ossl_pkey_rsa.c | 22 ---------------------- + 6 files changed, 9 insertions(+), 100 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 23204087ac..c6dbf57272 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -95,7 +95,7 @@ const rb_data_type_t ossl_evp_pkey_type = { + static VALUE + pkey_new0(EVP_PKEY *pkey) + { +- VALUE obj; ++ VALUE klass, obj; + int type; + + if (!pkey || (type = EVP_PKEY_base_id(pkey)) == EVP_PKEY_NONE) +@@ -103,26 +103,22 @@ pkey_new0(EVP_PKEY *pkey) + + switch (type) { + #if !defined(OPENSSL_NO_RSA) +- case EVP_PKEY_RSA: +- return ossl_rsa_new(pkey); ++ case EVP_PKEY_RSA: klass = cRSA; break; + #endif + #if !defined(OPENSSL_NO_DSA) +- case EVP_PKEY_DSA: +- return ossl_dsa_new(pkey); ++ case EVP_PKEY_DSA: klass = cDSA; break; + #endif + #if !defined(OPENSSL_NO_DH) +- case EVP_PKEY_DH: +- return ossl_dh_new(pkey); ++ case EVP_PKEY_DH: klass = cDH; break; + #endif + #if !defined(OPENSSL_NO_EC) +- case EVP_PKEY_EC: +- return ossl_ec_new(pkey); ++ case EVP_PKEY_EC: klass = cEC; break; + #endif +- default: +- obj = NewPKey(cPKey); +- SetPKey(obj, pkey); +- return obj; ++ default: klass = cPKey; break; + } ++ obj = NewPKey(klass); ++ SetPKey(obj, pkey); ++ return obj; + } + + VALUE +diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h +index 0db59305f7..e363a261c2 100644 +--- a/ext/openssl/ossl_pkey.h ++++ b/ext/openssl/ossl_pkey.h +@@ -56,7 +56,6 @@ void Init_ossl_pkey(void); + extern VALUE cRSA; + extern VALUE eRSAError; + +-VALUE ossl_rsa_new(EVP_PKEY *); + void Init_ossl_rsa(void); + + /* +@@ -65,7 +64,6 @@ void Init_ossl_rsa(void); + extern VALUE cDSA; + extern VALUE eDSAError; + +-VALUE ossl_dsa_new(EVP_PKEY *); + void Init_ossl_dsa(void); + + /* +@@ -74,7 +72,6 @@ void Init_ossl_dsa(void); + extern VALUE cDH; + extern VALUE eDHError; + +-VALUE ossl_dh_new(EVP_PKEY *); + void Init_ossl_dh(void); + + /* +diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c +index bf4e3f9322..dff69cfc33 100644 +--- a/ext/openssl/ossl_pkey_dh.c ++++ b/ext/openssl/ossl_pkey_dh.c +@@ -54,27 +54,6 @@ dh_instance(VALUE klass, DH *dh) + return obj; + } + +-VALUE +-ossl_dh_new(EVP_PKEY *pkey) +-{ +- VALUE obj; +- +- if (!pkey) { +- obj = dh_instance(cDH, DH_new()); +- } else { +- obj = NewPKey(cDH); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_DH) { +- ossl_raise(rb_eTypeError, "Not a DH key!"); +- } +- SetPKey(obj, pkey); +- } +- if (obj == Qfalse) { +- ossl_raise(eDHError, NULL); +- } +- +- return obj; +-} +- + /* + * Private + */ +diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c +index 431c20e05c..e9be9ac482 100644 +--- a/ext/openssl/ossl_pkey_dsa.c ++++ b/ext/openssl/ossl_pkey_dsa.c +@@ -68,27 +68,6 @@ dsa_instance(VALUE klass, DSA *dsa) + return obj; + } + +-VALUE +-ossl_dsa_new(EVP_PKEY *pkey) +-{ +- VALUE obj; +- +- if (!pkey) { +- obj = dsa_instance(cDSA, DSA_new()); +- } else { +- obj = NewPKey(cDSA); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_DSA) { +- ossl_raise(rb_eTypeError, "Not a DSA key!"); +- } +- SetPKey(obj, pkey); +- } +- if (obj == Qfalse) { +- ossl_raise(eDSAError, NULL); +- } +- +- return obj; +-} +- + /* + * Private + */ +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index fc2bc6c815..eabf495f19 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -84,26 +84,6 @@ static VALUE ec_instance(VALUE klass, EC_KEY *ec) + return obj; + } + +-VALUE ossl_ec_new(EVP_PKEY *pkey) +-{ +- VALUE obj; +- +- if (!pkey) { +- obj = ec_instance(cEC, EC_KEY_new()); +- } else { +- obj = NewPKey(cEC); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_EC) { +- ossl_raise(rb_eTypeError, "Not a EC key!"); +- } +- SetPKey(obj, pkey); +- } +- if (obj == Qfalse) { +- ossl_raise(eECError, NULL); +- } +- +- return obj; +-} +- + /* + * Creates a new EC_KEY on the EC group obj. arg can be an EC::Group or a String + * representing an OID. +diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c +index 761866c66a..c1ae44fe40 100644 +--- a/ext/openssl/ossl_pkey_rsa.c ++++ b/ext/openssl/ossl_pkey_rsa.c +@@ -69,28 +69,6 @@ rsa_instance(VALUE klass, RSA *rsa) + return obj; + } + +-VALUE +-ossl_rsa_new(EVP_PKEY *pkey) +-{ +- VALUE obj; +- +- if (!pkey) { +- obj = rsa_instance(cRSA, RSA_new()); +- } +- else { +- obj = NewPKey(cRSA); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_RSA) { +- ossl_raise(rb_eTypeError, "Not a RSA key!"); +- } +- SetPKey(obj, pkey); +- } +- if (obj == Qfalse) { +- ossl_raise(eRSAError, NULL); +- } +- +- return obj; +-} +- + /* + * Private + */ +-- +2.32.0 + + +From 2b0d259ef7aae707922996d305675a68dad27abd Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Thu, 16 Mar 2017 16:09:35 +0900 +Subject: [PATCH 2/5] pkey: inline {rsa,dsa,dh,ec}_instance() + +Merge the code into the callers so that the wrapping Ruby object is +allocated before the raw key object is allocated. This prevents possible +memory leak on Ruby object allocation failure, and also reduces the +lines of code. +--- + ext/openssl/ossl_pkey_dh.c | 63 ++++++++++++---------------------- + ext/openssl/ossl_pkey_dsa.c | 68 ++++++++++++++----------------------- + ext/openssl/ossl_pkey_ec.c | 34 ++++--------------- + ext/openssl/ossl_pkey_rsa.c | 67 +++++++++++++----------------------- + 4 files changed, 76 insertions(+), 156 deletions(-) + +diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c +index dff69cfc33..bc50e5566b 100644 +--- a/ext/openssl/ossl_pkey_dh.c ++++ b/ext/openssl/ossl_pkey_dh.c +@@ -29,31 +29,6 @@ + VALUE cDH; + VALUE eDHError; + +-/* +- * Public +- */ +-static VALUE +-dh_instance(VALUE klass, DH *dh) +-{ +- EVP_PKEY *pkey; +- VALUE obj; +- +- if (!dh) { +- return Qfalse; +- } +- obj = NewPKey(klass); +- if (!(pkey = EVP_PKEY_new())) { +- return Qfalse; +- } +- if (!EVP_PKEY_assign_DH(pkey, dh)) { +- EVP_PKEY_free(pkey); +- return Qfalse; +- } +- SetPKey(obj, pkey); +- +- return obj; +-} +- + /* + * Private + */ +@@ -84,7 +59,7 @@ dh_generate(int size, int gen) + if (!dh || !cb) { + DH_free(dh); + BN_GENCB_free(cb); +- return NULL; ++ ossl_raise(eDHError, "malloc failure"); + } + + if (rb_block_given_p()) +@@ -110,12 +85,12 @@ dh_generate(int size, int gen) + ossl_clear_error(); + rb_jump_tag(cb_arg.state); + } +- return NULL; ++ ossl_raise(eDHError, "DH_generate_parameters_ex"); + } + + if (!DH_generate_key(dh)) { + DH_free(dh); +- return NULL; ++ ossl_raise(eDHError, "DH_generate_key"); + } + + return dh; +@@ -136,6 +111,7 @@ dh_generate(int size, int gen) + static VALUE + ossl_dh_s_generate(int argc, VALUE *argv, VALUE klass) + { ++ EVP_PKEY *pkey; + DH *dh ; + int g = 2; + VALUE size, gen, obj; +@@ -143,13 +119,14 @@ ossl_dh_s_generate(int argc, VALUE *argv, VALUE klass) + if (rb_scan_args(argc, argv, "11", &size, &gen) == 2) { + g = NUM2INT(gen); + } ++ obj = rb_obj_alloc(klass); ++ GetPKey(obj, pkey); ++ + dh = dh_generate(NUM2INT(size), g); +- obj = dh_instance(klass, dh); +- if (obj == Qfalse) { +- DH_free(dh); +- ossl_raise(eDHError, NULL); ++ if (!EVP_PKEY_assign_DH(pkey, dh)) { ++ DH_free(dh); ++ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); + } +- + return obj; + } + +@@ -195,9 +172,7 @@ ossl_dh_initialize(int argc, VALUE *argv, VALUE self) + if (!NIL_P(gen)) { + g = NUM2INT(gen); + } +- if (!(dh = dh_generate(NUM2INT(arg), g))) { +- ossl_raise(eDHError, NULL); +- } ++ dh = dh_generate(NUM2INT(arg), g); + } + else { + arg = ossl_to_der_if_possible(arg); +@@ -434,17 +409,21 @@ ossl_dh_to_text(VALUE self) + static VALUE + ossl_dh_to_public_key(VALUE self) + { ++ EVP_PKEY *pkey; + DH *orig_dh, *dh; + VALUE obj; + ++ obj = rb_obj_alloc(rb_obj_class(self)); ++ GetPKey(obj, pkey); ++ + GetDH(self, orig_dh); +- dh = DHparams_dup(orig_dh); /* err check perfomed by dh_instance */ +- obj = dh_instance(rb_obj_class(self), dh); +- if (obj == Qfalse) { +- DH_free(dh); +- ossl_raise(eDHError, NULL); ++ dh = DHparams_dup(orig_dh); ++ if (!dh) ++ ossl_raise(eDHError, "DHparams_dup"); ++ if (!EVP_PKEY_assign_DH(pkey, dh)) { ++ DH_free(dh); ++ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); + } +- + return obj; + } + +diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c +index e9be9ac482..c907f31c19 100644 +--- a/ext/openssl/ossl_pkey_dsa.c ++++ b/ext/openssl/ossl_pkey_dsa.c +@@ -43,31 +43,6 @@ DSA_PRIVATE(VALUE obj, DSA *dsa) + VALUE cDSA; + VALUE eDSAError; + +-/* +- * Public +- */ +-static VALUE +-dsa_instance(VALUE klass, DSA *dsa) +-{ +- EVP_PKEY *pkey; +- VALUE obj; +- +- if (!dsa) { +- return Qfalse; +- } +- obj = NewPKey(klass); +- if (!(pkey = EVP_PKEY_new())) { +- return Qfalse; +- } +- if (!EVP_PKEY_assign_DSA(pkey, dsa)) { +- EVP_PKEY_free(pkey); +- return Qfalse; +- } +- SetPKey(obj, pkey); +- +- return obj; +-} +- + /* + * Private + */ +@@ -100,9 +75,9 @@ dsa_generate(int size) + unsigned long h; + + if (!dsa || !cb) { +- DSA_free(dsa); +- BN_GENCB_free(cb); +- return NULL; ++ DSA_free(dsa); ++ BN_GENCB_free(cb); ++ ossl_raise(eDSAError, "malloc failure"); + } + + if (rb_block_given_p()) +@@ -132,12 +107,12 @@ dsa_generate(int size) + ossl_clear_error(); + rb_jump_tag(cb_arg.state); + } +- return NULL; ++ ossl_raise(eDSAError, "DSA_generate_parameters_ex"); + } + + if (!DSA_generate_key(dsa)) { +- DSA_free(dsa); +- return NULL; ++ DSA_free(dsa); ++ ossl_raise(eDSAError, "DSA_generate_key"); + } + + return dsa; +@@ -157,14 +132,18 @@ dsa_generate(int size) + static VALUE + ossl_dsa_s_generate(VALUE klass, VALUE size) + { +- DSA *dsa = dsa_generate(NUM2INT(size)); /* err handled by dsa_instance */ +- VALUE obj = dsa_instance(klass, dsa); ++ EVP_PKEY *pkey; ++ DSA *dsa; ++ VALUE obj; + +- if (obj == Qfalse) { +- DSA_free(dsa); +- ossl_raise(eDSAError, NULL); +- } ++ obj = rb_obj_alloc(klass); ++ GetPKey(obj, pkey); + ++ dsa = dsa_generate(NUM2INT(size)); ++ if (!EVP_PKEY_assign_DSA(pkey, dsa)) { ++ DSA_free(dsa); ++ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); ++ } + return obj; + } + +@@ -460,20 +439,23 @@ ossl_dsa_to_text(VALUE self) + static VALUE + ossl_dsa_to_public_key(VALUE self) + { +- EVP_PKEY *pkey; ++ EVP_PKEY *pkey, *pkey_new; + DSA *dsa; + VALUE obj; + + GetPKeyDSA(self, pkey); +- /* err check performed by dsa_instance */ ++ obj = rb_obj_alloc(rb_obj_class(self)); ++ GetPKey(obj, pkey_new); ++ + #define DSAPublicKey_dup(dsa) (DSA *)ASN1_dup( \ + (i2d_of_void *)i2d_DSAPublicKey, (d2i_of_void *)d2i_DSAPublicKey, (char *)(dsa)) + dsa = DSAPublicKey_dup(EVP_PKEY_get0_DSA(pkey)); + #undef DSAPublicKey_dup +- obj = dsa_instance(rb_obj_class(self), dsa); +- if (obj == Qfalse) { +- DSA_free(dsa); +- ossl_raise(eDSAError, NULL); ++ if (!dsa) ++ ossl_raise(eDSAError, "DSAPublicKey_dup"); ++ if (!EVP_PKEY_assign_DSA(pkey_new, dsa)) { ++ DSA_free(dsa); ++ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); + } + return obj; + } +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index eabf495f19..aec9d1e60f 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -63,27 +63,6 @@ static ID id_i_group; + static VALUE ec_group_new(const EC_GROUP *group); + static VALUE ec_point_new(const EC_POINT *point, const EC_GROUP *group); + +-static VALUE ec_instance(VALUE klass, EC_KEY *ec) +-{ +- EVP_PKEY *pkey; +- VALUE obj; +- +- if (!ec) { +- return Qfalse; +- } +- obj = NewPKey(klass); +- if (!(pkey = EVP_PKEY_new())) { +- return Qfalse; +- } +- if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { +- EVP_PKEY_free(pkey); +- return Qfalse; +- } +- SetPKey(obj, pkey); +- +- return obj; +-} +- + /* + * Creates a new EC_KEY on the EC group obj. arg can be an EC::Group or a String + * representing an OID. +@@ -130,17 +109,18 @@ ec_key_new_from_group(VALUE arg) + static VALUE + ossl_ec_key_s_generate(VALUE klass, VALUE arg) + { ++ EVP_PKEY *pkey; + EC_KEY *ec; + VALUE obj; + +- ec = ec_key_new_from_group(arg); ++ obj = rb_obj_alloc(klass); ++ GetPKey(obj, pkey); + +- obj = ec_instance(klass, ec); +- if (obj == Qfalse) { +- EC_KEY_free(ec); +- ossl_raise(eECError, NULL); ++ ec = ec_key_new_from_group(arg); ++ if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { ++ EC_KEY_free(ec); ++ ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); + } +- + if (!EC_KEY_generate_key(ec)) + ossl_raise(eECError, "EC_KEY_generate_key"); + +diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c +index c1ae44fe40..fbdb9c8960 100644 +--- a/ext/openssl/ossl_pkey_rsa.c ++++ b/ext/openssl/ossl_pkey_rsa.c +@@ -44,31 +44,6 @@ RSA_PRIVATE(VALUE obj, RSA *rsa) + VALUE cRSA; + VALUE eRSAError; + +-/* +- * Public +- */ +-static VALUE +-rsa_instance(VALUE klass, RSA *rsa) +-{ +- EVP_PKEY *pkey; +- VALUE obj; +- +- if (!rsa) { +- return Qfalse; +- } +- obj = NewPKey(klass); +- if (!(pkey = EVP_PKEY_new())) { +- return Qfalse; +- } +- if (!EVP_PKEY_assign_RSA(pkey, rsa)) { +- EVP_PKEY_free(pkey); +- return Qfalse; +- } +- SetPKey(obj, pkey); +- +- return obj; +-} +- + /* + * Private + */ +@@ -102,7 +77,7 @@ rsa_generate(int size, unsigned long exp) + RSA_free(rsa); + BN_free(e); + BN_GENCB_free(cb); +- return NULL; ++ ossl_raise(eRSAError, "malloc failure"); + } + for (i = 0; i < (int)sizeof(exp) * 8; ++i) { + if (exp & (1UL << i)) { +@@ -110,7 +85,7 @@ rsa_generate(int size, unsigned long exp) + BN_free(e); + RSA_free(rsa); + BN_GENCB_free(cb); +- return NULL; ++ ossl_raise(eRSAError, "BN_set_bit"); + } + } + } +@@ -139,7 +114,7 @@ rsa_generate(int size, unsigned long exp) + ossl_clear_error(); + rb_jump_tag(cb_arg.state); + } +- return NULL; ++ ossl_raise(eRSAError, "RSA_generate_key_ex"); + } + + return rsa; +@@ -158,26 +133,26 @@ static VALUE + ossl_rsa_s_generate(int argc, VALUE *argv, VALUE klass) + { + /* why does this method exist? why can't initialize take an optional exponent? */ ++ EVP_PKEY *pkey; + RSA *rsa; + VALUE size, exp; + VALUE obj; + + rb_scan_args(argc, argv, "11", &size, &exp); ++ obj = rb_obj_alloc(klass); ++ GetPKey(obj, pkey); + +- rsa = rsa_generate(NUM2INT(size), NIL_P(exp) ? RSA_F4 : NUM2ULONG(exp)); /* err handled by rsa_instance */ +- obj = rsa_instance(klass, rsa); +- +- if (obj == Qfalse) { +- RSA_free(rsa); +- ossl_raise(eRSAError, NULL); ++ rsa = rsa_generate(NUM2INT(size), NIL_P(exp) ? RSA_F4 : NUM2ULONG(exp)); ++ if (!EVP_PKEY_assign_RSA(pkey, rsa)) { ++ RSA_free(rsa); ++ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); + } +- + return obj; + } + + /* + * call-seq: +- * RSA.new(key_size) => RSA instance ++ * RSA.new(size [, exponent]) => RSA instance + * RSA.new(encoded_key) => RSA instance + * RSA.new(encoded_key, pass_phrase) => RSA instance + * +@@ -206,10 +181,11 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) + GetPKey(self, pkey); + if(rb_scan_args(argc, argv, "02", &arg, &pass) == 0) { + rsa = RSA_new(); ++ if (!rsa) ++ ossl_raise(eRSAError, "RSA_new"); + } + else if (RB_INTEGER_TYPE_P(arg)) { + rsa = rsa_generate(NUM2INT(arg), NIL_P(pass) ? RSA_F4 : NUM2ULONG(pass)); +- if (!rsa) ossl_raise(eRSAError, NULL); + } + else { + pass = ossl_pem_passwd_value(pass); +@@ -243,7 +219,7 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) + } + if (!EVP_PKEY_assign_RSA(pkey, rsa)) { + RSA_free(rsa); +- ossl_raise(eRSAError, NULL); ++ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); + } + + return self; +@@ -787,17 +763,20 @@ ossl_rsa_to_text(VALUE self) + static VALUE + ossl_rsa_to_public_key(VALUE self) + { +- EVP_PKEY *pkey; ++ EVP_PKEY *pkey, *pkey_new; + RSA *rsa; + VALUE obj; + + GetPKeyRSA(self, pkey); +- /* err check performed by rsa_instance */ ++ obj = rb_obj_alloc(rb_obj_class(self)); ++ GetPKey(obj, pkey_new); ++ + rsa = RSAPublicKey_dup(EVP_PKEY_get0_RSA(pkey)); +- obj = rsa_instance(rb_obj_class(self), rsa); +- if (obj == Qfalse) { +- RSA_free(rsa); +- ossl_raise(eRSAError, NULL); ++ if (!rsa) ++ ossl_raise(eRSAError, "RSAPublicKey_dup"); ++ if (!EVP_PKEY_assign_RSA(pkey_new, rsa)) { ++ RSA_free(rsa); ++ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); + } + return obj; + } +-- +2.32.0 + + +From 1e1fedc6c2c9d42bc76b5a24bf0f39c8101f8d53 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sat, 18 Mar 2017 17:26:33 +0900 +Subject: [PATCH 3/5] pkey: have PKey.read parse PEM-encoded DHParameter + +Try PEM_read_bio_Parameters(). Only PEM format is supported at the +moment since corresponding d2i_* functions are not provided by OpenSSL. +--- + ext/openssl/ossl_pkey.c | 3 +++ + test/openssl/test_pkey_dh.rb | 2 ++ + test/openssl/utils.rb | 3 --- + 3 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index c6dbf57272..a00d66aada 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -178,6 +178,9 @@ ossl_pkey_new_from_data(int argc, VALUE *argv, VALUE self) + OSSL_BIO_reset(bio); + if ((pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL))) + goto ok; ++ OSSL_BIO_reset(bio); ++ if ((pkey = PEM_read_bio_Parameters(bio, NULL))) ++ goto ok; + + BIO_free(bio); + ossl_raise(ePKeyError, "Could not parse PKey"); +diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb +index fd2c7a66a9..4a05626a12 100644 +--- a/test/openssl/test_pkey_dh.rb ++++ b/test/openssl/test_pkey_dh.rb +@@ -36,6 +36,8 @@ def test_DHparams + EOF + key = OpenSSL::PKey::DH.new(pem) + assert_same_dh dup_public(dh1024), key ++ key = OpenSSL::PKey.read(pem) ++ assert_same_dh dup_public(dh1024), key + + assert_equal asn1.to_der, dh1024.to_der + assert_equal pem, dh1024.export +diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb +index 3776fbac4e..c1d737b2ab 100644 +--- a/test/openssl/utils.rb ++++ b/test/openssl/utils.rb +@@ -42,9 +42,6 @@ module Fixtures + + def pkey(name) + OpenSSL::PKey.read(read_file("pkey", name)) +- rescue OpenSSL::PKey::PKeyError +- # TODO: DH parameters can be read by OpenSSL::PKey.read atm +- OpenSSL::PKey::DH.new(read_file("pkey", name)) + end + + def read_file(category, name) +-- +2.32.0 + + +From 70655b40a980dad36dfb3054d309f6484e2a70b7 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Tue, 13 Jun 2017 23:39:41 +0900 +Subject: [PATCH 4/5] pkey: refactor DER/PEM-encoded string parsing code + +Export the flow used by OpenSSL::PKey.read and let the subclasses call +it before attempting other formats. +--- + ext/openssl/ossl_pkey.c | 57 +++++++++++++++++++++---------------- + ext/openssl/ossl_pkey.h | 1 + + ext/openssl/ossl_pkey_dsa.c | 37 +++++++++++------------- + ext/openssl/ossl_pkey_ec.c | 29 +++++++------------ + ext/openssl/ossl_pkey_rsa.c | 26 ++++++++--------- + 5 files changed, 73 insertions(+), 77 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index a00d66aada..47ddd0f014 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -136,6 +136,35 @@ ossl_pkey_new(EVP_PKEY *pkey) + return obj; + } + ++EVP_PKEY * ++ossl_pkey_read_generic(BIO *bio, VALUE pass) ++{ ++ void *ppass = (void *)pass; ++ EVP_PKEY *pkey; ++ ++ if ((pkey = d2i_PrivateKey_bio(bio, NULL))) ++ goto out; ++ OSSL_BIO_reset(bio); ++ if ((pkey = d2i_PKCS8PrivateKey_bio(bio, NULL, ossl_pem_passwd_cb, ppass))) ++ goto out; ++ OSSL_BIO_reset(bio); ++ if ((pkey = d2i_PUBKEY_bio(bio, NULL))) ++ goto out; ++ OSSL_BIO_reset(bio); ++ /* PEM_read_bio_PrivateKey() also parses PKCS #8 formats */ ++ if ((pkey = PEM_read_bio_PrivateKey(bio, NULL, ossl_pem_passwd_cb, ppass))) ++ goto out; ++ OSSL_BIO_reset(bio); ++ if ((pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL))) ++ goto out; ++ OSSL_BIO_reset(bio); ++ if ((pkey = PEM_read_bio_Parameters(bio, NULL))) ++ goto out; ++ ++ out: ++ return pkey; ++} ++ + /* + * call-seq: + * OpenSSL::PKey.read(string [, pwd ]) -> PKey +@@ -160,33 +189,11 @@ ossl_pkey_new_from_data(int argc, VALUE *argv, VALUE self) + VALUE data, pass; + + rb_scan_args(argc, argv, "11", &data, &pass); +- pass = ossl_pem_passwd_value(pass); +- + bio = ossl_obj2bio(&data); +- if ((pkey = d2i_PrivateKey_bio(bio, NULL))) +- goto ok; +- OSSL_BIO_reset(bio); +- if ((pkey = d2i_PKCS8PrivateKey_bio(bio, NULL, ossl_pem_passwd_cb, (void *)pass))) +- goto ok; +- OSSL_BIO_reset(bio); +- if ((pkey = d2i_PUBKEY_bio(bio, NULL))) +- goto ok; +- OSSL_BIO_reset(bio); +- /* PEM_read_bio_PrivateKey() also parses PKCS #8 formats */ +- if ((pkey = PEM_read_bio_PrivateKey(bio, NULL, ossl_pem_passwd_cb, (void *)pass))) +- goto ok; +- OSSL_BIO_reset(bio); +- if ((pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL))) +- goto ok; +- OSSL_BIO_reset(bio); +- if ((pkey = PEM_read_bio_Parameters(bio, NULL))) +- goto ok; +- +- BIO_free(bio); +- ossl_raise(ePKeyError, "Could not parse PKey"); +- +-ok: ++ pkey = ossl_pkey_read_generic(bio, ossl_pem_passwd_value(pass)); + BIO_free(bio); ++ if (!pkey) ++ ossl_raise(ePKeyError, "Could not parse PKey"); + return ossl_pkey_new(pkey); + } + +diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h +index e363a261c2..895927e3fb 100644 +--- a/ext/openssl/ossl_pkey.h ++++ b/ext/openssl/ossl_pkey.h +@@ -45,6 +45,7 @@ void ossl_generate_cb_stop(void *ptr); + + VALUE ossl_pkey_new(EVP_PKEY *); + void ossl_pkey_check_public_key(const EVP_PKEY *); ++EVP_PKEY *ossl_pkey_read_generic(BIO *, VALUE); + EVP_PKEY *GetPKeyPtr(VALUE); + EVP_PKEY *DupPKeyPtr(VALUE); + EVP_PKEY *GetPrivPKeyPtr(VALUE); +diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c +index c907f31c19..56f58559ed 100644 +--- a/ext/openssl/ossl_pkey_dsa.c ++++ b/ext/openssl/ossl_pkey_dsa.c +@@ -170,37 +170,34 @@ ossl_dsa_s_generate(VALUE klass, VALUE size) + static VALUE + ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) + { +- EVP_PKEY *pkey; +- DSA *dsa; ++ EVP_PKEY *pkey, *tmp; ++ DSA *dsa = NULL; + BIO *in; + VALUE arg, pass; + + GetPKey(self, pkey); +- if(rb_scan_args(argc, argv, "02", &arg, &pass) == 0) { ++ rb_scan_args(argc, argv, "02", &arg, &pass); ++ if (argc == 0) { + dsa = DSA_new(); ++ if (!dsa) ++ ossl_raise(eDSAError, "DSA_new"); + } +- else if (RB_INTEGER_TYPE_P(arg)) { +- if (!(dsa = dsa_generate(NUM2INT(arg)))) { +- ossl_raise(eDSAError, NULL); +- } ++ else if (argc == 1 && RB_INTEGER_TYPE_P(arg)) { ++ dsa = dsa_generate(NUM2INT(arg)); + } + else { + pass = ossl_pem_passwd_value(pass); + arg = ossl_to_der_if_possible(arg); + in = ossl_obj2bio(&arg); +- dsa = PEM_read_bio_DSAPrivateKey(in, NULL, ossl_pem_passwd_cb, (void *)pass); +- if (!dsa) { +- OSSL_BIO_reset(in); +- dsa = PEM_read_bio_DSA_PUBKEY(in, NULL, NULL, NULL); +- } +- if (!dsa) { +- OSSL_BIO_reset(in); +- dsa = d2i_DSAPrivateKey_bio(in, NULL); +- } +- if (!dsa) { +- OSSL_BIO_reset(in); +- dsa = d2i_DSA_PUBKEY_bio(in, NULL); +- } ++ ++ tmp = ossl_pkey_read_generic(in, pass); ++ if (tmp) { ++ if (EVP_PKEY_base_id(tmp) != EVP_PKEY_DSA) ++ rb_raise(eDSAError, "incorrect pkey type: %s", ++ OBJ_nid2sn(EVP_PKEY_base_id(tmp))); ++ dsa = EVP_PKEY_get1_DSA(tmp); ++ EVP_PKEY_free(tmp); ++ } + if (!dsa) { + OSSL_BIO_reset(in); + #define PEM_read_bio_DSAPublicKey(bp,x,cb,u) (DSA *)PEM_ASN1_read_bio( \ +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index aec9d1e60f..ca8f5c6e4e 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -162,24 +162,17 @@ static VALUE ossl_ec_key_initialize(int argc, VALUE *argv, VALUE self) + } else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { + ec = ec_key_new_from_group(arg); + } else { +- BIO *in; +- +- pass = ossl_pem_passwd_value(pass); +- in = ossl_obj2bio(&arg); +- +- ec = PEM_read_bio_ECPrivateKey(in, NULL, ossl_pem_passwd_cb, (void *)pass); +- if (!ec) { +- OSSL_BIO_reset(in); +- ec = PEM_read_bio_EC_PUBKEY(in, NULL, ossl_pem_passwd_cb, (void *)pass); +- } +- if (!ec) { +- OSSL_BIO_reset(in); +- ec = d2i_ECPrivateKey_bio(in, NULL); +- } +- if (!ec) { +- OSSL_BIO_reset(in); +- ec = d2i_EC_PUBKEY_bio(in, NULL); +- } ++ BIO *in = ossl_obj2bio(&arg); ++ EVP_PKEY *tmp; ++ pass = ossl_pem_passwd_value(pass); ++ tmp = ossl_pkey_read_generic(in, pass); ++ if (tmp) { ++ if (EVP_PKEY_base_id(tmp) != EVP_PKEY_EC) ++ rb_raise(eECError, "incorrect pkey type: %s", ++ OBJ_nid2sn(EVP_PKEY_base_id(tmp))); ++ ec = EVP_PKEY_get1_EC_KEY(tmp); ++ EVP_PKEY_free(tmp); ++ } + BIO_free(in); + + if (!ec) { +diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c +index fbdb9c8960..8415121c7d 100644 +--- a/ext/openssl/ossl_pkey_rsa.c ++++ b/ext/openssl/ossl_pkey_rsa.c +@@ -179,7 +179,8 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) + VALUE arg, pass; + + GetPKey(self, pkey); +- if(rb_scan_args(argc, argv, "02", &arg, &pass) == 0) { ++ rb_scan_args(argc, argv, "02", &arg, &pass); ++ if (argc == 0) { + rsa = RSA_new(); + if (!rsa) + ossl_raise(eRSAError, "RSA_new"); +@@ -191,19 +192,15 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) + pass = ossl_pem_passwd_value(pass); + arg = ossl_to_der_if_possible(arg); + in = ossl_obj2bio(&arg); +- rsa = PEM_read_bio_RSAPrivateKey(in, NULL, ossl_pem_passwd_cb, (void *)pass); +- if (!rsa) { +- OSSL_BIO_reset(in); +- rsa = PEM_read_bio_RSA_PUBKEY(in, NULL, NULL, NULL); +- } +- if (!rsa) { +- OSSL_BIO_reset(in); +- rsa = d2i_RSAPrivateKey_bio(in, NULL); +- } +- if (!rsa) { +- OSSL_BIO_reset(in); +- rsa = d2i_RSA_PUBKEY_bio(in, NULL); +- } ++ ++ tmp = ossl_pkey_read_generic(in, pass); ++ if (tmp) { ++ if (EVP_PKEY_base_id(tmp) != EVP_PKEY_RSA) ++ rb_raise(eRSAError, "incorrect pkey type: %s", ++ OBJ_nid2sn(EVP_PKEY_base_id(tmp))); ++ rsa = EVP_PKEY_get1_RSA(tmp); ++ EVP_PKEY_free(tmp); ++ } + if (!rsa) { + OSSL_BIO_reset(in); + rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); +@@ -214,6 +211,7 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) + } + BIO_free(in); + if (!rsa) { ++ ossl_clear_error(); + ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); + } + } +-- +2.32.0 + + +From eacc680b1efc82935efc945bbe23c9073f17f440 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Wed, 14 Jun 2017 00:25:43 +0900 +Subject: [PATCH 5/5] pkey: refactor #export/#to_pem and #to_der + +Add ossl_pkey_export_traditional() and ossl_pkey_export_spki() helper +functions, and use them. This reduces code duplication. +--- + ext/openssl/ossl_pkey.c | 54 +++++++++++++++++++++-- + ext/openssl/ossl_pkey.h | 14 ++++++ + ext/openssl/ossl_pkey_dsa.c | 49 +++------------------ + ext/openssl/ossl_pkey_ec.c | 86 ++++++++----------------------------- + ext/openssl/ossl_pkey_rsa.c | 84 +++++++++++------------------------- + 5 files changed, 114 insertions(+), 173 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 47ddd0f014..610a83fd2d 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -341,6 +341,52 @@ ossl_pkey_inspect(VALUE self) + OBJ_nid2sn(nid)); + } + ++VALUE ++ossl_pkey_export_traditional(int argc, VALUE *argv, VALUE self, int to_der) ++{ ++ EVP_PKEY *pkey; ++ VALUE cipher, pass; ++ const EVP_CIPHER *enc = NULL; ++ BIO *bio; ++ ++ GetPKey(self, pkey); ++ rb_scan_args(argc, argv, "02", &cipher, &pass); ++ if (!NIL_P(cipher)) { ++ enc = ossl_evp_get_cipherbyname(cipher); ++ pass = ossl_pem_passwd_value(pass); ++ } ++ ++ bio = BIO_new(BIO_s_mem()); ++ if (!bio) ++ ossl_raise(ePKeyError, "BIO_new"); ++ if (to_der) { ++ if (!i2d_PrivateKey_bio(bio, pkey)) { ++ BIO_free(bio); ++ ossl_raise(ePKeyError, "i2d_PrivateKey_bio"); ++ } ++ } ++ else { ++#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER) ++ if (!PEM_write_bio_PrivateKey_traditional(bio, pkey, enc, NULL, 0, ++ ossl_pem_passwd_cb, ++ (void *)pass)) { ++#else ++ char pem_str[80]; ++ const char *aname; ++ ++ EVP_PKEY_asn1_get0_info(NULL, NULL, NULL, NULL, &aname, pkey->ameth); ++ snprintf(pem_str, sizeof(pem_str), "%s PRIVATE KEY", aname); ++ if (!PEM_ASN1_write_bio((i2d_of_void *)i2d_PrivateKey, pem_str, bio, ++ pkey, enc, NULL, 0, ossl_pem_passwd_cb, ++ (void *)pass)) { ++#endif ++ BIO_free(bio); ++ ossl_raise(ePKeyError, "PEM_write_bio_PrivateKey_traditional"); ++ } ++ } ++ return ossl_membio2str(bio); ++} ++ + static VALUE + do_pkcs8_export(int argc, VALUE *argv, VALUE self, int to_der) + { +@@ -410,8 +456,8 @@ ossl_pkey_private_to_pem(int argc, VALUE *argv, VALUE self) + return do_pkcs8_export(argc, argv, self, 0); + } + +-static VALUE +-do_spki_export(VALUE self, int to_der) ++VALUE ++ossl_pkey_export_spki(VALUE self, int to_der) + { + EVP_PKEY *pkey; + BIO *bio; +@@ -444,7 +490,7 @@ do_spki_export(VALUE self, int to_der) + static VALUE + ossl_pkey_public_to_der(VALUE self) + { +- return do_spki_export(self, 1); ++ return ossl_pkey_export_spki(self, 1); + } + + /* +@@ -456,7 +502,7 @@ ossl_pkey_public_to_der(VALUE self) + static VALUE + ossl_pkey_public_to_pem(VALUE self) + { +- return do_spki_export(self, 0); ++ return ossl_pkey_export_spki(self, 0); + } + + /* +diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h +index 895927e3fb..7dbaed47bc 100644 +--- a/ext/openssl/ossl_pkey.h ++++ b/ext/openssl/ossl_pkey.h +@@ -49,6 +49,20 @@ EVP_PKEY *ossl_pkey_read_generic(BIO *, VALUE); + EVP_PKEY *GetPKeyPtr(VALUE); + EVP_PKEY *DupPKeyPtr(VALUE); + EVP_PKEY *GetPrivPKeyPtr(VALUE); ++ ++/* ++ * Serializes _self_ in X.509 SubjectPublicKeyInfo format and returns the ++ * resulting String. Sub-classes use this when overriding #to_der. ++ */ ++VALUE ossl_pkey_export_spki(VALUE self, int to_der); ++/* ++ * Serializes the private key _self_ in the traditional private key format ++ * and returns the resulting String. Sub-classes use this when overriding ++ * #to_der. ++ */ ++VALUE ossl_pkey_export_traditional(int argc, VALUE *argv, VALUE self, ++ int to_der); ++ + void Init_ossl_pkey(void); + + /* +diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c +index 56f58559ed..0e68f7f27f 100644 +--- a/ext/openssl/ossl_pkey_dsa.c ++++ b/ext/openssl/ossl_pkey_dsa.c +@@ -296,34 +296,12 @@ static VALUE + ossl_dsa_export(int argc, VALUE *argv, VALUE self) + { + DSA *dsa; +- BIO *out; +- const EVP_CIPHER *ciph = NULL; +- VALUE cipher, pass, str; + + GetDSA(self, dsa); +- rb_scan_args(argc, argv, "02", &cipher, &pass); +- if (!NIL_P(cipher)) { +- ciph = ossl_evp_get_cipherbyname(cipher); +- pass = ossl_pem_passwd_value(pass); +- } +- if (!(out = BIO_new(BIO_s_mem()))) { +- ossl_raise(eDSAError, NULL); +- } +- if (DSA_HAS_PRIVATE(dsa)) { +- if (!PEM_write_bio_DSAPrivateKey(out, dsa, ciph, NULL, 0, +- ossl_pem_passwd_cb, (void *)pass)){ +- BIO_free(out); +- ossl_raise(eDSAError, NULL); +- } +- } else { +- if (!PEM_write_bio_DSA_PUBKEY(out, dsa)) { +- BIO_free(out); +- ossl_raise(eDSAError, NULL); +- } +- } +- str = ossl_membio2str(out); +- +- return str; ++ if (DSA_HAS_PRIVATE(dsa)) ++ return ossl_pkey_export_traditional(argc, argv, self, 0); ++ else ++ return ossl_pkey_export_spki(self, 0); + } + + /* +@@ -337,25 +315,12 @@ static VALUE + ossl_dsa_to_der(VALUE self) + { + DSA *dsa; +- int (*i2d_func)(DSA *, unsigned char **); +- unsigned char *p; +- long len; +- VALUE str; + + GetDSA(self, dsa); +- if(DSA_HAS_PRIVATE(dsa)) +- i2d_func = (int (*)(DSA *,unsigned char **))i2d_DSAPrivateKey; ++ if (DSA_HAS_PRIVATE(dsa)) ++ return ossl_pkey_export_traditional(0, NULL, self, 1); + else +- i2d_func = i2d_DSA_PUBKEY; +- if((len = i2d_func(dsa, NULL)) <= 0) +- ossl_raise(eDSAError, NULL); +- str = rb_str_new(0, len); +- p = (unsigned char *)RSTRING_PTR(str); +- if(i2d_func(dsa, &p) < 0) +- ossl_raise(eDSAError, NULL); +- ossl_str_adjust(str, p); +- +- return str; ++ return ossl_pkey_export_spki(self, 1); + } + + +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index ca8f5c6e4e..6fe2533e2a 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -141,7 +141,7 @@ ossl_ec_key_s_generate(VALUE klass, VALUE arg) + static VALUE ossl_ec_key_initialize(int argc, VALUE *argv, VALUE self) + { + EVP_PKEY *pkey; +- EC_KEY *ec; ++ EC_KEY *ec = NULL; + VALUE arg, pass; + + GetPKey(self, pkey); +@@ -378,66 +378,6 @@ static VALUE ossl_ec_key_is_private(VALUE self) + return EC_KEY_get0_private_key(ec) ? Qtrue : Qfalse; + } + +-static VALUE ossl_ec_key_to_string(VALUE self, VALUE ciph, VALUE pass, int format) +-{ +- EC_KEY *ec; +- BIO *out; +- int i = -1; +- int private = 0; +- VALUE str; +- const EVP_CIPHER *cipher = NULL; +- +- GetEC(self, ec); +- +- if (EC_KEY_get0_public_key(ec) == NULL) +- ossl_raise(eECError, "can't export - no public key set"); +- +- if (EC_KEY_check_key(ec) != 1) +- ossl_raise(eECError, "can't export - EC_KEY_check_key failed"); +- +- if (EC_KEY_get0_private_key(ec)) +- private = 1; +- +- if (!NIL_P(ciph)) { +- cipher = ossl_evp_get_cipherbyname(ciph); +- pass = ossl_pem_passwd_value(pass); +- } +- +- if (!(out = BIO_new(BIO_s_mem()))) +- ossl_raise(eECError, "BIO_new(BIO_s_mem())"); +- +- switch(format) { +- case EXPORT_PEM: +- if (private) { +- i = PEM_write_bio_ECPrivateKey(out, ec, cipher, NULL, 0, ossl_pem_passwd_cb, (void *)pass); +- } else { +- i = PEM_write_bio_EC_PUBKEY(out, ec); +- } +- +- break; +- case EXPORT_DER: +- if (private) { +- i = i2d_ECPrivateKey_bio(out, ec); +- } else { +- i = i2d_EC_PUBKEY_bio(out, ec); +- } +- +- break; +- default: +- BIO_free(out); +- ossl_raise(rb_eRuntimeError, "unknown format (internal error)"); +- } +- +- if (i != 1) { +- BIO_free(out); +- ossl_raise(eECError, "outlen=%d", i); +- } +- +- str = ossl_membio2str(out); +- +- return str; +-} +- + /* + * call-seq: + * key.export([cipher, pass_phrase]) => String +@@ -448,11 +388,16 @@ static VALUE ossl_ec_key_to_string(VALUE self, VALUE ciph, VALUE pass, int forma + * instance. Note that encryption will only be effective for a private key, + * public keys will always be encoded in plain text. + */ +-static VALUE ossl_ec_key_export(int argc, VALUE *argv, VALUE self) ++static VALUE ++ossl_ec_key_export(int argc, VALUE *argv, VALUE self) + { +- VALUE cipher, passwd; +- rb_scan_args(argc, argv, "02", &cipher, &passwd); +- return ossl_ec_key_to_string(self, cipher, passwd, EXPORT_PEM); ++ EC_KEY *ec; ++ ++ GetEC(self, ec); ++ if (EC_KEY_get0_private_key(ec)) ++ return ossl_pkey_export_traditional(argc, argv, self, 0); ++ else ++ return ossl_pkey_export_spki(self, 0); + } + + /* +@@ -461,9 +406,16 @@ static VALUE ossl_ec_key_export(int argc, VALUE *argv, VALUE self) + * + * See the OpenSSL documentation for i2d_ECPrivateKey_bio() + */ +-static VALUE ossl_ec_key_to_der(VALUE self) ++static VALUE ++ossl_ec_key_to_der(VALUE self) + { +- return ossl_ec_key_to_string(self, Qnil, Qnil, EXPORT_DER); ++ EC_KEY *ec; ++ ++ GetEC(self, ec); ++ if (EC_KEY_get0_private_key(ec)) ++ return ossl_pkey_export_traditional(0, NULL, self, 1); ++ else ++ return ossl_pkey_export_spki(self, 1); + } + + /* +diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c +index 8415121c7d..3c298a2aea 100644 +--- a/ext/openssl/ossl_pkey_rsa.c ++++ b/ext/openssl/ossl_pkey_rsa.c +@@ -173,8 +173,8 @@ ossl_rsa_s_generate(int argc, VALUE *argv, VALUE klass) + static VALUE + ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) + { +- EVP_PKEY *pkey; +- RSA *rsa; ++ EVP_PKEY *pkey, *tmp; ++ RSA *rsa = NULL; + BIO *in; + VALUE arg, pass; + +@@ -279,6 +279,21 @@ ossl_rsa_is_private(VALUE self) + return RSA_PRIVATE(self, rsa) ? Qtrue : Qfalse; + } + ++static int ++can_export_rsaprivatekey(VALUE self) ++{ ++ RSA *rsa; ++ const BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp; ++ ++ GetRSA(self, rsa); ++ ++ RSA_get0_key(rsa, &n, &e, &d); ++ RSA_get0_factors(rsa, &p, &q); ++ RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp); ++ ++ return n && e && d && p && q && dmp1 && dmq1 && iqmp; ++} ++ + /* + * call-seq: + * rsa.export([cipher, pass_phrase]) => PEM-format String +@@ -292,41 +307,10 @@ ossl_rsa_is_private(VALUE self) + static VALUE + ossl_rsa_export(int argc, VALUE *argv, VALUE self) + { +- RSA *rsa; +- const BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp; +- BIO *out; +- const EVP_CIPHER *ciph = NULL; +- VALUE cipher, pass, str; +- +- GetRSA(self, rsa); +- +- rb_scan_args(argc, argv, "02", &cipher, &pass); +- +- if (!NIL_P(cipher)) { +- ciph = ossl_evp_get_cipherbyname(cipher); +- pass = ossl_pem_passwd_value(pass); +- } +- if (!(out = BIO_new(BIO_s_mem()))) { +- ossl_raise(eRSAError, NULL); +- } +- RSA_get0_key(rsa, &n, &e, &d); +- RSA_get0_factors(rsa, &p, &q); +- RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp); +- if (n && e && d && p && q && dmp1 && dmq1 && iqmp) { +- if (!PEM_write_bio_RSAPrivateKey(out, rsa, ciph, NULL, 0, +- ossl_pem_passwd_cb, (void *)pass)) { +- BIO_free(out); +- ossl_raise(eRSAError, NULL); +- } +- } else { +- if (!PEM_write_bio_RSA_PUBKEY(out, rsa)) { +- BIO_free(out); +- ossl_raise(eRSAError, NULL); +- } +- } +- str = ossl_membio2str(out); +- +- return str; ++ if (can_export_rsaprivatekey(self)) ++ return ossl_pkey_export_traditional(argc, argv, self, 0); ++ else ++ return ossl_pkey_export_spki(self, 0); + } + + /* +@@ -338,30 +322,10 @@ ossl_rsa_export(int argc, VALUE *argv, VALUE self) + static VALUE + ossl_rsa_to_der(VALUE self) + { +- RSA *rsa; +- const BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp; +- int (*i2d_func)(const RSA *, unsigned char **); +- unsigned char *ptr; +- long len; +- VALUE str; +- +- GetRSA(self, rsa); +- RSA_get0_key(rsa, &n, &e, &d); +- RSA_get0_factors(rsa, &p, &q); +- RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp); +- if (n && e && d && p && q && dmp1 && dmq1 && iqmp) +- i2d_func = i2d_RSAPrivateKey; ++ if (can_export_rsaprivatekey(self)) ++ return ossl_pkey_export_traditional(0, NULL, self, 1); + else +- i2d_func = (int (*)(const RSA *, unsigned char **))i2d_RSA_PUBKEY; +- if((len = i2d_func(rsa, NULL)) <= 0) +- ossl_raise(eRSAError, NULL); +- str = rb_str_new(0, len); +- ptr = (unsigned char *)RSTRING_PTR(str); +- if(i2d_func(rsa, &ptr) < 0) +- ossl_raise(eRSAError, NULL); +- ossl_str_adjust(str, ptr); +- +- return str; ++ return ossl_pkey_export_spki(self, 1); + } + + /* +-- +2.32.0 + diff --git a/ruby-3.1.0-SSL_read-EOF-handling.patch b/ruby-3.1.0-SSL_read-EOF-handling.patch new file mode 100644 index 0000000..fb08773 --- /dev/null +++ b/ruby-3.1.0-SSL_read-EOF-handling.patch @@ -0,0 +1,16 @@ +diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c +index 3b425ca..40e748c 100644 +--- a/ext/openssl/ossl_ssl.c ++++ b/ext/openssl/ossl_ssl.c +@@ -1844,6 +1844,11 @@ ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock) + return str; + + GetSSL(self, ssl); ++ ++#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF ++ SSL_set_options(ssl, SSL_OP_IGNORE_UNEXPECTED_EOF); ++#endif ++ + io = rb_attr_get(self, id_i_io); + GetOpenFile(io, fptr); + if (ssl_started(ssl)) { diff --git a/ruby-3.1.0-Support-OpenSSL-3.0.patch b/ruby-3.1.0-Support-OpenSSL-3.0.patch new file mode 100644 index 0000000..e701ad0 --- /dev/null +++ b/ruby-3.1.0-Support-OpenSSL-3.0.patch @@ -0,0 +1,1101 @@ +From bc9cbef395fc8fc7f81c3911b92966abc693169a Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sun, 24 Oct 2021 17:50:18 +0900 +Subject: [PATCH 01/10] test/openssl/test_cipher: update test_ciphers + +Do not attempt to actually use all algorithms. Not all algorithms listed +in OpenSSL::Cipher.ciphers are always available; some may belong to the +legacy provider in OpenSSL 3.0. +--- + test/openssl/test_cipher.rb | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) + +diff --git a/test/openssl/test_cipher.rb b/test/openssl/test_cipher.rb +index 178f5aba0e..395183b22d 100644 +--- a/test/openssl/test_cipher.rb ++++ b/test/openssl/test_cipher.rb +@@ -135,14 +135,11 @@ def test_ctr_if_exists + end + + def test_ciphers +- OpenSSL::Cipher.ciphers.each{|name| +- next if /netbsd/ =~ RUBY_PLATFORM && /idea|rc5/i =~ name +- begin +- assert_kind_of(OpenSSL::Cipher, OpenSSL::Cipher.new(name)) +- rescue OpenSSL::Cipher::CipherError => e +- raise unless /wrap/ =~ name and /wrap mode not allowed/ =~ e.message +- end +- } ++ ciphers = OpenSSL::Cipher.ciphers ++ assert_kind_of Array, ciphers ++ assert_include ciphers, "aes-128-cbc" ++ assert_include ciphers, "aes128" # alias of aes-128-cbc ++ assert_include ciphers, "aes-128-gcm" + end + + def test_AES +-- +2.32.0 + + +From f73998da49d2cd273b38b542ddd49a4ceaf5bfa9 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Wed, 3 Nov 2021 23:31:29 +0900 +Subject: [PATCH 02/10] test/openssl/test_pkey_rsa: test concatenated PEM + parsing + +PEM-encoded private keys are sometimes stored together with irrelevant +PEM blocks, such as the corresponding X.509 certificate. + +PEM_read_bio_*() family automatically skips unknown PEM blocks, but on +OpenSSL 3.0 we will be using the new OSSL_DECODER API instead, due to +some behavior changes around the password callback. + +Let's add a test case so that we won't break the current behavior. +--- + test/openssl/test_pkey_rsa.rb | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb +index 4548bdb2cf..327449ae03 100644 +--- a/test/openssl/test_pkey_rsa.rb ++++ b/test/openssl/test_pkey_rsa.rb +@@ -306,6 +306,12 @@ def test_RSAPrivateKey + + assert_equal asn1.to_der, rsa1024.to_der + assert_equal pem, rsa1024.export ++ ++ # Unknown PEM prepended ++ cert = issue_cert(OpenSSL::X509::Name.new([["CN", "nobody"]]), rsa1024, 1, [], nil, nil) ++ str = cert.to_text + cert.to_pem + rsa1024.to_pem ++ key = OpenSSL::PKey::RSA.new(str) ++ assert_same_rsa rsa1024, key + end + + def test_RSAPrivateKey_encrypted +-- +2.32.0 + + +From eb44c4c0eff7a63f9b0bc5d7a7a0df014f1c1b62 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sat, 20 Mar 2021 23:16:16 +0900 +Subject: [PATCH 03/10] pkey: use OSSL_DECODER to load encrypted PEM on OpenSSL + 3.0 + +The routines to load pkeys (PEM_read_bio_* and d2i_* functions) have +been rewritten around the newly introduced OSSL_DECODER API in OpenSSL +3.0. They now first try to decrypt and parse a PEM block, and then check +the kind. Since we try to parse a given string using each of them in +turn, this means the password callback may now be called more than once. + +Let's use the OSSL_DECODER API directly on OpenSSL 3.0 to avoid this +from happening. +--- + ext/openssl/ossl_pkey.c | 40 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 40 insertions(+) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index ba909c7632..4eab598942 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -78,6 +78,45 @@ ossl_pkey_new(EVP_PKEY *pkey) + return obj; + } + ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++# include ++ ++EVP_PKEY * ++ossl_pkey_read_generic(BIO *bio, VALUE pass) ++{ ++ void *ppass = (void *)pass; ++ OSSL_DECODER_CTX *dctx; ++ EVP_PKEY *pkey = NULL; ++ int pos = 0, pos2; ++ ++ dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, NULL, 0, NULL, NULL); ++ if (!dctx) ++ goto out; ++ if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb, ppass) != 1) ++ goto out; ++ ++ /* First check DER */ ++ if (OSSL_DECODER_from_bio(dctx, bio) == 1) ++ goto out; ++ ++ /* Then check PEM; multiple OSSL_DECODER_from_bio() calls may be needed */ ++ OSSL_BIO_reset(bio); ++ if (OSSL_DECODER_CTX_set_input_type(dctx, "PEM") != 1) ++ goto out; ++ while (OSSL_DECODER_from_bio(dctx, bio) != 1) { ++ if (BIO_eof(bio)) ++ goto out; ++ pos2 = BIO_tell(bio); ++ if (pos2 < 0 || pos2 <= pos) ++ goto out; ++ pos = pos2; ++ } ++ ++ out: ++ OSSL_DECODER_CTX_free(dctx); ++ return pkey; ++} ++#else + EVP_PKEY * + ossl_pkey_read_generic(BIO *bio, VALUE pass) + { +@@ -106,6 +145,7 @@ ossl_pkey_read_generic(BIO *bio, VALUE pass) + out: + return pkey; + } ++#endif + + /* + * call-seq: +-- +2.32.0 + + +From 588165c3235a23f0df58c8ec50ad6f46a05580f1 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sat, 20 Mar 2021 23:16:41 +0900 +Subject: [PATCH 04/10] pkey: assume a pkey always has public key components on + OpenSSL 3.0 + +Do not check the key components in this way because they are not +necessarily accessible in this way. +--- + ext/openssl/ossl_pkey.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 4eab598942..a805b4dc99 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -428,9 +428,19 @@ ossl_pkey_s_generate_key(int argc, VALUE *argv, VALUE self) + return pkey_generate(argc, argv, self, 0); + } + ++/* ++ * TODO: There is no convenient way to check the presence of public key ++ * components on OpenSSL 3.0. But since keys are immutable on 3.0, pkeys without ++ * these should only be created by OpenSSL::PKey.generate_parameters or by ++ * parsing DER-/PEM-encoded string. We would need another flag for that. ++ */ + void + ossl_pkey_check_public_key(const EVP_PKEY *pkey) + { ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++ if (EVP_PKEY_missing_parameters(pkey)) ++ ossl_raise(ePKeyError, "parameters missing"); ++#else + void *ptr; + const BIGNUM *n, *e, *pubkey; + +@@ -466,6 +476,7 @@ ossl_pkey_check_public_key(const EVP_PKEY *pkey) + return; + } + ossl_raise(ePKeyError, "public key missing"); ++#endif + } + + EVP_PKEY * +-- +2.32.0 + + +From 4c362a1fad72fd570985e4f401ba534456252cb3 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 12 Apr 2021 10:43:46 +0900 +Subject: [PATCH 05/10] pkey: use EVP_PKEY_CTX_new_from_name() on OpenSSL 3.0 + +Replace EVP_PKEY_CTX_new_id() with the new EVP_PKEY_CTX_new_from_name() +which takes the algorithm name as a string rather than a NID. +--- + ext/openssl/ossl_pkey.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index a805b4dc99..73a54eb2fb 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -315,6 +315,11 @@ pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); + } + else { ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++ ctx = EVP_PKEY_CTX_new_from_name(NULL, StringValueCStr(alg), NULL); ++ if (!ctx) ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_from_name"); ++#else + const EVP_PKEY_ASN1_METHOD *ameth; + ENGINE *tmpeng; + int pkey_id; +@@ -333,6 +338,7 @@ pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) + ctx = EVP_PKEY_CTX_new_id(pkey_id, NULL/* engine */); + if (!ctx) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_id"); ++#endif + } + + if (genparam && EVP_PKEY_paramgen_init(ctx) <= 0) { +-- +2.32.0 + + +From 013c8552b845a8607f9a0639a07e1515fe067cd3 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 12 Apr 2021 13:55:10 +0900 +Subject: [PATCH 06/10] pkey: do not check NULL argument in ossl_pkey_new() + +Since the function takes the ownership, the caller is supposed to know +that the lifetime of the object - that is, it is never NULL. In fact, +it is properly checked by the caller in all code paths. +--- + ext/openssl/ossl_pkey.c | 6 +----- + ext/openssl/ossl_pkey.h | 1 + + 2 files changed, 2 insertions(+), 5 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 73a54eb2fb..5320d70a48 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -38,12 +38,8 @@ static VALUE + pkey_new0(EVP_PKEY *pkey) + { + VALUE klass, obj; +- int type; + +- if (!pkey || (type = EVP_PKEY_base_id(pkey)) == EVP_PKEY_NONE) +- ossl_raise(rb_eRuntimeError, "pkey is empty"); +- +- switch (type) { ++ switch (EVP_PKEY_base_id(pkey)) { + #if !defined(OPENSSL_NO_RSA) + case EVP_PKEY_RSA: klass = cRSA; break; + #endif +diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h +index 629c16ae1f..d57e9c0f15 100644 +--- a/ext/openssl/ossl_pkey.h ++++ b/ext/openssl/ossl_pkey.h +@@ -35,6 +35,7 @@ extern const rb_data_type_t ossl_evp_pkey_type; + } \ + } while (0) + ++/* Takes ownership of the EVP_PKEY */ + VALUE ossl_pkey_new(EVP_PKEY *); + void ossl_pkey_check_public_key(const EVP_PKEY *); + EVP_PKEY *ossl_pkey_read_generic(BIO *, VALUE); +-- +2.32.0 + + +From 2a9f958d71922303f223d4dcc15049d7dfa962a9 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 12 Apr 2021 18:32:40 +0900 +Subject: [PATCH 07/10] pkey: lazily initialize EVP_PKEY + +Allocate an EVP_PKEY when the content is ready: when #initialize +or #initialize_copy is called, rather than when OpenSSL::PKey::PKey is +allocated. + +This simplifies #initialize's and the upcoming generic #initialize_copy +implementation. +--- + ext/openssl/ossl_pkey.c | 15 ++---- + ext/openssl/ossl_pkey.h | 19 +++----- + ext/openssl/ossl_pkey_dh.c | 69 ++++++++++++++++++++-------- + ext/openssl/ossl_pkey_dsa.c | 87 +++++++++++++++++++++-------------- + ext/openssl/ossl_pkey_ec.c | 92 ++++++++++++++++++++----------------- + ext/openssl/ossl_pkey_rsa.c | 91 +++++++++++++++++++++--------------- + 6 files changed, 217 insertions(+), 156 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 5320d70a48..9ddfaafe7c 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -54,8 +54,8 @@ pkey_new0(EVP_PKEY *pkey) + #endif + default: klass = cPKey; break; + } +- obj = NewPKey(klass); +- SetPKey(obj, pkey); ++ obj = rb_obj_alloc(klass); ++ RTYPEDDATA_DATA(obj) = pkey; + return obj; + } + +@@ -528,16 +528,7 @@ DupPKeyPtr(VALUE obj) + static VALUE + ossl_pkey_alloc(VALUE klass) + { +- EVP_PKEY *pkey; +- VALUE obj; +- +- obj = NewPKey(klass); +- if (!(pkey = EVP_PKEY_new())) { +- ossl_raise(ePKeyError, NULL); +- } +- SetPKey(obj, pkey); +- +- return obj; ++ return TypedData_Wrap_Struct(klass, &ossl_evp_pkey_type, NULL); + } + + /* +diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h +index d57e9c0f15..ac386717d7 100644 +--- a/ext/openssl/ossl_pkey.h ++++ b/ext/openssl/ossl_pkey.h +@@ -15,21 +15,14 @@ extern VALUE cPKey; + extern VALUE ePKeyError; + extern const rb_data_type_t ossl_evp_pkey_type; + +-#define OSSL_PKEY_SET_PRIVATE(obj) rb_iv_set((obj), "private", Qtrue) +-#define OSSL_PKEY_SET_PUBLIC(obj) rb_iv_set((obj), "private", Qfalse) +-#define OSSL_PKEY_IS_PRIVATE(obj) (rb_iv_get((obj), "private") == Qtrue) ++/* For ENGINE */ ++#define OSSL_PKEY_SET_PRIVATE(obj) rb_ivar_set((obj), rb_intern("private"), Qtrue) ++#define OSSL_PKEY_IS_PRIVATE(obj) (rb_attr_get((obj), rb_intern("private")) == Qtrue) + +-#define NewPKey(klass) \ +- TypedData_Wrap_Struct((klass), &ossl_evp_pkey_type, 0) +-#define SetPKey(obj, pkey) do { \ +- if (!(pkey)) { \ +- rb_raise(rb_eRuntimeError, "PKEY wasn't initialized!"); \ +- } \ +- RTYPEDDATA_DATA(obj) = (pkey); \ +- OSSL_PKEY_SET_PUBLIC(obj); \ +-} while (0) ++#define GetPKey0(obj, pkey) \ ++ TypedData_Get_Struct((obj), EVP_PKEY, &ossl_evp_pkey_type, (pkey)) + #define GetPKey(obj, pkey) do {\ +- TypedData_Get_Struct((obj), EVP_PKEY, &ossl_evp_pkey_type, (pkey)); \ ++ GetPKey0((obj), (pkey)); \ + if (!(pkey)) { \ + rb_raise(rb_eRuntimeError, "PKEY wasn't initialized!");\ + } \ +diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c +index ca782bbe59..7d8e0fa502 100644 +--- a/ext/openssl/ossl_pkey_dh.c ++++ b/ext/openssl/ossl_pkey_dh.c +@@ -76,7 +76,10 @@ ossl_dh_initialize(int argc, VALUE *argv, VALUE self) + BIO *in; + VALUE arg; + +- GetPKey(self, pkey); ++ GetPKey0(self, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); ++ + /* The DH.new(size, generator) form is handled by lib/openssl/pkey.rb */ + if (rb_scan_args(argc, argv, "01", &arg) == 0) { + dh = DH_new(); +@@ -84,22 +87,44 @@ ossl_dh_initialize(int argc, VALUE *argv, VALUE self) + ossl_raise(eDHError, "DH_new"); + } + else { +- arg = ossl_to_der_if_possible(arg); +- in = ossl_obj2bio(&arg); +- dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); +- if (!dh){ +- OSSL_BIO_reset(in); +- dh = d2i_DHparams_bio(in, NULL); +- } +- BIO_free(in); +- if (!dh) { +- ossl_raise(eDHError, NULL); +- } ++ int type; ++ ++ arg = ossl_to_der_if_possible(arg); ++ in = ossl_obj2bio(&arg); ++ ++ /* First try DER-encoded parameters */ ++ dh = d2i_DHparams_bio(in, NULL); ++ OSSL_BIO_reset(in); ++ if (dh) { ++ BIO_free(in); ++ goto legacy; ++ } ++ ++ /* Use the generic routine - parses PEM-encoded parameters */ ++ pkey = ossl_pkey_read_generic(in, Qnil); ++ BIO_free(in); ++ if (!pkey) ++ ossl_raise(eDHError, "could not parse pkey"); ++ ++ type = EVP_PKEY_base_id(pkey); ++ if (type != EVP_PKEY_DH) { ++ EVP_PKEY_free(pkey); ++ rb_raise(eDHError, "incorrect pkey type: %s", OBJ_nid2sn(type)); ++ } ++ RTYPEDDATA_DATA(self) = pkey; ++ return self; + } +- if (!EVP_PKEY_assign_DH(pkey, dh)) { +- DH_free(dh); +- ossl_raise(eDHError, NULL); ++ ++ legacy: ++ if (dh) { ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_DH(pkey, dh) != 1) { ++ EVP_PKEY_free(pkey); ++ DH_free(dh); ++ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); ++ } + } ++ RTYPEDDATA_DATA(self) = pkey; + return self; + } + +@@ -110,15 +135,14 @@ ossl_dh_initialize_copy(VALUE self, VALUE other) + DH *dh, *dh_other; + const BIGNUM *pub, *priv; + +- GetPKey(self, pkey); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) +- ossl_raise(eDHError, "DH already initialized"); ++ GetPKey0(self, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + GetDH(other, dh_other); + + dh = DHparams_dup(dh_other); + if (!dh) + ossl_raise(eDHError, "DHparams_dup"); +- EVP_PKEY_assign_DH(pkey, dh); + + DH_get0_key(dh_other, &pub, &priv); + if (pub) { +@@ -133,6 +157,13 @@ ossl_dh_initialize_copy(VALUE self, VALUE other) + DH_set0_key(dh, pub2, priv2); + } + ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_DH(pkey, dh) != 1) { ++ EVP_PKEY_free(pkey); ++ DH_free(dh); ++ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); ++ } ++ RTYPEDDATA_DATA(self) = pkey; + return self; + } + +diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c +index 7af00eebec..1bba6c54b7 100644 +--- a/ext/openssl/ossl_pkey_dsa.c ++++ b/ext/openssl/ossl_pkey_dsa.c +@@ -83,12 +83,16 @@ VALUE eDSAError; + static VALUE + ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) + { +- EVP_PKEY *pkey, *tmp; +- DSA *dsa = NULL; ++ EVP_PKEY *pkey; ++ DSA *dsa; + BIO *in; + VALUE arg, pass; ++ int type; ++ ++ GetPKey0(self, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + +- GetPKey(self, pkey); + /* The DSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ + rb_scan_args(argc, argv, "02", &arg, &pass); + if (argc == 0) { +@@ -97,36 +101,41 @@ ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) + ossl_raise(eDSAError, "DSA_new"); + } + else { +- pass = ossl_pem_passwd_value(pass); +- arg = ossl_to_der_if_possible(arg); +- in = ossl_obj2bio(&arg); +- +- tmp = ossl_pkey_read_generic(in, pass); +- if (tmp) { +- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_DSA) +- rb_raise(eDSAError, "incorrect pkey type: %s", +- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); +- dsa = EVP_PKEY_get1_DSA(tmp); +- EVP_PKEY_free(tmp); ++ pass = ossl_pem_passwd_value(pass); ++ arg = ossl_to_der_if_possible(arg); ++ in = ossl_obj2bio(&arg); ++ ++ dsa = (DSA *)PEM_ASN1_read_bio((d2i_of_void *)d2i_DSAPublicKey, ++ PEM_STRING_DSA_PUBLIC, ++ in, NULL, NULL, NULL); ++ OSSL_BIO_reset(in); ++ if (dsa) ++ goto legacy; ++ ++ pkey = ossl_pkey_read_generic(in, pass); ++ BIO_free(in); ++ if (!pkey) ++ ossl_raise(eDSAError, "Neither PUB key nor PRIV key"); ++ ++ type = EVP_PKEY_base_id(pkey); ++ if (type != EVP_PKEY_DSA) { ++ EVP_PKEY_free(pkey); ++ rb_raise(eDSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); + } +- if (!dsa) { +- OSSL_BIO_reset(in); +-#define PEM_read_bio_DSAPublicKey(bp,x,cb,u) (DSA *)PEM_ASN1_read_bio( \ +- (d2i_of_void *)d2i_DSAPublicKey, PEM_STRING_DSA_PUBLIC, (bp), (void **)(x), (cb), (u)) +- dsa = PEM_read_bio_DSAPublicKey(in, NULL, NULL, NULL); +-#undef PEM_read_bio_DSAPublicKey +- } +- BIO_free(in); +- if (!dsa) { +- ossl_clear_error(); +- ossl_raise(eDSAError, "Neither PUB key nor PRIV key"); +- } +- } +- if (!EVP_PKEY_assign_DSA(pkey, dsa)) { +- DSA_free(dsa); +- ossl_raise(eDSAError, NULL); ++ RTYPEDDATA_DATA(self) = pkey; ++ return self; + } + ++ legacy: ++ if (dsa) { ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_DSA(pkey, dsa) != 1) { ++ EVP_PKEY_free(pkey); ++ DSA_free(dsa); ++ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); ++ } ++ } ++ RTYPEDDATA_DATA(self) = pkey; + return self; + } + +@@ -136,16 +145,24 @@ ossl_dsa_initialize_copy(VALUE self, VALUE other) + EVP_PKEY *pkey; + DSA *dsa, *dsa_new; + +- GetPKey(self, pkey); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) +- ossl_raise(eDSAError, "DSA already initialized"); ++ GetPKey0(self, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + GetDSA(other, dsa); + +- dsa_new = ASN1_dup((i2d_of_void *)i2d_DSAPrivateKey, (d2i_of_void *)d2i_DSAPrivateKey, (char *)dsa); ++ dsa_new = (DSA *)ASN1_dup((i2d_of_void *)i2d_DSAPrivateKey, ++ (d2i_of_void *)d2i_DSAPrivateKey, ++ (char *)dsa); + if (!dsa_new) + ossl_raise(eDSAError, "ASN1_dup"); + +- EVP_PKEY_assign_DSA(pkey, dsa_new); ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_DSA(pkey, dsa_new) != 1) { ++ EVP_PKEY_free(pkey); ++ DSA_free(dsa_new); ++ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); ++ } ++ RTYPEDDATA_DATA(self) = pkey; + + return self; + } +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index f52e67079d..bec9937bc6 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -114,13 +114,16 @@ ossl_ec_key_s_generate(VALUE klass, VALUE arg) + VALUE obj; + + obj = rb_obj_alloc(klass); +- GetPKey(obj, pkey); + + ec = ec_key_new_from_group(arg); +- if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec) != 1) { ++ EVP_PKEY_free(pkey); + EC_KEY_free(ec); + ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); + } ++ RTYPEDDATA_DATA(obj) = pkey; ++ + if (!EC_KEY_generate_key(ec)) + ossl_raise(eECError, "EC_KEY_generate_key"); + +@@ -141,51 +144,55 @@ ossl_ec_key_s_generate(VALUE klass, VALUE arg) + static VALUE ossl_ec_key_initialize(int argc, VALUE *argv, VALUE self) + { + EVP_PKEY *pkey; +- EC_KEY *ec = NULL; ++ EC_KEY *ec; ++ BIO *in; + VALUE arg, pass; ++ int type; + +- GetPKey(self, pkey); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) +- ossl_raise(eECError, "EC_KEY already initialized"); ++ GetPKey0(self, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + + rb_scan_args(argc, argv, "02", &arg, &pass); +- + if (NIL_P(arg)) { + if (!(ec = EC_KEY_new())) +- ossl_raise(eECError, NULL); +- } else if (rb_obj_is_kind_of(arg, cEC)) { +- EC_KEY *other_ec = NULL; +- +- GetEC(arg, other_ec); +- if (!(ec = EC_KEY_dup(other_ec))) +- ossl_raise(eECError, NULL); +- } else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { +- ec = ec_key_new_from_group(arg); +- } else { +- BIO *in = ossl_obj2bio(&arg); +- EVP_PKEY *tmp; ++ ossl_raise(eECError, "EC_KEY_new"); ++ } ++ else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { ++ ec = ec_key_new_from_group(arg); ++ } ++ else { + pass = ossl_pem_passwd_value(pass); +- tmp = ossl_pkey_read_generic(in, pass); +- if (tmp) { +- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_EC) +- rb_raise(eECError, "incorrect pkey type: %s", +- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); +- ec = EVP_PKEY_get1_EC_KEY(tmp); +- EVP_PKEY_free(tmp); ++ arg = ossl_to_der_if_possible(arg); ++ in = ossl_obj2bio(&arg); ++ ++ pkey = ossl_pkey_read_generic(in, pass); ++ BIO_free(in); ++ if (!pkey) { ++ ossl_clear_error(); ++ ec = ec_key_new_from_group(arg); ++ goto legacy; + } +- BIO_free(in); + +- if (!ec) { +- ossl_clear_error(); +- ec = ec_key_new_from_group(arg); +- } ++ type = EVP_PKEY_base_id(pkey); ++ if (type != EVP_PKEY_EC) { ++ EVP_PKEY_free(pkey); ++ rb_raise(eDSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); ++ } ++ RTYPEDDATA_DATA(self) = pkey; ++ return self; + } + +- if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { +- EC_KEY_free(ec); +- ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); ++ legacy: ++ if (ec) { ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec) != 1) { ++ EVP_PKEY_free(pkey); ++ EC_KEY_free(ec); ++ ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); ++ } + } +- ++ RTYPEDDATA_DATA(self) = pkey; + return self; + } + +@@ -195,18 +202,21 @@ ossl_ec_key_initialize_copy(VALUE self, VALUE other) + EVP_PKEY *pkey; + EC_KEY *ec, *ec_new; + +- GetPKey(self, pkey); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) +- ossl_raise(eECError, "EC already initialized"); ++ GetPKey0(self, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + GetEC(other, ec); + + ec_new = EC_KEY_dup(ec); + if (!ec_new) + ossl_raise(eECError, "EC_KEY_dup"); +- if (!EVP_PKEY_assign_EC_KEY(pkey, ec_new)) { +- EC_KEY_free(ec_new); +- ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); ++ ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec_new) != 1) { ++ EC_KEY_free(ec_new); ++ ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); + } ++ RTYPEDDATA_DATA(self) = pkey; + + return self; + } +diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c +index 8ebd3ec559..446150c8af 100644 +--- a/ext/openssl/ossl_pkey_rsa.c ++++ b/ext/openssl/ossl_pkey_rsa.c +@@ -76,12 +76,16 @@ VALUE eRSAError; + static VALUE + ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) + { +- EVP_PKEY *pkey, *tmp; +- RSA *rsa = NULL; ++ EVP_PKEY *pkey; ++ RSA *rsa; + BIO *in; + VALUE arg, pass; ++ int type; ++ ++ GetPKey0(self, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + +- GetPKey(self, pkey); + /* The RSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ + rb_scan_args(argc, argv, "02", &arg, &pass); + if (argc == 0) { +@@ -90,37 +94,45 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) + ossl_raise(eRSAError, "RSA_new"); + } + else { +- pass = ossl_pem_passwd_value(pass); +- arg = ossl_to_der_if_possible(arg); +- in = ossl_obj2bio(&arg); +- +- tmp = ossl_pkey_read_generic(in, pass); +- if (tmp) { +- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_RSA) +- rb_raise(eRSAError, "incorrect pkey type: %s", +- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); +- rsa = EVP_PKEY_get1_RSA(tmp); +- EVP_PKEY_free(tmp); ++ pass = ossl_pem_passwd_value(pass); ++ arg = ossl_to_der_if_possible(arg); ++ in = ossl_obj2bio(&arg); ++ ++ /* First try RSAPublicKey format */ ++ rsa = d2i_RSAPublicKey_bio(in, NULL); ++ OSSL_BIO_reset(in); ++ if (rsa) ++ goto legacy; ++ rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); ++ OSSL_BIO_reset(in); ++ if (rsa) ++ goto legacy; ++ ++ /* Use the generic routine */ ++ pkey = ossl_pkey_read_generic(in, pass); ++ BIO_free(in); ++ if (!pkey) ++ ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); ++ ++ type = EVP_PKEY_base_id(pkey); ++ if (type != EVP_PKEY_RSA) { ++ EVP_PKEY_free(pkey); ++ rb_raise(eRSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); + } +- if (!rsa) { +- OSSL_BIO_reset(in); +- rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); +- } +- if (!rsa) { +- OSSL_BIO_reset(in); +- rsa = d2i_RSAPublicKey_bio(in, NULL); +- } +- BIO_free(in); +- if (!rsa) { +- ossl_clear_error(); +- ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); +- } +- } +- if (!EVP_PKEY_assign_RSA(pkey, rsa)) { +- RSA_free(rsa); +- ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); ++ RTYPEDDATA_DATA(self) = pkey; ++ return self; + } + ++ legacy: ++ if (rsa) { ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_RSA(pkey, rsa) != 1) { ++ EVP_PKEY_free(pkey); ++ RSA_free(rsa); ++ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); ++ } ++ } ++ RTYPEDDATA_DATA(self) = pkey; + return self; + } + +@@ -130,16 +142,23 @@ ossl_rsa_initialize_copy(VALUE self, VALUE other) + EVP_PKEY *pkey; + RSA *rsa, *rsa_new; + +- GetPKey(self, pkey); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) +- ossl_raise(eRSAError, "RSA already initialized"); ++ GetPKey0(self, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + GetRSA(other, rsa); + +- rsa_new = ASN1_dup((i2d_of_void *)i2d_RSAPrivateKey, (d2i_of_void *)d2i_RSAPrivateKey, (char *)rsa); ++ rsa_new = (RSA *)ASN1_dup((i2d_of_void *)i2d_RSAPrivateKey, ++ (d2i_of_void *)d2i_RSAPrivateKey, ++ (char *)rsa); + if (!rsa_new) + ossl_raise(eRSAError, "ASN1_dup"); + +- EVP_PKEY_assign_RSA(pkey, rsa_new); ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_RSA(pkey, rsa_new) != 1) { ++ RSA_free(rsa_new); ++ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); ++ } ++ RTYPEDDATA_DATA(self) = pkey; + + return self; + } +-- +2.32.0 + + +From 0ea28ac73e094bbb379b0915a67d44582e5e20da Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Thu, 22 Apr 2021 18:29:30 +0900 +Subject: [PATCH 08/10] pkey: deprecate OpenSSL::PKey::{RSA,DSA,DH}#set_* + methods + +The underlying OpenSSL functions, {RSA,DSA,DH}_set_*() are removed in +OpenSSL 3.0. + +Since the plan is to make EVP_PKEY immutable, there will be no direct +replacement for them and we have no choice here. + +It is suggested for users to use OpenSSL::PKey.from_data instead, +which construct a pkey from all necessary parameters at once. +--- + ext/openssl/ossl_pkey.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h +index ac386717d7..f6ad961937 100644 +--- a/ext/openssl/ossl_pkey.h ++++ b/ext/openssl/ossl_pkey.h +@@ -130,6 +130,8 @@ static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2, VALU + BIGNUM *bn2 = NULL, *orig_bn2 = NIL_P(v2) ? NULL : GetBNPtr(v2);\ + BIGNUM *bn3 = NULL, *orig_bn3 = NIL_P(v3) ? NULL : GetBNPtr(v3);\ + \ ++ rb_warning(#_keytype"#set_"#_group"= is incompatible with " \ ++ "OpenSSL 3.0; check OpenSSL::PKey.from_data"); \ + Get##_type(self, obj); \ + if ((orig_bn1 && !(bn1 = BN_dup(orig_bn1))) || \ + (orig_bn2 && !(bn2 = BN_dup(orig_bn2))) || \ +@@ -160,6 +162,8 @@ static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2) \ + BIGNUM *bn1 = NULL, *orig_bn1 = NIL_P(v1) ? NULL : GetBNPtr(v1);\ + BIGNUM *bn2 = NULL, *orig_bn2 = NIL_P(v2) ? NULL : GetBNPtr(v2);\ + \ ++ rb_warning(#_keytype"#set_"#_group"= is incompatible with " \ ++ "OpenSSL 3.0; check OpenSSL::PKey.from_data"); \ + Get##_type(self, obj); \ + if ((orig_bn1 && !(bn1 = BN_dup(orig_bn1))) || \ + (orig_bn2 && !(bn2 = BN_dup(orig_bn2)))) { \ +-- +2.32.0 + + +From 6fda9b5c292fbaae2eb7d6c8e15f1ff53ae7e50c Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Tue, 21 Sep 2021 18:29:59 +0900 +Subject: [PATCH 09/10] test/openssl/test_pkey_ec: update test_check_key for + OpenSSL 3.0 + +OpenSSL::PKey::EC#generate_key! or #private_key= will not work on +OpenSSL 3.0. +--- + test/openssl/test_pkey_ec.rb | 32 +++++++++++++++++++------------- + 1 file changed, 19 insertions(+), 13 deletions(-) + +diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb +index d62f1b5eb8..730ad28062 100644 +--- a/test/openssl/test_pkey_ec.rb ++++ b/test/openssl/test_pkey_ec.rb +@@ -60,22 +60,28 @@ def test_marshal + end + + def test_check_key +- key = OpenSSL::PKey::EC.new("prime256v1").generate_key! +- assert_equal(true, key.check_key) +- assert_equal(true, key.private?) +- assert_equal(true, key.public?) +- key2 = OpenSSL::PKey::EC.new(key.group) +- assert_equal(false, key2.private?) +- assert_equal(false, key2.public?) +- key2.public_key = key.public_key +- assert_equal(false, key2.private?) +- assert_equal(true, key2.public?) +- key2.private_key = key.private_key ++ key0 = Fixtures.pkey("p256") ++ assert_equal(true, key0.check_key) ++ assert_equal(true, key0.private?) ++ assert_equal(true, key0.public?) ++ ++ key1 = OpenSSL::PKey.read(key0.public_to_der) ++ assert_equal(true, key1.check_key) ++ assert_equal(false, key1.private?) ++ assert_equal(true, key1.public?) ++ ++ key2 = OpenSSL::PKey.read(key0.private_to_der) + assert_equal(true, key2.private?) + assert_equal(true, key2.public?) + assert_equal(true, key2.check_key) +- key2.private_key += 1 +- assert_raise(OpenSSL::PKey::ECError) { key2.check_key } ++ ++ # EC#private_key= is deprecated in 3.0 and won't work on OpenSSL 3.0 ++ if !openssl?(3, 0, 0) ++ EnvUtil.suppress_warning do ++ key2.private_key += 1 ++ assert_raise(OpenSSL::PKey::ECError) { key2.check_key } ++ end ++ end + end + + def test_sign_verify +-- +2.32.0 + + +From b63c0cb012981613463bdf4d80dcaedfa494a0d0 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 22 Oct 2021 16:24:07 +0900 +Subject: [PATCH 10/10] pkey/dh: deprecate OpenSSL::PKey::DH#generate_key! + +OpenSSL 3.0.0 has made keys immutable, so PKey::DH#generate_key! can't +work on it anymore. + +It's advised to use OpenSSL::PKey.generate_key instead. +--- + ext/openssl/lib/openssl/pkey.rb | 26 ++++++++++++++++++++++---- + test/openssl/test_pkey_dh.rb | 33 ++++++++++++++++++--------------- + 2 files changed, 40 insertions(+), 19 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index f6bf5892b0..cad376855d 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -61,14 +61,32 @@ def compute_key(pub_bn) + # called first in order to generate the per-session keys before performing + # the actual key exchange. + # ++ # Deprecated in version 3.0. This method is incompatible with ++ # OpenSSL 3.0.0 or later. ++ # + # See also OpenSSL::PKey.generate_key. + # + # Example: +- # dh = OpenSSL::PKey::DH.new(2048) +- # public_key = dh.public_key #contains no private/public key yet +- # public_key.generate_key! +- # puts public_key.private? # => true ++ # # DEPRECATED USAGE: This will not work on OpenSSL 3.0 or later ++ # dh0 = OpenSSL::PKey::DH.new(2048) ++ # dh = dh0.public_key # #public_key only copies the DH parameters (contrary to the name) ++ # dh.generate_key! ++ # puts dh.private? # => true ++ # puts dh0.pub_key == dh.pub_key #=> false ++ # ++ # # With OpenSSL::PKey.generate_key ++ # dh0 = OpenSSL::PKey::DH.new(2048) ++ # dh = OpenSSL::PKey.generate_key(dh0) ++ # puts dh0.pub_key == dh.pub_key #=> false + def generate_key! ++ msg = "OpenSSL::PKey::DH is immutable on OpenSSL 3.0; " \ ++ "use OpenSSL::PKey.generate_key instead" ++ if OpenSSL::OPENSSL_VERSION_NUMBER >= 0x30000000 ++ raise DHError, msg ++ else ++ warn "#{caller(1, 1)[0]}: warning: #{msg}" ++ end ++ + unless priv_key + tmp = OpenSSL::PKey.generate_key(self) + set_key(tmp.pub_key, tmp.priv_key) +diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb +index 757704caf6..248f4ebb42 100644 +--- a/test/openssl/test_pkey_dh.rb ++++ b/test/openssl/test_pkey_dh.rb +@@ -26,14 +26,19 @@ def test_new_break + end + + def test_derive_key +- dh1 = Fixtures.pkey("dh1024").generate_key! +- dh2 = Fixtures.pkey("dh1024").generate_key! ++ params = Fixtures.pkey("dh1024") ++ dh1 = OpenSSL::PKey.generate_key(params) ++ dh2 = OpenSSL::PKey.generate_key(params) + dh1_pub = OpenSSL::PKey.read(dh1.public_to_der) + dh2_pub = OpenSSL::PKey.read(dh2.public_to_der) ++ + z = dh1.g.mod_exp(dh1.priv_key, dh1.p).mod_exp(dh2.priv_key, dh1.p).to_s(2) + assert_equal z, dh1.derive(dh2_pub) + assert_equal z, dh2.derive(dh1_pub) + ++ assert_raise(OpenSSL::PKey::PKeyError) { params.derive(dh1_pub) } ++ assert_raise(OpenSSL::PKey::PKeyError) { dh1_pub.derive(params) } ++ + assert_equal z, dh1.compute_key(dh2.pub_key) + assert_equal z, dh2.compute_key(dh1.pub_key) + end +@@ -74,19 +79,17 @@ def test_public_key + end + + def test_generate_key +- dh = Fixtures.pkey("dh1024").public_key # creates a copy +- assert_no_key(dh) +- dh.generate_key! +- assert_key(dh) +- end +- +- def test_key_exchange +- dh = Fixtures.pkey("dh1024") +- dh2 = dh.public_key +- dh.generate_key! +- dh2.generate_key! +- assert_equal(dh.compute_key(dh2.pub_key), dh2.compute_key(dh.pub_key)) +- end ++ EnvUtil.suppress_warning { # Deprecated in v3.0.0; incompatible with OpenSSL 3.0 ++ dh = Fixtures.pkey("dh1024").public_key # creates a copy with params only ++ assert_no_key(dh) ++ dh.generate_key! ++ assert_key(dh) ++ ++ dh2 = dh.public_key ++ dh2.generate_key! ++ assert_equal(dh.compute_key(dh2.pub_key), dh2.compute_key(dh.pub_key)) ++ } ++ end if !openssl?(3, 0, 0) + + def test_params_ok? + dh0 = Fixtures.pkey("dh1024") +-- +2.32.0 + diff --git a/ruby-3.1.0-Use-EVP-API-in-more-places.patch b/ruby-3.1.0-Use-EVP-API-in-more-places.patch new file mode 100644 index 0000000..4938949 --- /dev/null +++ b/ruby-3.1.0-Use-EVP-API-in-more-places.patch @@ -0,0 +1,831 @@ +From cf070378020088cd7e69b1cb08be68152ab8a078 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sun, 17 May 2020 18:25:38 +0900 +Subject: [PATCH 1/3] pkey: implement #to_text using EVP API + +Use EVP_PKEY_print_private() instead of the low-level API *_print() +functions, such as RSA_print(). + +EVP_PKEY_print_*() family was added in OpenSSL 1.0.0. + +Note that it falls back to EVP_PKEY_print_public() and +EVP_PKEY_print_params() as necessary. This is required for EVP_PKEY_DH +type for which _private() fails if the private component is not set in +the pkey object. + +Since the new API works in the same way for all key types, we now +implement #to_text in the base class OpenSSL::PKey::PKey rather than in +each subclass. +--- + ext/openssl/ossl_pkey.c | 38 +++++++++++++++++++++++++++++++++++++ + ext/openssl/ossl_pkey_dh.c | 29 ---------------------------- + ext/openssl/ossl_pkey_dsa.c | 29 ---------------------------- + ext/openssl/ossl_pkey_ec.c | 27 -------------------------- + ext/openssl/ossl_pkey_rsa.c | 31 ------------------------------ + test/openssl/test_pkey.rb | 5 +++++ + 6 files changed, 43 insertions(+), 116 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index f9282b9417..21cd4b2cda 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -539,6 +539,43 @@ ossl_pkey_inspect(VALUE self) + OBJ_nid2sn(nid)); + } + ++/* ++ * call-seq: ++ * pkey.to_text -> string ++ * ++ * Dumps key parameters, public key, and private key components contained in ++ * the key into a human-readable text. ++ * ++ * This is intended for debugging purpose. ++ * ++ * See also the man page EVP_PKEY_print_private(3). ++ */ ++static VALUE ++ossl_pkey_to_text(VALUE self) ++{ ++ EVP_PKEY *pkey; ++ BIO *bio; ++ ++ GetPKey(self, pkey); ++ if (!(bio = BIO_new(BIO_s_mem()))) ++ ossl_raise(ePKeyError, "BIO_new"); ++ ++ if (EVP_PKEY_print_private(bio, pkey, 0, NULL) == 1) ++ goto out; ++ OSSL_BIO_reset(bio); ++ if (EVP_PKEY_print_public(bio, pkey, 0, NULL) == 1) ++ goto out; ++ OSSL_BIO_reset(bio); ++ if (EVP_PKEY_print_params(bio, pkey, 0, NULL) == 1) ++ goto out; ++ ++ BIO_free(bio); ++ ossl_raise(ePKeyError, "EVP_PKEY_print_params"); ++ ++ out: ++ return ossl_membio2str(bio); ++} ++ + VALUE + ossl_pkey_export_traditional(int argc, VALUE *argv, VALUE self, int to_der) + { +@@ -1039,6 +1076,7 @@ Init_ossl_pkey(void) + rb_define_method(cPKey, "initialize", ossl_pkey_initialize, 0); + rb_define_method(cPKey, "oid", ossl_pkey_oid, 0); + rb_define_method(cPKey, "inspect", ossl_pkey_inspect, 0); ++ rb_define_method(cPKey, "to_text", ossl_pkey_to_text, 0); + rb_define_method(cPKey, "private_to_der", ossl_pkey_private_to_der, -1); + rb_define_method(cPKey, "private_to_pem", ossl_pkey_private_to_pem, -1); + rb_define_method(cPKey, "public_to_der", ossl_pkey_public_to_der, 0); +diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c +index 6b477b077c..acd3bf474e 100644 +--- a/ext/openssl/ossl_pkey_dh.c ++++ b/ext/openssl/ossl_pkey_dh.c +@@ -266,34 +266,6 @@ ossl_dh_get_params(VALUE self) + return hash; + } + +-/* +- * call-seq: +- * dh.to_text -> aString +- * +- * Prints all parameters of key to buffer +- * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!! +- * Don't use :-)) (I's up to you) +- */ +-static VALUE +-ossl_dh_to_text(VALUE self) +-{ +- DH *dh; +- BIO *out; +- VALUE str; +- +- GetDH(self, dh); +- if (!(out = BIO_new(BIO_s_mem()))) { +- ossl_raise(eDHError, NULL); +- } +- if (!DHparams_print(out, dh)) { +- BIO_free(out); +- ossl_raise(eDHError, NULL); +- } +- str = ossl_membio2str(out); +- +- return str; +-} +- + /* + * call-seq: + * dh.public_key -> aDH +@@ -426,7 +398,6 @@ Init_ossl_dh(void) + rb_define_method(cDH, "initialize_copy", ossl_dh_initialize_copy, 1); + rb_define_method(cDH, "public?", ossl_dh_is_public, 0); + rb_define_method(cDH, "private?", ossl_dh_is_private, 0); +- rb_define_method(cDH, "to_text", ossl_dh_to_text, 0); + rb_define_method(cDH, "export", ossl_dh_export, 0); + rb_define_alias(cDH, "to_pem", "export"); + rb_define_alias(cDH, "to_s", "export"); +diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c +index 1c5a8a737e..f017cceb4a 100644 +--- a/ext/openssl/ossl_pkey_dsa.c ++++ b/ext/openssl/ossl_pkey_dsa.c +@@ -264,34 +264,6 @@ ossl_dsa_get_params(VALUE self) + return hash; + } + +-/* +- * call-seq: +- * dsa.to_text -> aString +- * +- * Prints all parameters of key to buffer +- * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!! +- * Don't use :-)) (I's up to you) +- */ +-static VALUE +-ossl_dsa_to_text(VALUE self) +-{ +- DSA *dsa; +- BIO *out; +- VALUE str; +- +- GetDSA(self, dsa); +- if (!(out = BIO_new(BIO_s_mem()))) { +- ossl_raise(eDSAError, NULL); +- } +- if (!DSA_print(out, dsa, 0)) { /* offset = 0 */ +- BIO_free(out); +- ossl_raise(eDSAError, NULL); +- } +- str = ossl_membio2str(out); +- +- return str; +-} +- + /* + * call-seq: + * dsa.public_key -> aDSA +@@ -469,7 +441,6 @@ Init_ossl_dsa(void) + + rb_define_method(cDSA, "public?", ossl_dsa_is_public, 0); + rb_define_method(cDSA, "private?", ossl_dsa_is_private, 0); +- rb_define_method(cDSA, "to_text", ossl_dsa_to_text, 0); + rb_define_method(cDSA, "export", ossl_dsa_export, -1); + rb_define_alias(cDSA, "to_pem", "export"); + rb_define_alias(cDSA, "to_s", "export"); +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index c2534251c3..ecb8305184 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -417,32 +417,6 @@ ossl_ec_key_to_der(VALUE self) + else + return ossl_pkey_export_spki(self, 1); + } +- +-/* +- * call-seq: +- * key.to_text => String +- * +- * See the OpenSSL documentation for EC_KEY_print() +- */ +-static VALUE ossl_ec_key_to_text(VALUE self) +-{ +- EC_KEY *ec; +- BIO *out; +- VALUE str; +- +- GetEC(self, ec); +- if (!(out = BIO_new(BIO_s_mem()))) { +- ossl_raise(eECError, "BIO_new(BIO_s_mem())"); +- } +- if (!EC_KEY_print(out, ec, 0)) { +- BIO_free(out); +- ossl_raise(eECError, "EC_KEY_print"); +- } +- str = ossl_membio2str(out); +- +- return str; +-} +- + /* + * call-seq: + * key.generate_key! => self +@@ -1633,7 +1607,6 @@ void Init_ossl_ec(void) + rb_define_method(cEC, "export", ossl_ec_key_export, -1); + rb_define_alias(cEC, "to_pem", "export"); + rb_define_method(cEC, "to_der", ossl_ec_key_to_der, 0); +- rb_define_method(cEC, "to_text", ossl_ec_key_to_text, 0); + + + rb_define_alloc_func(cEC_GROUP, ossl_ec_group_alloc); +diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c +index 43f82cb29e..7a7e66dbda 100644 +--- a/ext/openssl/ossl_pkey_rsa.c ++++ b/ext/openssl/ossl_pkey_rsa.c +@@ -587,36 +587,6 @@ ossl_rsa_get_params(VALUE self) + return hash; + } + +-/* +- * call-seq: +- * rsa.to_text => String +- * +- * THIS METHOD IS INSECURE, PRIVATE INFORMATION CAN LEAK OUT!!! +- * +- * Dumps all parameters of a keypair to a String +- * +- * Don't use :-)) (It's up to you) +- */ +-static VALUE +-ossl_rsa_to_text(VALUE self) +-{ +- RSA *rsa; +- BIO *out; +- VALUE str; +- +- GetRSA(self, rsa); +- if (!(out = BIO_new(BIO_s_mem()))) { +- ossl_raise(eRSAError, NULL); +- } +- if (!RSA_print(out, rsa, 0)) { /* offset = 0 */ +- BIO_free(out); +- ossl_raise(eRSAError, NULL); +- } +- str = ossl_membio2str(out); +- +- return str; +-} +- + /* + * call-seq: + * rsa.public_key -> RSA +@@ -738,7 +708,6 @@ Init_ossl_rsa(void) + + rb_define_method(cRSA, "public?", ossl_rsa_is_public, 0); + rb_define_method(cRSA, "private?", ossl_rsa_is_private, 0); +- rb_define_method(cRSA, "to_text", ossl_rsa_to_text, 0); + rb_define_method(cRSA, "export", ossl_rsa_export, -1); + rb_define_alias(cRSA, "to_pem", "export"); + rb_define_alias(cRSA, "to_s", "export"); +diff --git a/test/openssl/test_pkey.rb b/test/openssl/test_pkey.rb +index 5307fe5b08..3630458b3c 100644 +--- a/test/openssl/test_pkey.rb ++++ b/test/openssl/test_pkey.rb +@@ -151,4 +151,9 @@ def test_x25519 + assert_equal bob_pem, bob.public_to_pem + assert_equal [shared_secret].pack("H*"), alice.derive(bob) + end ++ ++ def test_to_text ++ rsa = Fixtures.pkey("rsa1024") ++ assert_include rsa.to_text, "publicExponent" ++ end + end +-- +2.32.0 + + +From 0c45b22e485bfa62f4d704b08e3704e6444118c4 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Thu, 15 Apr 2021 19:11:32 +0900 +Subject: [PATCH 2/3] pkey: implement {DH,DSA,RSA}#public_key in Ruby + +The low-level API that is used to implement #public_key is deprecated +in OpenSSL 3.0. It is actually very simple to implement in another way, +using existing methods only, in much shorter code. Let's do it. + +While we are at it, the documentation is updated to recommend against +using #public_key. Now that OpenSSL::PKey::PKey implements public_to_der +method, there is no real use case for #public_key in newly written Ruby +programs. +--- + ext/openssl/lib/openssl/pkey.rb | 55 ++++++++++++++++++++++++++++ + ext/openssl/ossl_pkey_dh.c | 63 +++++++-------------------------- + ext/openssl/ossl_pkey_dsa.c | 42 ---------------------- + ext/openssl/ossl_pkey_rsa.c | 58 +----------------------------- + test/openssl/test_pkey_rsa.rb | 37 ++++++++++--------- + 5 files changed, 87 insertions(+), 168 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index 53ee52f98b..569559e1ce 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -10,6 +10,30 @@ module OpenSSL::PKey + class DH + include OpenSSL::Marshal + ++ # :call-seq: ++ # dh.public_key -> dhnew ++ # ++ # Returns a new DH instance that carries just the \DH parameters. ++ # ++ # Contrary to the method name, the returned DH object contains only ++ # parameters and not the public key. ++ # ++ # This method is provided for backwards compatibility. In most cases, there ++ # is no need to call this method. ++ # ++ # For the purpose of re-generating the key pair while keeping the ++ # parameters, check OpenSSL::PKey.generate_key. ++ # ++ # Example: ++ # # OpenSSL::PKey::DH.generate by default generates a random key pair ++ # dh1 = OpenSSL::PKey::DH.generate(2048) ++ # p dh1.priv_key #=> # ++ # dhcopy = dh1.public_key ++ # p dhcopy.priv_key #=> nil ++ def public_key ++ DH.new(to_der) ++ end ++ + # :call-seq: + # dh.compute_key(pub_bn) -> string + # +@@ -89,6 +113,22 @@ def new(*args, &blk) # :nodoc: + class DSA + include OpenSSL::Marshal + ++ # :call-seq: ++ # dsa.public_key -> dsanew ++ # ++ # Returns a new DSA instance that carries just the \DSA parameters and the ++ # public key. ++ # ++ # This method is provided for backwards compatibility. In most cases, there ++ # is no need to call this method. ++ # ++ # For the purpose of serializing the public key, to PEM or DER encoding of ++ # X.509 SubjectPublicKeyInfo format, check PKey#public_to_pem and ++ # PKey#public_to_der. ++ def public_key ++ OpenSSL::PKey.read(public_to_der) ++ end ++ + class << self + # :call-seq: + # DSA.generate(size) -> dsa +@@ -159,6 +199,21 @@ def to_bn(conversion_form = group.point_conversion_form) + class RSA + include OpenSSL::Marshal + ++ # :call-seq: ++ # rsa.public_key -> rsanew ++ # ++ # Returns a new RSA instance that carries just the public key components. ++ # ++ # This method is provided for backwards compatibility. In most cases, there ++ # is no need to call this method. ++ # ++ # For the purpose of serializing the public key, to PEM or DER encoding of ++ # X.509 SubjectPublicKeyInfo format, check PKey#public_to_pem and ++ # PKey#public_to_der. ++ def public_key ++ OpenSSL::PKey.read(public_to_der) ++ end ++ + class << self + # :call-seq: + # RSA.generate(size, exponent = 65537) -> RSA +diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c +index acd3bf474e..a512b209d3 100644 +--- a/ext/openssl/ossl_pkey_dh.c ++++ b/ext/openssl/ossl_pkey_dh.c +@@ -266,48 +266,6 @@ ossl_dh_get_params(VALUE self) + return hash; + } + +-/* +- * call-seq: +- * dh.public_key -> aDH +- * +- * Returns a new DH instance that carries just the public information, i.e. +- * the prime _p_ and the generator _g_, but no public/private key yet. Such +- * a pair may be generated using DH#generate_key!. The "public key" needed +- * for a key exchange with DH#compute_key is considered as per-session +- * information and may be retrieved with DH#pub_key once a key pair has +- * been generated. +- * If the current instance already contains private information (and thus a +- * valid public/private key pair), this information will no longer be present +- * in the new instance generated by DH#public_key. This feature is helpful for +- * publishing the Diffie-Hellman parameters without leaking any of the private +- * per-session information. +- * +- * === Example +- * dh = OpenSSL::PKey::DH.new(2048) # has public and private key set +- * public_key = dh.public_key # contains only prime and generator +- * parameters = public_key.to_der # it's safe to publish this +- */ +-static VALUE +-ossl_dh_to_public_key(VALUE self) +-{ +- EVP_PKEY *pkey; +- DH *orig_dh, *dh; +- VALUE obj; +- +- obj = rb_obj_alloc(rb_obj_class(self)); +- GetPKey(obj, pkey); +- +- GetDH(self, orig_dh); +- dh = DHparams_dup(orig_dh); +- if (!dh) +- ossl_raise(eDHError, "DHparams_dup"); +- if (!EVP_PKEY_assign_DH(pkey, dh)) { +- DH_free(dh); +- ossl_raise(eDHError, "EVP_PKEY_assign_DH"); +- } +- return obj; +-} +- + /* + * call-seq: + * dh.params_ok? -> true | false +@@ -384,14 +342,20 @@ Init_ossl_dh(void) + * The per-session private key, an OpenSSL::BN. + * + * === Example of a key exchange +- * dh1 = OpenSSL::PKey::DH.new(2048) +- * der = dh1.public_key.to_der #you may send this publicly to the participating party +- * dh2 = OpenSSL::PKey::DH.new(der) +- * dh2.generate_key! #generate the per-session key pair +- * symm_key1 = dh1.compute_key(dh2.pub_key) +- * symm_key2 = dh2.compute_key(dh1.pub_key) ++ * # you may send the parameters (der) and own public key (pub1) publicly ++ * # to the participating party ++ * dh1 = OpenSSL::PKey::DH.new(2048) ++ * der = dh1.to_der ++ * pub1 = dh1.pub_key ++ * ++ * # the other party generates its per-session key pair ++ * dhparams = OpenSSL::PKey::DH.new(der) ++ * dh2 = OpenSSL::PKey.generate_key(dhparams) ++ * pub2 = dh2.pub_key + * +- * puts symm_key1 == symm_key2 # => true ++ * symm_key1 = dh1.compute_key(pub2) ++ * symm_key2 = dh2.compute_key(pub1) ++ * puts symm_key1 == symm_key2 # => true + */ + cDH = rb_define_class_under(mPKey, "DH", cPKey); + rb_define_method(cDH, "initialize", ossl_dh_initialize, -1); +@@ -402,7 +366,6 @@ Init_ossl_dh(void) + rb_define_alias(cDH, "to_pem", "export"); + rb_define_alias(cDH, "to_s", "export"); + rb_define_method(cDH, "to_der", ossl_dh_to_der, 0); +- rb_define_method(cDH, "public_key", ossl_dh_to_public_key, 0); + rb_define_method(cDH, "params_ok?", ossl_dh_check_params, 0); + + DEF_OSSL_PKEY_BN(cDH, dh, p); +diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c +index f017cceb4a..ab9ac781e8 100644 +--- a/ext/openssl/ossl_pkey_dsa.c ++++ b/ext/openssl/ossl_pkey_dsa.c +@@ -264,47 +264,6 @@ ossl_dsa_get_params(VALUE self) + return hash; + } + +-/* +- * call-seq: +- * dsa.public_key -> aDSA +- * +- * Returns a new DSA instance that carries just the public key information. +- * If the current instance has also private key information, this will no +- * longer be present in the new instance. This feature is helpful for +- * publishing the public key information without leaking any of the private +- * information. +- * +- * === Example +- * dsa = OpenSSL::PKey::DSA.new(2048) # has public and private information +- * pub_key = dsa.public_key # has only the public part available +- * pub_key_der = pub_key.to_der # it's safe to publish this +- * +- * +- */ +-static VALUE +-ossl_dsa_to_public_key(VALUE self) +-{ +- EVP_PKEY *pkey, *pkey_new; +- DSA *dsa; +- VALUE obj; +- +- GetPKeyDSA(self, pkey); +- obj = rb_obj_alloc(rb_obj_class(self)); +- GetPKey(obj, pkey_new); +- +-#define DSAPublicKey_dup(dsa) (DSA *)ASN1_dup( \ +- (i2d_of_void *)i2d_DSAPublicKey, (d2i_of_void *)d2i_DSAPublicKey, (char *)(dsa)) +- dsa = DSAPublicKey_dup(EVP_PKEY_get0_DSA(pkey)); +-#undef DSAPublicKey_dup +- if (!dsa) +- ossl_raise(eDSAError, "DSAPublicKey_dup"); +- if (!EVP_PKEY_assign_DSA(pkey_new, dsa)) { +- DSA_free(dsa); +- ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); +- } +- return obj; +-} +- + /* + * call-seq: + * dsa.syssign(string) -> aString +@@ -445,7 +404,6 @@ Init_ossl_dsa(void) + rb_define_alias(cDSA, "to_pem", "export"); + rb_define_alias(cDSA, "to_s", "export"); + rb_define_method(cDSA, "to_der", ossl_dsa_to_der, 0); +- rb_define_method(cDSA, "public_key", ossl_dsa_to_public_key, 0); + rb_define_method(cDSA, "syssign", ossl_dsa_sign, 1); + rb_define_method(cDSA, "sysverify", ossl_dsa_verify, 2); + +diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c +index 7a7e66dbda..1c5476cdcd 100644 +--- a/ext/openssl/ossl_pkey_rsa.c ++++ b/ext/openssl/ossl_pkey_rsa.c +@@ -390,7 +390,7 @@ ossl_rsa_private_decrypt(int argc, VALUE *argv, VALUE self) + * data = "Sign me!" + * pkey = OpenSSL::PKey::RSA.new(2048) + * signature = pkey.sign_pss("SHA256", data, salt_length: :max, mgf1_hash: "SHA256") +- * pub_key = pkey.public_key ++ * pub_key = OpenSSL::PKey.read(pkey.public_to_der) + * puts pub_key.verify_pss("SHA256", signature, data, + * salt_length: :auto, mgf1_hash: "SHA256") # => true + */ +@@ -587,61 +587,6 @@ ossl_rsa_get_params(VALUE self) + return hash; + } + +-/* +- * call-seq: +- * rsa.public_key -> RSA +- * +- * Makes new RSA instance containing the public key from the private key. +- */ +-static VALUE +-ossl_rsa_to_public_key(VALUE self) +-{ +- EVP_PKEY *pkey, *pkey_new; +- RSA *rsa; +- VALUE obj; +- +- GetPKeyRSA(self, pkey); +- obj = rb_obj_alloc(rb_obj_class(self)); +- GetPKey(obj, pkey_new); +- +- rsa = RSAPublicKey_dup(EVP_PKEY_get0_RSA(pkey)); +- if (!rsa) +- ossl_raise(eRSAError, "RSAPublicKey_dup"); +- if (!EVP_PKEY_assign_RSA(pkey_new, rsa)) { +- RSA_free(rsa); +- ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); +- } +- return obj; +-} +- +-/* +- * TODO: Test me +- +-static VALUE +-ossl_rsa_blinding_on(VALUE self) +-{ +- RSA *rsa; +- +- GetRSA(self, rsa); +- +- if (RSA_blinding_on(rsa, ossl_bn_ctx) != 1) { +- ossl_raise(eRSAError, NULL); +- } +- return self; +-} +- +-static VALUE +-ossl_rsa_blinding_off(VALUE self) +-{ +- RSA *rsa; +- +- GetRSA(self, rsa); +- RSA_blinding_off(rsa); +- +- return self; +-} +- */ +- + /* + * Document-method: OpenSSL::PKey::RSA#set_key + * call-seq: +@@ -712,7 +657,6 @@ Init_ossl_rsa(void) + rb_define_alias(cRSA, "to_pem", "export"); + rb_define_alias(cRSA, "to_s", "export"); + rb_define_method(cRSA, "to_der", ossl_rsa_to_der, 0); +- rb_define_method(cRSA, "public_key", ossl_rsa_to_public_key, 0); + rb_define_method(cRSA, "public_encrypt", ossl_rsa_public_encrypt, -1); + rb_define_method(cRSA, "public_decrypt", ossl_rsa_public_decrypt, -1); + rb_define_method(cRSA, "private_encrypt", ossl_rsa_private_encrypt, -1); +diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb +index d1e68dbc9f..5f8d04e754 100644 +--- a/test/openssl/test_pkey_rsa.rb ++++ b/test/openssl/test_pkey_rsa.rb +@@ -69,29 +69,28 @@ def test_private + end + + def test_new +- key = OpenSSL::PKey::RSA.new 512 +- pem = key.public_key.to_pem +- OpenSSL::PKey::RSA.new pem +- assert_equal([], OpenSSL.errors) +- end ++ key = OpenSSL::PKey::RSA.new(512) ++ assert_equal 512, key.n.num_bits ++ assert_equal 65537, key.e ++ assert_not_nil key.d + +- def test_new_exponent_default +- assert_equal(65537, OpenSSL::PKey::RSA.new(512).e) ++ # Specify public exponent ++ key2 = OpenSSL::PKey::RSA.new(512, 3) ++ assert_equal 512, key2.n.num_bits ++ assert_equal 3, key2.e ++ assert_not_nil key2.d + end + +- def test_new_with_exponent +- 1.upto(30) do |idx| +- e = (2 ** idx) + 1 +- key = OpenSSL::PKey::RSA.new(512, e) +- assert_equal(e, key.e) +- end +- end ++ def test_s_generate ++ key1 = OpenSSL::PKey::RSA.generate(512) ++ assert_equal 512, key1.n.num_bits ++ assert_equal 65537, key1.e + +- def test_generate +- key = OpenSSL::PKey::RSA.generate(512, 17) +- assert_equal 512, key.n.num_bits +- assert_equal 17, key.e +- assert_not_nil key.d ++ # Specify public exponent ++ key2 = OpenSSL::PKey::RSA.generate(512, 3) ++ assert_equal 512, key2.n.num_bits ++ assert_equal 3, key2.e ++ assert_not_nil key2.d + end + + def test_new_break +-- +2.32.0 + + +From 2150af0e55b2a25c24f62006e27e0aec3dc81b57 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 10 Jul 2020 14:34:51 +0900 +Subject: [PATCH 3/3] pkey/dh, pkey/ec: use EVP_PKEY_check() family + +Use EVP_PKEY_param_check() instead of DH_check() if available. Also, +use EVP_PKEY_public_check() instead of EC_KEY_check_key(). + +EVP_PKEY_*check() is part of the EVP API and is meant to replace those +low-level functions. They were added by OpenSSL 1.1.1. It is currently +not provided by LibreSSL. +--- + ext/openssl/extconf.rb | 3 +++ + ext/openssl/ossl_pkey_dh.c | 27 +++++++++++++++++++++++---- + ext/openssl/ossl_pkey_ec.c | 23 +++++++++++++++++++---- + test/openssl/test_pkey_dh.rb | 16 ++++++++++++++++ + 4 files changed, 61 insertions(+), 8 deletions(-) + +diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb +index b3c6647faf..17d93443fc 100644 +--- a/ext/openssl/extconf.rb ++++ b/ext/openssl/extconf.rb +@@ -173,6 +173,9 @@ def find_openssl_library + have_func("EVP_PBE_scrypt") + have_func("SSL_CTX_set_post_handshake_auth") + ++# added in 1.1.1 ++have_func("EVP_PKEY_check") ++ + Logging::message "=== Checking done. ===\n" + + create_header +diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c +index a512b209d3..ca782bbe59 100644 +--- a/ext/openssl/ossl_pkey_dh.c ++++ b/ext/openssl/ossl_pkey_dh.c +@@ -273,19 +273,38 @@ ossl_dh_get_params(VALUE self) + * Validates the Diffie-Hellman parameters associated with this instance. + * It checks whether a safe prime and a suitable generator are used. If this + * is not the case, +false+ is returned. ++ * ++ * See also the man page EVP_PKEY_param_check(3). + */ + static VALUE + ossl_dh_check_params(VALUE self) + { ++ int ret; ++#ifdef HAVE_EVP_PKEY_CHECK ++ EVP_PKEY *pkey; ++ EVP_PKEY_CTX *pctx; ++ ++ GetPKey(self, pkey); ++ pctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); ++ if (!pctx) ++ ossl_raise(eDHError, "EVP_PKEY_CTX_new"); ++ ret = EVP_PKEY_param_check(pctx); ++ EVP_PKEY_CTX_free(pctx); ++#else + DH *dh; + int codes; + + GetDH(self, dh); +- if (!DH_check(dh, &codes)) { +- return Qfalse; +- } ++ ret = DH_check(dh, &codes) == 1 && codes == 0; ++#endif + +- return codes == 0 ? Qtrue : Qfalse; ++ if (ret == 1) ++ return Qtrue; ++ else { ++ /* DH_check_ex() will put error entry on failure */ ++ ossl_clear_error(); ++ return Qfalse; ++ } + } + + /* +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index ecb8305184..829529d4b9 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -443,20 +443,35 @@ static VALUE ossl_ec_key_generate_key(VALUE self) + } + + /* +- * call-seq: +- * key.check_key => true ++ * call-seq: ++ * key.check_key => true + * +- * Raises an exception if the key is invalid. ++ * Raises an exception if the key is invalid. + * +- * See the OpenSSL documentation for EC_KEY_check_key() ++ * See also the man page EVP_PKEY_public_check(3). + */ + static VALUE ossl_ec_key_check_key(VALUE self) + { ++#ifdef HAVE_EVP_PKEY_CHECK ++ EVP_PKEY *pkey; ++ EVP_PKEY_CTX *pctx; ++ int ret; ++ ++ GetPKey(self, pkey); ++ pctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); ++ if (!pctx) ++ ossl_raise(eDHError, "EVP_PKEY_CTX_new"); ++ ret = EVP_PKEY_public_check(pctx); ++ EVP_PKEY_CTX_free(pctx); ++ if (ret != 1) ++ ossl_raise(eECError, "EVP_PKEY_public_check"); ++#else + EC_KEY *ec; + + GetEC(self, ec); + if (EC_KEY_check_key(ec) != 1) + ossl_raise(eECError, "EC_KEY_check_key"); ++#endif + + return Qtrue; + } +diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb +index 279ce1984c..f80af8f841 100644 +--- a/test/openssl/test_pkey_dh.rb ++++ b/test/openssl/test_pkey_dh.rb +@@ -86,6 +86,22 @@ def test_key_exchange + assert_equal(dh.compute_key(dh2.pub_key), dh2.compute_key(dh.pub_key)) + end + ++ def test_params_ok? ++ dh0 = Fixtures.pkey("dh1024") ++ ++ dh1 = OpenSSL::PKey::DH.new(OpenSSL::ASN1::Sequence([ ++ OpenSSL::ASN1::Integer(dh0.p), ++ OpenSSL::ASN1::Integer(dh0.g) ++ ])) ++ assert_equal(true, dh1.params_ok?) ++ ++ dh2 = OpenSSL::PKey::DH.new(OpenSSL::ASN1::Sequence([ ++ OpenSSL::ASN1::Integer(dh0.p + 1), ++ OpenSSL::ASN1::Integer(dh0.g) ++ ])) ++ assert_equal(false, dh2.params_ok?) ++ end ++ + def test_dup + dh = Fixtures.pkey("dh1024") + dh2 = dh.dup +-- +2.32.0 + diff --git a/ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch b/ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch new file mode 100644 index 0000000..acb706e --- /dev/null +++ b/ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch @@ -0,0 +1,1113 @@ +From e8504c6248c4b0e5e961f57f004e1133c20c88a5 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 5 Apr 2021 00:30:01 +0900 +Subject: [PATCH 1/5] pkey: fix interrupt handling in + OpenSSL::PKey.generate_key + +rb_thread_call_without_gvl() can be interrupted, but it may be able to +resume the operation. Call rb_thread_check_ints() to see if it raises +an exception or not. +--- + ext/openssl/ossl_pkey.c | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 22e9f19982..d76f0600d1 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -239,7 +239,7 @@ struct pkey_blocking_generate_arg { + int state; + int yield: 1; + int genparam: 1; +- int stop: 1; ++ int interrupted: 1; + }; + + static VALUE +@@ -261,23 +261,31 @@ static int + pkey_gen_cb(EVP_PKEY_CTX *ctx) + { + struct pkey_blocking_generate_arg *arg = EVP_PKEY_CTX_get_app_data(ctx); ++ int state; + + if (arg->yield) { +- int state; + rb_protect(pkey_gen_cb_yield, (VALUE)ctx, &state); + if (state) { +- arg->stop = 1; + arg->state = state; ++ return 0; ++ } ++ } ++ if (arg->interrupted) { ++ arg->interrupted = 0; ++ state = (int)(VALUE)rb_thread_call_with_gvl(call_check_ints, NULL); ++ if (state) { ++ arg->state = state; ++ return 0; + } + } +- return !arg->stop; ++ return 1; + } + + static void + pkey_blocking_gen_stop(void *ptr) + { + struct pkey_blocking_generate_arg *arg = ptr; +- arg->stop = 1; ++ arg->interrupted = 1; + } + + static void * +-- +2.32.0 + + +From f433d1b680e7ac5ef13fc15b0844267222438cf3 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sun, 17 May 2020 20:48:23 +0900 +Subject: [PATCH 2/5] pkey/dh: use high level EVP interface to generate + parameters and keys + +Implement PKey::DH.new(size, gen), PKey::DH.generate(size, gen), and +PKey::DH#generate_key! using PKey.generate_parameters and .generate_key +instead of the low level DH functions. + +Note that the EVP interface can enforce additional restrictions - for +example, DH key shorter than 2048 bits is no longer accepted by default +in OpenSSL 3.0. The test code is updated accordingly. +--- + ext/openssl/lib/openssl/pkey.rb | 57 ++++++++++ + ext/openssl/ossl_pkey_dh.c | 186 ++++++-------------------------- + test/openssl/test_pkey_dh.rb | 15 ++- + 3 files changed, 101 insertions(+), 157 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index be60ac2beb..5a3d0ed1ef 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -27,6 +27,63 @@ def compute_key(pub_bn) + peer.set_key(pub_bn, nil) + derive(peer) + end ++ ++ # :call-seq: ++ # dh.generate_key! -> self ++ # ++ # Generates a private and public key unless a private key already exists. ++ # If this DH instance was generated from public \DH parameters (e.g. by ++ # encoding the result of DH#public_key), then this method needs to be ++ # called first in order to generate the per-session keys before performing ++ # the actual key exchange. ++ # ++ # See also OpenSSL::PKey.generate_key. ++ # ++ # Example: ++ # dh = OpenSSL::PKey::DH.new(2048) ++ # public_key = dh.public_key #contains no private/public key yet ++ # public_key.generate_key! ++ # puts public_key.private? # => true ++ def generate_key! ++ unless priv_key ++ tmp = OpenSSL::PKey.generate_key(self) ++ set_key(tmp.pub_key, tmp.priv_key) ++ end ++ self ++ end ++ ++ class << self ++ # :call-seq: ++ # DH.generate(size, generator = 2) -> dh ++ # ++ # Creates a new DH instance from scratch by generating random parameters ++ # and a key pair. ++ # ++ # See also OpenSSL::PKey.generate_parameters and ++ # OpenSSL::PKey.generate_key. ++ # ++ # +size+:: ++ # The desired key size in bits. ++ # +generator+:: ++ # The generator. ++ def generate(size, generator = 2, &blk) ++ dhparams = OpenSSL::PKey.generate_parameters("DH", { ++ "dh_paramgen_prime_len" => size, ++ "dh_paramgen_generator" => generator, ++ }, &blk) ++ OpenSSL::PKey.generate_key(dhparams) ++ end ++ ++ # Handle DH.new(size, generator) form here; new(str) and new() forms ++ # are handled by #initialize ++ def new(*args, &blk) # :nodoc: ++ if args[0].is_a?(Integer) ++ generate(*args, &blk) ++ else ++ super ++ end ++ end ++ end + end + + class DSA +diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c +index 5bc1c49ca1..6b477b077c 100644 +--- a/ext/openssl/ossl_pkey_dh.c ++++ b/ext/openssl/ossl_pkey_dh.c +@@ -32,147 +32,56 @@ VALUE eDHError; + /* + * Private + */ +-struct dh_blocking_gen_arg { +- DH *dh; +- int size; +- int gen; +- BN_GENCB *cb; +- int result; +-}; +- +-static void * +-dh_blocking_gen(void *arg) +-{ +- struct dh_blocking_gen_arg *gen = (struct dh_blocking_gen_arg *)arg; +- gen->result = DH_generate_parameters_ex(gen->dh, gen->size, gen->gen, gen->cb); +- return 0; +-} +- +-static DH * +-dh_generate(int size, int gen) +-{ +- struct ossl_generate_cb_arg cb_arg = { 0 }; +- struct dh_blocking_gen_arg gen_arg; +- DH *dh = DH_new(); +- BN_GENCB *cb = BN_GENCB_new(); +- +- if (!dh || !cb) { +- DH_free(dh); +- BN_GENCB_free(cb); +- ossl_raise(eDHError, "malloc failure"); +- } +- +- if (rb_block_given_p()) +- cb_arg.yield = 1; +- BN_GENCB_set(cb, ossl_generate_cb_2, &cb_arg); +- gen_arg.dh = dh; +- gen_arg.size = size; +- gen_arg.gen = gen; +- gen_arg.cb = cb; +- if (cb_arg.yield == 1) { +- /* we cannot release GVL when callback proc is supplied */ +- dh_blocking_gen(&gen_arg); +- } else { +- /* there's a chance to unblock */ +- rb_thread_call_without_gvl(dh_blocking_gen, &gen_arg, ossl_generate_cb_stop, &cb_arg); +- } +- +- BN_GENCB_free(cb); +- if (!gen_arg.result) { +- DH_free(dh); +- if (cb_arg.state) { +- /* Clear OpenSSL error queue before re-raising. */ +- ossl_clear_error(); +- rb_jump_tag(cb_arg.state); +- } +- ossl_raise(eDHError, "DH_generate_parameters_ex"); +- } +- +- if (!DH_generate_key(dh)) { +- DH_free(dh); +- ossl_raise(eDHError, "DH_generate_key"); +- } +- +- return dh; +-} +- +-/* +- * call-seq: +- * DH.generate(size [, generator]) -> dh +- * +- * Creates a new DH instance from scratch by generating the private and public +- * components alike. +- * +- * === Parameters +- * * _size_ is an integer representing the desired key size. Keys smaller than 1024 bits should be considered insecure. +- * * _generator_ is a small number > 1, typically 2 or 5. +- * +- */ +-static VALUE +-ossl_dh_s_generate(int argc, VALUE *argv, VALUE klass) +-{ +- EVP_PKEY *pkey; +- DH *dh ; +- int g = 2; +- VALUE size, gen, obj; +- +- if (rb_scan_args(argc, argv, "11", &size, &gen) == 2) { +- g = NUM2INT(gen); +- } +- obj = rb_obj_alloc(klass); +- GetPKey(obj, pkey); +- +- dh = dh_generate(NUM2INT(size), g); +- if (!EVP_PKEY_assign_DH(pkey, dh)) { +- DH_free(dh); +- ossl_raise(eDHError, "EVP_PKEY_assign_DH"); +- } +- return obj; +-} +- + /* + * call-seq: + * DH.new -> dh + * DH.new(string) -> dh + * DH.new(size [, generator]) -> dh + * +- * Either generates a DH instance from scratch or by reading already existing +- * DH parameters from _string_. Note that when reading a DH instance from +- * data that was encoded from a DH instance by using DH#to_pem or DH#to_der +- * the result will *not* contain a public/private key pair yet. This needs to +- * be generated using DH#generate_key! first. ++ * Creates a new instance of OpenSSL::PKey::DH. ++ * ++ * If called without arguments, an empty instance without any parameter or key ++ * components is created. Use #set_pqg to manually set the parameters afterwards ++ * (and optionally #set_key to set private and public key components). ++ * ++ * If a String is given, tries to parse it as a DER- or PEM- encoded parameters. ++ * See also OpenSSL::PKey.read which can parse keys of any kinds. ++ * ++ * The DH.new(size [, generator]) form is an alias of DH.generate. + * +- * === Parameters +- * * _size_ is an integer representing the desired key size. Keys smaller than 1024 bits should be considered insecure. +- * * _generator_ is a small number > 1, typically 2 or 5. +- * * _string_ contains the DER or PEM encoded key. ++ * +string+:: ++ * A String that contains the DER or PEM encoded key. ++ * +size+:: ++ * See DH.generate. ++ * +generator+:: ++ * See DH.generate. + * +- * === Examples +- * DH.new # -> dh +- * DH.new(1024) # -> dh +- * DH.new(1024, 5) # -> dh +- * #Reading DH parameters +- * dh = DH.new(File.read('parameters.pem')) # -> dh, but no public/private key yet +- * dh.generate_key! # -> dh with public and private key ++ * Examples: ++ * # Creating an instance from scratch ++ * dh = DH.new ++ * dh.set_pqg(bn_p, nil, bn_g) ++ * ++ * # Generating a parameters and a key pair ++ * dh = DH.new(2048) # An alias of DH.generate(2048) ++ * ++ * # Reading DH parameters ++ * dh = DH.new(File.read('parameters.pem')) # -> dh, but no public/private key yet ++ * dh.generate_key! # -> dh with public and private key + */ + static VALUE + ossl_dh_initialize(int argc, VALUE *argv, VALUE self) + { + EVP_PKEY *pkey; + DH *dh; +- int g = 2; + BIO *in; +- VALUE arg, gen; ++ VALUE arg; + + GetPKey(self, pkey); +- if(rb_scan_args(argc, argv, "02", &arg, &gen) == 0) { +- dh = DH_new(); +- } +- else if (RB_INTEGER_TYPE_P(arg)) { +- if (!NIL_P(gen)) { +- g = NUM2INT(gen); +- } +- dh = dh_generate(NUM2INT(arg), g); ++ /* The DH.new(size, generator) form is handled by lib/openssl/pkey.rb */ ++ if (rb_scan_args(argc, argv, "01", &arg) == 0) { ++ dh = DH_new(); ++ if (!dh) ++ ossl_raise(eDHError, "DH_new"); + } + else { + arg = ossl_to_der_if_possible(arg); +@@ -449,33 +358,6 @@ ossl_dh_check_params(VALUE self) + return codes == 0 ? Qtrue : Qfalse; + } + +-/* +- * call-seq: +- * dh.generate_key! -> self +- * +- * Generates a private and public key unless a private key already exists. +- * If this DH instance was generated from public DH parameters (e.g. by +- * encoding the result of DH#public_key), then this method needs to be +- * called first in order to generate the per-session keys before performing +- * the actual key exchange. +- * +- * === Example +- * dh = OpenSSL::PKey::DH.new(2048) +- * public_key = dh.public_key #contains no private/public key yet +- * public_key.generate_key! +- * puts public_key.private? # => true +- */ +-static VALUE +-ossl_dh_generate_key(VALUE self) +-{ +- DH *dh; +- +- GetDH(self, dh); +- if (!DH_generate_key(dh)) +- ossl_raise(eDHError, "Failed to generate key"); +- return self; +-} +- + /* + * Document-method: OpenSSL::PKey::DH#set_pqg + * call-seq: +@@ -540,7 +422,6 @@ Init_ossl_dh(void) + * puts symm_key1 == symm_key2 # => true + */ + cDH = rb_define_class_under(mPKey, "DH", cPKey); +- rb_define_singleton_method(cDH, "generate", ossl_dh_s_generate, -1); + rb_define_method(cDH, "initialize", ossl_dh_initialize, -1); + rb_define_method(cDH, "initialize_copy", ossl_dh_initialize_copy, 1); + rb_define_method(cDH, "public?", ossl_dh_is_public, 0); +@@ -552,7 +433,6 @@ Init_ossl_dh(void) + rb_define_method(cDH, "to_der", ossl_dh_to_der, 0); + rb_define_method(cDH, "public_key", ossl_dh_to_public_key, 0); + rb_define_method(cDH, "params_ok?", ossl_dh_check_params, 0); +- rb_define_method(cDH, "generate_key!", ossl_dh_generate_key, 0); + + DEF_OSSL_PKEY_BN(cDH, dh, p); + DEF_OSSL_PKEY_BN(cDH, dh, q); +diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb +index 9efc3ba68d..279ce1984c 100644 +--- a/test/openssl/test_pkey_dh.rb ++++ b/test/openssl/test_pkey_dh.rb +@@ -4,12 +4,19 @@ + if defined?(OpenSSL) && defined?(OpenSSL::PKey::DH) + + class OpenSSL::TestPKeyDH < OpenSSL::PKeyTestCase +- NEW_KEYLEN = 256 ++ NEW_KEYLEN = 2048 + +- def test_new ++ def test_new_empty ++ dh = OpenSSL::PKey::DH.new ++ assert_equal nil, dh.p ++ assert_equal nil, dh.priv_key ++ end ++ ++ def test_new_generate ++ # This test is slow + dh = OpenSSL::PKey::DH.new(NEW_KEYLEN) + assert_key(dh) +- end ++ end if ENV["OSSL_TEST_ALL"] + + def test_new_break + assert_nil(OpenSSL::PKey::DH.new(NEW_KEYLEN) { break }) +@@ -80,7 +87,7 @@ def test_key_exchange + end + + def test_dup +- dh = OpenSSL::PKey::DH.new(NEW_KEYLEN) ++ dh = Fixtures.pkey("dh1024") + dh2 = dh.dup + assert_equal dh.to_der, dh2.to_der # params + assert_equal_params dh, dh2 # keys +-- +2.32.0 + + +From ba1d1d68ac2b489691eb3fe2052e77b3e57a372b Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sun, 17 May 2020 20:48:23 +0900 +Subject: [PATCH 3/5] pkey/rsa: use high level EVP interface to generate + parameters and keys + +Implement PKey::RSA.new(size, exponent) and PKey::RSA.generate using +OpenSSL::PKey.generate_key instead of the low level RSA functions. +--- + ext/openssl/lib/openssl/pkey.rb | 30 ++++++++ + ext/openssl/ossl_pkey_rsa.c | 132 ++++---------------------------- + 2 files changed, 46 insertions(+), 116 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index 5a3d0ed1ef..3bef06e3b3 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -128,5 +128,35 @@ def to_bn(conversion_form = group.point_conversion_form) + + class RSA + include OpenSSL::Marshal ++ ++ class << self ++ # :call-seq: ++ # RSA.generate(size, exponent = 65537) -> RSA ++ # ++ # Generates an \RSA keypair. ++ # ++ # See also OpenSSL::PKey.generate_key. ++ # ++ # +size+:: ++ # The desired key size in bits. ++ # +exponent+:: ++ # An odd Integer, normally 3, 17, or 65537. ++ def generate(size, exp = 0x10001, &blk) ++ OpenSSL::PKey.generate_key("RSA", { ++ "rsa_keygen_bits" => size, ++ "rsa_keygen_pubexp" => exp, ++ }, &blk) ++ end ++ ++ # Handle RSA.new(size, exponent) form here; new(str) and new() forms ++ # are handled by #initialize ++ def new(*args, &blk) # :nodoc: ++ if args[0].is_a?(Integer) ++ generate(*args, &blk) ++ else ++ super ++ end ++ end ++ end + end + end +diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c +index 3c298a2aea..43f82cb29e 100644 +--- a/ext/openssl/ossl_pkey_rsa.c ++++ b/ext/openssl/ossl_pkey_rsa.c +@@ -47,125 +47,28 @@ VALUE eRSAError; + /* + * Private + */ +-struct rsa_blocking_gen_arg { +- RSA *rsa; +- BIGNUM *e; +- int size; +- BN_GENCB *cb; +- int result; +-}; +- +-static void * +-rsa_blocking_gen(void *arg) +-{ +- struct rsa_blocking_gen_arg *gen = (struct rsa_blocking_gen_arg *)arg; +- gen->result = RSA_generate_key_ex(gen->rsa, gen->size, gen->e, gen->cb); +- return 0; +-} +- +-static RSA * +-rsa_generate(int size, unsigned long exp) +-{ +- int i; +- struct ossl_generate_cb_arg cb_arg = { 0 }; +- struct rsa_blocking_gen_arg gen_arg; +- RSA *rsa = RSA_new(); +- BIGNUM *e = BN_new(); +- BN_GENCB *cb = BN_GENCB_new(); +- +- if (!rsa || !e || !cb) { +- RSA_free(rsa); +- BN_free(e); +- BN_GENCB_free(cb); +- ossl_raise(eRSAError, "malloc failure"); +- } +- for (i = 0; i < (int)sizeof(exp) * 8; ++i) { +- if (exp & (1UL << i)) { +- if (BN_set_bit(e, i) == 0) { +- BN_free(e); +- RSA_free(rsa); +- BN_GENCB_free(cb); +- ossl_raise(eRSAError, "BN_set_bit"); +- } +- } +- } +- +- if (rb_block_given_p()) +- cb_arg.yield = 1; +- BN_GENCB_set(cb, ossl_generate_cb_2, &cb_arg); +- gen_arg.rsa = rsa; +- gen_arg.e = e; +- gen_arg.size = size; +- gen_arg.cb = cb; +- if (cb_arg.yield == 1) { +- /* we cannot release GVL when callback proc is supplied */ +- rsa_blocking_gen(&gen_arg); +- } else { +- /* there's a chance to unblock */ +- rb_thread_call_without_gvl(rsa_blocking_gen, &gen_arg, ossl_generate_cb_stop, &cb_arg); +- } +- +- BN_GENCB_free(cb); +- BN_free(e); +- if (!gen_arg.result) { +- RSA_free(rsa); +- if (cb_arg.state) { +- /* must clear OpenSSL error stack */ +- ossl_clear_error(); +- rb_jump_tag(cb_arg.state); +- } +- ossl_raise(eRSAError, "RSA_generate_key_ex"); +- } +- +- return rsa; +-} +- + /* + * call-seq: +- * RSA.generate(size) => RSA instance +- * RSA.generate(size, exponent) => RSA instance ++ * RSA.new -> rsa ++ * RSA.new(encoded_key [, passphrase]) -> rsa ++ * RSA.new(encoded_key) { passphrase } -> rsa ++ * RSA.new(size [, exponent]) -> rsa + * +- * Generates an RSA keypair. _size_ is an integer representing the desired key +- * size. Keys smaller than 1024 should be considered insecure. _exponent_ is +- * an odd number normally 3, 17, or 65537. +- */ +-static VALUE +-ossl_rsa_s_generate(int argc, VALUE *argv, VALUE klass) +-{ +-/* why does this method exist? why can't initialize take an optional exponent? */ +- EVP_PKEY *pkey; +- RSA *rsa; +- VALUE size, exp; +- VALUE obj; +- +- rb_scan_args(argc, argv, "11", &size, &exp); +- obj = rb_obj_alloc(klass); +- GetPKey(obj, pkey); +- +- rsa = rsa_generate(NUM2INT(size), NIL_P(exp) ? RSA_F4 : NUM2ULONG(exp)); +- if (!EVP_PKEY_assign_RSA(pkey, rsa)) { +- RSA_free(rsa); +- ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); +- } +- return obj; +-} +- +-/* +- * call-seq: +- * RSA.new(size [, exponent]) => RSA instance +- * RSA.new(encoded_key) => RSA instance +- * RSA.new(encoded_key, pass_phrase) => RSA instance ++ * Generates or loads an \RSA keypair. + * +- * Generates or loads an RSA keypair. If an integer _key_size_ is given it +- * represents the desired key size. Keys less than 1024 bits should be +- * considered insecure. ++ * If called without arguments, creates a new instance with no key components ++ * set. They can be set individually by #set_key, #set_factors, and ++ * #set_crt_params. + * +- * A key can instead be loaded from an _encoded_key_ which must be PEM or DER +- * encoded. A _pass_phrase_ can be used to decrypt the key. If none is given +- * OpenSSL will prompt for the pass phrase. ++ * If called with a String, tries to parse as DER or PEM encoding of an \RSA key. ++ * Note that, if _passphrase_ is not specified but the key is encrypted with a ++ * passphrase, \OpenSSL will prompt for it. ++ * See also OpenSSL::PKey.read which can parse keys of any kinds. + * +- * = Examples ++ * If called with a number, generates a new key pair. This form works as an ++ * alias of RSA.generate. + * ++ * Examples: + * OpenSSL::PKey::RSA.new 2048 + * OpenSSL::PKey::RSA.new File.read 'rsa.pem' + * OpenSSL::PKey::RSA.new File.read('rsa.pem'), 'my pass phrase' +@@ -179,15 +82,13 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) + VALUE arg, pass; + + GetPKey(self, pkey); ++ /* The RSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ + rb_scan_args(argc, argv, "02", &arg, &pass); + if (argc == 0) { + rsa = RSA_new(); + if (!rsa) + ossl_raise(eRSAError, "RSA_new"); + } +- else if (RB_INTEGER_TYPE_P(arg)) { +- rsa = rsa_generate(NUM2INT(arg), NIL_P(pass) ? RSA_F4 : NUM2ULONG(pass)); +- } + else { + pass = ossl_pem_passwd_value(pass); + arg = ossl_to_der_if_possible(arg); +@@ -832,7 +733,6 @@ Init_ossl_rsa(void) + */ + cRSA = rb_define_class_under(mPKey, "RSA", cPKey); + +- rb_define_singleton_method(cRSA, "generate", ossl_rsa_s_generate, -1); + rb_define_method(cRSA, "initialize", ossl_rsa_initialize, -1); + rb_define_method(cRSA, "initialize_copy", ossl_rsa_initialize_copy, 1); + +-- +2.32.0 + + +From a6c4a8116c09243c39cc8d1e7ececcd8be0cfaf2 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sun, 17 May 2020 22:14:03 +0900 +Subject: [PATCH 4/5] pkey/dsa: use high level EVP interface to generate + parameters and keys + +Implement PKey::DSA.new(size) and PKey::DSA.generate using +OpenSSL::PKey.generate_parameters and .generate_key instead of the low +level DSA functions. +--- + ext/openssl/lib/openssl/pkey.rb | 30 +++++++ + ext/openssl/ossl_pkey_dsa.c | 140 ++++++-------------------------- + test/openssl/test_pkey_dsa.rb | 23 ++---- + 3 files changed, 64 insertions(+), 129 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index 3bef06e3b3..53ee52f98b 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -88,6 +88,36 @@ def new(*args, &blk) # :nodoc: + + class DSA + include OpenSSL::Marshal ++ ++ class << self ++ # :call-seq: ++ # DSA.generate(size) -> dsa ++ # ++ # Creates a new DSA instance by generating a private/public key pair ++ # from scratch. ++ # ++ # See also OpenSSL::PKey.generate_parameters and ++ # OpenSSL::PKey.generate_key. ++ # ++ # +size+:: ++ # The desired key size in bits. ++ def generate(size, &blk) ++ dsaparams = OpenSSL::PKey.generate_parameters("DSA", { ++ "dsa_paramgen_bits" => size, ++ }, &blk) ++ OpenSSL::PKey.generate_key(dsaparams) ++ end ++ ++ # Handle DSA.new(size) form here; new(str) and new() forms ++ # are handled by #initialize ++ def new(*args, &blk) # :nodoc: ++ if args[0].is_a?(Integer) ++ generate(*args, &blk) ++ else ++ super ++ end ++ end ++ end + end + + if defined?(EC) +diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c +index 0e68f7f27f..1c5a8a737e 100644 +--- a/ext/openssl/ossl_pkey_dsa.c ++++ b/ext/openssl/ossl_pkey_dsa.c +@@ -46,126 +46,39 @@ VALUE eDSAError; + /* + * Private + */ +-struct dsa_blocking_gen_arg { +- DSA *dsa; +- int size; +- int *counter; +- unsigned long *h; +- BN_GENCB *cb; +- int result; +-}; +- +-static void * +-dsa_blocking_gen(void *arg) +-{ +- struct dsa_blocking_gen_arg *gen = (struct dsa_blocking_gen_arg *)arg; +- gen->result = DSA_generate_parameters_ex(gen->dsa, gen->size, NULL, 0, +- gen->counter, gen->h, gen->cb); +- return 0; +-} +- +-static DSA * +-dsa_generate(int size) +-{ +- struct ossl_generate_cb_arg cb_arg = { 0 }; +- struct dsa_blocking_gen_arg gen_arg; +- DSA *dsa = DSA_new(); +- BN_GENCB *cb = BN_GENCB_new(); +- int counter; +- unsigned long h; +- +- if (!dsa || !cb) { +- DSA_free(dsa); +- BN_GENCB_free(cb); +- ossl_raise(eDSAError, "malloc failure"); +- } +- +- if (rb_block_given_p()) +- cb_arg.yield = 1; +- BN_GENCB_set(cb, ossl_generate_cb_2, &cb_arg); +- gen_arg.dsa = dsa; +- gen_arg.size = size; +- gen_arg.counter = &counter; +- gen_arg.h = &h; +- gen_arg.cb = cb; +- if (cb_arg.yield == 1) { +- /* we cannot release GVL when callback proc is supplied */ +- dsa_blocking_gen(&gen_arg); +- } else { +- /* there's a chance to unblock */ +- rb_thread_call_without_gvl(dsa_blocking_gen, &gen_arg, ossl_generate_cb_stop, &cb_arg); +- } +- +- BN_GENCB_free(cb); +- if (!gen_arg.result) { +- DSA_free(dsa); +- if (cb_arg.state) { +- /* Clear OpenSSL error queue before re-raising. By the way, the +- * documentation of DSA_generate_parameters_ex() says the error code +- * can be obtained by ERR_get_error(), but the default +- * implementation, dsa_builtin_paramgen() doesn't put any error... */ +- ossl_clear_error(); +- rb_jump_tag(cb_arg.state); +- } +- ossl_raise(eDSAError, "DSA_generate_parameters_ex"); +- } +- +- if (!DSA_generate_key(dsa)) { +- DSA_free(dsa); +- ossl_raise(eDSAError, "DSA_generate_key"); +- } +- +- return dsa; +-} +- +-/* +- * call-seq: +- * DSA.generate(size) -> dsa +- * +- * Creates a new DSA instance by generating a private/public key pair +- * from scratch. +- * +- * === Parameters +- * * _size_ is an integer representing the desired key size. +- * +- */ +-static VALUE +-ossl_dsa_s_generate(VALUE klass, VALUE size) +-{ +- EVP_PKEY *pkey; +- DSA *dsa; +- VALUE obj; +- +- obj = rb_obj_alloc(klass); +- GetPKey(obj, pkey); +- +- dsa = dsa_generate(NUM2INT(size)); +- if (!EVP_PKEY_assign_DSA(pkey, dsa)) { +- DSA_free(dsa); +- ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); +- } +- return obj; +-} +- + /* + * call-seq: + * DSA.new -> dsa +- * DSA.new(size) -> dsa + * DSA.new(string [, pass]) -> dsa ++ * DSA.new(size) -> dsa + * + * Creates a new DSA instance by reading an existing key from _string_. + * +- * === Parameters +- * * _size_ is an integer representing the desired key size. +- * * _string_ contains a DER or PEM encoded key. +- * * _pass_ is a string that contains an optional password. ++ * If called without arguments, creates a new instance with no key components ++ * set. They can be set individually by #set_pqg and #set_key. + * +- * === Examples +- * DSA.new -> dsa +- * DSA.new(1024) -> dsa +- * DSA.new(File.read('dsa.pem')) -> dsa +- * DSA.new(File.read('dsa.pem'), 'mypassword') -> dsa ++ * If called with a String, tries to parse as DER or PEM encoding of a \DSA key. ++ * See also OpenSSL::PKey.read which can parse keys of any kinds. ++ * ++ * If called with a number, generates random parameters and a key pair. This ++ * form works as an alias of DSA.generate. ++ * ++ * +string+:: ++ * A String that contains a DER or PEM encoded key. ++ * +pass+:: ++ * A String that contains an optional password. ++ * +size+:: ++ * See DSA.generate. + * ++ * Examples: ++ * p OpenSSL::PKey::DSA.new(1024) ++ * #=> # ++ * ++ * p OpenSSL::PKey::DSA.new(File.read('dsa.pem')) ++ * #=> # ++ * ++ * p OpenSSL::PKey::DSA.new(File.read('dsa.pem'), 'mypassword') ++ * #=> # + */ + static VALUE + ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) +@@ -176,15 +89,13 @@ ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) + VALUE arg, pass; + + GetPKey(self, pkey); ++ /* The DSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ + rb_scan_args(argc, argv, "02", &arg, &pass); + if (argc == 0) { + dsa = DSA_new(); + if (!dsa) + ossl_raise(eDSAError, "DSA_new"); + } +- else if (argc == 1 && RB_INTEGER_TYPE_P(arg)) { +- dsa = dsa_generate(NUM2INT(arg)); +- } + else { + pass = ossl_pem_passwd_value(pass); + arg = ossl_to_der_if_possible(arg); +@@ -553,7 +464,6 @@ Init_ossl_dsa(void) + */ + cDSA = rb_define_class_under(mPKey, "DSA", cPKey); + +- rb_define_singleton_method(cDSA, "generate", ossl_dsa_s_generate, 1); + rb_define_method(cDSA, "initialize", ossl_dsa_initialize, -1); + rb_define_method(cDSA, "initialize_copy", ossl_dsa_initialize_copy, 1); + +diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb +index 4bf8a7b374..85bb6ec0ae 100644 +--- a/test/openssl/test_pkey_dsa.rb ++++ b/test/openssl/test_pkey_dsa.rb +@@ -5,31 +5,26 @@ + + class OpenSSL::TestPKeyDSA < OpenSSL::PKeyTestCase + def test_private +- key = OpenSSL::PKey::DSA.new(256) +- assert(key.private?) ++ key = Fixtures.pkey("dsa1024") ++ assert_equal true, key.private? + key2 = OpenSSL::PKey::DSA.new(key.to_der) +- assert(key2.private?) ++ assert_equal true, key2.private? + key3 = key.public_key +- assert(!key3.private?) ++ assert_equal false, key3.private? + key4 = OpenSSL::PKey::DSA.new(key3.to_der) +- assert(!key4.private?) ++ assert_equal false, key4.private? + end + + def test_new +- key = OpenSSL::PKey::DSA.new 256 ++ key = OpenSSL::PKey::DSA.new(2048) + pem = key.public_key.to_pem + OpenSSL::PKey::DSA.new pem +- if $0 == __FILE__ +- assert_nothing_raised { +- key = OpenSSL::PKey::DSA.new 2048 +- } +- end + end + + def test_new_break +- assert_nil(OpenSSL::PKey::DSA.new(512) { break }) ++ assert_nil(OpenSSL::PKey::DSA.new(2048) { break }) + assert_raise(RuntimeError) do +- OpenSSL::PKey::DSA.new(512) { raise } ++ OpenSSL::PKey::DSA.new(2048) { raise } + end + end + +@@ -184,7 +179,7 @@ def test_read_DSAPublicKey_pem + end + + def test_dup +- key = OpenSSL::PKey::DSA.new(256) ++ key = Fixtures.pkey("dsa1024") + key2 = key.dup + assert_equal key.params, key2.params + key2.set_pqg(key2.p + 1, key2.q, key2.g) +-- +2.32.0 + + +From ba5a3a5c3eabf969f5cd2232b022e440af803b5b Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 5 Apr 2021 00:39:04 +0900 +Subject: [PATCH 5/5] pkey: remove unused ossl_generate_cb_2() helper function + +The previous series of commits re-implemented key generation with the +low level API with the EVP API. The BN_GENCB-based callback function is +no longer used. +--- + ext/openssl/extconf.rb | 3 -- + ext/openssl/openssl_missing.h | 12 ------ + ext/openssl/ossl_pkey.c | 73 +++++++---------------------------- + ext/openssl/ossl_pkey.h | 8 ---- + 4 files changed, 15 insertions(+), 81 deletions(-) + +diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb +index 693e55cd97..b3c6647faf 100644 +--- a/ext/openssl/extconf.rb ++++ b/ext/openssl/extconf.rb +@@ -136,9 +136,6 @@ def find_openssl_library + $defs.push("-DHAVE_OPAQUE_OPENSSL") + end + have_func("CRYPTO_lock") || $defs.push("-DHAVE_OPENSSL_110_THREADING_API") +-have_func("BN_GENCB_new") +-have_func("BN_GENCB_free") +-have_func("BN_GENCB_get_arg") + have_func("EVP_MD_CTX_new") + have_func("EVP_MD_CTX_free") + have_func("HMAC_CTX_new") +diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h +index 7d218f86f5..e575415f49 100644 +--- a/ext/openssl/openssl_missing.h ++++ b/ext/openssl/openssl_missing.h +@@ -34,18 +34,6 @@ int ossl_EC_curve_nist2nid(const char *); + #endif + + /* added in 1.1.0 */ +-#if !defined(HAVE_BN_GENCB_NEW) +-# define BN_GENCB_new() ((BN_GENCB *)OPENSSL_malloc(sizeof(BN_GENCB))) +-#endif +- +-#if !defined(HAVE_BN_GENCB_FREE) +-# define BN_GENCB_free(cb) OPENSSL_free(cb) +-#endif +- +-#if !defined(HAVE_BN_GENCB_GET_ARG) +-# define BN_GENCB_get_arg(cb) (cb)->arg +-#endif +- + #if !defined(HAVE_EVP_MD_CTX_NEW) + # define EVP_MD_CTX_new EVP_MD_CTX_create + #endif +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index d76f0600d1..f9282b9417 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -17,64 +17,6 @@ VALUE cPKey; + VALUE ePKeyError; + static ID id_private_q; + +-/* +- * callback for generating keys +- */ +-static VALUE +-call_check_ints0(VALUE arg) +-{ +- rb_thread_check_ints(); +- return Qnil; +-} +- +-static void * +-call_check_ints(void *arg) +-{ +- int state; +- rb_protect(call_check_ints0, Qnil, &state); +- return (void *)(VALUE)state; +-} +- +-int +-ossl_generate_cb_2(int p, int n, BN_GENCB *cb) +-{ +- VALUE ary; +- struct ossl_generate_cb_arg *arg; +- int state; +- +- arg = (struct ossl_generate_cb_arg *)BN_GENCB_get_arg(cb); +- if (arg->yield) { +- ary = rb_ary_new2(2); +- rb_ary_store(ary, 0, INT2NUM(p)); +- rb_ary_store(ary, 1, INT2NUM(n)); +- +- /* +- * can be break by raising exception or 'break' +- */ +- rb_protect(rb_yield, ary, &state); +- if (state) { +- arg->state = state; +- return 0; +- } +- } +- if (arg->interrupted) { +- arg->interrupted = 0; +- state = (int)(VALUE)rb_thread_call_with_gvl(call_check_ints, NULL); +- if (state) { +- arg->state = state; +- return 0; +- } +- } +- return 1; +-} +- +-void +-ossl_generate_cb_stop(void *ptr) +-{ +- struct ossl_generate_cb_arg *arg = (struct ossl_generate_cb_arg *)ptr; +- arg->interrupted = 1; +-} +- + static void + ossl_evp_pkey_free(void *ptr) + { +@@ -257,6 +199,21 @@ pkey_gen_cb_yield(VALUE ctx_v) + return rb_yield_values2(info_num, argv); + } + ++static VALUE ++call_check_ints0(VALUE arg) ++{ ++ rb_thread_check_ints(); ++ return Qnil; ++} ++ ++static void * ++call_check_ints(void *arg) ++{ ++ int state; ++ rb_protect(call_check_ints0, Qnil, &state); ++ return (void *)(VALUE)state; ++} ++ + static int + pkey_gen_cb(EVP_PKEY_CTX *ctx) + { +diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h +index 7dbaed47bc..629c16ae1f 100644 +--- a/ext/openssl/ossl_pkey.h ++++ b/ext/openssl/ossl_pkey.h +@@ -35,14 +35,6 @@ extern const rb_data_type_t ossl_evp_pkey_type; + } \ + } while (0) + +-struct ossl_generate_cb_arg { +- int yield; +- int interrupted; +- int state; +-}; +-int ossl_generate_cb_2(int p, int n, BN_GENCB *cb); +-void ossl_generate_cb_stop(void *ptr); +- + VALUE ossl_pkey_new(EVP_PKEY *); + void ossl_pkey_check_public_key(const EVP_PKEY *); + EVP_PKEY *ossl_pkey_read_generic(BIO *, VALUE); +-- +2.32.0 + diff --git a/ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch b/ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch new file mode 100644 index 0000000..5f3445e --- /dev/null +++ b/ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch @@ -0,0 +1,29 @@ +From b4b5eab2a5fd0e9ac62c01102dd26d0a433c5683 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 18 May 2020 02:17:28 +0900 +Subject: [PATCH] test/openssl/test_digest: do not test constants for legacy + algorithms + +Remove availability test for MD4 and RIPEMD160 as they are considered +legacy and may be missing depending on the compile-time options of +OpenSSL. OpenSSL 3.0 by default disables them. +--- + test/openssl/test_digest.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/openssl/test_digest.rb b/test/openssl/test_digest.rb +index 8d7046e831..84c128c12f 100644 +--- a/test/openssl/test_digest.rb ++++ b/test/openssl/test_digest.rb +@@ -54,7 +54,7 @@ def test_reset + end + + def test_digest_constants +- %w{MD4 MD5 RIPEMD160 SHA1 SHA224 SHA256 SHA384 SHA512}.each do |name| ++ %w{MD5 SHA1 SHA224 SHA256 SHA384 SHA512}.each do |name| + assert_not_nil(OpenSSL::Digest.new(name)) + klass = OpenSSL::Digest.const_get(name.tr('-', '_')) + assert_not_nil(klass.new) +-- +2.32.0 + diff --git a/ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch b/ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch new file mode 100644 index 0000000..80b73d2 --- /dev/null +++ b/ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch @@ -0,0 +1,439 @@ +From 9596788bdd2d061bef042485af14262e9fc4020c Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Thu, 13 Aug 2020 23:20:55 +0900 +Subject: [PATCH] test/openssl/test_pkcs12: fix test failures with OpenSSL 3.0 + +OpenSSL's PKCS12_create() by default uses pbewithSHAAnd40BitRC2-CBC for +encryption of the certificates. However, in OpenSSL 3.0, the algorithm +is part of the legacy provider and is not enabled by default. + +Specify another algorithm that is still in the default provider for +these test cases. +--- + test/openssl/test_pkcs12.rb | 297 ++++++++++++++++++------------------ + 1 file changed, 149 insertions(+), 148 deletions(-) + +diff --git a/test/openssl/test_pkcs12.rb b/test/openssl/test_pkcs12.rb +index fdbe753b17..ec676743bc 100644 +--- a/test/openssl/test_pkcs12.rb ++++ b/test/openssl/test_pkcs12.rb +@@ -5,6 +5,9 @@ + + module OpenSSL + class TestPKCS12 < OpenSSL::TestCase ++ DEFAULT_PBE_PKEYS = "PBE-SHA1-3DES" ++ DEFAULT_PBE_CERTS = "PBE-SHA1-3DES" ++ + def setup + super + ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA") +@@ -14,47 +17,41 @@ def setup + ["subjectKeyIdentifier","hash",false], + ["authorityKeyIdentifier","keyid:always",false], + ] +- @cacert = issue_cert(ca, Fixtures.pkey("rsa2048"), 1, ca_exts, nil, nil) ++ ca_key = Fixtures.pkey("rsa-1") ++ @cacert = issue_cert(ca, ca_key, 1, ca_exts, nil, nil) + + inter_ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=Intermediate CA") +- inter_ca_key = OpenSSL::PKey.read <<-_EOS_ +------BEGIN RSA PRIVATE KEY----- +-MIICXAIBAAKBgQDp7hIG0SFMG/VWv1dBUWziAPrNmkMXJgTCAoB7jffzRtyyN04K +-oq/89HAszTMStZoMigQURfokzKsjpUp8OYCAEsBtt9d5zPndWMz/gHN73GrXk3LT +-ZsxEn7Xv5Da+Y9F/Hx2QZUHarV5cdZixq2NbzWGwrToogOQMh2pxN3Z/0wIDAQAB +-AoGBAJysUyx3olpsGzv3OMRJeahASbmsSKTXVLZvoIefxOINosBFpCIhZccAG6UV +-5c/xCvS89xBw8aD15uUfziw3AuT8QPEtHCgfSjeT7aWzBfYswEgOW4XPuWr7EeI9 +-iNHGD6z+hCN/IQr7FiEBgTp6A+i/hffcSdR83fHWKyb4M7TRAkEA+y4BNd668HmC +-G5MPRx25n6LixuBxrNp1umfjEI6UZgEFVpYOg4agNuimN6NqM253kcTR94QNTUs5 +-Kj3EhG1YWwJBAO5rUjiOyCNVX2WUQrOMYK/c1lU7fvrkdygXkvIGkhsPoNRzLPeA +-HGJszKtrKD8bNihWpWNIyqKRHfKVD7yXT+kCQGCAhVCIGTRoypcDghwljHqLnysf +-ci0h5ZdPcIqc7ODfxYhFsJ/Rql5ONgYsT5Ig/+lOQAkjf+TRYM4c2xKx2/8CQBvG +-jv6dy70qDgIUgqzONtlmHeYyFzn9cdBO5sShdVYHvRHjFSMEXsosqK9zvW2UqvuK +-FJx7d3f29gkzynCLJDkCQGQZlEZJC4vWmWJGRKJ24P6MyQn3VsPfErSKOg4lvyM3 +-Li8JsX5yIiuVYaBg/6ha3tOg4TCa5K/3r3tVliRZ2Es= +------END RSA PRIVATE KEY----- +- _EOS_ +- @inter_cacert = issue_cert(inter_ca, inter_ca_key, 2, ca_exts, @cacert, Fixtures.pkey("rsa2048")) ++ inter_ca_key = Fixtures.pkey("rsa-2") ++ @inter_cacert = issue_cert(inter_ca, inter_ca_key, 2, ca_exts, @cacert, ca_key) + + exts = [ + ["keyUsage","digitalSignature",true], + ["subjectKeyIdentifier","hash",false], + ] + ee = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=Ruby PKCS12 Test Certificate") +- @mykey = Fixtures.pkey("rsa1024") ++ @mykey = Fixtures.pkey("rsa-3") + @mycert = issue_cert(ee, @mykey, 3, exts, @inter_cacert, inter_ca_key) + end + +- def test_create ++ def test_create_single_key_single_cert + pkcs12 = OpenSSL::PKCS12.create( + "omg", + "hello", + @mykey, +- @mycert ++ @mycert, ++ nil, ++ DEFAULT_PBE_PKEYS, ++ DEFAULT_PBE_CERTS, + ) +- assert_equal @mycert.to_der, pkcs12.certificate.to_der ++ assert_equal @mycert, pkcs12.certificate + assert_equal @mykey.to_der, pkcs12.key.to_der + assert_nil pkcs12.ca_certs ++ ++ der = pkcs12.to_der ++ decoded = OpenSSL::PKCS12.new(der, "omg") ++ assert_equal @mykey.to_der, decoded.key.to_der ++ assert_equal @mycert, decoded.certificate ++ assert_equal [], Array(decoded.ca_certs) + end + + def test_create_no_pass +@@ -62,14 +59,17 @@ def test_create_no_pass + nil, + "hello", + @mykey, +- @mycert ++ @mycert, ++ nil, ++ DEFAULT_PBE_PKEYS, ++ DEFAULT_PBE_CERTS, + ) +- assert_equal @mycert.to_der, pkcs12.certificate.to_der ++ assert_equal @mycert, pkcs12.certificate + assert_equal @mykey.to_der, pkcs12.key.to_der + assert_nil pkcs12.ca_certs + + decoded = OpenSSL::PKCS12.new(pkcs12.to_der) +- assert_cert @mycert, decoded.certificate ++ assert_equal @mycert, decoded.certificate + end + + def test_create_with_chain +@@ -80,7 +80,9 @@ def test_create_with_chain + "hello", + @mykey, + @mycert, +- chain ++ chain, ++ DEFAULT_PBE_PKEYS, ++ DEFAULT_PBE_CERTS, + ) + assert_equal chain, pkcs12.ca_certs + end +@@ -95,14 +97,16 @@ def test_create_with_chain_decode + "hello", + @mykey, + @mycert, +- chain ++ chain, ++ DEFAULT_PBE_PKEYS, ++ DEFAULT_PBE_CERTS, + ) + + decoded = OpenSSL::PKCS12.new(pkcs12.to_der, passwd) + assert_equal chain.size, decoded.ca_certs.size +- assert_include_cert @cacert, decoded.ca_certs +- assert_include_cert @inter_cacert, decoded.ca_certs +- assert_cert @mycert, decoded.certificate ++ assert_include decoded.ca_certs, @cacert ++ assert_include decoded.ca_certs, @inter_cacert ++ assert_equal @mycert, decoded.certificate + assert_equal @mykey.to_der, decoded.key.to_der + end + +@@ -126,8 +130,8 @@ def test_create_with_itr + @mykey, + @mycert, + [], +- nil, +- nil, ++ DEFAULT_PBE_PKEYS, ++ DEFAULT_PBE_CERTS, + 2048 + ) + +@@ -138,8 +142,8 @@ def test_create_with_itr + @mykey, + @mycert, + [], +- nil, +- nil, ++ DEFAULT_PBE_PKEYS, ++ DEFAULT_PBE_CERTS, + "omg" + ) + end +@@ -152,7 +156,8 @@ def test_create_with_mac_itr + @mykey, + @mycert, + [], +- nil, ++ DEFAULT_PBE_PKEYS, ++ DEFAULT_PBE_CERTS, + nil, + nil, + 2048 +@@ -165,148 +170,144 @@ def test_create_with_mac_itr + @mykey, + @mycert, + [], +- nil, +- nil, ++ DEFAULT_PBE_PKEYS, ++ DEFAULT_PBE_CERTS, + nil, + "omg" + ) + end + end + +- def test_new_with_one_key_and_one_cert +- # generated with: +- # openssl version #=> OpenSSL 1.0.2h 3 May 2016 +- # openssl pkcs12 -in <@mycert> -inkey -export -out +- str = <<~EOF.unpack("m").first +-MIIGQQIBAzCCBgcGCSqGSIb3DQEHAaCCBfgEggX0MIIF8DCCAu8GCSqGSIb3DQEH +-BqCCAuAwggLcAgEAMIIC1QYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIeZPM +-Rh6KiXgCAggAgIICqL6O+LCZmBzdIg6mozPF3FpY0hVbWHvTNMiDHieW3CrAanhN +-YCH2/wHqH8WpFpEWwF0qEEXAWjHsIlYB4Cfqo6b7XpuZe5eVESsjNTOTMF1JCUJj +-A6iNefXmCFLync1JK5LUodRDhTlKLU1WPK20X9X4vuEwHn8wt5RUb8P0E+Xh6rpS +-XC4LkZKT45zF3cJa/n5+dW65ohVGNVnF9D1bCNEKHMOllK1V9omutQ9slW88hpga +-LGiFsJoFOb/ESGb78KO+bd6zbX1MdKdBV+WD6t1uF/cgU65y+2A4nXs1urda+MJ7 +-7iVqiB7Vnc9cANTbAkTSGNyoUDVM/NZde782/8IvddLAzUZ2EftoRDke6PvuBOVL +-ljBhNWmdamrtBqzuzVZCRdWq44KZkF2Xoc9asepwIkdVmntzQF7f1Z+Ta5yg6HFp +-xnr7CuM+MlHEShXkMgYtHnwAq10fDMSXIvjhi/AA5XUAusDO3D+hbtcRDcJ4uUes +-dm5dhQE2qJ02Ysn4aH3o1F3RYNOzrxejHJwl0D2TCE8Ww2X342xib57+z9u03ufj +-jswhiMKxy67f1LhUMq3XrT3uV6kCVXk/KUOUPcXPlPVNA5JmZeFhMp6GrtB5xJJ9 +-wwBZD8UL5A2U2Mxi2OZsdUBv8eo3jnjZ284aFpt+mCjIHrLW5O0jwY8OCwSlYUoY +-IY00wlabX0s82kBcIQNZbC1RSV2267ro/7A0MClc8YQ/zWN0FKY6apgtUkHJI1cL +-1dc77mhnjETjwW94iLMDFy4zQfVu7IfCBqOBzygRNnqqUG66UhTs1xFnWM0mWXl/ +-Zh9+AMpbRLIPaKCktIjl5juzzm+KEgkhD+707XRCFIGUYGP5bSHzGaz8PK9hj0u1 +-E2SpZHUvYOcawmxtA7pmpSxl5uQjMIIC+QYJKoZIhvcNAQcBoIIC6gSCAuYwggLi +-MIIC3gYLKoZIhvcNAQwKAQKgggKmMIICojAcBgoqhkiG9w0BDAEDMA4ECKB338m8 +-qSzHAgIIAASCAoACFhJeqA3xx+s1qIH6udNQYY5hAL6oz7SXoGwFhDiceSyJjmAD +-Dby9XWM0bPl1Gj5nqdsuI/lAM++fJeoETk+rxw8q6Ofk2zUaRRE39qgpwBwSk44o +-0SAFJ6bzHpc5CFh6sZmDaUX5Lm9GtjnGFmmsPTSJT5an5JuJ9WczGBEd0nSBQhJq +-xHbTGZiN8i3SXcIH531Sub+CBIFWy5lyCKgDYh/kgJFGQAaWUOjLI+7dCEESonXn +-F3Jh2uPbnDF9MGJyAFoNgWFhgSpi1cf6AUi87GY4Oyur88ddJ1o0D0Kz2uw8/bpG +-s3O4PYnIW5naZ8mozzbnYByEFk7PoTwM7VhoFBfYNtBoAI8+hBnPY/Y71YUojEXf +-SeX6QbtkIANfzS1XuFNKElShC3DPQIHpKzaatEsfxHfP+8VOav6zcn4mioao7NHA +-x7Dp6R1enFGoQOq4UNjBT8YjnkG5vW8zQHW2dAHLTJBq6x2Fzm/4Pjo/8vM1FiGl +-BQdW5vfDeJ/l6NgQm3xR9ka2E2HaDqIcj1zWbN8jy/bHPFJYuF/HH8MBV/ngMIXE +-vFEW/ToYv8eif0+EpUtzBsCKD4a7qYYYh87RmEVoQU96q6m+UbhpD2WztYfAPkfo +-OSL9j2QHhVczhL7OAgqNeM95pOsjA9YMe7exTeqK31LYnTX8oH8WJD1xGbRSJYgu +-SY6PQbumcJkc/TFPn0GeVUpiDdf83SeG50lo/i7UKQi2l1hi5Y51fQhnBnyMr68D +-llSZEvSWqfDxBJkBpeg6PIYvkTpEwKRJpVQoM3uYvdqVSSnW6rydqIb+snfOrlhd +-f+xCtq9xr+kHeTSqLIDRRAnMfgFRhY3IBlj6MSUwIwYJKoZIhvcNAQkVMRYEFBdb +-8XGWehZ6oPj56Pf/uId46M9AMDEwITAJBgUrDgMCGgUABBRvSCB04/f8f13pp2PF +-vyl2WuMdEwQIMWFFphPkIUICAggA +- EOF +- p12 = OpenSSL::PKCS12.new(str, "abc123") +- +- assert_equal @mykey.to_der, p12.key.to_der +- assert_equal @mycert.subject.to_der, p12.certificate.subject.to_der +- assert_equal [], Array(p12.ca_certs) +- end +- + def test_new_with_no_keys + # generated with: +- # openssl pkcs12 -in <@mycert> -nokeys -export -out ++ # openssl pkcs12 -certpbe PBE-SHA1-3DES -in <@mycert> -nokeys -export + str = <<~EOF.unpack("m").first +-MIIDHAIBAzCCAuIGCSqGSIb3DQEHAaCCAtMEggLPMIICyzCCAscGCSqGSIb3DQEH +-BqCCArgwggK0AgEAMIICrQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIX4+W +-irqwH40CAggAgIICgOaCyo+5+6IOVoGCCL80c50bkkzAwqdXxvkKExJSdcJz2uMU +-0gRrKnZEjL5wrUsN8RwZu8DvgQTEhNEkKsUgM7AWainmN/EnwohIdHZAHpm6WD67 +-I9kLGp0/DHrqZrV9P2dLfhXLUSQE8PI0tqZPZ8UEABhizkViw4eISTkrOUN7pGbN +-Qtx/oqgitXDuX2polbxYYDwt9vfHZhykHoKgew26SeJyZfeMs/WZ6olEI4cQUAFr +-mvYGuC1AxEGTo9ERmU8Pm16j9Hr9PFk50WYe+rnk9oX3wJogQ7XUWS5kYf7XRycd +-NDkNiwV/ts94bbuaGZp1YA6I48FXpIc8b5fX7t9tY0umGaWy0bARe1L7o0Y89EPe +-lMg25rOM7j3uPtFG8whbSfdETSy57UxzzTcJ6UwexeaK6wb2jqEmj5AOoPLWeaX0 +-LyOAszR3v7OPAcjIDYZGdrbb3MZ2f2vo2pdQfu9698BrWhXuM7Odh73RLhJVreNI +-aezNOAtPyBlvGiBQBGTzRIYHSLL5Y5aVj2vWLAa7hjm5qTL5C5mFdDIo6TkEMr6I +-OsexNQofEGs19kr8nARXDlcbEimk2VsPj4efQC2CEXZNzURsKca82pa62MJ8WosB +-DTFd8X06zZZ4nED50vLopZvyW4fyW60lELwOyThAdG8UchoAaz2baqP0K4de44yM +-Y5/yPFDu4+GoimipJfbiYviRwbzkBxYW8+958ILh0RtagLbvIGxbpaym9PqGjOzx +-ShNXjLK2aAFZsEizQ8kd09quJHU/ogq2cUXdqqhmOqPnUWrJVi/VCoRB3Pv1/lE4 +-mrUgr2YZ11rYvBw6g5XvNvFcSc53OKyV7SLn0dwwMTAhMAkGBSsOAwIaBQAEFEWP +-1WRQykaoD4uJCpTx/wv0SLLBBAiDKI26LJK7xgICCAA= ++MIIGJAIBAzCCBeoGCSqGSIb3DQEHAaCCBdsEggXXMIIF0zCCBc8GCSqGSIb3 ++DQEHBqCCBcAwggW8AgEAMIIFtQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQMw ++DgQIjv5c3OHvnBgCAggAgIIFiMJa8Z/w7errRvCQPXh9dGQz3eJaFq3S2gXD ++rh6oiwsgIRJZvYAWgU6ll9NV7N5SgvS2DDNVuc3tsP8TPWjp+bIxzS9qmGUV ++kYWuURWLMKhpF12ZRDab8jcIwBgKoSGiDJk8xHjx6L613/XcRM6ln3VeQK+C ++hlW5kXniNAUAgTft25Fn61Xa8xnhmsz/fk1ycGnyGjKCnr7Mgy7KV0C1vs23 ++18n8+b1ktDWLZPYgpmXuMFVh0o+HJTV3O86mkIhJonMcnOMgKZ+i8KeXaocN ++JQlAPBG4+HOip7FbQT/h6reXv8/J+hgjLfqAb5aV3m03rUX9mXx66nR1tQU0 ++Jq+XPfDh5+V4akIczLlMyyo/xZjI1/qupcMjr+giOGnGd8BA3cuXW+ueLQiA ++PpTp+DQLVHRfz9XTZbyqOReNEtEXvO9gOlKSEY5lp65ItXVEs2Oqyf9PfU9y ++DUltN6fCMilwPyyrsIBKXCu2ZLM5h65KVCXAYEX9lNqj9zrQ7vTqvCNN8RhS ++ScYouTX2Eqa4Z+gTZWLHa8RCQFoyP6hd+97/Tg2Gv2UTH0myQxIVcnpdi1wy ++cqb+er7tyKbcO96uSlUjpj/JvjlodtjJcX+oinEqGb/caj4UepbBwiG3vv70 ++63bS3jTsOLNjDRsR9if3LxIhLa6DW8zOJiGC+EvMD1o4dzHcGVpQ/pZWCHZC +++YiNJpQOBApiZluE+UZ0m3XrtHFQYk7xblTrh+FJF91wBsok0rZXLAKd8m4p ++OJsc7quCq3cuHRRTzJQ4nSe01uqbwGDAYwLvi6VWy3svU5qa05eDRmgzEFTG ++e84Gp/1LQCtpQFr4txkjFchO2whWS80KoQKqmLPyGm1D9Lv53Q4ZsKMgNihs ++rEepuaOZMKHl4yMAYFoOXZCAYzfbhN6b2phcFAHjMUHUw9e3F0QuDk9D0tsr ++riYTrkocqlOKfK4QTomx27O0ON2J6f1rtEojGgfl9RNykN7iKGzjS3914QjW ++W6gGiZejxHsDPEAa4gUp0WiSUSXtD5WJgoyAzLydR2dKWsQ4WlaUXi01CuGy +++xvncSn2nO3bbot8VD5H6XU1CjREVtnIfbeRYO/uofyLUP3olK5RqN6ne6Xo ++eXnJ/bjYphA8NGuuuvuW1SCITmINkZDLC9cGlER9+K65RR/DR3TigkexXMeN ++aJ70ivZYAl0OuhZt3TGIlAzS64TIoyORe3z7Ta1Pp9PZQarYJpF9BBIZIFor ++757PHHuQKRuugiRkp8B7v4eq1BQ+VeAxCKpyZ7XrgEtbY/AWDiaKcGPKPjc3 ++AqQraVeQm7kMBT163wFmZArCphzkDOI3bz2oEO8YArMgLq2Vto9jAZlqKyWr ++pi2bSJxuoP1aoD58CHcWMrf8/j1LVdQhKgHQXSik2ID0H2Wc/XnglhzlVFuJ ++JsNIW/EGJlZh/5WDez9U0bXqnBlu3uasPEOezdoKlcCmQlmTO5+uLHYLEtNA ++EH9MtnGZebi9XS5meTuS6z5LILt8O9IHZxmT3JRPHYj287FEzotlLdcJ4Ee5 ++enW41UHjLrfv4OaITO1hVuoLRGdzjESx/fHMWmxroZ1nVClxECOdT42zvIYJ ++J3xBZ0gppzQ5fjoYiKjJpxTflRxUuxshk3ih6VUoKtqj/W18tBQ3g5SOlkgT ++yCW8r74yZlfYmNrPyDMUQYpLUPWj2n71GF0KyPfTU5yOatRgvheh262w5BG3 ++omFY7mb3tCv8/U2jdMIoukRKacpZiagofz3SxojOJq52cHnCri+gTHBMX0cO ++j58ygfntHWRzst0pV7Ze2X3fdCAJ4DokH6bNJNthcgmolFJ/y3V1tJjgsdtQ ++7Pjn/vE6xUV0HXE2x4yoVYNirbAMIvkN/X+atxrN0dA4AchN+zGp8TAxMCEw ++CQYFKw4DAhoFAAQUQ+6XXkyhf6uYgtbibILN2IjKnOAECLiqoY45MPCrAgII ++AA== + EOF + p12 = OpenSSL::PKCS12.new(str, "abc123") + + assert_equal nil, p12.key + assert_equal nil, p12.certificate + assert_equal 1, p12.ca_certs.size +- assert_equal @mycert.subject.to_der, p12.ca_certs[0].subject.to_der ++ assert_equal @mycert.subject, p12.ca_certs[0].subject + end + + def test_new_with_no_certs + # generated with: +- # openssl pkcs12 -inkey -nocerts -export -out ++ # openssl pkcs12 -inkey fixtures/openssl/pkey/rsa-1.pem -nocerts -export + str = <<~EOF.unpack("m").first +-MIIDJwIBAzCCAu0GCSqGSIb3DQEHAaCCAt4EggLaMIIC1jCCAtIGCSqGSIb3DQEH +-AaCCAsMEggK/MIICuzCCArcGCyqGSIb3DQEMCgECoIICpjCCAqIwHAYKKoZIhvcN +-AQwBAzAOBAg6AaYnJs84SwICCAAEggKAQzZH+fWSpcQYD1J7PsGSune85A++fLCQ +-V7tacp2iv95GJkxwYmfTP176pJdgs00mceB9UJ/u9EX5nD0djdjjQjwo6sgKjY0q +-cpVhZw8CMxw7kBD2dhtui0zT8z5hy03LePxsjEKsGiSbeVeeGbSfw/I6AAYbv+Uh +-O/YPBGumeHj/D2WKnfsHJLQ9GAV3H6dv5VKYNxjciK7f/JEyZCuUQGIN64QFHDhJ +-7fzLqd/ul3FZzJZO6a+dwvcgux09SKVXDRSeFmRCEX4b486iWhJJVspCo9P2KNne +-ORrpybr3ZSwxyoICmjyo8gj0OSnEfdx9790Ej1takPqSA1wIdSdBLekbZqB0RBQg +-DEuPOsXNo3QFi8ji1vu0WBRJZZSNC2hr5NL6lNR+DKxG8yzDll2j4W4BBIp22mAE +-7QRX7kVxu17QJXQhOUac4Dd1qXmzebP8t6xkAxD9L7BWEN5OdiXWwSWGjVjMBneX +-nYObi/3UT/aVc5WHMHK2BhCI1bwH51E6yZh06d5m0TQpYGUTWDJdWGBSrp3A+8jN +-N2PMQkWBFrXP3smHoTEN4oZC4FWiPsIEyAkQsfKRhcV9lGKl2Xgq54ROTFLnwKoj +-Z3zJScnq9qmNzvVZSMmDLkjLyDq0pxRxGKBvgouKkWY7VFFIwwBIJM39iDJ5NbBY +-i1AQFTRsRSsZrNVPasCXrIq7bhMoJZb/YZOGBLNyJVqKUoYXhtwsajzSq54VlWft +-JxsPayEd4Vi6O9EU1ahnj6qFEZiKFzsicgK2J1Rb8cYagrp0XWjHW0SBn5GVUWCg +-GUokSFG/0JTdeYTo/sQuG4qNgJkOolRjpeI48Fciq5VUWLvVdKioXzAxMCEwCQYF +-Kw4DAhoFAAQUYAuwVtGD1TdgbFK4Yal2XBgwUR4ECEawsN3rNaa6AgIIAA== ++MIIJ7wIBAzCCCbUGCSqGSIb3DQEHAaCCCaYEggmiMIIJnjCCCZoGCSqGSIb3 ++DQEHAaCCCYsEggmHMIIJgzCCCX8GCyqGSIb3DQEMCgECoIIJbjCCCWowHAYK ++KoZIhvcNAQwBAzAOBAjX5nN8jyRKwQICCAAEgglIBIRLHfiY1mNHpl3FdX6+ ++72L+ZOVXnlZ1MY9HSeg0RMkCJcm0mJ2UD7INUOGXvwpK9fr6WJUZM1IqTihQ ++1dM0crRC2m23aP7KtAlXh2DYD3otseDtwoN/NE19RsiJzeIiy5TSW1d47weU +++D4Ig/9FYVFPTDgMzdCxXujhvO/MTbZIjqtcS+IOyF+91KkXrHkfkGjZC7KS ++WRmYw9BBuIPQEewdTI35sAJcxT8rK7JIiL/9mewbSE+Z28Wq1WXwmjL3oZm9 ++lw6+f515b197GYEGomr6LQqJJamSYpwQbTGHonku6Tf3ylB4NLFqOnRCKE4K ++zRSSYIqJBlKHmQ4pDm5awoupHYxMZLZKZvXNYyYN3kV8r1iiNVlY7KBR4CsX ++rqUkXehRmcPnuqEMW8aOpuYe/HWf8PYI93oiDZjcEZMwW2IZFFrgBbqUeNCM ++CQTkjAYxi5FyoaoTnHrj/aRtdLOg1xIJe4KKcmOXAVMmVM9QEPNfUwiXJrE7 ++n42gl4NyzcZpxqwWBT++9TnQGZ/lEpwR6dzkZwICNQLdQ+elsdT7mumywP+1 ++WaFqg9kpurimaiBu515vJNp9Iqv1Nmke6R8Lk6WVRKPg4Akw0fkuy6HS+LyN ++ofdCfVUkPGN6zkjAxGZP9ZBwvXUbLRC5W3N5qZuAy5WcsS75z+oVeX9ePV63 ++cue23sClu8JSJcw3HFgPaAE4sfkQ4MoihPY5kezgT7F7Lw/j86S0ebrDNp4N ++Y685ec81NRHJ80CAM55f3kGCOEhoifD4VZrvr1TdHZY9Gm3b1RYaJCit2huF ++nlOfzeimdcv/tkjb6UsbpXx3JKkF2NFFip0yEBERRCdWRYMUpBRcl3ad6XHy ++w0pVTgIjTxGlbbtOCi3siqMOK0GNt6UgjoEFc1xqjsgLwU0Ta2quRu7RFPGM ++GoEwoC6VH23p9Hr4uTFOL0uHfkKWKunNN+7YPi6LT6IKmTQwrp+fTO61N6Xh ++KlqTpwESKsIJB2iMnc8wBkjXJtmG/e2n5oTqfhICIrxYmEb7zKDyK3eqeTj3 ++FhQh2t7cUIiqcT52AckUqniPmlE6hf82yBjhaQUPfi/ExTBtTDSmFfRPUzq+ ++Rlla4OHllPRzUXJExyansgCxZbPqlw46AtygSWRGcWoYAKUKwwoYjerqIV5g ++JoZICV9BOU9TXco1dHXZQTs/nnTwoRmYiL/Ly5XpvUAnQOhYeCPjBeFnPSBR ++R/hRNqrDH2MOV57v5KQIH2+mvy26tRG+tVGHmLMaOJeQkjLdxx+az8RfXIrH ++7hpAsoBb+g9jUDY1mUVavPk1T45GMpQH8u3kkzRvChfOst6533GyIZhE7FhN ++KanC6ACabVFDUs6P9pK9RPQMp1qJfpA0XJFx5TCbVbPkvnkZd8K5Tl/tzNM1 ++n32eRao4MKr9KDwoDL93S1yJgYTlYjy1XW/ewdedtX+B4koAoz/wSXDYO+GQ ++Zu6ZSpKSEHTRPhchsJ4oICvpriVaJkn0/Z7H3YjNMB9U5RR9+GiIg1wY1Oa1 ++S3WfuwrrI6eqfbQwj6PDNu3IKy6srEgvJwaofQALNBPSYWbauM2brc8qsD+t ++n8jC/aD1aMcy00+9t3H/RVCjEOb3yKfUpAldIkEA2NTTnZpoDQDXeNYU2F/W ++yhmFjJy8A0O4QOk2xnZK9kcxSRs0v8vI8HivvgWENoVPscsDC4742SSIe6SL ++f/T08reIX11f0K70rMtLhtFMQdHdYOTNl6JzhkHPLr/f9MEZsBEQx52depnF ++ARb3gXGbCt7BAi0OeCEBSbLr2yWuW4r55N0wRZSOBtgqgjsiHP7CDQSkbL6p ++FPlQS1do9gBSHiNYvsmN1LN5bG+mhcVb0UjZub4mL0EqGadjDfDdRJmWqlX0 ++r5dyMcOWQVy4O2cPqYFlcP9lk8buc5otcyVI2isrAFdlvBK29oK6jc52Aq5Q ++0b2ESDlgX8WRgiOPPxK8dySKEeuIwngCtJyNTecP9Ug06TDsu0znZGCXJ+3P ++8JOpykgA8EQdOZOYHbo76ZfB2SkklI5KeRA5IBjGs9G3TZ4PHLy2DIwsbWzS ++H1g01o1x264nx1cJ+eEgUN/KIiGFIib42RS8Af4D5e+Vj54Rt3axq+ag3kI+ ++53p8uotyu+SpvvXUP7Kv4xpQ/L6k41VM0rfrd9+DrlDVvSfxP2uh6I1TKF7A ++CT5n8zguMbng4PGjxvyPBM5k62t6hN5fuw6Af0aZFexh+IjB/5wFQ6onSz23 ++fBzMW4St7RgSs8fDg3lrM+5rwXiey1jxY1ddaxOoUsWRMvvdd7rZxRZQoN5v ++AcI5iMkK/vvpQgC/sfzhtXtrJ2XOPZ+GVgi7VcuDLKSkdFMcPbGzO8SdxUnS ++SLV5XTKqKND+Lrfx7DAoKi5wbDFHu5496/MHK5qP4tBe6sJ5bZc+KDJIH46e ++wTV1oWtB5tV4q46hOb5WRcn/Wjz3HSKaGZgx5QbK1MfKTzD5CTUn+ArMockX ++2wJhPnFK85U4rgv8iBuh9bRjyw+YaKf7Z3loXRiE1eRG6RzuPF0ZecFiDumk ++AC/VUXynJhzePBLqzrQj0exanACdullN+pSfHiRWBxR2VFUkjoFP5X45GK3z ++OstSH6FOkMVU4afqEmjsIwozDFIyin5EyWTtdhJe3szdJSGY23Tut+9hUatx ++9FDFLESOd8z3tyQSNiLk/Hib+e/lbjxqbXBG/p/oyvP3N999PLUPtpKqtYkV ++H0+18sNh9CVfojiJl44fzxe8yCnuefBjut2PxEN0EFRBPv9P2wWlmOxkPKUq ++NrCJP0rDj5aONLrNZPrR8bZNdIShkZ/rKkoTuA0WMZ+xUlDRxAupdMkWAlrz ++8IcwNcdDjPnkGObpN5Ctm3vK7UGSBmPeNqkXOYf3QTJ9gStJEd0F6+DzTN5C ++KGt1IyuGwZqL2Yk51FDIIkr9ykEnBMaA39LS7GFHEDNGlW+fKC7AzA0zfoOr ++fXZlHMBuqHtXqk3zrsHRqGGoocigg4ctrhD1UREYKj+eIj1TBiRdf7c6+COf ++NIOmej8pX3FmZ4ui+dDA8r2ctgsWHrb4A6iiH+v1DRA61GtoaA/tNRggewXW ++VXCZCGWyyTuyHGOqq5ozrv5MlzZLWD/KV/uDsAWmy20RAed1C4AzcXlpX25O ++M4SNl47g5VRNJRtMqokc8j6TjZrzMDEwITAJBgUrDgMCGgUABBRrkIRuS5qg ++BC8fv38mue8LZVcbHQQIUNrWKEnskCoCAggA + EOF + p12 = OpenSSL::PKCS12.new(str, "abc123") + +- assert_equal @mykey.to_der, p12.key.to_der ++ assert_equal Fixtures.pkey("rsa-1").to_der, p12.key.to_der + assert_equal nil, p12.certificate + assert_equal [], Array(p12.ca_certs) + end + + def test_dup +- p12 = OpenSSL::PKCS12.create("pass", "name", @mykey, @mycert) ++ p12 = OpenSSL::PKCS12.create( ++ "pass", ++ "name", ++ @mykey, ++ @mycert, ++ nil, ++ DEFAULT_PBE_PKEYS, ++ DEFAULT_PBE_CERTS, ++ ) + assert_equal p12.to_der, p12.dup.to_der + end +- +- private +- def assert_cert expected, actual +- [ +- :subject, +- :issuer, +- :serial, +- :not_before, +- :not_after, +- ].each do |attribute| +- assert_equal expected.send(attribute), actual.send(attribute) +- end +- assert_equal expected.to_der, actual.to_der +- end +- +- def assert_include_cert cert, ary +- der = cert.to_der +- ary.each do |candidate| +- if candidate.to_der == der +- return true +- end +- end +- false +- end + end + end + +-- +2.32.0 + diff --git a/ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch b/ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch new file mode 100644 index 0000000..ac45842 --- /dev/null +++ b/ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch @@ -0,0 +1,67 @@ +From 10d2216b2f35a31777a099d9f765b0b6ea34a63e Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 18 May 2020 02:35:35 +0900 +Subject: [PATCH] test/openssl/test_pkey: use EC keys for + PKey.generate_parameters tests + +OpenSSL 3.0 refuses to generate DSA parameters shorter than 2048 bits, +but generating 2048 bits parameters takes very long time. Let's use EC +in these test cases instead. +--- + test/openssl/test_pkey.rb | 27 +++++++++++---------------- + 1 file changed, 11 insertions(+), 16 deletions(-) + +diff --git a/test/openssl/test_pkey.rb b/test/openssl/test_pkey.rb +index 3630458b3c..88a6e04581 100644 +--- a/test/openssl/test_pkey.rb ++++ b/test/openssl/test_pkey.rb +@@ -27,20 +27,16 @@ def test_generic_oid_inspect + end + + def test_s_generate_parameters +- # 512 is non-default; 1024 is used if 'dsa_paramgen_bits' is not specified +- # with OpenSSL 1.1.0. +- pkey = OpenSSL::PKey.generate_parameters("DSA", { +- "dsa_paramgen_bits" => 512, +- "dsa_paramgen_q_bits" => 256, ++ pkey = OpenSSL::PKey.generate_parameters("EC", { ++ "ec_paramgen_curve" => "secp384r1", + }) +- assert_instance_of OpenSSL::PKey::DSA, pkey +- assert_equal 512, pkey.p.num_bits +- assert_equal 256, pkey.q.num_bits +- assert_equal nil, pkey.priv_key ++ assert_instance_of OpenSSL::PKey::EC, pkey ++ assert_equal "secp384r1", pkey.group.curve_name ++ assert_equal nil, pkey.private_key + + # Invalid options are checked + assert_raise(OpenSSL::PKey::PKeyError) { +- OpenSSL::PKey.generate_parameters("DSA", "invalid" => "option") ++ OpenSSL::PKey.generate_parameters("EC", "invalid" => "option") + } + + # Parameter generation callback is called +@@ -59,14 +55,13 @@ def test_s_generate_key + # DSA key pair cannot be generated without parameters + OpenSSL::PKey.generate_key("DSA") + } +- pkey_params = OpenSSL::PKey.generate_parameters("DSA", { +- "dsa_paramgen_bits" => 512, +- "dsa_paramgen_q_bits" => 256, ++ pkey_params = OpenSSL::PKey.generate_parameters("EC", { ++ "ec_paramgen_curve" => "secp384r1", + }) + pkey = OpenSSL::PKey.generate_key(pkey_params) +- assert_instance_of OpenSSL::PKey::DSA, pkey +- assert_equal 512, pkey.p.num_bits +- assert_not_equal nil, pkey.priv_key ++ assert_instance_of OpenSSL::PKey::EC, pkey ++ assert_equal "secp384r1", pkey.group.curve_name ++ assert_not_equal nil, pkey.private_key + end + + def test_hmac_sign_verify +-- +2.32.0 + diff --git a/ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch b/ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch new file mode 100644 index 0000000..f638047 --- /dev/null +++ b/ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch @@ -0,0 +1,31 @@ +From 05fd14aea7eff2a6911a6f529f1237276482c6e7 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 10 Jul 2020 13:56:38 +0900 +Subject: [PATCH] test/openssl/test_ssl: relax regex to match OpenSSL's error + message + +OpenSSL 3.0 slightly changed the error message for a certificate +verification failure when an untrusted self-signed certificate is found +in the chain. +--- + test/openssl/test_ssl.rb | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb +index 6095d545b5..9e9b8b9b69 100644 +--- a/test/openssl/test_ssl.rb ++++ b/test/openssl/test_ssl.rb +@@ -955,7 +955,9 @@ def test_connect_certificate_verify_failed_exception_message + start_server(ignore_listener_error: true) { |port| + ctx = OpenSSL::SSL::SSLContext.new + ctx.set_params +- assert_raise_with_message(OpenSSL::SSL::SSLError, /self signed/) { ++ # OpenSSL <= 1.1.0: "self signed certificate in certificate chain" ++ # OpenSSL >= 3.0.0: "self-signed certificate in certificate chain" ++ assert_raise_with_message(OpenSSL::SSL::SSLError, /self.signed/) { + server_connect(port, ctx) + } + } +-- +2.32.0 + diff --git a/ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch b/ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch new file mode 100644 index 0000000..23c73ba --- /dev/null +++ b/ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch @@ -0,0 +1,265 @@ +From 2c6797bc97d7c92284dc3c0ed27f97ace4e5cfb9 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 31 May 2021 11:44:05 +0900 +Subject: [PATCH] test/openssl/utils: remove dup_public helper method + +It uses deprecated PKey::{RSA,DSA,DH}#set_* methods, which will not +work with OpenSSL 3.0. The same can easily be achieved using +PKey#public_to_der regardless of the key kind. +--- + test/openssl/test_pkey_dh.rb | 8 +++++--- + test/openssl/test_pkey_dsa.rb | 15 +++++++++++---- + test/openssl/test_pkey_ec.rb | 15 +++++++++++---- + test/openssl/test_pkey_rsa.rb | 31 +++++++++++++++++-------------- + test/openssl/utils.rb | 26 -------------------------- + 5 files changed, 44 insertions(+), 51 deletions(-) + +diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb +index f80af8f841..757704caf6 100644 +--- a/test/openssl/test_pkey_dh.rb ++++ b/test/openssl/test_pkey_dh.rb +@@ -40,12 +40,14 @@ def test_derive_key + + def test_DHparams + dh1024 = Fixtures.pkey("dh1024") ++ dh1024params = dh1024.public_key ++ + asn1 = OpenSSL::ASN1::Sequence([ + OpenSSL::ASN1::Integer(dh1024.p), + OpenSSL::ASN1::Integer(dh1024.g) + ]) + key = OpenSSL::PKey::DH.new(asn1.to_der) +- assert_same_dh dup_public(dh1024), key ++ assert_same_dh dh1024params, key + + pem = <<~EOF + -----BEGIN DH PARAMETERS----- +@@ -55,9 +57,9 @@ def test_DHparams + -----END DH PARAMETERS----- + EOF + key = OpenSSL::PKey::DH.new(pem) +- assert_same_dh dup_public(dh1024), key ++ assert_same_dh dh1024params, key + key = OpenSSL::PKey.read(pem) +- assert_same_dh dup_public(dh1024), key ++ assert_same_dh dh1024params, key + + assert_equal asn1.to_der, dh1024.to_der + assert_equal pem, dh1024.export +diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb +index 147e50176b..0994607f21 100644 +--- a/test/openssl/test_pkey_dsa.rb ++++ b/test/openssl/test_pkey_dsa.rb +@@ -138,6 +138,8 @@ def test_DSAPrivateKey_encrypted + + def test_PUBKEY + dsa512 = Fixtures.pkey("dsa512") ++ dsa512pub = OpenSSL::PKey::DSA.new(dsa512.public_to_der) ++ + asn1 = OpenSSL::ASN1::Sequence([ + OpenSSL::ASN1::Sequence([ + OpenSSL::ASN1::ObjectId("DSA"), +@@ -153,7 +155,7 @@ def test_PUBKEY + ]) + key = OpenSSL::PKey::DSA.new(asn1.to_der) + assert_not_predicate key, :private? +- assert_same_dsa dup_public(dsa512), key ++ assert_same_dsa dsa512pub, key + + pem = <<~EOF + -----BEGIN PUBLIC KEY----- +@@ -166,10 +168,15 @@ def test_PUBKEY + -----END PUBLIC KEY----- + EOF + key = OpenSSL::PKey::DSA.new(pem) +- assert_same_dsa dup_public(dsa512), key ++ assert_same_dsa dsa512pub, key ++ ++ assert_equal asn1.to_der, key.to_der ++ assert_equal pem, key.export + +- assert_equal asn1.to_der, dup_public(dsa512).to_der +- assert_equal pem, dup_public(dsa512).export ++ assert_equal asn1.to_der, dsa512.public_to_der ++ assert_equal asn1.to_der, key.public_to_der ++ assert_equal pem, dsa512.public_to_pem ++ assert_equal pem, key.public_to_pem + end + + def test_read_DSAPublicKey_pem +diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb +index 4b6df0290f..d62f1b5eb8 100644 +--- a/test/openssl/test_pkey_ec.rb ++++ b/test/openssl/test_pkey_ec.rb +@@ -210,6 +210,8 @@ def test_ECPrivateKey_encrypted + + def test_PUBKEY + p256 = Fixtures.pkey("p256") ++ p256pub = OpenSSL::PKey::EC.new(p256.public_to_der) ++ + asn1 = OpenSSL::ASN1::Sequence([ + OpenSSL::ASN1::Sequence([ + OpenSSL::ASN1::ObjectId("id-ecPublicKey"), +@@ -221,7 +223,7 @@ def test_PUBKEY + ]) + key = OpenSSL::PKey::EC.new(asn1.to_der) + assert_not_predicate key, :private? +- assert_same_ec dup_public(p256), key ++ assert_same_ec p256pub, key + + pem = <<~EOF + -----BEGIN PUBLIC KEY----- +@@ -230,10 +232,15 @@ def test_PUBKEY + -----END PUBLIC KEY----- + EOF + key = OpenSSL::PKey::EC.new(pem) +- assert_same_ec dup_public(p256), key ++ assert_same_ec p256pub, key ++ ++ assert_equal asn1.to_der, key.to_der ++ assert_equal pem, key.export + +- assert_equal asn1.to_der, dup_public(p256).to_der +- assert_equal pem, dup_public(p256).export ++ assert_equal asn1.to_der, p256.public_to_der ++ assert_equal asn1.to_der, key.public_to_der ++ assert_equal pem, p256.public_to_pem ++ assert_equal pem, key.public_to_pem + end + + def test_ec_group +diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb +index 5e127f5407..4548bdb2cf 100644 +--- a/test/openssl/test_pkey_rsa.rb ++++ b/test/openssl/test_pkey_rsa.rb +@@ -201,7 +201,7 @@ def test_sign_verify_pss + + def test_encrypt_decrypt + rsapriv = Fixtures.pkey("rsa-1") +- rsapub = dup_public(rsapriv) ++ rsapub = OpenSSL::PKey.read(rsapriv.public_to_der) + + # Defaults to PKCS #1 v1.5 + raw = "data" +@@ -216,7 +216,7 @@ def test_encrypt_decrypt + + def test_encrypt_decrypt_legacy + rsapriv = Fixtures.pkey("rsa-1") +- rsapub = dup_public(rsapriv) ++ rsapub = OpenSSL::PKey.read(rsapriv.public_to_der) + + # Defaults to PKCS #1 v1.5 + raw = "data" +@@ -346,13 +346,15 @@ def test_RSAPrivateKey_encrypted + + def test_RSAPublicKey + rsa1024 = Fixtures.pkey("rsa1024") ++ rsa1024pub = OpenSSL::PKey::RSA.new(rsa1024.public_to_der) ++ + asn1 = OpenSSL::ASN1::Sequence([ + OpenSSL::ASN1::Integer(rsa1024.n), + OpenSSL::ASN1::Integer(rsa1024.e) + ]) + key = OpenSSL::PKey::RSA.new(asn1.to_der) + assert_not_predicate key, :private? +- assert_same_rsa dup_public(rsa1024), key ++ assert_same_rsa rsa1024pub, key + + pem = <<~EOF + -----BEGIN RSA PUBLIC KEY----- +@@ -362,11 +364,13 @@ def test_RSAPublicKey + -----END RSA PUBLIC KEY----- + EOF + key = OpenSSL::PKey::RSA.new(pem) +- assert_same_rsa dup_public(rsa1024), key ++ assert_same_rsa rsa1024pub, key + end + + def test_PUBKEY + rsa1024 = Fixtures.pkey("rsa1024") ++ rsa1024pub = OpenSSL::PKey::RSA.new(rsa1024.public_to_der) ++ + asn1 = OpenSSL::ASN1::Sequence([ + OpenSSL::ASN1::Sequence([ + OpenSSL::ASN1::ObjectId("rsaEncryption"), +@@ -381,7 +385,7 @@ def test_PUBKEY + ]) + key = OpenSSL::PKey::RSA.new(asn1.to_der) + assert_not_predicate key, :private? +- assert_same_rsa dup_public(rsa1024), key ++ assert_same_rsa rsa1024pub, key + + pem = <<~EOF + -----BEGIN PUBLIC KEY----- +@@ -392,10 +396,15 @@ def test_PUBKEY + -----END PUBLIC KEY----- + EOF + key = OpenSSL::PKey::RSA.new(pem) +- assert_same_rsa dup_public(rsa1024), key ++ assert_same_rsa rsa1024pub, key ++ ++ assert_equal asn1.to_der, key.to_der ++ assert_equal pem, key.export + +- assert_equal asn1.to_der, dup_public(rsa1024).to_der +- assert_equal pem, dup_public(rsa1024).export ++ assert_equal asn1.to_der, rsa1024.public_to_der ++ assert_equal asn1.to_der, key.public_to_der ++ assert_equal pem, rsa1024.public_to_pem ++ assert_equal pem, key.public_to_pem + end + + def test_pem_passwd +@@ -482,12 +491,6 @@ def test_private_encoding_encrypted + assert_same_rsa rsa1024, OpenSSL::PKey.read(pem, "abcdef") + end + +- def test_public_encoding +- rsa1024 = Fixtures.pkey("rsa1024") +- assert_equal dup_public(rsa1024).to_der, rsa1024.public_to_der +- assert_equal dup_public(rsa1024).to_pem, rsa1024.public_to_pem +- end +- + def test_dup + key = Fixtures.pkey("rsa1024") + key2 = key.dup +diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb +index c1d737b2ab..f664bd3074 100644 +--- a/test/openssl/utils.rb ++++ b/test/openssl/utils.rb +@@ -305,32 +305,6 @@ def check_component(base, test, keys) + assert_equal base.send(comp), test.send(comp) + } + end +- +- def dup_public(key) +- case key +- when OpenSSL::PKey::RSA +- rsa = OpenSSL::PKey::RSA.new +- rsa.set_key(key.n, key.e, nil) +- rsa +- when OpenSSL::PKey::DSA +- dsa = OpenSSL::PKey::DSA.new +- dsa.set_pqg(key.p, key.q, key.g) +- dsa.set_key(key.pub_key, nil) +- dsa +- when OpenSSL::PKey::DH +- dh = OpenSSL::PKey::DH.new +- dh.set_pqg(key.p, nil, key.g) +- dh +- else +- if defined?(OpenSSL::PKey::EC) && OpenSSL::PKey::EC === key +- ec = OpenSSL::PKey::EC.new(key.group) +- ec.public_key = key.public_key +- ec +- else +- raise "unknown key type" +- end +- end +- end + end + + module OpenSSL::Certs +-- +2.32.0 + diff --git a/ruby.spec b/ruby.spec index eb43d42..d0bb381 100644 --- a/ruby.spec +++ b/ruby.spec @@ -167,6 +167,71 @@ Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch # Add AC_PROG_CC to make C++ compiler dependency optional on autoconf >= 2.70. # https://github.com/ruby/ruby/commit/912a8dcfc5369d840dcd6bf0f88ee0bac7d902d6 Patch20: ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch +# Allow to exclude test with fully qualified name. +# https://bugs.ruby-lang.org/issues/16936 +# https://github.com/ruby/ruby/pull/5026 +Patch21: ruby-3.1.0-Properly-exclude-test-cases.patch + + +# OpenSSL 3.0 compatibility patches + +# Switch from legacy DES-CBC to AES-256-CBC. +# https://github.com/rubygems/rubygems/pull/4986 +Patch30: rubygems-3.2.30-Switch-from-DES-CBC-to-AES-256-CBC.patch +# Fix test broken by wrongly formatted distinguished name submitted to +# `OpenSSL::X509::Name.parse`. +# https://github.com/ruby/openssl/issues/470 +# https://github.com/rubygems/rubygems/pull/5030 +Patch31: rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch +# Fix TestGemRequest#test_verify_certificate_extra_message compatibility +# with OpenSSL 3.x. +# https://github.com/rubygems/rubygems/pull/5040 +Patch32: rubygems-3.2.30-Use-OpenSSL-constants-for-error-codes.patch + +# Refactor PEM/DER serialization code. +# https://github.com/ruby/openssl/pull/328 +Patch40: ruby-3.1.0-Refactor-PEM-DER-serialization-code.patch +# Implement more 'generic' operations using the EVP API. +# https://github.com/ruby/openssl/pull/329 +Patch41: ruby-3.1.0-Add-more-support-for-generic-pkey-types.patch +# Allow setting algorithm-specific options in #sign and #verify. +# https://github.com/ruby/openssl/pull/374 +Patch42: ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch +# Use high level EVP interface to generate parameters and keys. +# https://github.com/ruby/openssl/pull/397 +Patch43: ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch +# Use EVP API in more places. +# https://github.com/ruby/openssl/pull/436 +Patch44: ruby-3.1.0-Use-EVP-API-in-more-places.patch +# Implement PKey#{encrypt,decrypt,sign_raw,verify_{raw,verify_recover}}. +# https://github.com/ruby/openssl/pull/382 +Patch45: ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch +# Fix `OpenSSL::TestSSL#test_dup` test failure. +# https://github.com/ruby/openssl/commit/7b66eaa2dbabb6570dbbbdfac24c4dcdcc6793d7 +Patch46: ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch +# Fix `OpenSSL::TestDigest#test_digest_constants` test case. +# https://github.com/ruby/openssl/commit/a3e59f4c2e200c76ef1d93945ff8737a05715e17 +Patch47: ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch +# Fix `OpenSSL::TestSSL#test_connect_certificate_verify_failed_exception_message` +# test case. +# https://github.com/ruby/openssl/commit/b5a0a198505452c7457b192da2e5cd5dda04f23d +Patch48: ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch +# Fix `OpenSSL::TestPKCS12#test_{new_with_no_keys,new_with_one_key_and_one_cert}` +# test failures. +# https://github.com/ruby/openssl/commit/998406d18f2acf73090e9fd9d92a7b4227ac593b +Patch49: ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch +# Fix `OpenSSL::TestPKey#test_s_generate_key` test case. +# https://github.com/ruby/openssl/commit/c732387ee5aaa8c5a9717e8b3ffebb3d7430e99a +Patch50: ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch +# Miscellaneous changes for OpenSSL 3.0 support. +# https://github.com/ruby/openssl/pull/468 +Patch51: ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch +# Support OpenSSL 3.0. +# https://github.com/ruby/openssl/pull/399 +Patch52: ruby-3.1.0-Support-OpenSSL-3.0.patch +# Fix `TestPumaControlCli#test_control_ssl` testcase in Puma. +# https://github.com/ruby/openssl/pull/399#issuecomment-966239736 +Patch53: ruby-3.1.0-SSL_read-EOF-handling.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -618,6 +683,24 @@ rm -rf ext/fiddle/libffi* %patch18 -p1 %patch19 -p1 %patch20 -p1 +%patch21 -p1 +%patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch40 -p1 +%patch41 -p1 +%patch42 -p1 +%patch43 -p1 +%patch44 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 +%patch49 -p1 +%patch50 -p1 +%patch51 -p1 +%patch52 -p1 +%patch53 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -896,6 +979,13 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} +# Some tests are failing upstream due to OpenSSL 3.x compatibility. +# https://github.com/ruby/openssl/pull/399/checks?check_run_id=3716152870 +DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestEC#test_check_key/" +DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestPKeyDH#test_derive_key/" +DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestPKeyDH#test_key_exchange/" +DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" + # Give an option to increase the timeout in tests. # https://bugs.ruby-lang.org/issues/16921 %{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ @@ -1374,6 +1464,10 @@ MSPECOPTS="" %changelog +* Fri Nov 05 2021 Vít Ondruch - 3.0.2-153 +- Fix OpenSSL 3.0 compatibility. + Resolves: rhbz#2021922 + * Tue Sep 14 2021 Sahana Prasad - Rebuilt with OpenSSL 3.0.0 diff --git a/rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch b/rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch new file mode 100644 index 0000000..4cd1752 --- /dev/null +++ b/rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch @@ -0,0 +1,44 @@ +From bb0f57aeb4de36a3b2b8b8cb01d25b32af0357d3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Wed, 27 Oct 2021 16:28:24 +0200 +Subject: [PATCH] Provide distinguished name which will be correctly parsed. + +It seems that since ruby openssl 2.1.0 [[1]], the distinguished name +submitted to `OpenSSL::X509::Name.parse` is not correctly parsed if it +does not contain the first slash: + +~~~ +$ ruby -v +ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux] + +$ gem list | grep openssl +openssl (default: 2.2.0) + +$ irb -r openssl +irb(main):001:0> OpenSSL::X509::Name.parse("CN=nobody/DC=example").to_s(OpenSSL::X509::Name::ONELINE) +=> "CN = nobody/DC=example" +irb(main):002:0> OpenSSL::X509::Name.parse("/CN=nobody/DC=example").to_s(OpenSSL::X509::Name::ONELINE) +=> "CN = nobody, DC = example" +~~~ + +[1]: https://github.com/ruby/openssl/commit/19c67cd10c57f3ab7b13966c36431ebc3fdd653b +--- + lib/rubygems/security.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb +index c80639af6d..12de141f36 100644 +--- a/lib/rubygems/security.rb ++++ b/lib/rubygems/security.rb +@@ -476,7 +476,7 @@ def self.email_to_name(email_address) + + dcs = dcs.split '.' + +- name = "CN=#{cn}/#{dcs.map {|dc| "DC=#{dc}" }.join '/'}" ++ name = "/CN=#{cn}/#{dcs.map {|dc| "DC=#{dc}" }.join '/'}" + + OpenSSL::X509::Name.parse name + end +-- +2.32.0 + diff --git a/rubygems-3.2.30-Switch-from-DES-CBC-to-AES-256-CBC.patch b/rubygems-3.2.30-Switch-from-DES-CBC-to-AES-256-CBC.patch new file mode 100644 index 0000000..e50f581 --- /dev/null +++ b/rubygems-3.2.30-Switch-from-DES-CBC-to-AES-256-CBC.patch @@ -0,0 +1,106 @@ +From 467be1c90bda755710943e9e2a42a42262dde909 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 14 Oct 2021 09:46:03 +0200 +Subject: [PATCH] Switch from DES-CBC to AES-256-CBC. + +DES-CBS is considered legacy and disabled in OpenSSL 3.x+ [[1], [2]]. +This cause causes Ruby test failures: + +~~~ +ruby -v: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux] +/builddir/build/BUILD/ruby-3.0.2/lib/rubygems/test_case.rb:1542:in `initialize': Neither PUB key nor PRIV key (OpenSSL::PKey::RSAError) + from /builddir/build/BUILD/ruby-3.0.2/lib/rubygems/test_case.rb:1542:in `new' + from /builddir/build/BUILD/ruby-3.0.2/lib/rubygems/test_case.rb:1542:in `load_key' + from /builddir/build/BUILD/ruby-3.0.2/lib/rubygems/test_case.rb:1562:in `' + from /builddir/build/BUILD/ruby-3.0.2/lib/rubygems/test_case.rb:105:in `' + from :85:in `require' + from :85:in `require' + from /builddir/build/BUILD/ruby-3.0.2/test/rdoc/test_rdoc_rubygems_hook.rb:2:in `' + from :85:in `require' + from :85:in `require' + from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1049:in `block in non_options' + from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1043:in `each' + from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1043:in `non_options' + from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:65:in `process_args' + from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:143:in `process_args' + from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1237:in `process_args' + from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1242:in `run' + from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1249:in `run' + from /builddir/build/BUILD/ruby-3.0.2/tool/test/runner.rb:23:in `' + from ./test/runner.rb:11:in `require_relative' + from ./test/runner.rb:11:in `
' +~~~ + +Therefore use AES-256-CBC instead. This is essentially revert of +ca228b76b, which was fixing https://github.com/jruby/jruby/issues/919 + +[1]: https://github.com/openssl/openssl/blob/master/doc/man7/migration_guide.pod#legacy-algorithms +[2]: https://github.com/openssl/openssl/blob/master/doc/man7/OSSL_PROVIDER-legacy.pod +--- + test/rubygems/encrypted_private_key.pem | 52 ++++++++++++------------- + 1 file changed, 26 insertions(+), 26 deletions(-) + +diff --git a/test/rubygems/encrypted_private_key.pem b/test/rubygems/encrypted_private_key.pem +index 868f332b7c..d9667689a6 100644 +--- a/test/rubygems/encrypted_private_key.pem ++++ b/test/rubygems/encrypted_private_key.pem +@@ -1,30 +1,30 @@ + -----BEGIN RSA PRIVATE KEY----- + Proc-Type: 4,ENCRYPTED +-DEK-Info: DES-CBC,4E38D58B5A059DB6 ++DEK-Info: AES-256-CBC,CB6FD0B173EF450C6EE21A01DD785C1D + +-IgWLfnHVnkErKkhysrUMoE0ubkRDtJXZv9KR02jGGFk/kGqWyTqPk08uzhwVNM+l +-eOk0qfPykkJM3KZgqTsD6xfA1D5WqFp5mLoFXVVTn9I3acSZsqOY0FweCipwdVpI +-x+9Fl+v62kIW06dOjyWLE1abed9hHiXesGGsD87/RJSywy4OBxOcrhR1fJLK4ElR +-ya0UzI7rWnmZMChjaZBssfzT1DR79/dARXhon2m5EiIJDjMpc8BKGYlQy5RHCHwA +-cnrhUTTvsggZbQtmLZ/yVx8FSJ273XpYR0pmwbw4j1R+zeXQRK5MroBnCfOGcYa7 +-rmpERmDW3VAuxXR20SUAGdo1XOMTDe1uLbaotn6e56pXghIaYROTPS+HsuOkAZGY +-OYWEkUoyog4l4n+h/C1umFfTFGvKNATLgDugONFvTw/PLbjvl+sWMy2QfqH0MlNB +-DIUPxhEVCFD9oB4nfB86WDAmPp1DH9/IBet/21kbQ2eTIzakTdG3XiC+xzAQRu68 +-EOCTbasFWGxlCix66gt4xWMLksEg8UhWSpjS3/HsifrKyNMB8sfUFYmZmOYMW4mf +-NuEtpBL3AdHNObN8nQ75HfehukzNpbYVRsLzWrVgtxvXHVpnvoCCpCvQBMHeRZxK +-6m028mhH1m6yYE/uGFiRKLrN7BKAttbUiqnGgVIg/lQQilFWwylxQ6aXqJGmNgxa +-oihzWZRlXivIhhrM7VMnLoKAF/YfmWpP3zahGpBQGfObtPtm44R0ezXPdtsivnyu +-CmFOPGzRNMKZtH/lwVhuIIK3AFIGDsRRP9ySN4YfjQZnTdu2sRlxBnANP9m8W9T2 +-p+C4zVkDYAbsuWq2HpHwsdL8gqIiXeptsHLqkNw+ulSSLyeBCgM9fpV3RsNGjwqu +-k8QLb1CYp2VX46CE8UKvOd/nyFnEsD+EAc3WangEwA41m2IaXcbs9Au7xsG9oacZ +-DrxlJVNxlxO9YyP9dNOTfP0fHIiygKQQY2aU3y3oRneu7ogYES5V2mUNH7cYUWVL +-CHPXAoUXJErvDQ/opW2DroA9Eqv9sST6WqBf6LXRcWU0ntfzcFUbEqgmCmB7Cbu2 +-8udEn6iWilQahLyDoAShLkU7+Tk78Z1c6RuqjyY4VboZPzxrTYK8YIXzwX+jj9bG +-KIIGS5eghK185+AjlwtzJ7MBdoL323YIik6uOZluhnJHLaxjxUXGa1VqDgsyqGi7 +-ISRMTpVTrbR+UtoEi4ZhMjobtFUr7lGkt24VkXwBKdoyryj4RPHGdp7Tf6XDJufQ +-+KKhqt8QrpOTPiMskFN2disOSF5/YZCmtT84nkhU7Hf1lkQ2kfx1zfNk0GqYYXOW +-zHOAczy8gWBRetDMnhRYohDzQGWn//b+2Wr2n1RD8D9kyjMRhpFMYfQGfRcuPGjW +-91k/T0XFcjcjeZPL9s+HITmrh7zg5WxbCfTEp91j3Oy1bns196SY77TE0BzUsqR2 +-geJggcUMEfyvHiiCMtijmSSD9nf8tNIxLVL8Jaf1coA6e1CrlHnYAu2f/Q3GIcvU +-EEEmw+cZRwsk4fffYzh5psxxGdXKBv1KcQ/CeBhZL0WJsCp2y5oxwg== ++KqHn2Df8hSuwNE+W+60MnGtc6xpoXmF3iN25iVwcN67krYn+N6cBhjFeXwXccYwJ ++2gHSu4iEK9Qe32vK0yuv8N9h/fmsabZl0TotnEem/pqO5T8W4LxyK+Rw0s6RB30S ++C+mUisRADTanAxyBxsNU8xR8OAUNMAAxV1me6It0W2lfNE3t5jg/Kr0NWMoRUNRx ++dkE6WlD5D8jBeC3QdZ6OuE7QXOCEAWAjcFMc0d1WJq2t2r3TrLVfTH7EOoRyvL1H ++rrFRx/dEW1UJfM6P11wB5R0nhg3rDXF7oDFszjwO/3tzARke0NZuN37l301lYRl1 ++aolO6sShJLa0Ml/TgNcJw0S6rc6a1Z52gTfQKztKcL1UX4HLZg75zKmn6qfatMBC ++iXn+pQRYNsOPQ5h4r7lBBqvuV+gBw+rN768tYpZ2/YVDaygxETHcZAFCdAw/JNbP ++d0XPIbP79NRrCgzSo58LKQGuOQf3Hh0vp1YS+MilMtm/eogoj1enSPM+ymStHRwG ++i+D00xCQ6blSOZ2eUUBJXt11YzP22GYnv+XTR/5kGKkTIvoRMfd+39bQyR32IEv2 ++Z+yweAGQInD94eifT9ObbIayJ47y01KP0+Vj6hz4RCFsmJKsYiai5JiKlmf7lV9w ++7zH3TtCOx/xSyomesXVRkqvFkdyeguU72kXc5tiMPaDXGCOeV0GWyR1GU1DUX9/K ++60E7ym0Wx77WGMKk2fkirZzBdOeliyCRUXd7ccN2rBCjTwtjAUIk27lwzdUaTUv7 ++EmjauDvSMFtir58c+zjlLmBaSQOzKcj0KXMp0Oucls9bD85WGGbGyzGhTa0AZ+/+ ++cCEJt7RAwW0kTEO/uO+BAZe/zBoi9ek+QBn54FK3E7CXfS4Oi9Qbc3fwlVyTlVmz ++ZGrCncO0TIVGErFWK24Z7lX8rBnk8enfnamrPfKtwn4LG9aDfhSj8DtisjlRUVT5 ++chDQ+CCi9rh3wXh28lyS+nXJ3yFidCzRgcsc3PpN/c4DNRggZc+C/KDw+J2FW+8Y ++p65OliBQHQcG0PnCa2xRyCGevytPG0rfNDgyaY33dPEo90mBLVcwLbzGiSGBHgFl ++pr8A/rqbnFpRO39NYbACeRFCqPpzyzfARCCcjcDoFrENdIaJui0fjlBkoV3B/KiK ++EVjDcgwt1HAtz8bV2YJ+OpQbhD7E90e2vTRMuXAH21Ygo32VOS0LRlCRc9ZyZW4z ++PTyO/6a+FbXZ1zhVJxu/0bmBERZ14WVmWq56oxQav8knpxYeYPgpEmIZnrHnJ1Ko ++UoXcc8Hy4NKtaBmDcaF8TCobNsRZTxO/htqpdyNsOrBSsnX2kP5D/O1l1vuVYi1/ ++RYfUqL9dvGzvfsFuuDDjDlQ/fIA6pFzJV3fy4KJHlF1r33qaE/lNMdpKljBwvUII ++Vog4cGmzxssqK5q9kuogcuyeOuFODjBNW4qt0WylSi9bwwy3ZwaZLRqhngz6+tCV ++Jp45Gk881XiVe3aVU0l+4DmJJ9/5vwqjH5Vo/GJqFU6gzB+Zv/0plYeNkuE0Xo2z ++ecdxnGKVPl42q44lvczjDw2KX0ahxQrfrbcl48//zR295u9POzCL97d6zpioI2NR + -----END RSA PRIVATE KEY----- +-- +2.32.0 + diff --git a/rubygems-3.2.30-Use-OpenSSL-constants-for-error-codes.patch b/rubygems-3.2.30-Use-OpenSSL-constants-for-error-codes.patch new file mode 100644 index 0000000..8fe139e --- /dev/null +++ b/rubygems-3.2.30-Use-OpenSSL-constants-for-error-codes.patch @@ -0,0 +1,75 @@ +From 8acf8e95dcaebe227f779271b8213c15eceb846f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 1 Nov 2021 18:40:06 +0100 +Subject: [PATCH] Use OpenSSL constants for error codes. + +This fixes the following test error testing against OpenSSL 3.x: + +~~~ + 2) Failure: +TestGemRequest#test_verify_certificate_extra_message [/builddir/build/BUILD/ruby-3.0.2/test/rubygems/test_gem_request.rb:358]: +<"ERROR: SSL verification error at depth 0: invalid CA certificate (24)\n" + +"ERROR: Certificate is an invalid CA certificate\n"> expected but was +<"ERROR: SSL verification error at depth 0: invalid CA certificate (79)\n" + +"ERROR: Certificate is an invalid CA certificate\n">. +~~~ + +Where the root cause is this OpenSSL commit: + +https://github.com/openssl/openssl/commit/1e41dadfa7b9f792ed0f4714a3d3d36f070cf30e + +It seems that OpenSSL upstream considers the constant value just an +implementation detail and therefore this changes the test case to +follow the suite. +--- + test/rubygems/test_gem_request.rb | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/test/rubygems/test_gem_request.rb b/test/rubygems/test_gem_request.rb +index 66477be7bc..47654f6fa4 100644 +--- a/test/rubygems/test_gem_request.rb ++++ b/test/rubygems/test_gem_request.rb +@@ -328,30 +328,36 @@ def test_user_agent_revision_missing + + def test_verify_certificate + pend if Gem.java_platform? ++ ++ error_number = OpenSSL::X509::V_ERR_OUT_OF_MEM ++ + store = OpenSSL::X509::Store.new + context = OpenSSL::X509::StoreContext.new store +- context.error = OpenSSL::X509::V_ERR_OUT_OF_MEM ++ context.error = error_number + + use_ui @ui do + Gem::Request.verify_certificate context + end + +- assert_equal "ERROR: SSL verification error at depth 0: out of memory (17)\n", ++ assert_equal "ERROR: SSL verification error at depth 0: out of memory (#{error_number})\n", + @ui.error + end + + def test_verify_certificate_extra_message + pend if Gem.java_platform? ++ ++ error_number = OpenSSL::X509::V_ERR_INVALID_CA ++ + store = OpenSSL::X509::Store.new + context = OpenSSL::X509::StoreContext.new store +- context.error = OpenSSL::X509::V_ERR_INVALID_CA ++ context.error = error_number + + use_ui @ui do + Gem::Request.verify_certificate context + end + + expected = <<-ERROR +-ERROR: SSL verification error at depth 0: invalid CA certificate (24) ++ERROR: SSL verification error at depth 0: invalid CA certificate (#{error_number}) + ERROR: Certificate is an invalid CA certificate + ERROR + +-- +2.32.0 + From d584a5bfb39b8c0aad7d644ac85d9e48e3bcc814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 25 Nov 2021 17:46:12 +0100 Subject: [PATCH 404/530] Upgrade to Ruby 3.0.3. --- ruby-2.1.0-custom-rubygems-location.patch | 4 +- ruby-2.3.0-ruby_version.patch | 8 +- ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch | 2 +- ...onf.rb-require-OpenSSL-version-1.0.1.patch | 84 ++++++++++++++ ...et-rid-of-type-punning-pointer-casts.patch | 16 +-- ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch | 4 +- ...gn_raw-verify_raw-and-verify_recover.patch | 16 +-- ...eous-changes-for-OpenSSL-3.0-support.patch | 4 +- ruby-3.1.0-Properly-exclude-test-cases.patch | 2 +- ruby-3.1.0-SSL_read-EOF-handling.patch | 2 +- ...h => ruby-3.1.0-Support-GCCs-DWARF-5.patch | 44 +++++--- ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch | 2 +- ...t_ssl-relax-regex-to-match-OpenSSL-s.patch | 2 +- ...tils-remove-dup_public-helper-method.patch | 2 +- ruby.spec | 83 +++++++------- ...load-user-installed-rubygems-plugins.patch | 61 ---------- ...ished-name-which-will-be-correctly-p.patch | 2 +- ...0-Switch-from-DES-CBC-to-AES-256-CBC.patch | 106 ------------------ ...se-OpenSSL-constants-for-error-codes.patch | 75 ------------- sources | 2 +- 20 files changed, 185 insertions(+), 336 deletions(-) create mode 100644 ruby-3.0.3-ext-openssl-extconf.rb-require-OpenSSL-version-1.0.1.patch rename ruby-dwarf5-avoid_crash-r1.patch => ruby-3.1.0-Support-GCCs-DWARF-5.patch (80%) delete mode 100644 rubygems-3.2.26-Also-load-user-installed-rubygems-plugins.patch delete mode 100644 rubygems-3.2.30-Switch-from-DES-CBC-to-AES-256-CBC.patch delete mode 100644 rubygems-3.2.30-Use-OpenSSL-constants-for-error-codes.patch diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index b7157ff..f7862fa 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -26,7 +26,7 @@ index 93af30321d..bc13397e0e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -3941,6 +3941,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3941,6 +3945,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -75,7 +75,7 @@ index e9110a17ca..76a1f0a315 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -581,7 +581,16 @@ def stub +@@ -581,7 +582,16 @@ def stub install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 4fd6530..b0a73a9 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -30,7 +30,7 @@ index 80b137e380..63cd3b4f8b 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -3857,56 +3857,62 @@ AC_ARG_WITH(ridir, +@@ -3857,56 +3854,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -3923,6 +3923,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -3923,6 +3926,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -237,7 +237,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1452,7 +1452,8 @@ def test_self_use_paths +@@ -1440,7 +1440,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -247,7 +247,7 @@ index b25068405d..e9fef4a311 100644 FileUtils.mkdir_p File.join(parts) -@@ -1530,7 +1531,7 @@ def test_self_vendor_dir +@@ -1516,7 +1517,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, 'vendor')) do expected = File.join RbConfig::CONFIG['vendordir'], 'gems', diff --git a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch index db6737d..599a6e6 100644 --- a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +++ b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch @@ -8,7 +8,7 @@ on Red Hat platforms. This workaround rhbz#1361037 --- - test/fiddle/helper.rb | 3 +++ + test/fiddle/helper.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb diff --git a/ruby-3.0.3-ext-openssl-extconf.rb-require-OpenSSL-version-1.0.1.patch b/ruby-3.0.3-ext-openssl-extconf.rb-require-OpenSSL-version-1.0.1.patch new file mode 100644 index 0000000..4b8e9ab --- /dev/null +++ b/ruby-3.0.3-ext-openssl-extconf.rb-require-OpenSSL-version-1.0.1.patch @@ -0,0 +1,84 @@ +From 202ff1372a40a8adf9aac74bfe8a39141b0c57e5 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 27 Sep 2021 00:38:38 +0900 +Subject: [PATCH] ext/openssl/extconf.rb: require OpenSSL version >= 1.0.1, < 3 + +Ruby/OpenSSL 2.1.x and 2.2.x will not support OpenSSL 3.0 API. Let's +make extconf.rb explicitly check the version number to be within the +acceptable range, since it will not compile anyway. + +Reference: https://bugs.ruby-lang.org/issues/18192 +--- + ext/openssl/extconf.rb | 43 ++++++++++++++++++++++++------------------ + 1 file changed, 25 insertions(+), 18 deletions(-) + +diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb +index 264130bb..7e817ae2 100644 +--- a/ext/openssl/extconf.rb ++++ b/ext/openssl/extconf.rb +@@ -33,9 +33,6 @@ + have_library("ws2_32") + end + +-Logging::message "=== Checking for required stuff... ===\n" +-result = pkg_config("openssl") && have_header("openssl/ssl.h") +- + if $mingw + append_cflags '-D_FORTIFY_SOURCE=2' + append_ldflags '-fstack-protector' +@@ -92,19 +89,33 @@ def find_openssl_library + return false + end + +-unless result +- unless find_openssl_library +- Logging::message "=== Checking for required stuff failed. ===\n" +- Logging::message "Makefile wasn't created. Fix the errors above.\n" +- raise "OpenSSL library could not be found. You might want to use " \ +- "--with-openssl-dir= option to specify the prefix where OpenSSL " \ +- "is installed." +- end ++Logging::message "=== Checking for required stuff... ===\n" ++pkg_config_found = pkg_config("openssl") && have_header("openssl/ssl.h") ++ ++if !pkg_config_found && !find_openssl_library ++ Logging::message "=== Checking for required stuff failed. ===\n" ++ Logging::message "Makefile wasn't created. Fix the errors above.\n" ++ raise "OpenSSL library could not be found. You might want to use " \ ++ "--with-openssl-dir= option to specify the prefix where OpenSSL " \ ++ "is installed." + end + +-unless checking_for("OpenSSL version is 1.0.1 or later") { +- try_static_assert("OPENSSL_VERSION_NUMBER >= 0x10001000L", "openssl/opensslv.h") } +- raise "OpenSSL >= 1.0.1 or LibreSSL is required" ++version_ok = if have_macro("LIBRESSL_VERSION_NUMBER", "openssl/opensslv.h") ++ is_libressl = true ++ checking_for("LibreSSL version >= 2.5.0") { ++ try_static_assert("LIBRESSL_VERSION_NUMBER >= 0x20500000L", "openssl/opensslv.h") } ++else ++ checking_for("OpenSSL version >= 1.0.1 and < 3.0.0") { ++ try_static_assert("OPENSSL_VERSION_NUMBER >= 0x10001000L", "openssl/opensslv.h") && ++ !try_static_assert("OPENSSL_VERSION_MAJOR >= 3", "openssl/opensslv.h") } ++end ++unless version_ok ++ raise "OpenSSL >= 1.0.1, < 3.0.0 or LibreSSL >= 2.5.0 is required" ++end ++ ++# Prevent wincrypt.h from being included, which defines conflicting macro with openssl/x509.h ++if is_libressl && ($mswin || $mingw) ++ $defs.push("-DNOCRYPT") + end + + Logging::message "=== Checking for OpenSSL features... ===\n" +@@ -116,10 +127,6 @@ def find_openssl_library + have_func("ENGINE_load_#{name}()", "openssl/engine.h") + } + +-if ($mswin || $mingw) && have_macro("LIBRESSL_VERSION_NUMBER", "openssl/opensslv.h") +- $defs.push("-DNOCRYPT") +-end +- + # added in 1.0.2 + have_func("EC_curve_nist2nid") + have_func("X509_REVOKED_dup") diff --git a/ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch b/ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch index b5c80ad..ae8f722 100644 --- a/ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch +++ b/ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Get rid of type-punning pointer casts [Bug #18062] --- vm_eval.c | 4 +++- vm_insnhelper.c | 7 +++++-- - vm_method.c | 41 +++++++++++++++++++++++++--------------- + vm_method.c | 41 ++++++++++++++++++++++++++--------------- 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/vm_eval.c b/vm_eval.c @@ -30,7 +30,7 @@ diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 14928b2afe8e..e186376b24d7 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c -@@ -1636,9 +1636,11 @@ vm_search_cc(const VALUE klass, const struct rb_callinfo * const ci) +@@ -1637,9 +1637,11 @@ vm_search_cc(const VALUE klass, const struct rb_callinfo * const ci) const ID mid = vm_ci_mid(ci); struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); struct rb_class_cc_entries *ccs = NULL; @@ -43,7 +43,7 @@ index 14928b2afe8e..e186376b24d7 100644 const int ccs_len = ccs->len; VM_ASSERT(vm_ccs_verify(ccs, mid, klass)); -@@ -1705,8 +1707,9 @@ vm_search_cc(const VALUE klass, const struct rb_callinfo * const ci) +@@ -1706,8 +1708,9 @@ vm_search_cc(const VALUE klass, const struct rb_callinfo * const ci) if (ccs == NULL) { VM_ASSERT(cc_tbl != NULL); @@ -123,7 +123,7 @@ index 016dba1dbb18..1fd0bd57f7ca 100644 RB_DEBUG_COUNTER_INC(cc_invalidate_negative); } -@@ -1023,6 +1024,7 @@ prepare_callable_method_entry(VALUE defined_class, ID id, const rb_method_entry_ +@@ -1023,6 +1025,7 @@ prepare_callable_method_entry(VALUE defined_class, ID id, const rb_method_entry_ { struct rb_id_table *mtbl; const rb_callable_method_entry_t *cme; @@ -131,7 +131,7 @@ index 016dba1dbb18..1fd0bd57f7ca 100644 if (me) { if (me->defined_class == 0) { -@@ -1032,7 +1034,8 @@ prepare_callable_method_entry(VALUE defined_class, ID id, const rb_method_entry_ +@@ -1032,7 +1035,8 @@ prepare_callable_method_entry(VALUE defined_class, ID id, const rb_method_entry_ mtbl = RCLASS_CALLABLE_M_TBL(defined_class); @@ -141,7 +141,7 @@ index 016dba1dbb18..1fd0bd57f7ca 100644 RB_DEBUG_COUNTER_INC(mc_cme_complement_hit); VM_ASSERT(callable_method_entry_p(cme)); VM_ASSERT(!METHOD_ENTRY_INVALIDATED(cme)); -@@ -1076,9 +1079,10 @@ cached_callable_method_entry(VALUE klass, ID mid) +@@ -1076,9 +1080,10 @@ cached_callable_method_entry(VALUE klass, ID mid) ASSERT_vm_locking(); struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); @@ -154,7 +154,7 @@ index 016dba1dbb18..1fd0bd57f7ca 100644 VM_ASSERT(vm_ccs_p(ccs)); if (LIKELY(!METHOD_ENTRY_INVALIDATED(ccs->cme))) { -@@ -1104,12 +1108,14 @@ cache_callable_method_entry(VALUE klass, ID mid, const rb_callable_method_entry_ +@@ -1104,12 +1109,14 @@ cache_callable_method_entry(VALUE klass, ID mid, const rb_callable_method_entry_ struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); struct rb_class_cc_entries *ccs; @@ -170,7 +170,7 @@ index 016dba1dbb18..1fd0bd57f7ca 100644 VM_ASSERT(ccs->cme == cme); } else { -@@ -1123,8 +1129,12 @@ negative_cme(ID mid) +@@ -1123,8 +1130,12 @@ negative_cme(ID mid) { rb_vm_t *vm = GET_VM(); const rb_callable_method_entry_t *cme; diff --git a/ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch b/ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch index 9d218e5..86f534d 100644 --- a/ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch +++ b/ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch @@ -13,7 +13,7 @@ diff --git a/addr2line.c b/addr2line.c index fed1a8da84e5..92c6da5e3bea 100644 --- a/addr2line.c +++ b/addr2line.c -@@ -1592,14 +1592,31 @@ di_read_cu(DebugInfoReader *reader) +@@ -1593,14 +1593,31 @@ di_read_cu(DebugInfoReader *reader) } static void @@ -47,7 +47,7 @@ index fed1a8da84e5..92c6da5e3bea 100644 if (!di_read_die(reader, &die)) goto finish; /* enumerate abbrev */ -@@ -1664,7 +1681,7 @@ debug_info_read(DebugInfoReader *reader, int num_traces, void **traces, +@@ -1665,7 +1682,7 @@ debug_info_read(DebugInfoReader *reader, int num_traces, void **traces, /* 1 or 3 */ break; /* goto skip_die; */ case DW_AT_abstract_origin: diff --git a/ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch b/ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch index afb3a87..a558cec 100644 --- a/ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch +++ b/ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch @@ -1100,15 +1100,15 @@ index 829529d4b9..f52e67079d 100644 - StringValue(data); - StringValue(sig); - -- switch (ECDSA_verify(0, (unsigned char *) RSTRING_PTR(data), RSTRING_LENINT(data), (unsigned char *) RSTRING_PTR(sig), (int)RSTRING_LEN(sig), ec)) { -- case 1: return Qtrue; -- case 0: return Qfalse; -- default: break; +- switch (ECDSA_verify(0, (unsigned char *)RSTRING_PTR(data), RSTRING_LENINT(data), +- (unsigned char *)RSTRING_PTR(sig), RSTRING_LENINT(sig), ec)) { +- case 1: +- return Qtrue; +- case 0: +- return Qfalse; +- default: +- ossl_raise(eECError, "ECDSA_verify"); - } -- -- ossl_raise(eECError, "ECDSA_verify"); -- -- UNREACHABLE; -} - /* diff --git a/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch b/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch index 3a0e03b..f03f28a 100644 --- a/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch +++ b/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch @@ -95,7 +95,7 @@ diff --git a/ext/openssl/ossl_ts.c b/ext/openssl/ossl_ts.c index 692c0d620f..f1da7c1947 100644 --- a/ext/openssl/ossl_ts.c +++ b/ext/openssl/ossl_ts.c -@@ -816,7 +816,7 @@ ossl_ts_resp_verify(int argc, VALUE *argv, VALUE self) +@@ -820,7 +820,7 @@ ossl_ts_resp_verify(int argc, VALUE *argv, VALUE self) X509_up_ref(cert); } @@ -126,7 +126,7 @@ diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c index 4b7efa39f5..ec430bfb0c 100644 --- a/ext/openssl/ossl_ssl.c +++ b/ext/openssl/ossl_ssl.c -@@ -1522,8 +1522,8 @@ ossl_sslctx_flush_sessions(int argc, VALUE *argv, VALUE self) +@@ -1535,8 +1535,8 @@ ossl_sslctx_flush_sessions(int argc, VALUE *argv, VALUE self) static inline int ssl_started(SSL *ssl) { diff --git a/ruby-3.1.0-Properly-exclude-test-cases.patch b/ruby-3.1.0-Properly-exclude-test-cases.patch index 3b88433..ca2cd9b 100644 --- a/ruby-3.1.0-Properly-exclude-test-cases.patch +++ b/ruby-3.1.0-Properly-exclude-test-cases.patch @@ -63,7 +63,7 @@ method name. This resolves [Bug #16936]. --- tool/lib/minitest/unit.rb | 12 +++++++++--- - 1 file changed, 9 insertion(+), 3 deletion(-) + 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tool/lib/minitest/unit.rb b/tool/lib/minitest/unit.rb index c58a609bfa..d5af6cb906 100644 diff --git a/ruby-3.1.0-SSL_read-EOF-handling.patch b/ruby-3.1.0-SSL_read-EOF-handling.patch index fb08773..1c5660f 100644 --- a/ruby-3.1.0-SSL_read-EOF-handling.patch +++ b/ruby-3.1.0-SSL_read-EOF-handling.patch @@ -2,7 +2,7 @@ diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c index 3b425ca..40e748c 100644 --- a/ext/openssl/ossl_ssl.c +++ b/ext/openssl/ossl_ssl.c -@@ -1844,6 +1844,11 @@ ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock) +@@ -1870,6 +1870,11 @@ ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock) return str; GetSSL(self, ssl); diff --git a/ruby-dwarf5-avoid_crash-r1.patch b/ruby-3.1.0-Support-GCCs-DWARF-5.patch similarity index 80% rename from ruby-dwarf5-avoid_crash-r1.patch rename to ruby-3.1.0-Support-GCCs-DWARF-5.patch index c14642b..d9b434a 100644 --- a/ruby-dwarf5-avoid_crash-r1.patch +++ b/ruby-3.1.0-Support-GCCs-DWARF-5.patch @@ -1,6 +1,18 @@ +From 3b91792d3d644d6d6b0059cb315c9fe5d3626bab Mon Sep 17 00:00:00 2001 +From: Yusuke Endoh +Date: Sat, 6 Mar 2021 00:03:57 +0900 +Subject: [PATCH] Support GCC's DWARF 5 [Bug #17585] + +Co-Authored-By: xtkoba (Tee KOBAYASHI) +--- + addr2line.c | 119 ++++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 97 insertions(+), 22 deletions(-) + +diff --git a/addr2line.c b/addr2line.c +index 0029cffbca..855efb40d4 100644 --- a/addr2line.c +++ b/addr2line.c -@@ -159,11 +159,12 @@ +@@ -159,11 +159,12 @@ typedef struct obj_info { struct dwarf_section debug_info; struct dwarf_section debug_line; struct dwarf_section debug_ranges; @@ -14,7 +26,7 @@ static struct dwarf_section * obj_dwarf_section_at(obj_info_t *obj, int n) -@@ -173,6 +174,7 @@ +@@ -173,6 +174,7 @@ obj_dwarf_section_at(obj_info_t *obj, int n) &obj->debug_info, &obj->debug_line, &obj->debug_ranges, @@ -22,7 +34,7 @@ &obj->debug_str }; if (n < 0 || DWARF_SECTION_COUNT <= n) { -@@ -411,7 +413,7 @@ +@@ -411,7 +413,7 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line, FILL_LINE(); break; case DW_LNS_advance_pc: @@ -31,7 +43,7 @@ addr += a; break; case DW_LNS_advance_line: { -@@ -450,7 +452,7 @@ +@@ -451,7 +453,7 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line, /* isa = (unsigned int)*/(void)uleb128((char **)&p); break; case 0: @@ -40,7 +52,7 @@ op = *p++; switch (op) { case DW_LNE_end_sequence: -@@ -807,6 +809,18 @@ +@@ -808,6 +810,18 @@ enum DW_FORM_addrx4 = 0x2c }; @@ -59,10 +71,11 @@ enum { VAL_none = 0, VAL_cstr = 1, -@@ -961,6 +975,23 @@ +@@ -961,6 +975,23 @@ debug_info_reader_init(DebugInfoReader *reader, obj_info_t *obj) + reader->current_low_pc = 0; } - static void ++static void +di_skip_die_attributes(char **p) +{ + for (;;) { @@ -79,11 +92,10 @@ + } +} + -+static void + static void di_read_debug_abbrev_cu(DebugInfoReader *reader) { - uint64_t prev = 0; -@@ -974,12 +1005,7 @@ +@@ -975,12 +1006,7 @@ di_read_debug_abbrev_cu(DebugInfoReader *reader) prev = abbrev_number; uleb128(&p); /* tag */ p++; /* has_children */ @@ -97,7 +109,7 @@ } } -@@ -1243,12 +1269,7 @@ +@@ -1244,12 +1270,7 @@ di_find_abbrev(DebugInfoReader *reader, uint64_t abbrev_number) /* skip 255th record */ uleb128(&p); /* tag */ p++; /* has_children */ @@ -111,7 +123,7 @@ for (uint64_t n = uleb128(&p); abbrev_number != n; n = uleb128(&p)) { if (n == 0) { fprintf(stderr,"%d: Abbrev Number %"PRId64" not found\n",__LINE__, abbrev_number); -@@ -1256,12 +1277,7 @@ +@@ -1257,12 +1278,7 @@ di_find_abbrev(DebugInfoReader *reader, uint64_t abbrev_number) } uleb128(&p); /* tag */ p++; /* has_children */ @@ -125,7 +137,7 @@ } return p; } -@@ -1389,6 +1405,21 @@ +@@ -1390,6 +1406,21 @@ ranges_set(ranges_t *ptr, DebugInfoValue *v) } } @@ -147,7 +159,7 @@ static uintptr_t ranges_include(DebugInfoReader *reader, ranges_t *ptr, uint64_t addr) { -@@ -1402,8 +1433,50 @@ +@@ -1403,8 +1434,50 @@ ranges_include(DebugInfoReader *reader, ranges_t *ptr, uint64_t addr) } else if (ptr->ranges_set) { /* TODO: support base address selection entry */ @@ -199,7 +211,7 @@ for (;;) { uintptr_t from = read_uintptr(&p); uintptr_t to = read_uintptr(&p); -@@ -1747,6 +1820,7 @@ +@@ -1750,6 +1823,7 @@ fill_lines(int num_traces, void **traces, int check_debuglink, ".debug_info", ".debug_line", ".debug_ranges", @@ -207,7 +219,7 @@ ".debug_str" }; -@@ -2003,6 +2077,7 @@ +@@ -2006,6 +2080,7 @@ found_mach_header: "__debug_info", "__debug_line", "__debug_ranges", diff --git a/ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch b/ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch index 74636e5..b8f727d 100644 --- a/ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch +++ b/ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch @@ -11,7 +11,7 @@ diff --git a/addr2line.c b/addr2line.c index 8ee4416650d3..fed1a8da84e5 100644 --- a/addr2line.c +++ b/addr2line.c -@@ -1137,12 +1137,12 @@ debug_info_reader_read_value(DebugInfoReader *reader, uint64_t form, DebugInfoVa +@@ -1138,12 +1138,12 @@ debug_info_reader_read_value(DebugInfoReader *reader, uint64_t form, DebugInfoVa set_uint_value(v, read_uleb128(reader)); break; case DW_FORM_ref_addr: diff --git a/ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch b/ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch index f638047..c9421bc 100644 --- a/ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch +++ b/ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch @@ -15,7 +15,7 @@ diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb index 6095d545b5..9e9b8b9b69 100644 --- a/test/openssl/test_ssl.rb +++ b/test/openssl/test_ssl.rb -@@ -955,7 +955,9 @@ def test_connect_certificate_verify_failed_exception_message +@@ -964,7 +964,9 @@ def test_connect_certificate_verify_failed_exception_message start_server(ignore_listener_error: true) { |port| ctx = OpenSSL::SSL::SSLContext.new ctx.set_params diff --git a/ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch b/ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch index 23c73ba..2019380 100644 --- a/ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch +++ b/ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch @@ -227,7 +227,7 @@ diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb index c1d737b2ab..f664bd3074 100644 --- a/test/openssl/utils.rb +++ b/test/openssl/utils.rb -@@ -305,32 +305,6 @@ def check_component(base, test, keys) +@@ -313,32 +313,6 @@ def check_component(base, test, keys) assert_equal base.send(comp), test.send(comp) } end diff --git a/ruby.spec b/ruby.spec index d0bb381..7530e95 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 0 -%global teeny_version 2 +%global teeny_version 3 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -22,7 +22,7 @@ %endif -%global release 153 +%global release 154 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -30,12 +30,12 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.2.22 +%global rubygems_version 3.2.32 %global rubygems_molinillo_version 0.7.0 # Default gems. -%global bundler_version 2.2.22 -%global bundler_connection_pool_version 2.2.2 +%global bundler_version 2.2.32 +%global bundler_connection_pool_version 2.3.0 %global bundler_fileutils_version 1.4.1 %global bundler_molinillo_version 0.7.0 %global bundler_net_http_persistent_version 4.0.0 @@ -49,20 +49,20 @@ %global io_console_version 0.5.7 %global irb_version 1.3.5 %global json_version 2.5.1 -%global openssl_version 2.2.0 -%global psych_version 3.3.0 -%global racc_version 1.5.1 -%global rdoc_version 6.3.1 +%global openssl_version 2.2.1 +%global psych_version 3.3.2 +%global racc_version 1.5.2 +%global rdoc_version 6.3.3 # Bundled gems. %global minitest_version 5.14.2 %global power_assert_version 1.2.0 %global rake_version 13.0.3 -%global rbs_version 1.0.4 +%global rbs_version 1.4.0 %global test_unit_version 3.3.7 %global rexml_version 3.2.5 %global rss_version 0.2.9 -%global typeprof_version 0.12.0 +%global typeprof_version 0.15.2 %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* @@ -142,13 +142,11 @@ Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch # hardening features of glibc (rhbz#1361037). # https://bugs.ruby-lang.org/issues/12666 Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch -# Load user installed RubyGems plugins. -# https://github.com/rubygems/rubygems/issues/4823 -Patch10: rubygems-3.2.26-Also-load-user-installed-rubygems-plugins.patch # Fix DWARF5 support. # https://bugzilla.redhat.com/show_bug.cgi?id=1920533 # https://bugs.ruby-lang.org/issues/17585 -Patch15: ruby-dwarf5-avoid_crash-r1.patch +# https://github.com/ruby/ruby/pull/4240 +Patch15: ruby-3.1.0-Support-GCCs-DWARF-5.patch # Fix segfaults with enabled LTO. # https://bugs.ruby-lang.org/issues/18062 # https://github.com/ruby/ruby/pull/4716 @@ -175,18 +173,15 @@ Patch21: ruby-3.1.0-Properly-exclude-test-cases.patch # OpenSSL 3.0 compatibility patches -# Switch from legacy DES-CBC to AES-256-CBC. -# https://github.com/rubygems/rubygems/pull/4986 -Patch30: rubygems-3.2.30-Switch-from-DES-CBC-to-AES-256-CBC.patch +# Revert OpenSSL < 3.x enforcement. +# https://github.com/ruby/openssl/commit/202ff1372a40a8adf9aac74bfe8a39141b0c57e5 +Patch30: ruby-3.0.3-ext-openssl-extconf.rb-require-OpenSSL-version-1.0.1.patch + # Fix test broken by wrongly formatted distinguished name submitted to # `OpenSSL::X509::Name.parse`. # https://github.com/ruby/openssl/issues/470 # https://github.com/rubygems/rubygems/pull/5030 Patch31: rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch -# Fix TestGemRequest#test_verify_certificate_extra_message compatibility -# with OpenSSL 3.x. -# https://github.com/rubygems/rubygems/pull/5040 -Patch32: rubygems-3.2.30-Use-OpenSSL-constants-for-error-codes.patch # Refactor PEM/DER serialization code. # https://github.com/ruby/openssl/pull/328 @@ -676,7 +671,6 @@ rm -rf ext/fiddle/libffi* %patch5 -p1 %patch6 -p1 %patch9 -p1 -%patch10 -p1 %patch15 -p1 %patch16 -p1 %patch17 -p1 @@ -684,9 +678,8 @@ rm -rf ext/fiddle/libffi* %patch19 -p1 %patch20 -p1 %patch21 -p1 -%patch30 -p1 +%patch30 -p1 -R %patch31 -p1 -%patch32 -p1 %patch40 -p1 %patch41 -p1 %patch42 -p1 @@ -1243,30 +1236,30 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" %{_rpmconfigdir}/rubygems.con %files default-gems -%{gem_dir}/specifications/default/english-0.7.1.gemspec %{gem_dir}/specifications/default/abbrev-0.1.0.gemspec %{gem_dir}/specifications/default/base64-0.1.0.gemspec %{gem_dir}/specifications/default/benchmark-0.1.1.gemspec -%{gem_dir}/specifications/default/cgi-0.2.0.gemspec +%{gem_dir}/specifications/default/cgi-0.2.1.gemspec %{gem_dir}/specifications/default/csv-3.1.9.gemspec -%{gem_dir}/specifications/default/date-3.1.0.gemspec +%{gem_dir}/specifications/default/date-3.1.3.gemspec %{gem_dir}/specifications/default/dbm-1.1.0.gemspec -%{gem_dir}/specifications/default/debug-0.1.0.gemspec +%{gem_dir}/specifications/default/debug-0.2.1.gemspec %{gem_dir}/specifications/default/delegate-0.2.0.gemspec %{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec %{gem_dir}/specifications/default/digest-3.0.0.gemspec -%{gem_dir}/specifications/default/drb-2.0.4.gemspec +%{gem_dir}/specifications/default/drb-2.0.5.gemspec +%{gem_dir}/specifications/default/english-0.7.1.gemspec %{gem_dir}/specifications/default/erb-%{erb_version}.gemspec -%{gem_dir}/specifications/default/etc-1.2.0.gemspec -%{gem_dir}/specifications/default/fcntl-1.0.0.gemspec -%{gem_dir}/specifications/default/fiddle-1.0.6.gemspec +%{gem_dir}/specifications/default/etc-1.3.0.gemspec +%{gem_dir}/specifications/default/fcntl-1.0.1.gemspec +%{gem_dir}/specifications/default/fiddle-1.0.8.gemspec %{gem_dir}/specifications/default/fileutils-1.5.0.gemspec %{gem_dir}/specifications/default/find-0.1.0.gemspec %{gem_dir}/specifications/default/forwardable-1.3.2.gemspec %{gem_dir}/specifications/default/gdbm-2.1.0.gemspec %{gem_dir}/specifications/default/getoptlong-0.1.1.gemspec %{gem_dir}/specifications/default/io-nonblock-0.1.0.gemspec -%{gem_dir}/specifications/default/io-wait-0.1.0.gemspec +%{gem_dir}/specifications/default/io-wait-0.2.0.gemspec %{gem_dir}/specifications/default/ipaddr-1.2.2.gemspec %{gem_dir}/specifications/default/logger-1.4.3.gemspec %{gem_dir}/specifications/default/matrix-0.3.1.gemspec @@ -1275,33 +1268,33 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" %{gem_dir}/specifications/default/net-http-0.1.1.gemspec %{gem_dir}/specifications/default/net-imap-0.1.1.gemspec %{gem_dir}/specifications/default/net-pop-0.1.1.gemspec -%{gem_dir}/specifications/default/net-protocol-0.1.0.gemspec +%{gem_dir}/specifications/default/net-protocol-0.1.1.gemspec %{gem_dir}/specifications/default/net-smtp-0.2.1.gemspec %{gem_dir}/specifications/default/nkf-0.1.0.gemspec %{gem_dir}/specifications/default/observer-0.1.1.gemspec %{gem_dir}/specifications/default/open3-0.1.1.gemspec %{gem_dir}/specifications/default/open-uri-0.1.0.gemspec -%{gem_dir}/specifications/default/optparse-0.1.0.gemspec +%{gem_dir}/specifications/default/optparse-0.1.1.gemspec %{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec %{gem_dir}/specifications/default/ostruct-0.3.1.gemspec %{gem_dir}/specifications/default/pathname-0.1.0.gemspec -%{gem_dir}/specifications/default/pp-0.1.0.gemspec -%{gem_dir}/specifications/default/prettyprint-0.1.0.gemspec +%{gem_dir}/specifications/default/pp-0.2.1.gemspec +%{gem_dir}/specifications/default/prettyprint-0.1.1.gemspec %{gem_dir}/specifications/default/prime-0.1.2.gemspec %{gem_dir}/specifications/default/pstore-0.1.1.gemspec %{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{gem_dir}/specifications/default/readline-0.0.2.gemspec %{gem_dir}/specifications/default/readline-ext-0.1.1.gemspec %{gem_dir}/specifications/default/reline-0.2.5.gemspec -%{gem_dir}/specifications/default/resolv-0.2.0.gemspec +%{gem_dir}/specifications/default/resolv-0.2.1.gemspec %{gem_dir}/specifications/default/resolv-replace-0.1.0.gemspec -%{gem_dir}/specifications/default/rinda-0.1.0.gemspec +%{gem_dir}/specifications/default/rinda-0.1.1.gemspec %{gem_dir}/specifications/default/securerandom-0.1.0.gemspec %{gem_dir}/specifications/default/set-1.0.1.gemspec %{gem_dir}/specifications/default/shellwords-0.1.0.gemspec %{gem_dir}/specifications/default/singleton-0.1.1.gemspec -%{gem_dir}/specifications/default/stringio-3.0.0.gemspec -%{gem_dir}/specifications/default/strscan-3.0.0.gemspec +%{gem_dir}/specifications/default/stringio-3.0.1.gemspec +%{gem_dir}/specifications/default/strscan-3.0.1.gemspec %{gem_dir}/specifications/default/syslog-0.1.0.gemspec %{gem_dir}/specifications/default/tempfile-0.1.1.gemspec %{gem_dir}/specifications/default/time-0.1.0.gemspec @@ -1314,7 +1307,7 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" %{gem_dir}/specifications/default/weakref-0.1.1.gemspec #%%{gem_dir}/specifications/default/win32ole-1.8.8.gemspec %{gem_dir}/specifications/default/yaml-0.1.1.gemspec -%{gem_dir}/specifications/default/zlib-1.1.0.gemspec +%{gem_dir}/specifications/default/zlib-2.0.0.gemspec %{gem_dir}/gems/erb-%{erb_version} # Use standalone rubygem-racc if Racc binary is required. Shipping this @@ -1408,7 +1401,6 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" %doc %{gem_dir}/gems/rbs-%{rbs_version}/README.md %{gem_dir}/gems/rbs-%{rbs_version}/Rakefile %{gem_dir}/gems/rbs-%{rbs_version}/Steepfile -%{gem_dir}/gems/rbs-%{rbs_version}/bin %{gem_dir}/gems/rbs-%{rbs_version}/core %doc %{gem_dir}/gems/rbs-%{rbs_version}/docs %{gem_dir}/gems/rbs-%{rbs_version}/exe @@ -1464,6 +1456,9 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" %changelog +* Thu Nov 25 2021 Vít Ondruch - 3.0.2-154 +- Upgrade to Ruby 3.0.3. + * Fri Nov 05 2021 Vít Ondruch - 3.0.2-153 - Fix OpenSSL 3.0 compatibility. Resolves: rhbz#2021922 diff --git a/rubygems-3.2.26-Also-load-user-installed-rubygems-plugins.patch b/rubygems-3.2.26-Also-load-user-installed-rubygems-plugins.patch deleted file mode 100644 index 7af6df6..0000000 --- a/rubygems-3.2.26-Also-load-user-installed-rubygems-plugins.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 82960c262fea081cdd3df14ebe573ff1c4925d0c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Fri, 6 Aug 2021 12:21:23 +0200 -Subject: [PATCH] Also load user installed rubygems plugins - ---- - lib/rubygems.rb | 4 +++- - test/rubygems/test_gem.rb | 25 +++++++++++++++++++++++++ - 2 files changed, 28 insertions(+), 1 deletion(-) - -diff --git a/lib/rubygems.rb b/lib/rubygems.rb -index a631cde8bf8..17881e2e0e9 100644 ---- a/lib/rubygems.rb -+++ b/lib/rubygems.rb -@@ -1063,7 +1063,9 @@ def self.load_plugin_files(plugins) # :nodoc: - # Find rubygems plugin files in the standard location and load them - - def self.load_plugins -- load_plugin_files Gem::Util.glob_files_in_dir("*#{Gem.plugin_suffix_pattern}", plugindir) -+ Gem.path.each do |gem_path| -+ load_plugin_files Gem::Util.glob_files_in_dir("*#{Gem.plugin_suffix_pattern}", plugindir(gem_path)) -+ end - end - - ## -diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb -index 0d4b1571ca7..da154dac75b 100644 ---- a/test/rubygems/test_gem.rb -+++ b/test/rubygems/test_gem.rb -@@ -1581,6 +1581,31 @@ def test_load_plugins - assert_equal %w[plugin], PLUGINS_LOADED - end - -+ def test_load_user_installed_plugins -+ plugin_path = File.join "lib", "rubygems_plugin.rb" -+ -+ Dir.chdir @tempdir do -+ FileUtils.mkdir_p 'lib' -+ File.open plugin_path, "w" do |fp| -+ fp.puts "class TestGem; PLUGINS_LOADED << 'plugin'; end" -+ end -+ -+ foo = util_spec 'foo', '1' do |s| -+ s.files << plugin_path -+ end -+ -+ install_gem_user foo -+ end -+ -+ Gem.paths = { "GEM_PATH" => [Gem.dir, Gem.user_dir].join(File::PATH_SEPARATOR) } -+ -+ gem 'foo' -+ -+ Gem.load_plugins -+ -+ assert_equal %w[plugin], PLUGINS_LOADED -+ end -+ - def test_load_env_plugins - with_plugin('load') { Gem.load_env_plugins } - assert_equal :loaded, TEST_PLUGIN_LOAD rescue nil diff --git a/rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch b/rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch index 4cd1752..433d03e 100644 --- a/rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch +++ b/rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch @@ -30,7 +30,7 @@ diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb index c80639af6d..12de141f36 100644 --- a/lib/rubygems/security.rb +++ b/lib/rubygems/security.rb -@@ -476,7 +476,7 @@ def self.email_to_name(email_address) +@@ -510,7 +510,7 @@ def self.email_to_name(email_address) dcs = dcs.split '.' diff --git a/rubygems-3.2.30-Switch-from-DES-CBC-to-AES-256-CBC.patch b/rubygems-3.2.30-Switch-from-DES-CBC-to-AES-256-CBC.patch deleted file mode 100644 index e50f581..0000000 --- a/rubygems-3.2.30-Switch-from-DES-CBC-to-AES-256-CBC.patch +++ /dev/null @@ -1,106 +0,0 @@ -From 467be1c90bda755710943e9e2a42a42262dde909 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 14 Oct 2021 09:46:03 +0200 -Subject: [PATCH] Switch from DES-CBC to AES-256-CBC. - -DES-CBS is considered legacy and disabled in OpenSSL 3.x+ [[1], [2]]. -This cause causes Ruby test failures: - -~~~ -ruby -v: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux] -/builddir/build/BUILD/ruby-3.0.2/lib/rubygems/test_case.rb:1542:in `initialize': Neither PUB key nor PRIV key (OpenSSL::PKey::RSAError) - from /builddir/build/BUILD/ruby-3.0.2/lib/rubygems/test_case.rb:1542:in `new' - from /builddir/build/BUILD/ruby-3.0.2/lib/rubygems/test_case.rb:1542:in `load_key' - from /builddir/build/BUILD/ruby-3.0.2/lib/rubygems/test_case.rb:1562:in `' - from /builddir/build/BUILD/ruby-3.0.2/lib/rubygems/test_case.rb:105:in `' - from :85:in `require' - from :85:in `require' - from /builddir/build/BUILD/ruby-3.0.2/test/rdoc/test_rdoc_rubygems_hook.rb:2:in `' - from :85:in `require' - from :85:in `require' - from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1049:in `block in non_options' - from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1043:in `each' - from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1043:in `non_options' - from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:65:in `process_args' - from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:143:in `process_args' - from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1237:in `process_args' - from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1242:in `run' - from /builddir/build/BUILD/ruby-3.0.2/tool/lib/test/unit.rb:1249:in `run' - from /builddir/build/BUILD/ruby-3.0.2/tool/test/runner.rb:23:in `' - from ./test/runner.rb:11:in `require_relative' - from ./test/runner.rb:11:in `
' -~~~ - -Therefore use AES-256-CBC instead. This is essentially revert of -ca228b76b, which was fixing https://github.com/jruby/jruby/issues/919 - -[1]: https://github.com/openssl/openssl/blob/master/doc/man7/migration_guide.pod#legacy-algorithms -[2]: https://github.com/openssl/openssl/blob/master/doc/man7/OSSL_PROVIDER-legacy.pod ---- - test/rubygems/encrypted_private_key.pem | 52 ++++++++++++------------- - 1 file changed, 26 insertions(+), 26 deletions(-) - -diff --git a/test/rubygems/encrypted_private_key.pem b/test/rubygems/encrypted_private_key.pem -index 868f332b7c..d9667689a6 100644 ---- a/test/rubygems/encrypted_private_key.pem -+++ b/test/rubygems/encrypted_private_key.pem -@@ -1,30 +1,30 @@ - -----BEGIN RSA PRIVATE KEY----- - Proc-Type: 4,ENCRYPTED --DEK-Info: DES-CBC,4E38D58B5A059DB6 -+DEK-Info: AES-256-CBC,CB6FD0B173EF450C6EE21A01DD785C1D - --IgWLfnHVnkErKkhysrUMoE0ubkRDtJXZv9KR02jGGFk/kGqWyTqPk08uzhwVNM+l --eOk0qfPykkJM3KZgqTsD6xfA1D5WqFp5mLoFXVVTn9I3acSZsqOY0FweCipwdVpI --x+9Fl+v62kIW06dOjyWLE1abed9hHiXesGGsD87/RJSywy4OBxOcrhR1fJLK4ElR --ya0UzI7rWnmZMChjaZBssfzT1DR79/dARXhon2m5EiIJDjMpc8BKGYlQy5RHCHwA --cnrhUTTvsggZbQtmLZ/yVx8FSJ273XpYR0pmwbw4j1R+zeXQRK5MroBnCfOGcYa7 --rmpERmDW3VAuxXR20SUAGdo1XOMTDe1uLbaotn6e56pXghIaYROTPS+HsuOkAZGY --OYWEkUoyog4l4n+h/C1umFfTFGvKNATLgDugONFvTw/PLbjvl+sWMy2QfqH0MlNB --DIUPxhEVCFD9oB4nfB86WDAmPp1DH9/IBet/21kbQ2eTIzakTdG3XiC+xzAQRu68 --EOCTbasFWGxlCix66gt4xWMLksEg8UhWSpjS3/HsifrKyNMB8sfUFYmZmOYMW4mf --NuEtpBL3AdHNObN8nQ75HfehukzNpbYVRsLzWrVgtxvXHVpnvoCCpCvQBMHeRZxK --6m028mhH1m6yYE/uGFiRKLrN7BKAttbUiqnGgVIg/lQQilFWwylxQ6aXqJGmNgxa --oihzWZRlXivIhhrM7VMnLoKAF/YfmWpP3zahGpBQGfObtPtm44R0ezXPdtsivnyu --CmFOPGzRNMKZtH/lwVhuIIK3AFIGDsRRP9ySN4YfjQZnTdu2sRlxBnANP9m8W9T2 --p+C4zVkDYAbsuWq2HpHwsdL8gqIiXeptsHLqkNw+ulSSLyeBCgM9fpV3RsNGjwqu --k8QLb1CYp2VX46CE8UKvOd/nyFnEsD+EAc3WangEwA41m2IaXcbs9Au7xsG9oacZ --DrxlJVNxlxO9YyP9dNOTfP0fHIiygKQQY2aU3y3oRneu7ogYES5V2mUNH7cYUWVL --CHPXAoUXJErvDQ/opW2DroA9Eqv9sST6WqBf6LXRcWU0ntfzcFUbEqgmCmB7Cbu2 --8udEn6iWilQahLyDoAShLkU7+Tk78Z1c6RuqjyY4VboZPzxrTYK8YIXzwX+jj9bG --KIIGS5eghK185+AjlwtzJ7MBdoL323YIik6uOZluhnJHLaxjxUXGa1VqDgsyqGi7 --ISRMTpVTrbR+UtoEi4ZhMjobtFUr7lGkt24VkXwBKdoyryj4RPHGdp7Tf6XDJufQ --+KKhqt8QrpOTPiMskFN2disOSF5/YZCmtT84nkhU7Hf1lkQ2kfx1zfNk0GqYYXOW --zHOAczy8gWBRetDMnhRYohDzQGWn//b+2Wr2n1RD8D9kyjMRhpFMYfQGfRcuPGjW --91k/T0XFcjcjeZPL9s+HITmrh7zg5WxbCfTEp91j3Oy1bns196SY77TE0BzUsqR2 --geJggcUMEfyvHiiCMtijmSSD9nf8tNIxLVL8Jaf1coA6e1CrlHnYAu2f/Q3GIcvU --EEEmw+cZRwsk4fffYzh5psxxGdXKBv1KcQ/CeBhZL0WJsCp2y5oxwg== -+KqHn2Df8hSuwNE+W+60MnGtc6xpoXmF3iN25iVwcN67krYn+N6cBhjFeXwXccYwJ -+2gHSu4iEK9Qe32vK0yuv8N9h/fmsabZl0TotnEem/pqO5T8W4LxyK+Rw0s6RB30S -+C+mUisRADTanAxyBxsNU8xR8OAUNMAAxV1me6It0W2lfNE3t5jg/Kr0NWMoRUNRx -+dkE6WlD5D8jBeC3QdZ6OuE7QXOCEAWAjcFMc0d1WJq2t2r3TrLVfTH7EOoRyvL1H -+rrFRx/dEW1UJfM6P11wB5R0nhg3rDXF7oDFszjwO/3tzARke0NZuN37l301lYRl1 -+aolO6sShJLa0Ml/TgNcJw0S6rc6a1Z52gTfQKztKcL1UX4HLZg75zKmn6qfatMBC -+iXn+pQRYNsOPQ5h4r7lBBqvuV+gBw+rN768tYpZ2/YVDaygxETHcZAFCdAw/JNbP -+d0XPIbP79NRrCgzSo58LKQGuOQf3Hh0vp1YS+MilMtm/eogoj1enSPM+ymStHRwG -+i+D00xCQ6blSOZ2eUUBJXt11YzP22GYnv+XTR/5kGKkTIvoRMfd+39bQyR32IEv2 -+Z+yweAGQInD94eifT9ObbIayJ47y01KP0+Vj6hz4RCFsmJKsYiai5JiKlmf7lV9w -+7zH3TtCOx/xSyomesXVRkqvFkdyeguU72kXc5tiMPaDXGCOeV0GWyR1GU1DUX9/K -+60E7ym0Wx77WGMKk2fkirZzBdOeliyCRUXd7ccN2rBCjTwtjAUIk27lwzdUaTUv7 -+EmjauDvSMFtir58c+zjlLmBaSQOzKcj0KXMp0Oucls9bD85WGGbGyzGhTa0AZ+/+ -+cCEJt7RAwW0kTEO/uO+BAZe/zBoi9ek+QBn54FK3E7CXfS4Oi9Qbc3fwlVyTlVmz -+ZGrCncO0TIVGErFWK24Z7lX8rBnk8enfnamrPfKtwn4LG9aDfhSj8DtisjlRUVT5 -+chDQ+CCi9rh3wXh28lyS+nXJ3yFidCzRgcsc3PpN/c4DNRggZc+C/KDw+J2FW+8Y -+p65OliBQHQcG0PnCa2xRyCGevytPG0rfNDgyaY33dPEo90mBLVcwLbzGiSGBHgFl -+pr8A/rqbnFpRO39NYbACeRFCqPpzyzfARCCcjcDoFrENdIaJui0fjlBkoV3B/KiK -+EVjDcgwt1HAtz8bV2YJ+OpQbhD7E90e2vTRMuXAH21Ygo32VOS0LRlCRc9ZyZW4z -+PTyO/6a+FbXZ1zhVJxu/0bmBERZ14WVmWq56oxQav8knpxYeYPgpEmIZnrHnJ1Ko -+UoXcc8Hy4NKtaBmDcaF8TCobNsRZTxO/htqpdyNsOrBSsnX2kP5D/O1l1vuVYi1/ -+RYfUqL9dvGzvfsFuuDDjDlQ/fIA6pFzJV3fy4KJHlF1r33qaE/lNMdpKljBwvUII -+Vog4cGmzxssqK5q9kuogcuyeOuFODjBNW4qt0WylSi9bwwy3ZwaZLRqhngz6+tCV -+Jp45Gk881XiVe3aVU0l+4DmJJ9/5vwqjH5Vo/GJqFU6gzB+Zv/0plYeNkuE0Xo2z -+ecdxnGKVPl42q44lvczjDw2KX0ahxQrfrbcl48//zR295u9POzCL97d6zpioI2NR - -----END RSA PRIVATE KEY----- --- -2.32.0 - diff --git a/rubygems-3.2.30-Use-OpenSSL-constants-for-error-codes.patch b/rubygems-3.2.30-Use-OpenSSL-constants-for-error-codes.patch deleted file mode 100644 index 8fe139e..0000000 --- a/rubygems-3.2.30-Use-OpenSSL-constants-for-error-codes.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 8acf8e95dcaebe227f779271b8213c15eceb846f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 1 Nov 2021 18:40:06 +0100 -Subject: [PATCH] Use OpenSSL constants for error codes. - -This fixes the following test error testing against OpenSSL 3.x: - -~~~ - 2) Failure: -TestGemRequest#test_verify_certificate_extra_message [/builddir/build/BUILD/ruby-3.0.2/test/rubygems/test_gem_request.rb:358]: -<"ERROR: SSL verification error at depth 0: invalid CA certificate (24)\n" + -"ERROR: Certificate is an invalid CA certificate\n"> expected but was -<"ERROR: SSL verification error at depth 0: invalid CA certificate (79)\n" + -"ERROR: Certificate is an invalid CA certificate\n">. -~~~ - -Where the root cause is this OpenSSL commit: - -https://github.com/openssl/openssl/commit/1e41dadfa7b9f792ed0f4714a3d3d36f070cf30e - -It seems that OpenSSL upstream considers the constant value just an -implementation detail and therefore this changes the test case to -follow the suite. ---- - test/rubygems/test_gem_request.rb | 14 ++++++++++---- - 1 file changed, 10 insertions(+), 4 deletions(-) - -diff --git a/test/rubygems/test_gem_request.rb b/test/rubygems/test_gem_request.rb -index 66477be7bc..47654f6fa4 100644 ---- a/test/rubygems/test_gem_request.rb -+++ b/test/rubygems/test_gem_request.rb -@@ -328,30 +328,36 @@ def test_user_agent_revision_missing - - def test_verify_certificate - pend if Gem.java_platform? -+ -+ error_number = OpenSSL::X509::V_ERR_OUT_OF_MEM -+ - store = OpenSSL::X509::Store.new - context = OpenSSL::X509::StoreContext.new store -- context.error = OpenSSL::X509::V_ERR_OUT_OF_MEM -+ context.error = error_number - - use_ui @ui do - Gem::Request.verify_certificate context - end - -- assert_equal "ERROR: SSL verification error at depth 0: out of memory (17)\n", -+ assert_equal "ERROR: SSL verification error at depth 0: out of memory (#{error_number})\n", - @ui.error - end - - def test_verify_certificate_extra_message - pend if Gem.java_platform? -+ -+ error_number = OpenSSL::X509::V_ERR_INVALID_CA -+ - store = OpenSSL::X509::Store.new - context = OpenSSL::X509::StoreContext.new store -- context.error = OpenSSL::X509::V_ERR_INVALID_CA -+ context.error = error_number - - use_ui @ui do - Gem::Request.verify_certificate context - end - - expected = <<-ERROR --ERROR: SSL verification error at depth 0: invalid CA certificate (24) -+ERROR: SSL verification error at depth 0: invalid CA certificate (#{error_number}) - ERROR: Certificate is an invalid CA certificate - ERROR - --- -2.32.0 - diff --git a/sources b/sources index fc750ca..2b40f22 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.0.2.tar.xz) = 0f702e2d8ca1342a9d4284dbdd234a3588e057b92566353aa7c21835cf09a3932864b2acf459a976960a1704e9befa562155d36b98b7cda8bd99526e10a374c4 +SHA512 (ruby-3.0.3.tar.xz) = bb9ea426278d5a7ac46595296f03b82d43df8b7db41045cdf85611e05e26c703c53f700494cd7cf5d4c27fa953bdc5c144317d7720812db0a6e3b6f4bc4d2e00 From dbe75d1cb511ff84e7d934c0209e596365eedb59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 8 Dec 2021 12:10:25 +0100 Subject: [PATCH 405/530] Fix wrong version in changelog. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 7530e95..fe6184e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1456,7 +1456,7 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" %changelog -* Thu Nov 25 2021 Vít Ondruch - 3.0.2-154 +* Thu Nov 25 2021 Vít Ondruch - 3.0.3-154 - Upgrade to Ruby 3.0.3. * Fri Nov 05 2021 Vít Ondruch - 3.0.2-153 From 5d3688479ab299cbd5657f9a503463a04d963d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 10 Dec 2021 17:05:02 +0100 Subject: [PATCH 406/530] Fix loading of default gems. Resolves: rhbz#2027099 --- ruby.spec | 11 +- ...ng_system-rb-customizations-too-late.patch | 262 ++++++++++++++++++ 2 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch diff --git a/ruby.spec b/ruby.spec index fe6184e..dc2b5da 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 154 +%global release 155 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -169,6 +169,10 @@ Patch20: ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch # https://bugs.ruby-lang.org/issues/16936 # https://github.com/ruby/ruby/pull/5026 Patch21: ruby-3.1.0-Properly-exclude-test-cases.patch +# Fix loading of default gems. +# https://bugzilla.redhat.com/show_bug.cgi?id=2027099 +# https://github.com/rubygems/rubygems/pull/5154 +Patch22: rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch # OpenSSL 3.0 compatibility patches @@ -678,6 +682,7 @@ rm -rf ext/fiddle/libffi* %patch19 -p1 %patch20 -p1 %patch21 -p1 +%patch22 -p1 %patch30 -p1 -R %patch31 -p1 %patch40 -p1 @@ -1456,6 +1461,10 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" %changelog +* Thu Dec 09 2021 Vít Ondruch - 3.0.3-155 +- Fix loading of default gems. + Resolves: rhbz#2027099 + * Thu Nov 25 2021 Vít Ondruch - 3.0.3-154 - Upgrade to Ruby 3.0.3. diff --git a/rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch b/rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch new file mode 100644 index 0000000..d61020d --- /dev/null +++ b/rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch @@ -0,0 +1,262 @@ +From e80e7a3d0b3d72f7af7286b935702b3fab117008 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Wed, 8 Dec 2021 21:12:24 +0100 +Subject: [PATCH 1/5] More explicit require + +This class does not use `rubygems/deprecate`. It uses +`rubygems/version`, which in turn uses `rubygems/deprecate`. Make this +explicit. +--- + lib/rubygems/requirement.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/rubygems/requirement.rb b/lib/rubygems/requirement.rb +index d2e28fab5b4..9edd6aa7d3c 100644 +--- a/lib/rubygems/requirement.rb ++++ b/lib/rubygems/requirement.rb +@@ -1,5 +1,5 @@ + # frozen_string_literal: true +-require_relative "deprecate" ++require_relative "version" + + ## + # A Requirement is a set of one or more version restrictions. It supports a + +From 4e46dcc17ee5cabbde43b8a34063b8ab042536f9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Wed, 8 Dec 2021 21:17:30 +0100 +Subject: [PATCH 2/5] Remove ineffective autoloads + +These files are loaded on startup unconditionally, so we can require +them relatively when needed. +--- + lib/rubygems.rb | 4 +--- + lib/rubygems/specification.rb | 2 ++ + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/lib/rubygems.rb b/lib/rubygems.rb +index f803e47628e..b8747409304 100644 +--- a/lib/rubygems.rb ++++ b/lib/rubygems.rb +@@ -1310,19 +1310,17 @@ def default_gem_load_paths + autoload :Licenses, File.expand_path('rubygems/util/licenses', __dir__) + autoload :NameTuple, File.expand_path('rubygems/name_tuple', __dir__) + autoload :PathSupport, File.expand_path('rubygems/path_support', __dir__) +- autoload :Platform, File.expand_path('rubygems/platform', __dir__) + autoload :RequestSet, File.expand_path('rubygems/request_set', __dir__) +- autoload :Requirement, File.expand_path('rubygems/requirement', __dir__) + autoload :Resolver, File.expand_path('rubygems/resolver', __dir__) + autoload :Source, File.expand_path('rubygems/source', __dir__) + autoload :SourceList, File.expand_path('rubygems/source_list', __dir__) + autoload :SpecFetcher, File.expand_path('rubygems/spec_fetcher', __dir__) +- autoload :Specification, File.expand_path('rubygems/specification', __dir__) + autoload :Util, File.expand_path('rubygems/util', __dir__) + autoload :Version, File.expand_path('rubygems/version', __dir__) + end + + require_relative 'rubygems/exceptions' ++require_relative 'rubygems/specification' + + # REFACTOR: This should be pulled out into some kind of hacks file. + begin +diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb +index d3b96491a28..dc5e5ba0138 100644 +--- a/lib/rubygems/specification.rb ++++ b/lib/rubygems/specification.rb +@@ -9,6 +9,8 @@ + require_relative 'deprecate' + require_relative 'basic_specification' + require_relative 'stub_specification' ++require_relative 'platform' ++require_relative 'requirement' + require_relative 'specification_policy' + require_relative 'util/list' + + +From 96b6b3e04e8e4fec17f63079a0caf999a2709d71 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Wed, 8 Dec 2021 21:45:16 +0100 +Subject: [PATCH 3/5] Load `operating_system.rb` customizations before setting + up default gems + +It's very common for packagers to configure gem paths in this file, for +example, `Gem.default_dir`. Also, setting up default gems requires these +paths to be set, so that we know which default gems need to be setup. + +If we setup default gems before loading `operatin_system.rb` +customizations, the wrong default gems will be setup. + +Unfortunately, default gems loaded by `operating_system.rb` can't be +upgraded if we do this, but it seems much of a smaller issue. I wasn't +even fully sure it was the right thing to do when I added that, and it +was not the culprit of the end user issue that led to making that +change. +--- + .github/workflows/install-rubygems.yml | 5 ---- + lib/rubygems.rb | 32 +++++++++++++------------- + test/rubygems/test_rubygems.rb | 23 ++++++++++++++++++ + 3 files changed, 39 insertions(+), 21 deletions(-) + +diff --git a/lib/rubygems.rb b/lib/rubygems.rb +index b8747409304..11474b6554c 100644 +--- a/lib/rubygems.rb ++++ b/lib/rubygems.rb +@@ -1323,22 +1323,6 @@ def default_gem_load_paths + require_relative 'rubygems/specification' + + # REFACTOR: This should be pulled out into some kind of hacks file. +-begin +- ## +- # Defaults the Ruby implementation wants to provide for RubyGems +- +- require "rubygems/defaults/#{RUBY_ENGINE}" +-rescue LoadError +-end +- +-## +-# Loads the default specs. +-Gem::Specification.load_defaults +- +-require_relative 'rubygems/core_ext/kernel_gem' +-require_relative 'rubygems/core_ext/kernel_require' +-require_relative 'rubygems/core_ext/kernel_warn' +- + begin + ## + # Defaults the operating system (or packager) wants to provide for RubyGems. +@@ -1354,3 +1338,19 @@ def default_gem_load_paths + "the problem and ask for help." + raise e.class, msg + end ++ ++begin ++ ## ++ # Defaults the Ruby implementation wants to provide for RubyGems ++ ++ require "rubygems/defaults/#{RUBY_ENGINE}" ++rescue LoadError ++end ++ ++## ++# Loads the default specs. ++Gem::Specification.load_defaults ++ ++require_relative 'rubygems/core_ext/kernel_gem' ++require_relative 'rubygems/core_ext/kernel_require' ++require_relative 'rubygems/core_ext/kernel_warn' +diff --git a/test/rubygems/test_rubygems.rb b/test/rubygems/test_rubygems.rb +index 493b9fdf4a3..fa77a299322 100644 +--- a/test/rubygems/test_rubygems.rb ++++ b/test/rubygems/test_rubygems.rb +@@ -22,6 +22,29 @@ def test_operating_system_other_exceptions + "the problem and ask for help." + end + ++ def test_operating_system_customizing_default_dir ++ pend "does not apply to truffleruby" if RUBY_ENGINE == 'truffleruby' ++ pend "loads a custom defaults/jruby file that gets in the middle" if RUBY_ENGINE == 'jruby' ++ ++ # On a non existing default dir, there should be no gems ++ ++ path = util_install_operating_system_rb <<-RUBY ++ module Gem ++ def self.default_dir ++ File.expand_path("foo") ++ end ++ end ++ RUBY ++ ++ output = Gem::Util.popen( ++ *ruby_with_rubygems_and_fake_operating_system_in_load_path(path), ++ '-e', ++ "require \"rubygems\"; puts Gem::Specification.stubs.map(&:full_name)", ++ {:err => [:child, :out]} ++ ).strip ++ assert_empty output ++ end ++ + private + + def util_install_operating_system_rb(content) + +From 52cfdd14fd1213a97aac12f01177e27779de9035 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Thu, 9 Dec 2021 06:08:31 +0100 +Subject: [PATCH 4/5] Install default fiddle on latest ruby on specs that need + it + +Otherwise first OS customizations load and activate that fiddle version, +but then when we change to `Gem.default_dir`, that fiddle version is no +longer there. +--- + bundler/spec/commands/clean_spec.rb | 2 +- + bundler/spec/install/gems/standalone_spec.rb | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/spec/bundler/commands/clean_spec.rb b/spec/bundler/commands/clean_spec.rb +index ffaf22dbb32..65231b35fac 100644 +--- a/spec/bundler/commands/clean_spec.rb ++++ b/spec/bundler/commands/clean_spec.rb +@@ -638,7 +638,7 @@ def should_not_have_gems(*gems) + s.executables = "irb" + end + +- realworld_system_gems "fiddle --version 1.0.6", "tsort --version 0.1.0", "pathname --version 0.1.0", "set --version 1.0.1" ++ realworld_system_gems "fiddle --version 1.0.8", "tsort --version 0.1.0", "pathname --version 0.1.0", "set --version 1.0.1" + + install_gemfile <<-G + source "#{file_uri_for(gem_repo2)}" +diff --git a/spec/bundler/install/gems/standalone_spec.rb b/spec/bundler/install/gems/standalone_spec.rb +index db16a1b0e13..faefda25f45 100644 +--- a/spec/bundler/install/gems/standalone_spec.rb ++++ b/spec/bundler/install/gems/standalone_spec.rb +@@ -113,7 +113,7 @@ + skip "does not work on rubygems versions where `--install_dir` doesn't respect --default" unless Gem::Installer.for_spec(loaded_gemspec, :install_dir => "/foo").default_spec_file == "/foo/specifications/default/bundler-#{Bundler::VERSION}.gemspec" # Since rubygems 3.2.0.rc.2 + skip "does not work on old rubies because the realworld gems that need to be installed don't support them" if RUBY_VERSION < "2.7.0" + +- realworld_system_gems "fiddle --version 1.0.6", "tsort --version 0.1.0" ++ realworld_system_gems "fiddle --version 1.0.8", "tsort --version 0.1.0" + + necessary_system_gems = ["optparse --version 0.1.1", "psych --version 3.3.2", "yaml --version 0.1.1", "logger --version 1.4.3", "etc --version 1.2.0", "stringio --version 3.0.0"] + necessary_system_gems += ["shellwords --version 0.1.0", "base64 --version 0.1.0", "resolv --version 0.2.1"] if Gem.rubygems_version < Gem::Version.new("3.3.3.a") + +From c6a9c81021092c9157f5616a2bbe1323411a5bf8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Thu, 9 Dec 2021 12:46:23 +0100 +Subject: [PATCH 5/5] Resolve symlinks in LOAD_PATH when activating + pre-required default gems + +Some double load issues were reported a while ago by OS packagers where +if a gem has been required before rubygems, and then after, rubygems +require would cause a double load. + +We avoid this issue by activating the corresponding gem if we detect +that a file in the default LOAD_PATH that belongs to a default gem has +already been required when rubygems registers default gems. + +However, the fix does not take into account that the default LOAD_PATH +could potentially include symlinks. This change fixes the same double +load issue described above but for situations where the default +LOAD_PATH includes symlinks. +--- + lib/rubygems.rb | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/lib/rubygems.rb b/lib/rubygems.rb +index 11474b6554c..b7dda38d522 100644 +--- a/lib/rubygems.rb ++++ b/lib/rubygems.rb +@@ -1293,7 +1293,12 @@ def already_loaded?(file) + end + + def default_gem_load_paths +- @default_gem_load_paths ||= $LOAD_PATH[load_path_insert_index..-1] ++ @default_gem_load_paths ||= $LOAD_PATH[load_path_insert_index..-1].map do |lp| ++ expanded = File.expand_path(lp) ++ next expanded unless File.exist?(expanded) ++ ++ File.realpath(expanded) ++ end + end + end + From 08a1249d7f8f32051a2725204cd74e2c9f3e6d67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Mon, 10 Jan 2022 11:55:34 +0100 Subject: [PATCH 407/530] Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34 --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index dc2b5da..44319e7 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 155 +%global release 156 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1461,6 +1461,9 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" %changelog +* Mon Jan 10 2022 Miro Hrončok - 3.0.3-156 +- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34 + * Thu Dec 09 2021 Vít Ondruch - 3.0.3-155 - Fix loading of default gems. Resolves: rhbz#2027099 From b24ebf5ec1c6ad3a3ea5ac8858d34f3f75765390 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Tue, 11 Jan 2022 11:50:01 +0100 Subject: [PATCH 408/530] Remove the patch applied to pass the test/fiddle/test_import.rb on PPC. In Ruby 3.0.3, a new logic with the hard-coded "libc.so.6" to detect glibc works on PPC, both Power 8 and 9. See . Note the logic also fixes the following error on a Power 9 environment where the path is `/lib64/glibc-hwcaps/power9/libc-2.28.so`. ``` /builddir/build/BUILD/ruby-2.6.9/.ext/common/fiddle/import.rb:299:in `import_function': cannot find the function: strcpy() (Fiddle::DLError) from /builddir/build/BUILD/ruby-2.6.9/.ext/common/fiddle/import.rb:172:in `extern' from /builddir/build/BUILD/ruby-2.6.9/test/fiddle/test_import.rb:17:in `' from /builddir/build/BUILD/ruby-2.6.9/test/fiddle/test_import.rb:10:in `' from /builddir/build/BUILD/ruby-2.6.9/test/fiddle/test_import.rb:9:in `' from /builddir/build/BUILD/ruby-2.6.9/test/lib/test/unit.rb:958:in `require' from /builddir/build/BUILD/ruby-2.6.9/test/lib/test/unit.rb:958:in `block in non_options' from /builddir/build/BUILD/ruby-2.6.9/test/lib/test/unit.rb:952:in `each' from /builddir/build/BUILD/ruby-2.6.9/test/lib/test/unit.rb:952:in `non_options' from /builddir/build/BUILD/ruby-2.6.9/test/lib/test/unit.rb:64:in `process_args' from /builddir/build/BUILD/ruby-2.6.9/test/lib/test/unit.rb:130:in `process_args' from /builddir/build/BUILD/ruby-2.6.9/test/lib/test/unit.rb:1136:in `process_args' from /builddir/build/BUILD/ruby-2.6.9/test/lib/test/unit.rb:1141:in `run' from /builddir/build/BUILD/ruby-2.6.9/test/lib/test/unit.rb:1148:in `run' from ./test/runner.rb:33:in `
' ``` --- ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch | 30 -------------------- ruby.spec | 10 +++---- 2 files changed, 4 insertions(+), 36 deletions(-) delete mode 100644 ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch diff --git a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch deleted file mode 100644 index 599a6e6..0000000 --- a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 346e147ba6480839b87046e9a9efab0bf6ed3660 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 10 Aug 2016 17:35:48 +0200 -Subject: [PATCH] Rely on ldd to detect glibc. - -This is just workaround, since we know we are quite sure this will be successful -on Red Hat platforms. - -This workaround rhbz#1361037 ---- - test/fiddle/helper.rb | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb -index 1da3d93..65148a1 100644 ---- a/test/fiddle/helper.rb -+++ b/test/fiddle/helper.rb -@@ -139,6 +139,9 @@ - libc_so = libm_so = "/usr/lib/libSystem.B.dylib" - end - -+# Just ignore the heuristic, because it is not reliable on all platforms. -+libc_so = libm_so = nil -+ - if !libc_so || !libm_so - ruby = EnvUtil.rubybin - # When the ruby binary is 32-bit and the host is 64-bit, --- -2.9.2 - diff --git a/ruby.spec b/ruby.spec index 44319e7..0f81795 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 156 +%global release 157 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -138,10 +138,6 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ # For now, load the ABRT hook via this simple patch: Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch -# Workaround "an invalid stdio handle" error on PPC, due to recently introduced -# hardening features of glibc (rhbz#1361037). -# https://bugs.ruby-lang.org/issues/12666 -Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch # Fix DWARF5 support. # https://bugzilla.redhat.com/show_bug.cgi?id=1920533 # https://bugs.ruby-lang.org/issues/17585 @@ -674,7 +670,6 @@ rm -rf ext/fiddle/libffi* %patch4 -p1 %patch5 -p1 %patch6 -p1 -%patch9 -p1 %patch15 -p1 %patch16 -p1 %patch17 -p1 @@ -1461,6 +1456,9 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" %changelog +* Tue Jan 11 2022 Jun Aruga - 3.0.3-157 +- Remove the patch applied to pass the test/fiddle/test_import.rb on PPC. + * Mon Jan 10 2022 Miro Hrončok - 3.0.3-156 - Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34 From 46ee70614f22238e1ccb177e379fbcf53bdb36b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 17 Dec 2021 10:44:56 +0100 Subject: [PATCH 409/530] Remove colon from `load` call. This is not needed by RPM 4.17+ and might improve backwared compatibilty with RHEL 7, where the original LUA implementation of `load` macro was used. --- ruby.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index 0f81795..bbac027 100644 --- a/ruby.spec +++ b/ruby.spec @@ -109,8 +109,8 @@ Source14: test_systemtap.rb # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. -%{load:%{SOURCE4}} -%{load:%{SOURCE5}} +%{load %{SOURCE4}} +%{load %{SOURCE5}} # Fix ruby_version abuse. # https://bugs.ruby-lang.org/issues/11002 From b6d9b2acd19c1f6f98468e667ec9f5b829228a21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 17 Jan 2022 17:34:57 +0100 Subject: [PATCH 410/530] Disable some Fiddle test by libffi-3.4.2. --- ruby.spec | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ruby.spec b/ruby.spec index bbac027..978521c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -979,6 +979,11 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestPKeyDH#test_derive_key/" DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestPKeyDH#test_key_exchange/" DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" +# Several test broken by libffi-3.4.2. There should be fix in libffi, once +# other components are fixed. +# https://bugzilla.redhat.com/show_bug.cgi?id=2040380 +mv test/fiddle/test_import.rb{,.disable} + # Give an option to increase the timeout in tests. # https://bugs.ruby-lang.org/issues/16921 %{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ From a28556f68416aa9c42025bb481605ae2793227b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 20 Jan 2022 11:07:32 +0100 Subject: [PATCH 411/530] Fix segfault in `TestArray#test_sample` on s390x. ~~~ ... snip ... [ 3104/21226] TestArray#test_sample/builddir/build/BUILD/ruby-3.0.3/test/ruby/test_array.rb:2871: [BUG] Segmentation fault at 0x00000000c04fb000 ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [s390x-linux] -- Control frame information ----------------------------------------------- c:0031 p:---- s:0176 e:000175 CFUNC :srand c:0030 p:0011 s:0171 e:000170 METHOD /builddir/build/BUILD/ruby-3.0.3/test/ruby/test_array.rb:2871 c:0029 p:0052 s:0165 e:000164 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1283 c:0028 p:0065 s:0159 e:000158 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:1330 c:0027 p:0013 s:0150 e:000149 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit/testcase.rb:18 c:0026 p:0077 s:0145 e:000144 BLOCK /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:979 [FINISH] c:0025 p:---- s:0138 e:000137 CFUNC :map c:0024 p:0006 s:0134 E:0012c8 BLOCK /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:972 c:0023 p:0186 s:0130 E:000ba0 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:999 c:0022 p:0042 s:0118 E:000888 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1136 c:0021 p:0010 s:0111 E:0007a0 BLOCK /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:627 [FINISH] c:0020 p:---- s:0105 e:000104 CFUNC :each c:0019 p:0054 s:0101 E:001588 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:625 c:0018 p:0008 s:0094 E:001eb8 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:662 c:0017 p:0140 s:0087 E:0011a8 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:908 c:0016 p:0016 s:0074 E:001ca8 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1073 c:0015 p:0005 s:0069 E:000710 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:1147 c:0014 p:0006 s:0065 E:000438 BLOCK /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:1134 [FINISH] c:0013 p:---- s:0061 e:000060 CFUNC :each c:0012 p:0047 s:0057 E:0022b8 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:1133 c:0011 p:0013 s:0052 E:000288 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:1121 c:0010 p:0008 s:0047 E:000c70 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:847 c:0009 p:0008 s:0041 E:0008d0 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:695 c:0008 p:0015 s:0035 E:001f08 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:34 c:0007 p:0006 s:0030 E:0003c8 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1175 c:0006 p:0032 s:0025 E:000e80 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1245 c:0005 p:0009 s:0021 E:0018b8 METHOD /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1249 c:0004 p:0172 s:0016 E:0001b8 TOP /builddir/build/BUILD/ruby-3.0.3/tool/test/runner.rb:23 [FINISH] c:0003 p:---- s:0011 e:000010 CFUNC :require_relative c:0002 p:0092 s:0006 E:001bf0 EVAL ./test/runner.rb:11 [FINISH] c:0001 p:0000 s:0003 E:0004f0 (none) [FINISH] -- Ruby level backtrace information ---------------------------------------- ./test/runner.rb:11:in `
' ./test/runner.rb:11:in `require_relative' /builddir/build/BUILD/ruby-3.0.3/tool/test/runner.rb:23:in `' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1249:in `run' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1245:in `run' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1175:in `run' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:34:in `run' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:695:in `run' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:847:in `run' /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:1121:in `run' /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:1133:in `_run' /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:1133:in `each' /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:1134:in `block in _run' /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:1147:in `run_tests' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1073:in `_run_anything' /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:908:in `_run_anything' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:662:in `_run_suites' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:625:in `_run_suites' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:625:in `each' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:627:in `block in _run_suites' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1136:in `_run_suite' /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:999:in `_run_suite' /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:972:in `block in _run_suite' /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:972:in `map' /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:979:in `block (2 levels) in _run_suite' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit/testcase.rb:18:in `run' /builddir/build/BUILD/ruby-3.0.3/tool/lib/minitest/unit.rb:1330:in `run' /builddir/build/BUILD/ruby-3.0.3/tool/lib/test/unit.rb:1283:in `run_test' /builddir/build/BUILD/ruby-3.0.3/test/ruby/test_array.rb:2871:in `test_sample' /builddir/build/BUILD/ruby-3.0.3/test/ruby/test_array.rb:2871:in `srand' -- C level backtrace information ------------------------------------------- /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_print_backtrace+0x1c) [0x3ffab964c5c] vm_dump.c:758 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_vm_bugreport.constprop.0+0x4ba) [0x3ffab977f0a] vm_dump.c:998 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_bug_for_fatal_signal+0xb2) [0x3ffab7b2252] error.c:786 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(sigsegv+0x58) [0x3ffab8d2fb8] signal.c:963 [0x3ffabb7e490] /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_free_tmp_buffer+0x4) [0x3ffab7d1114] gc.c:11047 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rand_init+0x122) [0x3ffab896892] random.c:387 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_f_srand+0x6e) [0x3ffab8975fe] random.c:873 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_call_cfunc_with_frame+0x170) [0x3ffab9421f0] vm_insnhelper.c:2931 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_sendish+0x53a) [0x3ffab94659a] vm_insnhelper.c:4532 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_exec_core.lto_priv.0+0xe6) [0x3ffab947d16] insns.def:789 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_vm_exec+0x1ee) [0x3ffab96129e] vm.c:2172 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_yield+0xaa) [0x3ffab951a6a] vm.c:1398 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_ary_collect.lto_priv.0+0x6a) [0x3ffab742d6a] array.c:3635 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_call_cfunc_with_frame+0x170) [0x3ffab9421f0] vm_insnhelper.c:2931 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_sendish+0x53a) [0x3ffab94659a] vm_insnhelper.c:4532 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_exec_core.lto_priv.0+0x21c0) [0x3ffab949df0] insns.def:770 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_vm_exec+0x1ee) [0x3ffab96129e] vm.c:2172 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_yield+0xaa) [0x3ffab951a6a] vm.c:1398 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_ary_each+0x4c) [0x3ffab742aac] array.c:2523 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_call_cfunc_with_frame+0x170) [0x3ffab9421f0] vm_insnhelper.c:2931 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_call_method_each_type+0x530) [0x3ffab942d20] vm_insnhelper.c:3400 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_sendish+0x53a) [0x3ffab94659a] vm_insnhelper.c:4532 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_exec_core.lto_priv.0+0x21c0) [0x3ffab949df0] insns.def:770 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_vm_exec+0x1ee) [0x3ffab96129e] vm.c:2172 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_yield+0xaa) [0x3ffab951a6a] vm.c:1398 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_ary_each+0x4c) [0x3ffab742aac] array.c:2523 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_call_cfunc_with_frame+0x170) [0x3ffab9421f0] vm_insnhelper.c:2931 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_call_method_each_type+0x530) [0x3ffab942d20] vm_insnhelper.c:3400 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_sendish+0x53a) [0x3ffab94659a] vm_insnhelper.c:4532 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_exec_core.lto_priv.0+0x21c0) [0x3ffab949df0] insns.def:770 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_vm_exec+0x1ee) [0x3ffab96129e] vm.c:2172 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(require_internal.lto_priv.0+0xbc6) [0x3ffab809be6] load.c:1109 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_require_string+0x48) [0x3ffab809db8] load.c:1186 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_call_cfunc_with_frame+0x170) [0x3ffab9421f0] vm_insnhelper.c:2931 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_sendish+0x53a) [0x3ffab94659a] vm_insnhelper.c:4532 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(vm_exec_core.lto_priv.0+0xe6) [0x3ffab947d16] insns.def:789 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_vm_exec+0x1ee) [0x3ffab96129e] vm.c:2172 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(rb_ec_exec_node+0x10c) [0x3ffab7b71ac] eval.c:317 /builddir/build/BUILD/ruby-3.0.3/libruby.so.3.0.3(ruby_run_node+0x70) [0x3ffab7b72c0] eval.c:375 [0x2aa26e811f0] [0x3ffab4b3872] [0x3ffab4b3950] [0x2aa26e81250] ... snip ... ~~~ --- ruby-3.1.0-Fix-stack-buffer-overflow.patch | 70 ++++++++++++++++++++++ ruby.spec | 7 +++ 2 files changed, 77 insertions(+) create mode 100644 ruby-3.1.0-Fix-stack-buffer-overflow.patch diff --git a/ruby-3.1.0-Fix-stack-buffer-overflow.patch b/ruby-3.1.0-Fix-stack-buffer-overflow.patch new file mode 100644 index 0000000..4e842ff --- /dev/null +++ b/ruby-3.1.0-Fix-stack-buffer-overflow.patch @@ -0,0 +1,70 @@ +From cc44179cb8419b0e48ef9baa6f1722603643c1a0 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Tue, 17 Aug 2021 22:01:57 +0900 +Subject: [PATCH] Fix stack buffer overflow + +https://hackerone.com/reports/1306859 +--- + include/ruby/internal/memory.h | 6 +++--- + random.c | 7 ++----- + 2 files changed, 5 insertions(+), 8 deletions(-) + +diff --git a/include/ruby/internal/memory.h b/include/ruby/internal/memory.h +index 7d24df4945..64f3101fc2 100644 +--- a/include/ruby/internal/memory.h ++++ b/include/ruby/internal/memory.h +@@ -110,18 +110,18 @@ extern void *alloca(); + ((var) = RBIMPL_CAST((type *)ruby_xrealloc2((void *)(var), (n), sizeof(type)))) + + #define ALLOCA_N(type,n) \ +- RBIMPL_CAST((type *)alloca(rbimpl_size_mul_or_raise(sizeof(type), (n)))) ++ RBIMPL_CAST((type *)(!(n) ? NULL : alloca(rbimpl_size_mul_or_raise(sizeof(type), (n))))) + + /* allocates _n_ bytes temporary buffer and stores VALUE including it + * in _v_. _n_ may be evaluated twice. */ + #define RB_ALLOCV(v, n) \ + ((n) < RUBY_ALLOCV_LIMIT ? \ +- ((v) = 0, alloca(n)) : \ ++ ((v) = 0, !(n) ? NULL : alloca(n)) : \ + rb_alloc_tmp_buffer(&(v), (n))) + #define RB_ALLOCV_N(type, v, n) \ + RBIMPL_CAST((type *) \ + (((size_t)(n) < RUBY_ALLOCV_LIMIT / sizeof(type)) ? \ +- ((v) = 0, alloca((n) * sizeof(type))) : \ ++ ((v) = 0, !(n) ? NULL : alloca((n) * sizeof(type))) : \ + rb_alloc_tmp_buffer2(&(v), (n), sizeof(type)))) + #define RB_ALLOCV_END(v) rb_free_tmp_buffer(&(v)) + +diff --git a/random.c b/random.c +index 7567d13dd7..4d70c17116 100644 +--- a/random.c ++++ b/random.c +@@ -369,15 +369,12 @@ rand_init(const rb_random_interface_t *rng, rb_random_t *rnd, VALUE seed) + int sign; + + len = rb_absint_numwords(seed, 32, NULL); ++ if (len == 0) len = 1; + buf = ALLOCV_N(uint32_t, buf0, len); + sign = rb_integer_pack(seed, buf, len, sizeof(uint32_t), 0, + INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER); + if (sign < 0) + sign = -sign; +- if (len == 0) { +- buf[0] = 0; +- len = 1; +- } + if (len > 1) { + if (sign != 2 && buf[len-1] == 1) /* remove leading-zero-guard */ + len--; +@@ -814,7 +811,7 @@ rand_mt_init(rb_random_t *rnd, const uint32_t *buf, size_t len) + { + struct MT *mt = &((rb_random_mt_t *)rnd)->mt; + if (len <= 1) { +- init_genrand(mt, buf[0]); ++ init_genrand(mt, len ? buf[0] : 0); + } + else { + init_by_array(mt, buf, (int)len); +-- +2.34.1 + diff --git a/ruby.spec b/ruby.spec index 978521c..136c36b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -227,6 +227,9 @@ Patch52: ruby-3.1.0-Support-OpenSSL-3.0.patch # Fix `TestPumaControlCli#test_control_ssl` testcase in Puma. # https://github.com/ruby/openssl/pull/399#issuecomment-966239736 Patch53: ruby-3.1.0-SSL_read-EOF-handling.patch +# Fix segfault in `TestArray#test_sample` on s390x. +# https://github.com/ruby/ruby/pull/5239 +Patch54: ruby-3.1.0-Fix-stack-buffer-overflow.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -694,6 +697,7 @@ rm -rf ext/fiddle/libffi* %patch51 -p1 %patch52 -p1 %patch53 -p1 +%patch54 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1461,6 +1465,9 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Thu Jan 20 2022 Vít Ondruch - 3.0.3-157 +- Fix segfault in `TestArray#test_sample` on s390x. + * Tue Jan 11 2022 Jun Aruga - 3.0.3-157 - Remove the patch applied to pass the test/fiddle/test_import.rb on PPC. From a0bcb33eaa666d3e1d08ca45e77161ca05611487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 20 Jan 2022 17:26:59 +0100 Subject: [PATCH 412/530] Disable package notes to prevent rubygem- build breakage. The embedded linker flags breaks build of rubygem- packages with binary extension: ~~~ gcc -shared -o nio4r_ext.so bytebuffer.o monitor.o nio4r_ext.o selector.o -L. -L/usr/lib64 -Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -Wl,-dT,/builddir/build/BUILD/.package_note-rubygem-nio4r-2.5.2-6.fc36.x86_64.ld -Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -Wl,-dT,/builddir/build/BUILD/.package_note-ruby-0.15.2-157.fc36.x86_64.ld -m64 -lruby -lm -lc /usr/bin/ld: cannot open linker script file /builddir/build/BUILD/.package_note-ruby-0.15.2-157.fc36.x86_64.ld: No such file or directory ~~~ --- ruby.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 136c36b..08d33a8 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 157 +%global release 158 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -80,6 +80,10 @@ %bcond_without hardening_test %endif +# The additional linker flags break binary rubygem- packages. +# https://bugzilla.redhat.com/show_bug.cgi?id=2043092 +%undefine _package_note_flags + Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version} @@ -1465,6 +1469,9 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Thu Jan 20 2022 Vít Ondruch - 3.0.3-158 +- Disable package notes to prevent rubygem- build breakage. + * Thu Jan 20 2022 Vít Ondruch - 3.0.3-157 - Fix segfault in `TestArray#test_sample` on s390x. From 2da7a540e7714777b93c430b4f252838b555b703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 25 Jan 2022 17:32:16 +0100 Subject: [PATCH 413/530] Update OpenSSL 3 compatibility patches. This replaces the parts of the original PR with official patches which landed in [ruby/openssl](https://github.com/ruby/openssl) repository and should reflect the state of OpenSSL 3 support in Ruby 3.1. --- ....1.0-Allocate-EVP_PKEY-on-initialize.patch | 630 ++++++++++ ...Key-set_-and-PKey-DH-EC-generate_key.patch | 719 +++++++++++ ...e-test_no_private_exp-on-OpenSSL-3.0.patch | 27 + ...he-low-level-HMAC-API-to-the-EVP-API.patch | 523 ++++++++ ...anges-for-OpenSSL-3.0-support-part-2.patch | 458 +++++++ ...eous-changes-for-OpenSSL-3.0-support.patch | 176 ++- ruby-3.1.0-Support-OpenSSL-3.0.patch | 1101 ----------------- ruby-3.1.0-Use-EVP-API-in-more-places.patch | 2 +- ...to-load-encrypted-PEM-on-OpenSSL-3.0.patch | 114 ++ ...face-to-generate-parameters-and-keys.patch | 2 +- ruby.spec | 71 +- ...ng_system-rb-customizations-too-late.patch | 11 +- ....1-Fix-compatibility-with-OpenSSL3.0.patch | 105 ++ 13 files changed, 2798 insertions(+), 1141 deletions(-) create mode 100644 ruby-3.1.0-Allocate-EVP_PKEY-on-initialize.patch create mode 100644 ruby-3.1.0-Deprecate-PKey-set_-and-PKey-DH-EC-generate_key.patch create mode 100644 ruby-3.1.0-Disable-test_no_private_exp-on-OpenSSL-3.0.patch create mode 100644 ruby-3.1.0-Migrate-from-the-low-level-HMAC-API-to-the-EVP-API.patch create mode 100644 ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support-part-2.patch delete mode 100644 ruby-3.1.0-Support-OpenSSL-3.0.patch create mode 100644 ruby-3.1.0-Use-OSSL_DECODER-to-load-encrypted-PEM-on-OpenSSL-3.0.patch create mode 100644 rubygems-3.3.1-Fix-compatibility-with-OpenSSL3.0.patch diff --git a/ruby-3.1.0-Allocate-EVP_PKEY-on-initialize.patch b/ruby-3.1.0-Allocate-EVP_PKEY-on-initialize.patch new file mode 100644 index 0000000..33789b4 --- /dev/null +++ b/ruby-3.1.0-Allocate-EVP_PKEY-on-initialize.patch @@ -0,0 +1,630 @@ +From 316cb2a41f154e4663d7e7fead60cfc0bfa86af9 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 12 Apr 2021 13:55:10 +0900 +Subject: [PATCH 1/2] pkey: do not check NULL argument in ossl_pkey_new() + +Passing NULL to ossl_pkey_new() makes no sense in the first place, and +in fact it is ensured not to be NULL in all cases. +--- + ext/openssl/ossl_pkey.c | 6 +----- + ext/openssl/ossl_pkey.h | 1 + + 2 files changed, 2 insertions(+), 5 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index f9f5162e..820e4a2c 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -38,12 +38,8 @@ static VALUE + pkey_new0(EVP_PKEY *pkey) + { + VALUE klass, obj; +- int type; + +- if (!pkey || (type = EVP_PKEY_base_id(pkey)) == EVP_PKEY_NONE) +- ossl_raise(rb_eRuntimeError, "pkey is empty"); +- +- switch (type) { ++ switch (EVP_PKEY_base_id(pkey)) { + #if !defined(OPENSSL_NO_RSA) + case EVP_PKEY_RSA: klass = cRSA; break; + #endif +diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h +index 4beede22..f0476780 100644 +--- a/ext/openssl/ossl_pkey.h ++++ b/ext/openssl/ossl_pkey.h +@@ -35,6 +35,7 @@ extern const rb_data_type_t ossl_evp_pkey_type; + } \ + } while (0) + ++/* Takes ownership of the EVP_PKEY */ + VALUE ossl_pkey_new(EVP_PKEY *); + void ossl_pkey_check_public_key(const EVP_PKEY *); + EVP_PKEY *ossl_pkey_read_generic(BIO *, VALUE); + +From 74f6c6175688502a5bf27ae35367616858630c0f Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 12 Apr 2021 18:32:40 +0900 +Subject: [PATCH 2/2] pkey: allocate EVP_PKEY on #initialize + +Allocate an EVP_PKEY when the content is ready: when #initialize +or #initialize_copy is called, rather than when a T_DATA is allocated. +This is more natural because the lower level API has been deprecated +and an EVP_PKEY is becoming the minimum unit of handling keys. +--- + ext/openssl/ossl_pkey.c | 15 ++---- + ext/openssl/ossl_pkey.h | 15 ++---- + ext/openssl/ossl_pkey_dh.c | 71 +++++++++++++++++++-------- + ext/openssl/ossl_pkey_dsa.c | 93 ++++++++++++++++++++--------------- + ext/openssl/ossl_pkey_ec.c | 91 +++++++++++++++++++---------------- + ext/openssl/ossl_pkey_rsa.c | 96 ++++++++++++++++++++++--------------- + 6 files changed, 218 insertions(+), 163 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 820e4a2c..ea75d63f 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -54,8 +54,8 @@ pkey_new0(EVP_PKEY *pkey) + #endif + default: klass = cPKey; break; + } +- obj = NewPKey(klass); +- SetPKey(obj, pkey); ++ obj = rb_obj_alloc(klass); ++ RTYPEDDATA_DATA(obj) = pkey; + return obj; + } + +@@ -511,16 +511,7 @@ DupPKeyPtr(VALUE obj) + static VALUE + ossl_pkey_alloc(VALUE klass) + { +- EVP_PKEY *pkey; +- VALUE obj; +- +- obj = NewPKey(klass); +- if (!(pkey = EVP_PKEY_new())) { +- ossl_raise(ePKeyError, NULL); +- } +- SetPKey(obj, pkey); +- +- return obj; ++ return TypedData_Wrap_Struct(klass, &ossl_evp_pkey_type, NULL); + } + + /* +diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h +index f0476780..ed18bc69 100644 +--- a/ext/openssl/ossl_pkey.h ++++ b/ext/openssl/ossl_pkey.h +@@ -15,19 +15,10 @@ extern VALUE cPKey; + extern VALUE ePKeyError; + extern const rb_data_type_t ossl_evp_pkey_type; + +-#define OSSL_PKEY_SET_PRIVATE(obj) rb_iv_set((obj), "private", Qtrue) +-#define OSSL_PKEY_SET_PUBLIC(obj) rb_iv_set((obj), "private", Qfalse) +-#define OSSL_PKEY_IS_PRIVATE(obj) (rb_iv_get((obj), "private") == Qtrue) ++/* For ENGINE */ ++#define OSSL_PKEY_SET_PRIVATE(obj) rb_ivar_set((obj), rb_intern("private"), Qtrue) ++#define OSSL_PKEY_IS_PRIVATE(obj) (rb_attr_get((obj), rb_intern("private")) == Qtrue) + +-#define NewPKey(klass) \ +- TypedData_Wrap_Struct((klass), &ossl_evp_pkey_type, 0) +-#define SetPKey(obj, pkey) do { \ +- if (!(pkey)) { \ +- rb_raise(rb_eRuntimeError, "PKEY wasn't initialized!"); \ +- } \ +- RTYPEDDATA_DATA(obj) = (pkey); \ +- OSSL_PKEY_SET_PUBLIC(obj); \ +-} while (0) + #define GetPKey(obj, pkey) do {\ + TypedData_Get_Struct((obj), EVP_PKEY, &ossl_evp_pkey_type, (pkey)); \ + if (!(pkey)) { \ +diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c +index ca782bbe..04c11b21 100644 +--- a/ext/openssl/ossl_pkey_dh.c ++++ b/ext/openssl/ossl_pkey_dh.c +@@ -72,34 +72,57 @@ static VALUE + ossl_dh_initialize(int argc, VALUE *argv, VALUE self) + { + EVP_PKEY *pkey; ++ int type; + DH *dh; +- BIO *in; ++ BIO *in = NULL; + VALUE arg; + +- GetPKey(self, pkey); ++ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); ++ + /* The DH.new(size, generator) form is handled by lib/openssl/pkey.rb */ + if (rb_scan_args(argc, argv, "01", &arg) == 0) { + dh = DH_new(); + if (!dh) + ossl_raise(eDHError, "DH_new"); ++ goto legacy; + } +- else { +- arg = ossl_to_der_if_possible(arg); +- in = ossl_obj2bio(&arg); +- dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); +- if (!dh){ +- OSSL_BIO_reset(in); +- dh = d2i_DHparams_bio(in, NULL); +- } +- BIO_free(in); +- if (!dh) { +- ossl_raise(eDHError, NULL); +- } ++ ++ arg = ossl_to_der_if_possible(arg); ++ in = ossl_obj2bio(&arg); ++ ++ /* ++ * On OpenSSL <= 1.1.1 and current versions of LibreSSL, the generic ++ * routine does not support DER-encoded parameters ++ */ ++ dh = d2i_DHparams_bio(in, NULL); ++ if (dh) ++ goto legacy; ++ OSSL_BIO_reset(in); ++ ++ pkey = ossl_pkey_read_generic(in, Qnil); ++ BIO_free(in); ++ if (!pkey) ++ ossl_raise(eDHError, "could not parse pkey"); ++ ++ type = EVP_PKEY_base_id(pkey); ++ if (type != EVP_PKEY_DH) { ++ EVP_PKEY_free(pkey); ++ rb_raise(eDHError, "incorrect pkey type: %s", OBJ_nid2sn(type)); + } +- if (!EVP_PKEY_assign_DH(pkey, dh)) { +- DH_free(dh); +- ossl_raise(eDHError, NULL); ++ RTYPEDDATA_DATA(self) = pkey; ++ return self; ++ ++ legacy: ++ BIO_free(in); ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_DH(pkey, dh) != 1) { ++ EVP_PKEY_free(pkey); ++ DH_free(dh); ++ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); + } ++ RTYPEDDATA_DATA(self) = pkey; + return self; + } + +@@ -110,15 +133,14 @@ ossl_dh_initialize_copy(VALUE self, VALUE other) + DH *dh, *dh_other; + const BIGNUM *pub, *priv; + +- GetPKey(self, pkey); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) +- ossl_raise(eDHError, "DH already initialized"); ++ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + GetDH(other, dh_other); + + dh = DHparams_dup(dh_other); + if (!dh) + ossl_raise(eDHError, "DHparams_dup"); +- EVP_PKEY_assign_DH(pkey, dh); + + DH_get0_key(dh_other, &pub, &priv); + if (pub) { +@@ -133,6 +155,13 @@ ossl_dh_initialize_copy(VALUE self, VALUE other) + DH_set0_key(dh, pub2, priv2); + } + ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_DH(pkey, dh) != 1) { ++ EVP_PKEY_free(pkey); ++ DH_free(dh); ++ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); ++ } ++ RTYPEDDATA_DATA(self) = pkey; + return self; + } + +diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c +index 7af00eeb..15724548 100644 +--- a/ext/openssl/ossl_pkey_dsa.c ++++ b/ext/openssl/ossl_pkey_dsa.c +@@ -83,50 +83,59 @@ VALUE eDSAError; + static VALUE + ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) + { +- EVP_PKEY *pkey, *tmp; +- DSA *dsa = NULL; +- BIO *in; ++ EVP_PKEY *pkey; ++ DSA *dsa; ++ BIO *in = NULL; + VALUE arg, pass; ++ int type; ++ ++ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + +- GetPKey(self, pkey); + /* The DSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ + rb_scan_args(argc, argv, "02", &arg, &pass); + if (argc == 0) { + dsa = DSA_new(); + if (!dsa) + ossl_raise(eDSAError, "DSA_new"); ++ goto legacy; + } +- else { +- pass = ossl_pem_passwd_value(pass); +- arg = ossl_to_der_if_possible(arg); +- in = ossl_obj2bio(&arg); +- +- tmp = ossl_pkey_read_generic(in, pass); +- if (tmp) { +- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_DSA) +- rb_raise(eDSAError, "incorrect pkey type: %s", +- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); +- dsa = EVP_PKEY_get1_DSA(tmp); +- EVP_PKEY_free(tmp); +- } +- if (!dsa) { +- OSSL_BIO_reset(in); +-#define PEM_read_bio_DSAPublicKey(bp,x,cb,u) (DSA *)PEM_ASN1_read_bio( \ +- (d2i_of_void *)d2i_DSAPublicKey, PEM_STRING_DSA_PUBLIC, (bp), (void **)(x), (cb), (u)) +- dsa = PEM_read_bio_DSAPublicKey(in, NULL, NULL, NULL); +-#undef PEM_read_bio_DSAPublicKey +- } +- BIO_free(in); +- if (!dsa) { +- ossl_clear_error(); +- ossl_raise(eDSAError, "Neither PUB key nor PRIV key"); +- } +- } +- if (!EVP_PKEY_assign_DSA(pkey, dsa)) { +- DSA_free(dsa); +- ossl_raise(eDSAError, NULL); ++ ++ pass = ossl_pem_passwd_value(pass); ++ arg = ossl_to_der_if_possible(arg); ++ in = ossl_obj2bio(&arg); ++ ++ /* DER-encoded DSAPublicKey format isn't supported by the generic routine */ ++ dsa = (DSA *)PEM_ASN1_read_bio((d2i_of_void *)d2i_DSAPublicKey, ++ PEM_STRING_DSA_PUBLIC, ++ in, NULL, NULL, NULL); ++ if (dsa) ++ goto legacy; ++ OSSL_BIO_reset(in); ++ ++ pkey = ossl_pkey_read_generic(in, pass); ++ BIO_free(in); ++ if (!pkey) ++ ossl_raise(eDSAError, "Neither PUB key nor PRIV key"); ++ ++ type = EVP_PKEY_base_id(pkey); ++ if (type != EVP_PKEY_DSA) { ++ EVP_PKEY_free(pkey); ++ rb_raise(eDSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); + } ++ RTYPEDDATA_DATA(self) = pkey; ++ return self; + ++ legacy: ++ BIO_free(in); ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_DSA(pkey, dsa) != 1) { ++ EVP_PKEY_free(pkey); ++ DSA_free(dsa); ++ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); ++ } ++ RTYPEDDATA_DATA(self) = pkey; + return self; + } + +@@ -136,16 +145,24 @@ ossl_dsa_initialize_copy(VALUE self, VALUE other) + EVP_PKEY *pkey; + DSA *dsa, *dsa_new; + +- GetPKey(self, pkey); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) +- ossl_raise(eDSAError, "DSA already initialized"); ++ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + GetDSA(other, dsa); + +- dsa_new = ASN1_dup((i2d_of_void *)i2d_DSAPrivateKey, (d2i_of_void *)d2i_DSAPrivateKey, (char *)dsa); ++ dsa_new = (DSA *)ASN1_dup((i2d_of_void *)i2d_DSAPrivateKey, ++ (d2i_of_void *)d2i_DSAPrivateKey, ++ (char *)dsa); + if (!dsa_new) + ossl_raise(eDSAError, "ASN1_dup"); + +- EVP_PKEY_assign_DSA(pkey, dsa_new); ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_DSA(pkey, dsa_new) != 1) { ++ EVP_PKEY_free(pkey); ++ DSA_free(dsa_new); ++ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); ++ } ++ RTYPEDDATA_DATA(self) = pkey; + + return self; + } +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index db80d112..71e63969 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -114,13 +114,16 @@ ossl_ec_key_s_generate(VALUE klass, VALUE arg) + VALUE obj; + + obj = rb_obj_alloc(klass); +- GetPKey(obj, pkey); + + ec = ec_key_new_from_group(arg); +- if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec) != 1) { ++ EVP_PKEY_free(pkey); + EC_KEY_free(ec); + ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); + } ++ RTYPEDDATA_DATA(obj) = pkey; ++ + if (!EC_KEY_generate_key(ec)) + ossl_raise(eECError, "EC_KEY_generate_key"); + +@@ -141,51 +144,54 @@ ossl_ec_key_s_generate(VALUE klass, VALUE arg) + static VALUE ossl_ec_key_initialize(int argc, VALUE *argv, VALUE self) + { + EVP_PKEY *pkey; +- EC_KEY *ec = NULL; ++ EC_KEY *ec; ++ BIO *in; + VALUE arg, pass; ++ int type; + +- GetPKey(self, pkey); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) +- ossl_raise(eECError, "EC_KEY already initialized"); ++ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + + rb_scan_args(argc, argv, "02", &arg, &pass); +- + if (NIL_P(arg)) { + if (!(ec = EC_KEY_new())) +- ossl_raise(eECError, NULL); +- } else if (rb_obj_is_kind_of(arg, cEC)) { +- EC_KEY *other_ec = NULL; ++ ossl_raise(eECError, "EC_KEY_new"); ++ goto legacy; ++ } ++ else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { ++ ec = ec_key_new_from_group(arg); ++ goto legacy; ++ } + +- GetEC(arg, other_ec); +- if (!(ec = EC_KEY_dup(other_ec))) +- ossl_raise(eECError, NULL); +- } else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { +- ec = ec_key_new_from_group(arg); +- } else { +- BIO *in = ossl_obj2bio(&arg); +- EVP_PKEY *tmp; +- pass = ossl_pem_passwd_value(pass); +- tmp = ossl_pkey_read_generic(in, pass); +- if (tmp) { +- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_EC) +- rb_raise(eECError, "incorrect pkey type: %s", +- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); +- ec = EVP_PKEY_get1_EC_KEY(tmp); +- EVP_PKEY_free(tmp); +- } +- BIO_free(in); ++ pass = ossl_pem_passwd_value(pass); ++ arg = ossl_to_der_if_possible(arg); ++ in = ossl_obj2bio(&arg); + +- if (!ec) { +- ossl_clear_error(); +- ec = ec_key_new_from_group(arg); +- } ++ pkey = ossl_pkey_read_generic(in, pass); ++ BIO_free(in); ++ if (!pkey) { ++ ossl_clear_error(); ++ ec = ec_key_new_from_group(arg); ++ goto legacy; + } + +- if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { +- EC_KEY_free(ec); +- ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); ++ type = EVP_PKEY_base_id(pkey); ++ if (type != EVP_PKEY_EC) { ++ EVP_PKEY_free(pkey); ++ rb_raise(eDSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); + } ++ RTYPEDDATA_DATA(self) = pkey; ++ return self; + ++ legacy: ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec) != 1) { ++ EVP_PKEY_free(pkey); ++ EC_KEY_free(ec); ++ ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); ++ } ++ RTYPEDDATA_DATA(self) = pkey; + return self; + } + +@@ -195,18 +201,21 @@ ossl_ec_key_initialize_copy(VALUE self, VALUE other) + EVP_PKEY *pkey; + EC_KEY *ec, *ec_new; + +- GetPKey(self, pkey); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) +- ossl_raise(eECError, "EC already initialized"); ++ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + GetEC(other, ec); + + ec_new = EC_KEY_dup(ec); + if (!ec_new) + ossl_raise(eECError, "EC_KEY_dup"); +- if (!EVP_PKEY_assign_EC_KEY(pkey, ec_new)) { +- EC_KEY_free(ec_new); +- ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); ++ ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec_new) != 1) { ++ EC_KEY_free(ec_new); ++ ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); + } ++ RTYPEDDATA_DATA(self) = pkey; + + return self; + } +diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c +index 8ebd3ec5..b8dbc0e1 100644 +--- a/ext/openssl/ossl_pkey_rsa.c ++++ b/ext/openssl/ossl_pkey_rsa.c +@@ -76,51 +76,62 @@ VALUE eRSAError; + static VALUE + ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) + { +- EVP_PKEY *pkey, *tmp; +- RSA *rsa = NULL; +- BIO *in; ++ EVP_PKEY *pkey; ++ RSA *rsa; ++ BIO *in = NULL; + VALUE arg, pass; ++ int type; ++ ++ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + +- GetPKey(self, pkey); + /* The RSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ + rb_scan_args(argc, argv, "02", &arg, &pass); + if (argc == 0) { + rsa = RSA_new(); + if (!rsa) + ossl_raise(eRSAError, "RSA_new"); ++ goto legacy; + } +- else { +- pass = ossl_pem_passwd_value(pass); +- arg = ossl_to_der_if_possible(arg); +- in = ossl_obj2bio(&arg); +- +- tmp = ossl_pkey_read_generic(in, pass); +- if (tmp) { +- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_RSA) +- rb_raise(eRSAError, "incorrect pkey type: %s", +- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); +- rsa = EVP_PKEY_get1_RSA(tmp); +- EVP_PKEY_free(tmp); +- } +- if (!rsa) { +- OSSL_BIO_reset(in); +- rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); +- } +- if (!rsa) { +- OSSL_BIO_reset(in); +- rsa = d2i_RSAPublicKey_bio(in, NULL); +- } +- BIO_free(in); +- if (!rsa) { +- ossl_clear_error(); +- ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); +- } +- } +- if (!EVP_PKEY_assign_RSA(pkey, rsa)) { +- RSA_free(rsa); +- ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); ++ ++ pass = ossl_pem_passwd_value(pass); ++ arg = ossl_to_der_if_possible(arg); ++ in = ossl_obj2bio(&arg); ++ ++ /* First try RSAPublicKey format */ ++ rsa = d2i_RSAPublicKey_bio(in, NULL); ++ if (rsa) ++ goto legacy; ++ OSSL_BIO_reset(in); ++ rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); ++ if (rsa) ++ goto legacy; ++ OSSL_BIO_reset(in); ++ ++ /* Use the generic routine */ ++ pkey = ossl_pkey_read_generic(in, pass); ++ BIO_free(in); ++ if (!pkey) ++ ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); ++ ++ type = EVP_PKEY_base_id(pkey); ++ if (type != EVP_PKEY_RSA) { ++ EVP_PKEY_free(pkey); ++ rb_raise(eRSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); + } ++ RTYPEDDATA_DATA(self) = pkey; ++ return self; + ++ legacy: ++ BIO_free(in); ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_RSA(pkey, rsa) != 1) { ++ EVP_PKEY_free(pkey); ++ RSA_free(rsa); ++ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); ++ } ++ RTYPEDDATA_DATA(self) = pkey; + return self; + } + +@@ -130,16 +141,23 @@ ossl_rsa_initialize_copy(VALUE self, VALUE other) + EVP_PKEY *pkey; + RSA *rsa, *rsa_new; + +- GetPKey(self, pkey); +- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) +- ossl_raise(eRSAError, "RSA already initialized"); ++ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); ++ if (pkey) ++ rb_raise(rb_eTypeError, "pkey already initialized"); + GetRSA(other, rsa); + +- rsa_new = ASN1_dup((i2d_of_void *)i2d_RSAPrivateKey, (d2i_of_void *)d2i_RSAPrivateKey, (char *)rsa); ++ rsa_new = (RSA *)ASN1_dup((i2d_of_void *)i2d_RSAPrivateKey, ++ (d2i_of_void *)d2i_RSAPrivateKey, ++ (char *)rsa); + if (!rsa_new) + ossl_raise(eRSAError, "ASN1_dup"); + +- EVP_PKEY_assign_RSA(pkey, rsa_new); ++ pkey = EVP_PKEY_new(); ++ if (!pkey || EVP_PKEY_assign_RSA(pkey, rsa_new) != 1) { ++ RSA_free(rsa_new); ++ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); ++ } ++ RTYPEDDATA_DATA(self) = pkey; + + return self; + } + diff --git a/ruby-3.1.0-Deprecate-PKey-set_-and-PKey-DH-EC-generate_key.patch b/ruby-3.1.0-Deprecate-PKey-set_-and-PKey-DH-EC-generate_key.patch new file mode 100644 index 0000000..d8f936e --- /dev/null +++ b/ruby-3.1.0-Deprecate-PKey-set_-and-PKey-DH-EC-generate_key.patch @@ -0,0 +1,719 @@ +From 46ca47060ca8ef3419ec36c2326a81b442d9b43b Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sun, 12 Dec 2021 01:25:20 +0900 +Subject: [PATCH 1/5] pkey/dh: avoid using DH#set_key in DH#compute_key + +DH#set_key will not work on OpenSSL 3.0 because keys are immutable. +For now, let's reimplement DH#compute_key by manually constructing a +DER-encoded SubjectPublicKeyInfo structure and feeding it to +OpenSSL::PKey.read. + +Eventually, we should implement a new method around EVP_PKEY_fromdata() +and use it instead. +--- + ext/openssl/lib/openssl/pkey.rb | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index f6bf5892..5864faa9 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -47,9 +47,19 @@ def public_key + # * _pub_bn_ is a OpenSSL::BN, *not* the DH instance returned by + # DH#public_key as that contains the DH parameters only. + def compute_key(pub_bn) +- peer = dup +- peer.set_key(pub_bn, nil) +- derive(peer) ++ # FIXME: This is constructing an X.509 SubjectPublicKeyInfo and is very ++ # inefficient ++ obj = OpenSSL::ASN1.Sequence([ ++ OpenSSL::ASN1.Sequence([ ++ OpenSSL::ASN1.ObjectId("dhKeyAgreement"), ++ OpenSSL::ASN1.Sequence([ ++ OpenSSL::ASN1.Integer(p), ++ OpenSSL::ASN1.Integer(g), ++ ]), ++ ]), ++ OpenSSL::ASN1.BitString(OpenSSL::ASN1.Integer(pub_bn).to_der), ++ ]) ++ derive(OpenSSL::PKey.read(obj.to_der)) + end + + # :call-seq: + +From fc9aabc18df3c189cc6a76a1470ca908c4f16480 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 17 Dec 2021 02:22:25 +0900 +Subject: [PATCH 2/5] pkey/ec: avoid using EC#public_key= in EC#dh_compute_key + +Similarly to DH#compute_key, work around it by constructing a +SubjectPublicKeyInfo. This should be considered as a temporary +implementation. +--- + ext/openssl/lib/openssl/pkey.rb | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index 5864faa9..ba04cf4b 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -259,9 +259,14 @@ def dsa_verify_asn1(data, sig) + # This method is provided for backwards compatibility, and calls #derive + # internally. + def dh_compute_key(pubkey) +- peer = OpenSSL::PKey::EC.new(group) +- peer.public_key = pubkey +- derive(peer) ++ obj = OpenSSL::ASN1.Sequence([ ++ OpenSSL::ASN1.Sequence([ ++ OpenSSL::ASN1.ObjectId("id-ecPublicKey"), ++ group.to_der, ++ ]), ++ OpenSSL::ASN1.BitString(pubkey.to_octet_string(:uncompressed)), ++ ]) ++ derive(OpenSSL::PKey.read(obj.to_der)) + end + end + + +From 8ee6a582c7e4614eec4f5ca5ab59898fbcb50d2a Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 22 Oct 2021 16:24:07 +0900 +Subject: [PATCH 3/5] pkey/dh: deprecate OpenSSL::PKey::DH#generate_key! + +OpenSSL::PKey::DH#generate_key! will not work on OpenSSL 3.0 because +keys are made immutable. Users should use OpenSSL::PKey.generate_key +instead. +--- + ext/openssl/lib/openssl/pkey.rb | 23 +++++++++++++++++++---- + ext/openssl/ossl_pkey_dh.c | 9 +++++---- + test/openssl/test_pkey_dh.rb | 18 ++++++++++-------- + 3 files changed, 34 insertions(+), 16 deletions(-) + +diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb +index ba04cf4b..c3e06290 100644 +--- a/ext/openssl/lib/openssl/pkey.rb ++++ b/ext/openssl/lib/openssl/pkey.rb +@@ -71,14 +71,29 @@ def compute_key(pub_bn) + # called first in order to generate the per-session keys before performing + # the actual key exchange. + # ++ # Deprecated in version 3.0. This method is incompatible with ++ # OpenSSL 3.0.0 or later. ++ # + # See also OpenSSL::PKey.generate_key. + # + # Example: +- # dh = OpenSSL::PKey::DH.new(2048) +- # public_key = dh.public_key #contains no private/public key yet +- # public_key.generate_key! +- # puts public_key.private? # => true ++ # # DEPRECATED USAGE: This will not work on OpenSSL 3.0 or later ++ # dh0 = OpenSSL::PKey::DH.new(2048) ++ # dh = dh0.public_key # #public_key only copies the DH parameters (contrary to the name) ++ # dh.generate_key! ++ # puts dh.private? # => true ++ # puts dh0.pub_key == dh.pub_key #=> false ++ # ++ # # With OpenSSL::PKey.generate_key ++ # dh0 = OpenSSL::PKey::DH.new(2048) ++ # dh = OpenSSL::PKey.generate_key(dh0) ++ # puts dh0.pub_key == dh.pub_key #=> false + def generate_key! ++ if OpenSSL::OPENSSL_VERSION_NUMBER >= 0x30000000 ++ raise DHError, "OpenSSL::PKey::DH is immutable on OpenSSL 3.0; " \ ++ "use OpenSSL::PKey.generate_key instead" ++ end ++ + unless priv_key + tmp = OpenSSL::PKey.generate_key(self) + set_key(tmp.pub_key, tmp.priv_key) +diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c +index 04c11b2157..e70d60ed19 100644 +--- a/ext/openssl/ossl_pkey_dh.c ++++ b/ext/openssl/ossl_pkey_dh.c +@@ -58,15 +58,16 @@ VALUE eDHError; + * + * Examples: + * # Creating an instance from scratch +- * dh = DH.new ++ * # Note that this is deprecated and will not work on OpenSSL 3.0 or later. ++ * dh = OpenSSL::PKey::DH.new + * dh.set_pqg(bn_p, nil, bn_g) + * + * # Generating a parameters and a key pair +- * dh = DH.new(2048) # An alias of DH.generate(2048) ++ * dh = OpenSSL::PKey::DH.new(2048) # An alias of OpenSSL::PKey::DH.generate(2048) + * + * # Reading DH parameters +- * dh = DH.new(File.read('parameters.pem')) # -> dh, but no public/private key yet +- * dh.generate_key! # -> dh with public and private key ++ * dh_params = OpenSSL::PKey::DH.new(File.read('parameters.pem')) # loads parameters only ++ * dh = OpenSSL::PKey.generate_key(dh_params) # generates a key pair + */ + static VALUE + ossl_dh_initialize(int argc, VALUE *argv, VALUE self) +diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb +index 757704ca..ac11af38 100644 +--- a/test/openssl/test_pkey_dh.rb ++++ b/test/openssl/test_pkey_dh.rb +@@ -26,14 +26,19 @@ def test_new_break + end + + def test_derive_key +- dh1 = Fixtures.pkey("dh1024").generate_key! +- dh2 = Fixtures.pkey("dh1024").generate_key! ++ params = Fixtures.pkey("dh1024") ++ dh1 = OpenSSL::PKey.generate_key(params) ++ dh2 = OpenSSL::PKey.generate_key(params) + dh1_pub = OpenSSL::PKey.read(dh1.public_to_der) + dh2_pub = OpenSSL::PKey.read(dh2.public_to_der) ++ + z = dh1.g.mod_exp(dh1.priv_key, dh1.p).mod_exp(dh2.priv_key, dh1.p).to_s(2) + assert_equal z, dh1.derive(dh2_pub) + assert_equal z, dh2.derive(dh1_pub) + ++ assert_raise(OpenSSL::PKey::PKeyError) { params.derive(dh1_pub) } ++ assert_raise(OpenSSL::PKey::PKeyError) { dh1_pub.derive(params) } ++ + assert_equal z, dh1.compute_key(dh2.pub_key) + assert_equal z, dh2.compute_key(dh1.pub_key) + end +@@ -74,19 +79,16 @@ def test_public_key + end + + def test_generate_key +- dh = Fixtures.pkey("dh1024").public_key # creates a copy ++ # Deprecated in v3.0.0; incompatible with OpenSSL 3.0 ++ dh = Fixtures.pkey("dh1024").public_key # creates a copy with params only + assert_no_key(dh) + dh.generate_key! + assert_key(dh) +- end + +- def test_key_exchange +- dh = Fixtures.pkey("dh1024") + dh2 = dh.public_key +- dh.generate_key! + dh2.generate_key! + assert_equal(dh.compute_key(dh2.pub_key), dh2.compute_key(dh.pub_key)) +- end ++ end if !openssl?(3, 0, 0) + + def test_params_ok? + dh0 = Fixtures.pkey("dh1024") + +From 5e2e66cce870ea86001dbb0eaa3092badfd37994 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Fri, 17 Dec 2021 02:21:42 +0900 +Subject: [PATCH 4/5] pkey/ec: deprecate OpenSSL::PKey::EC#generate_key! + +OpenSSL::PKey::EC#generate_key! will not work on OpenSSL 3.0 because +keys are made immutable. Users should use OpenSSL::PKey.generate_key +instead. +--- + ext/openssl/ossl_pkey_ec.c | 4 ++++ + test/openssl/test_pkey_ec.rb | 21 +++++++++++++-------- + 2 files changed, 17 insertions(+), 8 deletions(-) + +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index db80d112..398a550a 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -442,6 +442,9 @@ ossl_ec_key_to_der(VALUE self) + */ + static VALUE ossl_ec_key_generate_key(VALUE self) + { ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++ rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); ++#else + EC_KEY *ec; + + GetEC(self, ec); +@@ -449,6 +452,7 @@ static VALUE ossl_ec_key_generate_key(VALUE self) + ossl_raise(eECError, "EC_KEY_generate_key"); + + return self; ++#endif + } + + /* +diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb +index 3f5958af..33f78a4c 100644 +--- a/test/openssl/test_pkey_ec.rb ++++ b/test/openssl/test_pkey_ec.rb +@@ -13,15 +13,13 @@ def test_ec_key + # FIPS-selftest failure on some environment, so skip for now. + next if ["Oakley", "X25519"].any? { |n| curve_name.start_with?(n) } + +- key = OpenSSL::PKey::EC.new(curve_name) +- key.generate_key! +- ++ key = OpenSSL::PKey::EC.generate(curve_name) + assert_predicate key, :private? + assert_predicate key, :public? + assert_nothing_raised { key.check_key } + end + +- key1 = OpenSSL::PKey::EC.new("prime256v1").generate_key! ++ key1 = OpenSSL::PKey::EC.generate("prime256v1") + + key2 = OpenSSL::PKey::EC.new + key2.group = key1.group +@@ -52,6 +50,13 @@ def test_generate + assert_equal(true, ec.private?) + end + ++ def test_generate_key ++ ec = OpenSSL::PKey::EC.new("prime256v1") ++ assert_equal false, ec.private? ++ ec.generate_key! ++ assert_equal true, ec.private? ++ end if !openssl?(3, 0, 0) ++ + def test_marshal + key = Fixtures.pkey("p256") + deserialized = Marshal.load(Marshal.dump(key)) +@@ -136,7 +141,7 @@ def test_sign_verify_raw + end + + def test_dsa_sign_asn1_FIPS186_3 +- key = OpenSSL::PKey::EC.new("prime256v1").generate_key! ++ key = OpenSSL::PKey::EC.generate("prime256v1") + size = key.group.order.num_bits / 8 + 1 + dgst = (1..size).to_a.pack('C*') + sig = key.dsa_sign_asn1(dgst) +@@ -145,8 +150,8 @@ def test_dsa_sign_asn1_FIPS186_3 + end + + def test_dh_compute_key +- key_a = OpenSSL::PKey::EC.new("prime256v1").generate_key! +- key_b = OpenSSL::PKey::EC.new(key_a.group).generate_key! ++ key_a = OpenSSL::PKey::EC.generate("prime256v1") ++ key_b = OpenSSL::PKey::EC.generate(key_a.group) + + pub_a = key_a.public_key + pub_b = key_b.public_key +@@ -276,7 +281,7 @@ def test_ec_group + + def test_ec_point + group = OpenSSL::PKey::EC::Group.new("prime256v1") +- key = OpenSSL::PKey::EC.new(group).generate_key! ++ key = OpenSSL::PKey::EC.generate(group) + point = key.public_key + + point2 = OpenSSL::PKey::EC::Point.new(group, point.to_bn) + +From 6848d2d969d90e6a400d89848ecec21076b87888 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Tue, 21 Sep 2021 18:29:59 +0900 +Subject: [PATCH 5/5] pkey: deprecate PKey#set_* methods + +OpenSSL 3.0 made EVP_PKEY immutable. This means we can only have a const +pointer of the low level struct and the following methods can no longer +be provided when linked against OpenSSL 3.0: + + - OpenSSL::PKey::RSA#set_key + - OpenSSL::PKey::RSA#set_factors + - OpenSSL::PKey::RSA#set_crt_params + - OpenSSL::PKey::DSA#set_pqg + - OpenSSL::PKey::DSA#set_key + - OpenSSL::PKey::DH#set_pqg + - OpenSSL::PKey::DH#set_key + - OpenSSL::PKey::EC#group= + - OpenSSL::PKey::EC#private_key= + - OpenSSL::PKey::EC#public_key= + +There is no direct replacement for this functionality at the moment. +I plan to introduce a wrapper around EVP_PKEY_fromdata(), which takes +all key components at once to construct an EVP_PKEY. +--- + ext/openssl/ossl_pkey.h | 16 +++++++ + ext/openssl/ossl_pkey_ec.c | 12 +++++ + test/openssl/test_pkey_dh.rb | 38 +++++++++++----- + test/openssl/test_pkey_dsa.rb | 8 +++- + test/openssl/test_pkey_ec.rb | 58 ++++++++++++++---------- + test/openssl/test_pkey_rsa.rb | 85 ++++++++++++++++++++++------------- + 6 files changed, 149 insertions(+), 68 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h +index 4beede22..4536e58e 100644 +--- a/ext/openssl/ossl_pkey.h ++++ b/ext/openssl/ossl_pkey.h +@@ -116,6 +116,7 @@ static VALUE ossl_##_keytype##_get_##_name(VALUE self) \ + OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a2, \ + _type##_get0_##_group(obj, NULL, &bn)) + ++#if !OSSL_OPENSSL_PREREQ(3, 0, 0) + #define OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) \ + /* \ + * call-seq: \ +@@ -173,6 +174,21 @@ static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2) \ + } \ + return self; \ + } ++#else ++#define OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) \ ++static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2, VALUE v3) \ ++{ \ ++ rb_raise(ePKeyError, \ ++ #_keytype"#set_"#_group"= is incompatible with OpenSSL 3.0"); \ ++} ++ ++#define OSSL_PKEY_BN_DEF_SETTER2(_keytype, _type, _group, a1, a2) \ ++static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2) \ ++{ \ ++ rb_raise(ePKeyError, \ ++ #_keytype"#set_"#_group"= is incompatible with OpenSSL 3.0"); \ ++} ++#endif + + #define OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, _name) \ + /* \ +diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c +index 398a550a..7a6ed1c9 100644 +--- a/ext/openssl/ossl_pkey_ec.c ++++ b/ext/openssl/ossl_pkey_ec.c +@@ -251,6 +251,9 @@ ossl_ec_key_get_group(VALUE self) + static VALUE + ossl_ec_key_set_group(VALUE self, VALUE group_v) + { ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++ rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); ++#else + EC_KEY *ec; + EC_GROUP *group; + +@@ -261,6 +264,7 @@ ossl_ec_key_set_group(VALUE self, VALUE group_v) + ossl_raise(eECError, "EC_KEY_set_group"); + + return group_v; ++#endif + } + + /* +@@ -289,6 +293,9 @@ static VALUE ossl_ec_key_get_private_key(VALUE self) + */ + static VALUE ossl_ec_key_set_private_key(VALUE self, VALUE private_key) + { ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++ rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); ++#else + EC_KEY *ec; + BIGNUM *bn = NULL; + +@@ -307,6 +314,7 @@ static VALUE ossl_ec_key_set_private_key(VALUE self, VALUE private_key) + } + + return private_key; ++#endif + } + + /* +@@ -335,6 +343,9 @@ static VALUE ossl_ec_key_get_public_key(VALUE self) + */ + static VALUE ossl_ec_key_set_public_key(VALUE self, VALUE public_key) + { ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++ rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); ++#else + EC_KEY *ec; + EC_POINT *point = NULL; + +@@ -353,6 +364,7 @@ static VALUE ossl_ec_key_set_public_key(VALUE self, VALUE public_key) + } + + return public_key; ++#endif + } + + /* +diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb +index ac11af38..161af189 100644 +--- a/test/openssl/test_pkey_dh.rb ++++ b/test/openssl/test_pkey_dh.rb +@@ -107,13 +107,32 @@ def test_params_ok? + end + + def test_dup +- dh = Fixtures.pkey("dh1024") +- dh2 = dh.dup +- assert_equal dh.to_der, dh2.to_der # params +- assert_equal_params dh, dh2 # keys +- dh2.set_pqg(dh2.p + 1, nil, dh2.g) +- assert_not_equal dh2.p, dh.p +- assert_equal dh2.g, dh.g ++ # Parameters only ++ dh1 = Fixtures.pkey("dh1024") ++ dh2 = dh1.dup ++ assert_equal dh1.to_der, dh2.to_der ++ assert_not_equal nil, dh1.p ++ assert_not_equal nil, dh1.g ++ assert_equal [dh1.p, dh1.g], [dh2.p, dh2.g] ++ assert_equal nil, dh1.pub_key ++ assert_equal nil, dh1.priv_key ++ assert_equal [dh1.pub_key, dh1.priv_key], [dh2.pub_key, dh2.priv_key] ++ ++ # PKey is immutable in OpenSSL >= 3.0 ++ if !openssl?(3, 0, 0) ++ dh2.set_pqg(dh2.p + 1, nil, dh2.g) ++ assert_not_equal dh2.p, dh1.p ++ end ++ ++ # With a key pair ++ dh3 = OpenSSL::PKey.generate_key(Fixtures.pkey("dh1024")) ++ dh4 = dh3.dup ++ assert_equal dh3.to_der, dh4.to_der ++ assert_equal dh1.to_der, dh4.to_der # encodes parameters only ++ assert_equal [dh1.p, dh1.g], [dh4.p, dh4.g] ++ assert_not_equal nil, dh3.pub_key ++ assert_not_equal nil, dh3.priv_key ++ assert_equal [dh3.pub_key, dh3.priv_key], [dh4.pub_key, dh4.priv_key] + end + + def test_marshal +@@ -125,11 +144,6 @@ def test_marshal + + private + +- def assert_equal_params(dh1, dh2) +- assert_equal(dh1.g, dh2.g) +- assert_equal(dh1.p, dh2.p) +- end +- + def assert_no_key(dh) + assert_equal(false, dh.public?) + assert_equal(false, dh.private?) +diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb +index 0994607f..726b7dbf 100644 +--- a/test/openssl/test_pkey_dsa.rb ++++ b/test/openssl/test_pkey_dsa.rb +@@ -208,8 +208,12 @@ def test_dup + key = Fixtures.pkey("dsa1024") + key2 = key.dup + assert_equal key.params, key2.params +- key2.set_pqg(key2.p + 1, key2.q, key2.g) +- assert_not_equal key.params, key2.params ++ ++ # PKey is immutable in OpenSSL >= 3.0 ++ if !openssl?(3, 0, 0) ++ key2.set_pqg(key2.p + 1, key2.q, key2.g) ++ assert_not_equal key.params, key2.params ++ end + end + + def test_marshal +diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb +index 33f78a4c..ffe5a94e 100644 +--- a/test/openssl/test_pkey_ec.rb ++++ b/test/openssl/test_pkey_ec.rb +@@ -21,11 +21,15 @@ def test_ec_key + + key1 = OpenSSL::PKey::EC.generate("prime256v1") + +- key2 = OpenSSL::PKey::EC.new +- key2.group = key1.group +- key2.private_key = key1.private_key +- key2.public_key = key1.public_key +- assert_equal key1.to_der, key2.to_der ++ # PKey is immutable in OpenSSL >= 3.0; constructing an empty EC object is ++ # deprecated ++ if !openssl?(3, 0, 0) ++ key2 = OpenSSL::PKey::EC.new ++ key2.group = key1.group ++ key2.private_key = key1.private_key ++ key2.public_key = key1.public_key ++ assert_equal key1.to_der, key2.to_der ++ end + + key3 = OpenSSL::PKey::EC.new(key1) + assert_equal key1.to_der, key3.to_der +@@ -35,10 +39,14 @@ def test_ec_key + + key5 = key1.dup + assert_equal key1.to_der, key5.to_der +- key_tmp = OpenSSL::PKey::EC.new("prime256v1").generate_key! +- key5.private_key = key_tmp.private_key +- key5.public_key = key_tmp.public_key +- assert_not_equal key1.to_der, key5.to_der ++ ++ # PKey is immutable in OpenSSL >= 3.0; EC object should not be modified ++ if !openssl?(3, 0, 0) ++ key_tmp = OpenSSL::PKey::EC.generate("prime256v1") ++ key5.private_key = key_tmp.private_key ++ key5.public_key = key_tmp.public_key ++ assert_not_equal key1.to_der, key5.to_der ++ end + end + + def test_generate +@@ -65,22 +73,26 @@ def test_marshal + end + + def test_check_key +- key = OpenSSL::PKey::EC.new("prime256v1").generate_key! +- assert_equal(true, key.check_key) +- assert_equal(true, key.private?) +- assert_equal(true, key.public?) +- key2 = OpenSSL::PKey::EC.new(key.group) +- assert_equal(false, key2.private?) +- assert_equal(false, key2.public?) +- key2.public_key = key.public_key +- assert_equal(false, key2.private?) +- assert_equal(true, key2.public?) +- key2.private_key = key.private_key ++ key0 = Fixtures.pkey("p256") ++ assert_equal(true, key0.check_key) ++ assert_equal(true, key0.private?) ++ assert_equal(true, key0.public?) ++ ++ key1 = OpenSSL::PKey.read(key0.public_to_der) ++ assert_equal(true, key1.check_key) ++ assert_equal(false, key1.private?) ++ assert_equal(true, key1.public?) ++ ++ key2 = OpenSSL::PKey.read(key0.private_to_der) + assert_equal(true, key2.private?) + assert_equal(true, key2.public?) + assert_equal(true, key2.check_key) +- key2.private_key += 1 +- assert_raise(OpenSSL::PKey::ECError) { key2.check_key } ++ ++ # EC#private_key= is deprecated in 3.0 and won't work on OpenSSL 3.0 ++ if !openssl?(3, 0, 0) ++ key2.private_key += 1 ++ assert_raise(OpenSSL::PKey::ECError) { key2.check_key } ++ end + end + + def test_sign_verify +@@ -112,7 +124,7 @@ def test_derive_key + assert_equal [zIUT].pack("H*"), a.derive(b) + + assert_equal a.derive(b), a.dh_compute_key(b.public_key) +- end ++ end if !openssl?(3, 0, 0) # TODO: Test it without using #private_key= + + def test_sign_verify_raw + key = Fixtures.pkey("p256") +diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb +index dbe87ba4..1c7f9ccf 100644 +--- a/test/openssl/test_pkey_rsa.rb ++++ b/test/openssl/test_pkey_rsa.rb +@@ -31,15 +31,18 @@ def test_private + assert(!key4.private?) + rsa1024 = Fixtures.pkey("rsa1024") + +- # Generated by RSA#set_key +- key5 = OpenSSL::PKey::RSA.new +- key5.set_key(rsa1024.n, rsa1024.e, rsa1024.d) +- assert(key5.private?) +- +- # Generated by RSA#set_key, without d +- key6 = OpenSSL::PKey::RSA.new +- key6.set_key(rsa1024.n, rsa1024.e, nil) +- assert(!key6.private?) ++ if !openssl?(3, 0, 0) ++ key = OpenSSL::PKey::RSA.new ++ # Generated by RSA#set_key ++ key5 = OpenSSL::PKey::RSA.new ++ key5.set_key(rsa1024.n, rsa1024.e, rsa1024.d) ++ assert(key5.private?) ++ ++ # Generated by RSA#set_key, without d ++ key6 = OpenSSL::PKey::RSA.new ++ key6.set_key(rsa1024.n, rsa1024.e, nil) ++ assert(!key6.private?) ++ end + end + + def test_new +@@ -235,36 +238,52 @@ def test_encrypt_decrypt_legacy + + def test_export + rsa1024 = Fixtures.pkey("rsa1024") +- key = OpenSSL::PKey::RSA.new + +- # key has only n, e and d +- key.set_key(rsa1024.n, rsa1024.e, rsa1024.d) +- assert_equal rsa1024.public_key.export, key.export ++ pub = OpenSSL::PKey.read(rsa1024.public_to_der) ++ assert_not_equal rsa1024.export, pub.export ++ assert_equal rsa1024.public_to_pem, pub.export ++ ++ # PKey is immutable in OpenSSL >= 3.0 ++ if !openssl?(3, 0, 0) ++ key = OpenSSL::PKey::RSA.new + +- # key has only n, e, d, p and q +- key.set_factors(rsa1024.p, rsa1024.q) +- assert_equal rsa1024.public_key.export, key.export ++ # key has only n, e and d ++ key.set_key(rsa1024.n, rsa1024.e, rsa1024.d) ++ assert_equal rsa1024.public_key.export, key.export + +- # key has n, e, d, p, q, dmp1, dmq1 and iqmp +- key.set_crt_params(rsa1024.dmp1, rsa1024.dmq1, rsa1024.iqmp) +- assert_equal rsa1024.export, key.export ++ # key has only n, e, d, p and q ++ key.set_factors(rsa1024.p, rsa1024.q) ++ assert_equal rsa1024.public_key.export, key.export ++ ++ # key has n, e, d, p, q, dmp1, dmq1 and iqmp ++ key.set_crt_params(rsa1024.dmp1, rsa1024.dmq1, rsa1024.iqmp) ++ assert_equal rsa1024.export, key.export ++ end + end + + def test_to_der + rsa1024 = Fixtures.pkey("rsa1024") +- key = OpenSSL::PKey::RSA.new + +- # key has only n, e and d +- key.set_key(rsa1024.n, rsa1024.e, rsa1024.d) +- assert_equal rsa1024.public_key.to_der, key.to_der ++ pub = OpenSSL::PKey.read(rsa1024.public_to_der) ++ assert_not_equal rsa1024.to_der, pub.to_der ++ assert_equal rsa1024.public_to_der, pub.to_der + +- # key has only n, e, d, p and q +- key.set_factors(rsa1024.p, rsa1024.q) +- assert_equal rsa1024.public_key.to_der, key.to_der ++ # PKey is immutable in OpenSSL >= 3.0 ++ if !openssl?(3, 0, 0) ++ key = OpenSSL::PKey::RSA.new + +- # key has n, e, d, p, q, dmp1, dmq1 and iqmp +- key.set_crt_params(rsa1024.dmp1, rsa1024.dmq1, rsa1024.iqmp) +- assert_equal rsa1024.to_der, key.to_der ++ # key has only n, e and d ++ key.set_key(rsa1024.n, rsa1024.e, rsa1024.d) ++ assert_equal rsa1024.public_key.to_der, key.to_der ++ ++ # key has only n, e, d, p and q ++ key.set_factors(rsa1024.p, rsa1024.q) ++ assert_equal rsa1024.public_key.to_der, key.to_der ++ ++ # key has n, e, d, p, q, dmp1, dmq1 and iqmp ++ key.set_crt_params(rsa1024.dmp1, rsa1024.dmq1, rsa1024.iqmp) ++ assert_equal rsa1024.to_der, key.to_der ++ end + end + + def test_RSAPrivateKey +@@ -501,8 +520,12 @@ def test_dup + key = Fixtures.pkey("rsa1024") + key2 = key.dup + assert_equal key.params, key2.params +- key2.set_key(key2.n, 3, key2.d) +- assert_not_equal key.params, key2.params ++ ++ # PKey is immutable in OpenSSL >= 3.0 ++ if !openssl?(3, 0, 0) ++ key2.set_key(key2.n, 3, key2.d) ++ assert_not_equal key.params, key2.params ++ end + end + + def test_marshal diff --git a/ruby-3.1.0-Disable-test_no_private_exp-on-OpenSSL-3.0.patch b/ruby-3.1.0-Disable-test_no_private_exp-on-OpenSSL-3.0.patch new file mode 100644 index 0000000..2b640ea --- /dev/null +++ b/ruby-3.1.0-Disable-test_no_private_exp-on-OpenSSL-3.0.patch @@ -0,0 +1,27 @@ +From 47975ece4096cdab16b3f200f93ea2377dfb41ac Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 31 May 2021 14:17:21 +0900 +Subject: [PATCH] test/openssl/test_pkey_rsa: disable test_no_private_exp on + OpenSSL 3.0 + +OpenSSL::PKey::RSA#set_key does not exist when built with OpenSSL 3.0, +so it is not possible to create an RSA object with incomplete state. + +https://github.com/ruby/openssl/commit/ca03c9c070 +--- + test/openssl/test_pkey_rsa.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb +index 4548bdb2cfa6..dbe87ba4c1b0 100644 +--- a/test/openssl/test_pkey_rsa.rb ++++ b/test/openssl/test_pkey_rsa.rb +@@ -11,7 +11,7 @@ def test_no_private_exp + key.set_factors(rsa.p, rsa.q) + assert_raise(OpenSSL::PKey::RSAError){ key.private_encrypt("foo") } + assert_raise(OpenSSL::PKey::RSAError){ key.private_decrypt("foo") } +- end ++ end if !openssl?(3, 0, 0) # Impossible state in OpenSSL 3.0 + + def test_private + # Generated by key size and public exponent diff --git a/ruby-3.1.0-Migrate-from-the-low-level-HMAC-API-to-the-EVP-API.patch b/ruby-3.1.0-Migrate-from-the-low-level-HMAC-API-to-the-EVP-API.patch new file mode 100644 index 0000000..d25cae9 --- /dev/null +++ b/ruby-3.1.0-Migrate-from-the-low-level-HMAC-API-to-the-EVP-API.patch @@ -0,0 +1,523 @@ +From 8253d7c9cea16c2aa009b59db4f5d93afb74c6eb Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Tue, 30 Jun 2020 14:27:13 +0900 +Subject: [PATCH 1/2] hmac: add a test case for OpenSSL::HMAC singleton methods + +--- + test/openssl/test_hmac.rb | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/test/openssl/test_hmac.rb b/test/openssl/test_hmac.rb +index 9cb3c5a86..7202a5902 100644 +--- a/test/openssl/test_hmac.rb ++++ b/test/openssl/test_hmac.rb +@@ -49,6 +49,15 @@ def test_eq + refute_equal h1, h2.digest + refute_equal h1, h3 + end ++ ++ def test_singleton_methods ++ # RFC 2202 2. Test Cases for HMAC-MD5 ++ key = ["0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"].pack("H*") ++ digest = OpenSSL::HMAC.digest("MD5", key, "Hi There") ++ assert_equal ["9294727a3638bb1c13f48ef8158bfc9d"].pack("H*"), digest ++ hexdigest = OpenSSL::HMAC.hexdigest("MD5", key, "Hi There") ++ assert_equal "9294727a3638bb1c13f48ef8158bfc9d", hexdigest ++ end + end + + end + +From 0317e2fc028be40a7d64d0e4337d3e21539613ce Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 18 May 2020 16:15:07 +0900 +Subject: [PATCH 2/2] hmac: migrate from the low-level HMAC API to the EVP API + +Use the EVP API instead of the low-level HMAC API. Use of the HMAC API +has been discouraged and is being marked as deprecated starting from +OpenSSL 3.0.0. + +The two singleton methods OpenSSL::HMAC, HMAC.digest and HMAC.hexdigest +are now in lib/openssl/hmac.rb. +--- + ext/openssl/extconf.rb | 3 +- + ext/openssl/lib/openssl/hmac.rb | 40 +++++++ + ext/openssl/openssl_missing.c | 26 ----- + ext/openssl/openssl_missing.h | 10 +- + ext/openssl/ossl.h | 1 - + ext/openssl/ossl_hmac.c | 179 ++++++++------------------------ + 6 files changed, 89 insertions(+), 170 deletions(-) + +diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb +index 693e55cd9..063498a76 100644 +--- a/ext/openssl/extconf.rb ++++ b/ext/openssl/extconf.rb +@@ -141,8 +141,7 @@ def find_openssl_library + have_func("BN_GENCB_get_arg") + have_func("EVP_MD_CTX_new") + have_func("EVP_MD_CTX_free") +-have_func("HMAC_CTX_new") +-have_func("HMAC_CTX_free") ++have_func("EVP_MD_CTX_pkey_ctx") + have_func("X509_STORE_get_ex_data") + have_func("X509_STORE_set_ex_data") + have_func("X509_STORE_get_ex_new_index") +diff --git a/ext/openssl/lib/openssl/hmac.rb b/ext/openssl/lib/openssl/hmac.rb +index 3d4427611d..9bc8bc8df3 100644 +--- a/ext/openssl/lib/openssl/hmac.rb ++++ b/ext/openssl/lib/openssl/hmac.rb +@@ -9,5 +9,45 @@ def ==(other) + + OpenSSL.fixed_length_secure_compare(self.digest, other.digest) + end ++ ++ class << self ++ # :call-seq: ++ # HMAC.digest(digest, key, data) -> aString ++ # ++ # Returns the authentication code as a binary string. The _digest_ parameter ++ # specifies the digest algorithm to use. This may be a String representing ++ # the algorithm name or an instance of OpenSSL::Digest. ++ # ++ # === Example ++ # key = 'key' ++ # data = 'The quick brown fox jumps over the lazy dog' ++ # ++ # hmac = OpenSSL::HMAC.digest('SHA1', key, data) ++ # #=> "\xDE|\x9B\x85\xB8\xB7\x8A\xA6\xBC\x8Az6\xF7\n\x90p\x1C\x9D\xB4\xD9" ++ def digest(digest, key, data) ++ hmac = new(key, digest) ++ hmac << data ++ hmac.digest ++ end ++ ++ # :call-seq: ++ # HMAC.hexdigest(digest, key, data) -> aString ++ # ++ # Returns the authentication code as a hex-encoded string. The _digest_ ++ # parameter specifies the digest algorithm to use. This may be a String ++ # representing the algorithm name or an instance of OpenSSL::Digest. ++ # ++ # === Example ++ # key = 'key' ++ # data = 'The quick brown fox jumps over the lazy dog' ++ # ++ # hmac = OpenSSL::HMAC.hexdigest('SHA1', key, data) ++ # #=> "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9" ++ def hexdigest(digest, key, data) ++ hmac = new(key, digest) ++ hmac << data ++ hmac.hexdigest ++ end ++ end + end + end +diff --git a/ext/openssl/openssl_missing.c b/ext/openssl/openssl_missing.c +index b36ef0288..010c158dc 100644 +--- a/ext/openssl/openssl_missing.c ++++ b/ext/openssl/openssl_missing.c +@@ -13,9 +13,6 @@ + #if !defined(OPENSSL_NO_ENGINE) + # include + #endif +-#if !defined(OPENSSL_NO_HMAC) +-# include +-#endif + #include + + #include "openssl_missing.h" +@@ -58,29 +55,6 @@ ossl_EC_curve_nist2nid(const char *name) + #endif + + /*** added in 1.1.0 ***/ +-#if !defined(HAVE_HMAC_CTX_NEW) +-HMAC_CTX * +-ossl_HMAC_CTX_new(void) +-{ +- HMAC_CTX *ctx = OPENSSL_malloc(sizeof(HMAC_CTX)); +- if (!ctx) +- return NULL; +- HMAC_CTX_init(ctx); +- return ctx; +-} +-#endif +- +-#if !defined(HAVE_HMAC_CTX_FREE) +-void +-ossl_HMAC_CTX_free(HMAC_CTX *ctx) +-{ +- if (ctx) { +- HMAC_CTX_cleanup(ctx); +- OPENSSL_free(ctx); +- } +-} +-#endif +- + #if !defined(HAVE_X509_CRL_GET0_SIGNATURE) + void + ossl_X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, +diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h +index 7d218f86f..06d2a9082 100644 +--- a/ext/openssl/openssl_missing.h ++++ b/ext/openssl/openssl_missing.h +@@ -54,14 +54,8 @@ int ossl_EC_curve_nist2nid(const char *); + # define EVP_MD_CTX_free EVP_MD_CTX_destroy + #endif + +-#if !defined(HAVE_HMAC_CTX_NEW) +-HMAC_CTX *ossl_HMAC_CTX_new(void); +-# define HMAC_CTX_new ossl_HMAC_CTX_new +-#endif +- +-#if !defined(HAVE_HMAC_CTX_FREE) +-void ossl_HMAC_CTX_free(HMAC_CTX *); +-# define HMAC_CTX_free ossl_HMAC_CTX_free ++#if !defined(HAVE_EVP_MD_CTX_PKEY_CTX) ++# define EVP_MD_CTX_pkey_ctx(x) (x)->pctx + #endif + + #if !defined(HAVE_X509_STORE_GET_EX_DATA) +diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h +index c20f506bd..577eb6d6b 100644 +--- a/ext/openssl/ossl.h ++++ b/ext/openssl/ossl.h +@@ -24,7 +24,6 @@ + #include + #include + #include +-#include + #include + #include + #ifndef OPENSSL_NO_TS +diff --git a/ext/openssl/ossl_hmac.c b/ext/openssl/ossl_hmac.c +index 70e9fb819..a21db6c48 100644 +--- a/ext/openssl/ossl_hmac.c ++++ b/ext/openssl/ossl_hmac.c +@@ -7,14 +7,12 @@ + * This program is licensed under the same licence as Ruby. + * (See the file 'LICENCE'.) + */ +-#if !defined(OPENSSL_NO_HMAC) +- + #include "ossl.h" + + #define NewHMAC(klass) \ + TypedData_Wrap_Struct((klass), &ossl_hmac_type, 0) + #define GetHMAC(obj, ctx) do { \ +- TypedData_Get_Struct((obj), HMAC_CTX, &ossl_hmac_type, (ctx)); \ ++ TypedData_Get_Struct((obj), EVP_MD_CTX, &ossl_hmac_type, (ctx)); \ + if (!(ctx)) { \ + ossl_raise(rb_eRuntimeError, "HMAC wasn't initialized"); \ + } \ +@@ -36,7 +34,7 @@ VALUE eHMACError; + static void + ossl_hmac_free(void *ctx) + { +- HMAC_CTX_free(ctx); ++ EVP_MD_CTX_free(ctx); + } + + static const rb_data_type_t ossl_hmac_type = { +@@ -51,12 +49,12 @@ static VALUE + ossl_hmac_alloc(VALUE klass) + { + VALUE obj; +- HMAC_CTX *ctx; ++ EVP_MD_CTX *ctx; + + obj = NewHMAC(klass); +- ctx = HMAC_CTX_new(); ++ ctx = EVP_MD_CTX_new(); + if (!ctx) +- ossl_raise(eHMACError, NULL); ++ ossl_raise(eHMACError, "EVP_MD_CTX"); + RTYPEDDATA_DATA(obj) = ctx; + + return obj; +@@ -76,8 +74,7 @@ ossl_hmac_alloc(VALUE klass) + * === Example + * + * key = 'key' +- * digest = OpenSSL::Digest.new('sha1') +- * instance = OpenSSL::HMAC.new(key, digest) ++ * instance = OpenSSL::HMAC.new(key, 'SHA1') + * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f + * instance.class + * #=> OpenSSL::HMAC +@@ -86,7 +83,7 @@ ossl_hmac_alloc(VALUE klass) + * + * Two instances can be securely compared with #== in constant time: + * +- * other_instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1')) ++ * other_instance = OpenSSL::HMAC.new('key', 'SHA1') + * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f + * instance == other_instance + * #=> true +@@ -95,12 +92,23 @@ ossl_hmac_alloc(VALUE klass) + static VALUE + ossl_hmac_initialize(VALUE self, VALUE key, VALUE digest) + { +- HMAC_CTX *ctx; ++ EVP_MD_CTX *ctx; ++ EVP_PKEY *pkey; + +- StringValue(key); + GetHMAC(self, ctx); +- HMAC_Init_ex(ctx, RSTRING_PTR(key), RSTRING_LENINT(key), +- ossl_evp_get_digestbyname(digest), NULL); ++ StringValue(key); ++ pkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, ++ (unsigned char *)RSTRING_PTR(key), ++ RSTRING_LENINT(key)); ++ if (!pkey) ++ ossl_raise(eHMACError, "EVP_PKEY_new_mac_key"); ++ if (EVP_DigestSignInit(ctx, NULL, ossl_evp_get_digestbyname(digest), ++ NULL, pkey) != 1) { ++ EVP_PKEY_free(pkey); ++ ossl_raise(eHMACError, "EVP_DigestSignInit"); ++ } ++ /* Decrement reference counter; EVP_MD_CTX still keeps it */ ++ EVP_PKEY_free(pkey); + + return self; + } +@@ -108,16 +116,15 @@ ossl_hmac_initialize(VALUE self, VALUE key, VALUE digest) + static VALUE + ossl_hmac_copy(VALUE self, VALUE other) + { +- HMAC_CTX *ctx1, *ctx2; ++ EVP_MD_CTX *ctx1, *ctx2; + + rb_check_frozen(self); + if (self == other) return self; + + GetHMAC(self, ctx1); + GetHMAC(other, ctx2); +- +- if (!HMAC_CTX_copy(ctx1, ctx2)) +- ossl_raise(eHMACError, "HMAC_CTX_copy"); ++ if (EVP_MD_CTX_copy(ctx1, ctx2) != 1) ++ ossl_raise(eHMACError, "EVP_MD_CTX_copy"); + return self; + } + +@@ -142,33 +149,16 @@ ossl_hmac_copy(VALUE self, VALUE other) + static VALUE + ossl_hmac_update(VALUE self, VALUE data) + { +- HMAC_CTX *ctx; ++ EVP_MD_CTX *ctx; + + StringValue(data); + GetHMAC(self, ctx); +- HMAC_Update(ctx, (unsigned char *)RSTRING_PTR(data), RSTRING_LEN(data)); ++ if (EVP_DigestSignUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) != 1) ++ ossl_raise(eHMACError, "EVP_DigestSignUpdate"); + + return self; + } + +-static void +-hmac_final(HMAC_CTX *ctx, unsigned char *buf, unsigned int *buf_len) +-{ +- HMAC_CTX *final; +- +- final = HMAC_CTX_new(); +- if (!final) +- ossl_raise(eHMACError, "HMAC_CTX_new"); +- +- if (!HMAC_CTX_copy(final, ctx)) { +- HMAC_CTX_free(final); +- ossl_raise(eHMACError, "HMAC_CTX_copy"); +- } +- +- HMAC_Final(final, buf, buf_len); +- HMAC_CTX_free(final); +-} +- + /* + * call-seq: + * hmac.digest -> string +@@ -176,7 +166,7 @@ hmac_final(HMAC_CTX *ctx, unsigned char *buf, unsigned int *buf_len) + * Returns the authentication code an instance represents as a binary string. + * + * === Example +- * instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1')) ++ * instance = OpenSSL::HMAC.new('key', 'SHA1') + * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f + * instance.digest + * #=> "\xF4+\xB0\xEE\xB0\x18\xEB\xBDE\x97\xAEr\x13q\x1E\xC6\a`\x84?" +@@ -184,15 +174,16 @@ hmac_final(HMAC_CTX *ctx, unsigned char *buf, unsigned int *buf_len) + static VALUE + ossl_hmac_digest(VALUE self) + { +- HMAC_CTX *ctx; +- unsigned int buf_len; ++ EVP_MD_CTX *ctx; ++ size_t buf_len; + VALUE ret; + + GetHMAC(self, ctx); + ret = rb_str_new(NULL, EVP_MAX_MD_SIZE); +- hmac_final(ctx, (unsigned char *)RSTRING_PTR(ret), &buf_len); +- assert(buf_len <= EVP_MAX_MD_SIZE); +- rb_str_set_len(ret, buf_len); ++ if (EVP_DigestSignFinal(ctx, (unsigned char *)RSTRING_PTR(ret), ++ &buf_len) != 1) ++ ossl_raise(eHMACError, "EVP_DigestSignFinal"); ++ rb_str_set_len(ret, (long)buf_len); + + return ret; + } +@@ -207,13 +198,14 @@ ossl_hmac_digest(VALUE self) + static VALUE + ossl_hmac_hexdigest(VALUE self) + { +- HMAC_CTX *ctx; ++ EVP_MD_CTX *ctx; + unsigned char buf[EVP_MAX_MD_SIZE]; +- unsigned int buf_len; ++ size_t buf_len; + VALUE ret; + + GetHMAC(self, ctx); +- hmac_final(ctx, buf, &buf_len); ++ if (EVP_DigestSignFinal(ctx, buf, &buf_len) != 1) ++ ossl_raise(eHMACError, "EVP_DigestSignFinal"); + ret = rb_str_new(NULL, buf_len * 2); + ossl_bin2hex(buf, RSTRING_PTR(ret), buf_len); + +@@ -230,7 +222,7 @@ ossl_hmac_hexdigest(VALUE self) + * === Example + * + * data = "The quick brown fox jumps over the lazy dog" +- * instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1')) ++ * instance = OpenSSL::HMAC.new('key', 'SHA1') + * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f + * + * instance.update(data) +@@ -242,84 +234,17 @@ ossl_hmac_hexdigest(VALUE self) + static VALUE + ossl_hmac_reset(VALUE self) + { +- HMAC_CTX *ctx; ++ EVP_MD_CTX *ctx; ++ EVP_PKEY *pkey; + + GetHMAC(self, ctx); +- HMAC_Init_ex(ctx, NULL, 0, NULL, NULL); ++ pkey = EVP_PKEY_CTX_get0_pkey(EVP_MD_CTX_pkey_ctx(ctx)); ++ if (EVP_DigestSignInit(ctx, NULL, EVP_MD_CTX_md(ctx), NULL, pkey) != 1) ++ ossl_raise(eHMACError, "EVP_DigestSignInit"); + + return self; + } + +-/* +- * call-seq: +- * HMAC.digest(digest, key, data) -> aString +- * +- * Returns the authentication code as a binary string. The _digest_ parameter +- * specifies the digest algorithm to use. This may be a String representing +- * the algorithm name or an instance of OpenSSL::Digest. +- * +- * === Example +- * +- * key = 'key' +- * data = 'The quick brown fox jumps over the lazy dog' +- * +- * hmac = OpenSSL::HMAC.digest('sha1', key, data) +- * #=> "\xDE|\x9B\x85\xB8\xB7\x8A\xA6\xBC\x8Az6\xF7\n\x90p\x1C\x9D\xB4\xD9" +- * +- */ +-static VALUE +-ossl_hmac_s_digest(VALUE klass, VALUE digest, VALUE key, VALUE data) +-{ +- unsigned char *buf; +- unsigned int buf_len; +- +- StringValue(key); +- StringValue(data); +- buf = HMAC(ossl_evp_get_digestbyname(digest), RSTRING_PTR(key), +- RSTRING_LENINT(key), (unsigned char *)RSTRING_PTR(data), +- RSTRING_LEN(data), NULL, &buf_len); +- +- return rb_str_new((const char *)buf, buf_len); +-} +- +-/* +- * call-seq: +- * HMAC.hexdigest(digest, key, data) -> aString +- * +- * Returns the authentication code as a hex-encoded string. The _digest_ +- * parameter specifies the digest algorithm to use. This may be a String +- * representing the algorithm name or an instance of OpenSSL::Digest. +- * +- * === Example +- * +- * key = 'key' +- * data = 'The quick brown fox jumps over the lazy dog' +- * +- * hmac = OpenSSL::HMAC.hexdigest('sha1', key, data) +- * #=> "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9" +- * +- */ +-static VALUE +-ossl_hmac_s_hexdigest(VALUE klass, VALUE digest, VALUE key, VALUE data) +-{ +- unsigned char buf[EVP_MAX_MD_SIZE]; +- unsigned int buf_len; +- VALUE ret; +- +- StringValue(key); +- StringValue(data); +- +- if (!HMAC(ossl_evp_get_digestbyname(digest), RSTRING_PTR(key), +- RSTRING_LENINT(key), (unsigned char *)RSTRING_PTR(data), +- RSTRING_LEN(data), buf, &buf_len)) +- ossl_raise(eHMACError, "HMAC"); +- +- ret = rb_str_new(NULL, buf_len * 2); +- ossl_bin2hex(buf, RSTRING_PTR(ret), buf_len); +- +- return ret; +-} +- + /* + * INIT + */ +@@ -353,8 +278,7 @@ Init_ossl_hmac(void) + * data1 = File.read("file1") + * data2 = File.read("file2") + * key = "key" +- * digest = OpenSSL::Digest.new('SHA256') +- * hmac = OpenSSL::HMAC.new(key, digest) ++ * hmac = OpenSSL::HMAC.new(key, 'SHA256') + * hmac << data1 + * hmac << data2 + * mac = hmac.digest +@@ -364,8 +288,6 @@ Init_ossl_hmac(void) + cHMAC = rb_define_class_under(mOSSL, "HMAC", rb_cObject); + + rb_define_alloc_func(cHMAC, ossl_hmac_alloc); +- rb_define_singleton_method(cHMAC, "digest", ossl_hmac_s_digest, 3); +- rb_define_singleton_method(cHMAC, "hexdigest", ossl_hmac_s_hexdigest, 3); + + rb_define_method(cHMAC, "initialize", ossl_hmac_initialize, 2); + rb_define_method(cHMAC, "initialize_copy", ossl_hmac_copy, 1); +@@ -378,12 +300,3 @@ Init_ossl_hmac(void) + rb_define_alias(cHMAC, "inspect", "hexdigest"); + rb_define_alias(cHMAC, "to_s", "hexdigest"); + } +- +-#else /* NO_HMAC */ +-# warning >>> OpenSSL is compiled without HMAC support <<< +-void +-Init_ossl_hmac(void) +-{ +- rb_warning("HMAC is not available: OpenSSL is compiled without HMAC."); +-} +-#endif /* NO_HMAC */ +-- +2.34.1 + diff --git a/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support-part-2.patch b/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support-part-2.patch new file mode 100644 index 0000000..b906c19 --- /dev/null +++ b/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support-part-2.patch @@ -0,0 +1,458 @@ +From 91d04f991f8b9910efea7bbe5aecb0fea2bbd5fa Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sun, 24 Oct 2021 17:50:18 +0900 +Subject: [PATCH 1/8] cipher: update test_ciphers + +Do not attempt to actually use all algorithms. Not all algorithms listed +in OpenSSL::Cipher.ciphers are always available. +--- + test/openssl/test_cipher.rb | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) + +diff --git a/test/openssl/test_cipher.rb b/test/openssl/test_cipher.rb +index 6d18c0c8..b5fdf0b3 100644 +--- a/test/openssl/test_cipher.rb ++++ b/test/openssl/test_cipher.rb +@@ -135,14 +135,11 @@ def test_ctr_if_exists + end + + def test_ciphers +- OpenSSL::Cipher.ciphers.each{|name| +- next if /netbsd/ =~ RUBY_PLATFORM && /idea|rc5/i =~ name +- begin +- assert_kind_of(OpenSSL::Cipher, OpenSSL::Cipher.new(name)) +- rescue OpenSSL::Cipher::CipherError => e +- raise unless /wrap/ =~ name and /wrap mode not allowed/ =~ e.message +- end +- } ++ ciphers = OpenSSL::Cipher.ciphers ++ assert_kind_of Array, ciphers ++ assert_include ciphers, "aes-128-cbc" ++ assert_include ciphers, "aes128" # alias of aes-128-cbc ++ assert_include ciphers, "aes-128-gcm" + end + + def test_AES + +From 6a60c7b2e7b6afe8b8c98d864ef2740094d86e1d Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sat, 11 Dec 2021 16:27:42 +0900 +Subject: [PATCH 2/8] hmac: fix wrong usage of EVP_DigestSignFinal() + +According to the manpage, the "siglen" parameter must be initialized +beforehand. +--- + ext/openssl/ossl_hmac.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/ext/openssl/ossl_hmac.c b/ext/openssl/ossl_hmac.c +index f89ff2f9..bfe3a74b 100644 +--- a/ext/openssl/ossl_hmac.c ++++ b/ext/openssl/ossl_hmac.c +@@ -175,7 +175,7 @@ static VALUE + ossl_hmac_digest(VALUE self) + { + EVP_MD_CTX *ctx; +- size_t buf_len; ++ size_t buf_len = EVP_MAX_MD_SIZE; + VALUE ret; + + GetHMAC(self, ctx); +@@ -200,7 +200,7 @@ ossl_hmac_hexdigest(VALUE self) + { + EVP_MD_CTX *ctx; + unsigned char buf[EVP_MAX_MD_SIZE]; +- size_t buf_len; ++ size_t buf_len = EVP_MAX_MD_SIZE; + VALUE ret; + + GetHMAC(self, ctx); + +From 46995816392a79d037df5550b2fb226652c06f42 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sat, 11 Dec 2021 16:30:30 +0900 +Subject: [PATCH 3/8] hmac: skip test_dup on OpenSSL 3.0 for now + +EVP_MD_CTX_copy() doesn't seem to work as intended on HMAC EVP_MD_CTX +on OpenSSL 3.0.0 and causes a double free. I haven't found the root +problem yet, but let's skip the test case for now. +--- + test/openssl/test_hmac.rb | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/test/openssl/test_hmac.rb b/test/openssl/test_hmac.rb +index 2f53a813..47cb3718 100644 +--- a/test/openssl/test_hmac.rb ++++ b/test/openssl/test_hmac.rb +@@ -19,6 +19,7 @@ def test_hmac + end + + def test_dup ++ pend "HMAC#initialize_copy is currently broken on OpenSSL 3.0.0" if openssl?(3, 0, 0) + h1 = OpenSSL::HMAC.new("KEY", "MD5") + h1.update("DATA") + h = h1.dup + +From 69a27d8de4bd291cb4eb21a4d715b197e7da5a06 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Thu, 15 Apr 2021 00:51:58 +0900 +Subject: [PATCH 4/8] engine: disable OpenSSL::Engine on OpenSSL 3.0 + +The entire ENGINE API is deprecated in OpenSSL 3.0 in favor of the new +"Provider" concept. + +OpenSSL::Engine will not be defined when compiled with OpenSSL 3.0. +We would need a way to interact with providers from Ruby programs, but +since the concept is completely different from the ENGINE API, it will +not be through the current OpenSSL::Engine interface. +--- + ext/openssl/openssl_missing.c | 3 --- + ext/openssl/ossl.h | 8 +++++--- + ext/openssl/ossl_engine.c | 3 ++- + ext/openssl/ossl_pkey.c | 4 ++++ + 4 files changed, 11 insertions(+), 7 deletions(-) + +diff --git a/ext/openssl/openssl_missing.c b/ext/openssl/openssl_missing.c +index 8b93cba6..4415703d 100644 +--- a/ext/openssl/openssl_missing.c ++++ b/ext/openssl/openssl_missing.c +@@ -10,9 +10,6 @@ + #include RUBY_EXTCONF_H + + #include /* memcpy() */ +-#if !defined(OPENSSL_NO_ENGINE) +-# include +-#endif + #include + + #include "openssl_missing.h" +diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h +index 3a0ab1e5..4b512689 100644 +--- a/ext/openssl/ossl.h ++++ b/ext/openssl/ossl.h +@@ -18,6 +18,7 @@ + #include + #include + #include ++ + #include + #include + #include +@@ -30,9 +31,6 @@ + #include + #endif + #include +-#if !defined(OPENSSL_NO_ENGINE) +-# include +-#endif + #if !defined(OPENSSL_NO_OCSP) + # include + #endif +@@ -54,6 +52,10 @@ + (LIBRESSL_VERSION_NUMBER >= (maj << 28) | (min << 20) | (pat << 12)) + #endif + ++#if !defined(OPENSSL_NO_ENGINE) && !OSSL_OPENSSL_PREREQ(3, 0, 0) ++# define OSSL_USE_ENGINE ++#endif ++ + /* + * Common Module + */ +diff --git a/ext/openssl/ossl_engine.c b/ext/openssl/ossl_engine.c +index 661a1368..1abde7f7 100644 +--- a/ext/openssl/ossl_engine.c ++++ b/ext/openssl/ossl_engine.c +@@ -9,7 +9,8 @@ + */ + #include "ossl.h" + +-#if !defined(OPENSSL_NO_ENGINE) ++#ifdef OSSL_USE_ENGINE ++# include + + #define NewEngine(klass) \ + TypedData_Wrap_Struct((klass), &ossl_engine_type, 0) +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 7030be3c..94760d32 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -9,6 +9,10 @@ + */ + #include "ossl.h" + ++#ifdef OSSL_USE_ENGINE ++# include ++#endif ++ + /* + * Classes + */ + +From b1ee2f23b28c2d0b14fd9b4b9fef13e870370746 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Wed, 17 Nov 2021 11:39:06 +0900 +Subject: [PATCH 5/8] ssl: add constants for new SSL_OP_* flags + +Add all SSL_OP_* constants defined in OpenSSL 3.0.0 which are not +specific to DTLS. +--- + ext/openssl/ossl_ssl.c | 35 +++++++++++++++++++++++++++++------ + 1 file changed, 29 insertions(+), 6 deletions(-) + +diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c +index 3b425ca7..9a0682a7 100644 +--- a/ext/openssl/ossl_ssl.c ++++ b/ext/openssl/ossl_ssl.c +@@ -2941,13 +2941,28 @@ Init_ossl_ssl(void) + rb_define_const(mSSL, "VERIFY_CLIENT_ONCE", INT2NUM(SSL_VERIFY_CLIENT_ONCE)); + + rb_define_const(mSSL, "OP_ALL", ULONG2NUM(SSL_OP_ALL)); ++#ifdef SSL_OP_CLEANSE_PLAINTEXT /* OpenSSL 3.0 */ ++ rb_define_const(mSSL, "OP_CLEANSE_PLAINTEXT", ULONG2NUM(SSL_OP_CLEANSE_PLAINTEXT)); ++#endif + rb_define_const(mSSL, "OP_LEGACY_SERVER_CONNECT", ULONG2NUM(SSL_OP_LEGACY_SERVER_CONNECT)); ++#ifdef SSL_OP_ENABLE_KTLS /* OpenSSL 3.0 */ ++ rb_define_const(mSSL, "OP_ENABLE_KTLS", ULONG2NUM(SSL_OP_ENABLE_KTLS)); ++#endif + #ifdef SSL_OP_TLSEXT_PADDING /* OpenSSL 1.0.1h and OpenSSL 1.0.2 */ + rb_define_const(mSSL, "OP_TLSEXT_PADDING", ULONG2NUM(SSL_OP_TLSEXT_PADDING)); + #endif + #ifdef SSL_OP_SAFARI_ECDHE_ECDSA_BUG /* OpenSSL 1.0.1f and OpenSSL 1.0.2 */ + rb_define_const(mSSL, "OP_SAFARI_ECDHE_ECDSA_BUG", ULONG2NUM(SSL_OP_SAFARI_ECDHE_ECDSA_BUG)); + #endif ++#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF /* OpenSSL 3.0 */ ++ rb_define_const(mSSL, "OP_IGNORE_UNEXPECTED_EOF", ULONG2NUM(SSL_OP_IGNORE_UNEXPECTED_EOF)); ++#endif ++#ifdef SSL_OP_ALLOW_CLIENT_RENEGOTIATION /* OpenSSL 3.0 */ ++ rb_define_const(mSSL, "OP_ALLOW_CLIENT_RENEGOTIATION", ULONG2NUM(SSL_OP_ALLOW_CLIENT_RENEGOTIATION)); ++#endif ++#ifdef SSL_OP_DISABLE_TLSEXT_CA_NAMES /* OpenSSL 3.0 */ ++ rb_define_const(mSSL, "OP_DISABLE_TLSEXT_CA_NAMES", ULONG2NUM(SSL_OP_DISABLE_TLSEXT_CA_NAMES)); ++#endif + #ifdef SSL_OP_ALLOW_NO_DHE_KEX /* OpenSSL 1.1.1 */ + rb_define_const(mSSL, "OP_ALLOW_NO_DHE_KEX", ULONG2NUM(SSL_OP_ALLOW_NO_DHE_KEX)); + #endif +@@ -2959,13 +2974,15 @@ Init_ossl_ssl(void) + #ifdef SSL_OP_NO_ENCRYPT_THEN_MAC /* OpenSSL 1.1.1 */ + rb_define_const(mSSL, "OP_NO_ENCRYPT_THEN_MAC", ULONG2NUM(SSL_OP_NO_ENCRYPT_THEN_MAC)); + #endif +- rb_define_const(mSSL, "OP_CIPHER_SERVER_PREFERENCE", ULONG2NUM(SSL_OP_CIPHER_SERVER_PREFERENCE)); +- rb_define_const(mSSL, "OP_TLS_ROLLBACK_BUG", ULONG2NUM(SSL_OP_TLS_ROLLBACK_BUG)); +-#ifdef SSL_OP_NO_RENEGOTIATION /* OpenSSL 1.1.1 */ +- rb_define_const(mSSL, "OP_NO_RENEGOTIATION", ULONG2NUM(SSL_OP_NO_RENEGOTIATION)); ++#ifdef SSL_OP_ENABLE_MIDDLEBOX_COMPAT /* OpenSSL 1.1.1 */ ++ rb_define_const(mSSL, "OP_ENABLE_MIDDLEBOX_COMPAT", ULONG2NUM(SSL_OP_ENABLE_MIDDLEBOX_COMPAT)); ++#endif ++#ifdef SSL_OP_PRIORITIZE_CHACHA /* OpenSSL 1.1.1 */ ++ rb_define_const(mSSL, "OP_PRIORITIZE_CHACHA", ULONG2NUM(SSL_OP_PRIORITIZE_CHACHA)); ++#endif ++#ifdef SSL_OP_NO_ANTI_REPLAY /* OpenSSL 1.1.1 */ ++ rb_define_const(mSSL, "OP_NO_ANTI_REPLAY", ULONG2NUM(SSL_OP_NO_ANTI_REPLAY)); + #endif +- rb_define_const(mSSL, "OP_CRYPTOPRO_TLSEXT_BUG", ULONG2NUM(SSL_OP_CRYPTOPRO_TLSEXT_BUG)); +- + rb_define_const(mSSL, "OP_NO_SSLv3", ULONG2NUM(SSL_OP_NO_SSLv3)); + rb_define_const(mSSL, "OP_NO_TLSv1", ULONG2NUM(SSL_OP_NO_TLSv1)); + rb_define_const(mSSL, "OP_NO_TLSv1_1", ULONG2NUM(SSL_OP_NO_TLSv1_1)); +@@ -2973,6 +2990,12 @@ Init_ossl_ssl(void) + #ifdef SSL_OP_NO_TLSv1_3 /* OpenSSL 1.1.1 */ + rb_define_const(mSSL, "OP_NO_TLSv1_3", ULONG2NUM(SSL_OP_NO_TLSv1_3)); + #endif ++ rb_define_const(mSSL, "OP_CIPHER_SERVER_PREFERENCE", ULONG2NUM(SSL_OP_CIPHER_SERVER_PREFERENCE)); ++ rb_define_const(mSSL, "OP_TLS_ROLLBACK_BUG", ULONG2NUM(SSL_OP_TLS_ROLLBACK_BUG)); ++#ifdef SSL_OP_NO_RENEGOTIATION /* OpenSSL 1.1.1 */ ++ rb_define_const(mSSL, "OP_NO_RENEGOTIATION", ULONG2NUM(SSL_OP_NO_RENEGOTIATION)); ++#endif ++ rb_define_const(mSSL, "OP_CRYPTOPRO_TLSEXT_BUG", ULONG2NUM(SSL_OP_CRYPTOPRO_TLSEXT_BUG)); + + /* SSL_OP_* flags for DTLS */ + #if 0 + +From e168df0f3570709bfb38e9a39838bd0a7e78164c Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sun, 12 Dec 2021 00:47:35 +0900 +Subject: [PATCH 6/8] ssl: update test_options_disable_versions + +Use the combination of TLS 1.2 and TLS 1.3 instead of TLS 1.1 and TLS +1.2 so that will the test case will be run on latest platforms. +--- + test/openssl/test_ssl.rb | 75 +++++++++++++++++++++------------------- + 1 file changed, 40 insertions(+), 35 deletions(-) + +diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb +index 22691292..2abade06 100644 +--- a/test/openssl/test_ssl.rb ++++ b/test/openssl/test_ssl.rb +@@ -1180,46 +1180,51 @@ def test_minmax_version + end + + def test_options_disable_versions +- # Note: Use of these OP_* flags has been deprecated since OpenSSL 1.1.0. ++ # It's recommended to use SSLContext#{min,max}_version= instead in real ++ # applications. The purpose of this test case is to check that SSL options ++ # are properly propagated to OpenSSL library. + supported = check_supported_protocol_versions ++ if !defined?(OpenSSL::SSL::TLS1_3_VERSION) || ++ !supported.include?(OpenSSL::SSL::TLS1_2_VERSION) || ++ !supported.include?(OpenSSL::SSL::TLS1_3_VERSION) || ++ !defined?(OpenSSL::SSL::OP_NO_TLSv1_3) # LibreSSL < 3.4 ++ pend "this test case requires both TLS 1.2 and TLS 1.3 to be supported " \ ++ "and enabled by default" ++ end + +- if supported.include?(OpenSSL::SSL::TLS1_1_VERSION) && +- supported.include?(OpenSSL::SSL::TLS1_2_VERSION) +- # Server disables ~ TLS 1.1 +- ctx_proc = proc { |ctx| +- ctx.options |= OpenSSL::SSL::OP_NO_SSLv2 | OpenSSL::SSL::OP_NO_SSLv3 | +- OpenSSL::SSL::OP_NO_TLSv1 | OpenSSL::SSL::OP_NO_TLSv1_1 +- } +- start_server(ctx_proc: ctx_proc, ignore_listener_error: true) { |port| +- # Client only supports TLS 1.1 +- ctx1 = OpenSSL::SSL::SSLContext.new +- ctx1.min_version = ctx1.max_version = OpenSSL::SSL::TLS1_1_VERSION +- assert_handshake_error { server_connect(port, ctx1) { } } ++ # Server disables TLS 1.2 and earlier ++ ctx_proc = proc { |ctx| ++ ctx.options |= OpenSSL::SSL::OP_NO_SSLv2 | OpenSSL::SSL::OP_NO_SSLv3 | ++ OpenSSL::SSL::OP_NO_TLSv1 | OpenSSL::SSL::OP_NO_TLSv1_1 | ++ OpenSSL::SSL::OP_NO_TLSv1_2 ++ } ++ start_server(ctx_proc: ctx_proc, ignore_listener_error: true) { |port| ++ # Client only supports TLS 1.2 ++ ctx1 = OpenSSL::SSL::SSLContext.new ++ ctx1.min_version = ctx1.max_version = OpenSSL::SSL::TLS1_2_VERSION ++ assert_handshake_error { server_connect(port, ctx1) { } } + +- # Client only supports TLS 1.2 +- ctx2 = OpenSSL::SSL::SSLContext.new +- ctx2.min_version = ctx2.max_version = OpenSSL::SSL::TLS1_2_VERSION +- assert_nothing_raised { server_connect(port, ctx2) { } } +- } ++ # Client only supports TLS 1.3 ++ ctx2 = OpenSSL::SSL::SSLContext.new ++ ctx2.min_version = ctx2.max_version = OpenSSL::SSL::TLS1_3_VERSION ++ assert_nothing_raised { server_connect(port, ctx2) { } } ++ } + +- # Server only supports TLS 1.1 +- ctx_proc = proc { |ctx| +- ctx.min_version = ctx.max_version = OpenSSL::SSL::TLS1_1_VERSION +- } +- start_server(ctx_proc: ctx_proc, ignore_listener_error: true) { |port| +- # Client disables TLS 1.1 +- ctx1 = OpenSSL::SSL::SSLContext.new +- ctx1.options |= OpenSSL::SSL::OP_NO_TLSv1_1 +- assert_handshake_error { server_connect(port, ctx1) { } } ++ # Server only supports TLS 1.2 ++ ctx_proc = proc { |ctx| ++ ctx.min_version = ctx.max_version = OpenSSL::SSL::TLS1_2_VERSION ++ } ++ start_server(ctx_proc: ctx_proc, ignore_listener_error: true) { |port| ++ # Client doesn't support TLS 1.2 ++ ctx1 = OpenSSL::SSL::SSLContext.new ++ ctx1.options |= OpenSSL::SSL::OP_NO_TLSv1_2 ++ assert_handshake_error { server_connect(port, ctx1) { } } + +- # Client disables TLS 1.2 +- ctx2 = OpenSSL::SSL::SSLContext.new +- ctx2.options |= OpenSSL::SSL::OP_NO_TLSv1_2 +- assert_nothing_raised { server_connect(port, ctx2) { } } +- } +- else +- pend "TLS 1.1 and TLS 1.2 must be supported; skipping" +- end ++ # Client supports TLS 1.2 by default ++ ctx2 = OpenSSL::SSL::SSLContext.new ++ ctx2.options |= OpenSSL::SSL::OP_NO_TLSv1_3 ++ assert_nothing_raised { server_connect(port, ctx2) { } } ++ } + end + + def test_ssl_methods_constant + +From ccdb6f7bfa5f988a07beecedbf2b6205b6ab8492 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sat, 20 Mar 2021 23:16:41 +0900 +Subject: [PATCH 7/8] pkey: assume a pkey always has public key components on + OpenSSL 3.0 + +OpenSSL 3.0's EVP_PKEY_get0() returns NULL for provider-backed pkeys. +This causes segfault because it was supposed to never return NULL +before. + +We can't check the existence of public key components in this way on +OpenSSL 3.0. Let's just skip it for now. +--- + ext/openssl/ossl_pkey.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 94760d32..09d45d85 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -428,9 +428,19 @@ ossl_pkey_s_generate_key(int argc, VALUE *argv, VALUE self) + return pkey_generate(argc, argv, self, 0); + } + ++/* ++ * TODO: There is no convenient way to check the presence of public key ++ * components on OpenSSL 3.0. But since keys are immutable on 3.0, pkeys without ++ * these should only be created by OpenSSL::PKey.generate_parameters or by ++ * parsing DER-/PEM-encoded string. We would need another flag for that. ++ */ + void + ossl_pkey_check_public_key(const EVP_PKEY *pkey) + { ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++ if (EVP_PKEY_missing_parameters(pkey)) ++ ossl_raise(ePKeyError, "parameters missing"); ++#else + void *ptr; + const BIGNUM *n, *e, *pubkey; + +@@ -466,6 +476,7 @@ ossl_pkey_check_public_key(const EVP_PKEY *pkey) + return; + } + ossl_raise(ePKeyError, "public key missing"); ++#endif + } + + EVP_PKEY * + +From d6535d13d174cd87ae99f3e60e97f7a00e1474e5 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Mon, 12 Apr 2021 10:43:46 +0900 +Subject: [PATCH 8/8] pkey: use EVP_PKEY_CTX_new_from_name() on OpenSSL 3.0 + +Replace EVP_PKEY_CTX_new_id() with the new EVP_PKEY_CTX_new_from_name() +which takes the algorithm name in a string instead of in an NID. +--- + ext/openssl/ossl_pkey.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 09d45d85..2a4835a2 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -315,6 +315,11 @@ pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); + } + else { ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++ ctx = EVP_PKEY_CTX_new_from_name(NULL, StringValueCStr(alg), NULL); ++ if (!ctx) ++ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_from_name"); ++#else + const EVP_PKEY_ASN1_METHOD *ameth; + ENGINE *tmpeng; + int pkey_id; +@@ -333,6 +338,7 @@ pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) + ctx = EVP_PKEY_CTX_new_id(pkey_id, NULL/* engine */); + if (!ctx) + ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_id"); ++#endif + } + + if (genparam && EVP_PKEY_paramgen_init(ctx) <= 0) { diff --git a/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch b/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch index f03f28a..a780108 100644 --- a/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch +++ b/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch @@ -1,7 +1,7 @@ From 8f948ed68a4ed6c05ff66d822711e3b70ae4bb3f Mon Sep 17 00:00:00 2001 From: Kazuki Yamaguchi Date: Mon, 27 Sep 2021 13:32:03 +0900 -Subject: [PATCH 1/3] ext/openssl/ossl.h: add helper macros for +Subject: [PATCH 1/5] ext/openssl/ossl.h: add helper macros for OpenSSL/LibreSSL versions Add following convenient macros: @@ -17,7 +17,7 @@ diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h index c20f506bda..a0cef29d74 100644 --- a/ext/openssl/ossl.h +++ b/ext/openssl/ossl.h -@@ -43,6 +43,18 @@ +@@ -42,6 +42,18 @@ #include #include @@ -43,7 +43,7 @@ index c20f506bda..a0cef29d74 100644 From bbf235091e49807ece8f3a3df95bbfcc9d3ab43d Mon Sep 17 00:00:00 2001 From: Kazuki Yamaguchi Date: Sat, 22 Feb 2020 05:37:01 +0900 -Subject: [PATCH 2/3] ts: use TS_VERIFY_CTX_set_certs instead of +Subject: [PATCH 2/5] ts: use TS_VERIFY_CTX_set_certs instead of TS_VERIFY_CTS_set_certs OpenSSL 3.0 fixed the typo in the function name and replaced the @@ -58,7 +58,7 @@ diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb index 17d93443fc..09cae05b72 100644 --- a/ext/openssl/extconf.rb +++ b/ext/openssl/extconf.rb -@@ -166,7 +166,7 @@ def find_openssl_library +@@ -165,7 +165,7 @@ def find_openssl_library have_func("TS_STATUS_INFO_get0_status") have_func("TS_STATUS_INFO_get0_text") have_func("TS_STATUS_INFO_get0_failure_info") @@ -67,7 +67,7 @@ index 17d93443fc..09cae05b72 100644 have_func("TS_VERIFY_CTX_set_store") have_func("TS_VERIFY_CTX_add_flags") have_func("TS_RESP_CTX_set_time_cb") -@@ -175,6 +175,9 @@ def find_openssl_library +@@ -174,6 +174,9 @@ def find_openssl_library # added in 1.1.1 have_func("EVP_PKEY_check") @@ -81,7 +81,7 @@ diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h index e575415f49..fe486bcfcf 100644 --- a/ext/openssl/openssl_missing.h +++ b/ext/openssl/openssl_missing.h -@@ -242,4 +242,9 @@ IMPL_PKEY_GETTER(EC_KEY, ec) +@@ -236,4 +236,9 @@ IMPL_PKEY_GETTER(EC_KEY, ec) } while (0) #endif @@ -111,7 +111,7 @@ index 692c0d620f..f1da7c1947 100644 From 5fba3bc1df93ab6abc3ea53be3393480f36ea259 Mon Sep 17 00:00:00 2001 From: Kazuki Yamaguchi Date: Fri, 19 Mar 2021 19:18:25 +0900 -Subject: [PATCH 3/3] ssl: use SSL_get_rbio() to check if SSL is started or not +Subject: [PATCH 3/5] ssl: use SSL_get_rbio() to check if SSL is started or not Use SSL_get_rbio() instead of SSL_get_fd(). SSL_get_fd() internally calls SSL_get_rbio() and it's enough for our purpose. @@ -140,3 +140,165 @@ index 4b7efa39f5..ec430bfb0c 100644 -- 2.32.0 +From 0a253027e6be47c0b7fd8b664f1048f24d7ca657 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Thu, 22 Apr 2021 13:57:47 +0900 +Subject: [PATCH 4/5] digest: use EVP_MD_CTX_get0_md() instead of + EVP_MD_CTX_md() if exists + +The function was renamed in OpenSSL 3.0 due to the change of the +lifetime of EVP_MD objects. They are no longer necessarily statically +allocated and can be reference-counted -- when an EVP_MD_CTX is free'd, +the associated EVP_MD can also become inaccessible. + +Currently Ruby/OpenSSL only handles builtin algorithms, so no special +handling is needed except for adapting to the rename. +--- + ext/openssl/extconf.rb | 1 + + ext/openssl/openssl_missing.h | 4 ++++ + ext/openssl/ossl_digest.c | 6 +++--- + ext/openssl/ossl_hmac.c | 2 +- + 4 files changed, 9 insertions(+), 4 deletions(-) + +diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb +index 98f96afe..842b7f5b 100644 +--- a/ext/openssl/extconf.rb ++++ b/ext/openssl/extconf.rb +@@ -177,6 +177,7 @@ def find_openssl_library + + # added in 3.0.0 + have_func("TS_VERIFY_CTX_set_certs(NULL, NULL)", "openssl/ts.h") ++have_func("EVP_MD_CTX_get0_md") + + Logging::message "=== Checking done. ===\n" + +diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h +index 1b1a54a8..64212349 100644 +--- a/ext/openssl/openssl_missing.h ++++ b/ext/openssl/openssl_missing.h +@@ -241,4 +241,8 @@ IMPL_PKEY_GETTER(EC_KEY, ec) + # define TS_VERIFY_CTX_set_certs(ctx, crts) TS_VERIFY_CTS_set_certs(ctx, crts) + #endif + ++#ifndef HAVE_EVP_MD_CTX_GET0_MD ++# define EVP_MD_CTX_get0_md(ctx) EVP_MD_CTX_md(ctx) ++#endif ++ + #endif /* _OSSL_OPENSSL_MISSING_H_ */ +diff --git a/ext/openssl/ossl_digest.c b/ext/openssl/ossl_digest.c +index b2506de7..fc326ec1 100644 +--- a/ext/openssl/ossl_digest.c ++++ b/ext/openssl/ossl_digest.c +@@ -63,7 +63,7 @@ ossl_evp_get_digestbyname(VALUE obj) + + GetDigest(obj, ctx); + +- md = EVP_MD_CTX_md(ctx); ++ md = EVP_MD_CTX_get0_md(ctx); + } + + return md; +@@ -176,7 +176,7 @@ ossl_digest_reset(VALUE self) + EVP_MD_CTX *ctx; + + GetDigest(self, ctx); +- if (EVP_DigestInit_ex(ctx, EVP_MD_CTX_md(ctx), NULL) != 1) { ++ if (EVP_DigestInit_ex(ctx, EVP_MD_CTX_get0_md(ctx), NULL) != 1) { + ossl_raise(eDigestError, "Digest initialization failed."); + } + +@@ -259,7 +259,7 @@ ossl_digest_name(VALUE self) + + GetDigest(self, ctx); + +- return rb_str_new2(EVP_MD_name(EVP_MD_CTX_md(ctx))); ++ return rb_str_new_cstr(EVP_MD_name(EVP_MD_CTX_get0_md(ctx))); + } + + /* +diff --git a/ext/openssl/ossl_hmac.c b/ext/openssl/ossl_hmac.c +index a21db6c4..2642728b 100644 +--- a/ext/openssl/ossl_hmac.c ++++ b/ext/openssl/ossl_hmac.c +@@ -239,7 +239,7 @@ ossl_hmac_reset(VALUE self) + + GetHMAC(self, ctx); + pkey = EVP_PKEY_CTX_get0_pkey(EVP_MD_CTX_pkey_ctx(ctx)); +- if (EVP_DigestSignInit(ctx, NULL, EVP_MD_CTX_md(ctx), NULL, pkey) != 1) ++ if (EVP_DigestSignInit(ctx, NULL, EVP_MD_CTX_get0_md(ctx), NULL, pkey) != 1) + ossl_raise(eHMACError, "EVP_DigestSignInit"); + + return self; + +From c106d888c62e44a11cdbba5e4d2d0cb837ec3e52 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Tue, 22 Jun 2021 18:50:17 +0900 +Subject: [PATCH 5/5] hmac: use EVP_MD_CTX_get_pkey_ctx() instead of + EVP_MD_CTX_pkey_ctx() + +OpenSSL 3.0 renamed EVP_MD_CTX_pkey_ctx() to include "get" in the +function name. Adjust compatibility macro so that we can use the new +function name for all OpenSSL 1.0.2-3.0. +--- + ext/openssl/extconf.rb | 1 + + ext/openssl/openssl_missing.h | 16 ++++++++++++---- + ext/openssl/ossl_hmac.c | 2 +- + 3 files changed, 14 insertions(+), 5 deletions(-) + +diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb +index 842b7f5b..d9d34b7c 100644 +--- a/ext/openssl/extconf.rb ++++ b/ext/openssl/extconf.rb +@@ -178,6 +178,7 @@ def find_openssl_library + # added in 3.0.0 + have_func("TS_VERIFY_CTX_set_certs(NULL, NULL)", "openssl/ts.h") + have_func("EVP_MD_CTX_get0_md") ++have_func("EVP_MD_CTX_get_pkey_ctx") + + Logging::message "=== Checking done. ===\n" + +diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h +index 64212349..55c4f378 100644 +--- a/ext/openssl/openssl_missing.h ++++ b/ext/openssl/openssl_missing.h +@@ -42,10 +42,6 @@ int ossl_EC_curve_nist2nid(const char *); + # define EVP_MD_CTX_free EVP_MD_CTX_destroy + #endif + +-#if !defined(HAVE_EVP_MD_CTX_PKEY_CTX) +-# define EVP_MD_CTX_pkey_ctx(x) (x)->pctx +-#endif +- + #if !defined(HAVE_X509_STORE_GET_EX_DATA) + # define X509_STORE_get_ex_data(x, idx) \ + CRYPTO_get_ex_data(&(x)->ex_data, (idx)) +@@ -245,4 +241,16 @@ IMPL_PKEY_GETTER(EC_KEY, ec) + # define EVP_MD_CTX_get0_md(ctx) EVP_MD_CTX_md(ctx) + #endif + ++/* ++ * OpenSSL 1.1.0 added EVP_MD_CTX_pkey_ctx(), and then it was renamed to ++ * EVP_MD_CTX_get_pkey_ctx(x) in OpenSSL 3.0. ++ */ ++#ifndef HAVE_EVP_MD_CTX_GET_PKEY_CTX ++# ifdef HAVE_EVP_MD_CTX_PKEY_CTX ++# define EVP_MD_CTX_get_pkey_ctx(x) EVP_MD_CTX_pkey_ctx(x) ++# else ++# define EVP_MD_CTX_get_pkey_ctx(x) (x)->pctx ++# endif ++#endif ++ + #endif /* _OSSL_OPENSSL_MISSING_H_ */ +diff --git a/ext/openssl/ossl_hmac.c b/ext/openssl/ossl_hmac.c +index 2642728b..f89ff2f9 100644 +--- a/ext/openssl/ossl_hmac.c ++++ b/ext/openssl/ossl_hmac.c +@@ -238,7 +238,7 @@ ossl_hmac_reset(VALUE self) + EVP_PKEY *pkey; + + GetHMAC(self, ctx); +- pkey = EVP_PKEY_CTX_get0_pkey(EVP_MD_CTX_pkey_ctx(ctx)); ++ pkey = EVP_PKEY_CTX_get0_pkey(EVP_MD_CTX_get_pkey_ctx(ctx)); + if (EVP_DigestSignInit(ctx, NULL, EVP_MD_CTX_get0_md(ctx), NULL, pkey) != 1) + ossl_raise(eHMACError, "EVP_DigestSignInit"); + diff --git a/ruby-3.1.0-Support-OpenSSL-3.0.patch b/ruby-3.1.0-Support-OpenSSL-3.0.patch deleted file mode 100644 index e701ad0..0000000 --- a/ruby-3.1.0-Support-OpenSSL-3.0.patch +++ /dev/null @@ -1,1101 +0,0 @@ -From bc9cbef395fc8fc7f81c3911b92966abc693169a Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sun, 24 Oct 2021 17:50:18 +0900 -Subject: [PATCH 01/10] test/openssl/test_cipher: update test_ciphers - -Do not attempt to actually use all algorithms. Not all algorithms listed -in OpenSSL::Cipher.ciphers are always available; some may belong to the -legacy provider in OpenSSL 3.0. ---- - test/openssl/test_cipher.rb | 13 +++++-------- - 1 file changed, 5 insertions(+), 8 deletions(-) - -diff --git a/test/openssl/test_cipher.rb b/test/openssl/test_cipher.rb -index 178f5aba0e..395183b22d 100644 ---- a/test/openssl/test_cipher.rb -+++ b/test/openssl/test_cipher.rb -@@ -135,14 +135,11 @@ def test_ctr_if_exists - end - - def test_ciphers -- OpenSSL::Cipher.ciphers.each{|name| -- next if /netbsd/ =~ RUBY_PLATFORM && /idea|rc5/i =~ name -- begin -- assert_kind_of(OpenSSL::Cipher, OpenSSL::Cipher.new(name)) -- rescue OpenSSL::Cipher::CipherError => e -- raise unless /wrap/ =~ name and /wrap mode not allowed/ =~ e.message -- end -- } -+ ciphers = OpenSSL::Cipher.ciphers -+ assert_kind_of Array, ciphers -+ assert_include ciphers, "aes-128-cbc" -+ assert_include ciphers, "aes128" # alias of aes-128-cbc -+ assert_include ciphers, "aes-128-gcm" - end - - def test_AES --- -2.32.0 - - -From f73998da49d2cd273b38b542ddd49a4ceaf5bfa9 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Wed, 3 Nov 2021 23:31:29 +0900 -Subject: [PATCH 02/10] test/openssl/test_pkey_rsa: test concatenated PEM - parsing - -PEM-encoded private keys are sometimes stored together with irrelevant -PEM blocks, such as the corresponding X.509 certificate. - -PEM_read_bio_*() family automatically skips unknown PEM blocks, but on -OpenSSL 3.0 we will be using the new OSSL_DECODER API instead, due to -some behavior changes around the password callback. - -Let's add a test case so that we won't break the current behavior. ---- - test/openssl/test_pkey_rsa.rb | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index 4548bdb2cf..327449ae03 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -306,6 +306,12 @@ def test_RSAPrivateKey - - assert_equal asn1.to_der, rsa1024.to_der - assert_equal pem, rsa1024.export -+ -+ # Unknown PEM prepended -+ cert = issue_cert(OpenSSL::X509::Name.new([["CN", "nobody"]]), rsa1024, 1, [], nil, nil) -+ str = cert.to_text + cert.to_pem + rsa1024.to_pem -+ key = OpenSSL::PKey::RSA.new(str) -+ assert_same_rsa rsa1024, key - end - - def test_RSAPrivateKey_encrypted --- -2.32.0 - - -From eb44c4c0eff7a63f9b0bc5d7a7a0df014f1c1b62 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sat, 20 Mar 2021 23:16:16 +0900 -Subject: [PATCH 03/10] pkey: use OSSL_DECODER to load encrypted PEM on OpenSSL - 3.0 - -The routines to load pkeys (PEM_read_bio_* and d2i_* functions) have -been rewritten around the newly introduced OSSL_DECODER API in OpenSSL -3.0. They now first try to decrypt and parse a PEM block, and then check -the kind. Since we try to parse a given string using each of them in -turn, this means the password callback may now be called more than once. - -Let's use the OSSL_DECODER API directly on OpenSSL 3.0 to avoid this -from happening. ---- - ext/openssl/ossl_pkey.c | 40 ++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 40 insertions(+) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index ba909c7632..4eab598942 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -78,6 +78,45 @@ ossl_pkey_new(EVP_PKEY *pkey) - return obj; - } - -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+# include -+ -+EVP_PKEY * -+ossl_pkey_read_generic(BIO *bio, VALUE pass) -+{ -+ void *ppass = (void *)pass; -+ OSSL_DECODER_CTX *dctx; -+ EVP_PKEY *pkey = NULL; -+ int pos = 0, pos2; -+ -+ dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, NULL, 0, NULL, NULL); -+ if (!dctx) -+ goto out; -+ if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb, ppass) != 1) -+ goto out; -+ -+ /* First check DER */ -+ if (OSSL_DECODER_from_bio(dctx, bio) == 1) -+ goto out; -+ -+ /* Then check PEM; multiple OSSL_DECODER_from_bio() calls may be needed */ -+ OSSL_BIO_reset(bio); -+ if (OSSL_DECODER_CTX_set_input_type(dctx, "PEM") != 1) -+ goto out; -+ while (OSSL_DECODER_from_bio(dctx, bio) != 1) { -+ if (BIO_eof(bio)) -+ goto out; -+ pos2 = BIO_tell(bio); -+ if (pos2 < 0 || pos2 <= pos) -+ goto out; -+ pos = pos2; -+ } -+ -+ out: -+ OSSL_DECODER_CTX_free(dctx); -+ return pkey; -+} -+#else - EVP_PKEY * - ossl_pkey_read_generic(BIO *bio, VALUE pass) - { -@@ -106,6 +145,7 @@ ossl_pkey_read_generic(BIO *bio, VALUE pass) - out: - return pkey; - } -+#endif - - /* - * call-seq: --- -2.32.0 - - -From 588165c3235a23f0df58c8ec50ad6f46a05580f1 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sat, 20 Mar 2021 23:16:41 +0900 -Subject: [PATCH 04/10] pkey: assume a pkey always has public key components on - OpenSSL 3.0 - -Do not check the key components in this way because they are not -necessarily accessible in this way. ---- - ext/openssl/ossl_pkey.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 4eab598942..a805b4dc99 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -428,9 +428,19 @@ ossl_pkey_s_generate_key(int argc, VALUE *argv, VALUE self) - return pkey_generate(argc, argv, self, 0); - } - -+/* -+ * TODO: There is no convenient way to check the presence of public key -+ * components on OpenSSL 3.0. But since keys are immutable on 3.0, pkeys without -+ * these should only be created by OpenSSL::PKey.generate_parameters or by -+ * parsing DER-/PEM-encoded string. We would need another flag for that. -+ */ - void - ossl_pkey_check_public_key(const EVP_PKEY *pkey) - { -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ if (EVP_PKEY_missing_parameters(pkey)) -+ ossl_raise(ePKeyError, "parameters missing"); -+#else - void *ptr; - const BIGNUM *n, *e, *pubkey; - -@@ -466,6 +476,7 @@ ossl_pkey_check_public_key(const EVP_PKEY *pkey) - return; - } - ossl_raise(ePKeyError, "public key missing"); -+#endif - } - - EVP_PKEY * --- -2.32.0 - - -From 4c362a1fad72fd570985e4f401ba534456252cb3 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 12 Apr 2021 10:43:46 +0900 -Subject: [PATCH 05/10] pkey: use EVP_PKEY_CTX_new_from_name() on OpenSSL 3.0 - -Replace EVP_PKEY_CTX_new_id() with the new EVP_PKEY_CTX_new_from_name() -which takes the algorithm name as a string rather than a NID. ---- - ext/openssl/ossl_pkey.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index a805b4dc99..73a54eb2fb 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -315,6 +315,11 @@ pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) - ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); - } - else { -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ ctx = EVP_PKEY_CTX_new_from_name(NULL, StringValueCStr(alg), NULL); -+ if (!ctx) -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_from_name"); -+#else - const EVP_PKEY_ASN1_METHOD *ameth; - ENGINE *tmpeng; - int pkey_id; -@@ -333,6 +338,7 @@ pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) - ctx = EVP_PKEY_CTX_new_id(pkey_id, NULL/* engine */); - if (!ctx) - ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_id"); -+#endif - } - - if (genparam && EVP_PKEY_paramgen_init(ctx) <= 0) { --- -2.32.0 - - -From 013c8552b845a8607f9a0639a07e1515fe067cd3 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 12 Apr 2021 13:55:10 +0900 -Subject: [PATCH 06/10] pkey: do not check NULL argument in ossl_pkey_new() - -Since the function takes the ownership, the caller is supposed to know -that the lifetime of the object - that is, it is never NULL. In fact, -it is properly checked by the caller in all code paths. ---- - ext/openssl/ossl_pkey.c | 6 +----- - ext/openssl/ossl_pkey.h | 1 + - 2 files changed, 2 insertions(+), 5 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 73a54eb2fb..5320d70a48 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -38,12 +38,8 @@ static VALUE - pkey_new0(EVP_PKEY *pkey) - { - VALUE klass, obj; -- int type; - -- if (!pkey || (type = EVP_PKEY_base_id(pkey)) == EVP_PKEY_NONE) -- ossl_raise(rb_eRuntimeError, "pkey is empty"); -- -- switch (type) { -+ switch (EVP_PKEY_base_id(pkey)) { - #if !defined(OPENSSL_NO_RSA) - case EVP_PKEY_RSA: klass = cRSA; break; - #endif -diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h -index 629c16ae1f..d57e9c0f15 100644 ---- a/ext/openssl/ossl_pkey.h -+++ b/ext/openssl/ossl_pkey.h -@@ -35,6 +35,7 @@ extern const rb_data_type_t ossl_evp_pkey_type; - } \ - } while (0) - -+/* Takes ownership of the EVP_PKEY */ - VALUE ossl_pkey_new(EVP_PKEY *); - void ossl_pkey_check_public_key(const EVP_PKEY *); - EVP_PKEY *ossl_pkey_read_generic(BIO *, VALUE); --- -2.32.0 - - -From 2a9f958d71922303f223d4dcc15049d7dfa962a9 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 12 Apr 2021 18:32:40 +0900 -Subject: [PATCH 07/10] pkey: lazily initialize EVP_PKEY - -Allocate an EVP_PKEY when the content is ready: when #initialize -or #initialize_copy is called, rather than when OpenSSL::PKey::PKey is -allocated. - -This simplifies #initialize's and the upcoming generic #initialize_copy -implementation. ---- - ext/openssl/ossl_pkey.c | 15 ++---- - ext/openssl/ossl_pkey.h | 19 +++----- - ext/openssl/ossl_pkey_dh.c | 69 ++++++++++++++++++++-------- - ext/openssl/ossl_pkey_dsa.c | 87 +++++++++++++++++++++-------------- - ext/openssl/ossl_pkey_ec.c | 92 ++++++++++++++++++++----------------- - ext/openssl/ossl_pkey_rsa.c | 91 +++++++++++++++++++++--------------- - 6 files changed, 217 insertions(+), 156 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 5320d70a48..9ddfaafe7c 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -54,8 +54,8 @@ pkey_new0(EVP_PKEY *pkey) - #endif - default: klass = cPKey; break; - } -- obj = NewPKey(klass); -- SetPKey(obj, pkey); -+ obj = rb_obj_alloc(klass); -+ RTYPEDDATA_DATA(obj) = pkey; - return obj; - } - -@@ -528,16 +528,7 @@ DupPKeyPtr(VALUE obj) - static VALUE - ossl_pkey_alloc(VALUE klass) - { -- EVP_PKEY *pkey; -- VALUE obj; -- -- obj = NewPKey(klass); -- if (!(pkey = EVP_PKEY_new())) { -- ossl_raise(ePKeyError, NULL); -- } -- SetPKey(obj, pkey); -- -- return obj; -+ return TypedData_Wrap_Struct(klass, &ossl_evp_pkey_type, NULL); - } - - /* -diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h -index d57e9c0f15..ac386717d7 100644 ---- a/ext/openssl/ossl_pkey.h -+++ b/ext/openssl/ossl_pkey.h -@@ -15,21 +15,14 @@ extern VALUE cPKey; - extern VALUE ePKeyError; - extern const rb_data_type_t ossl_evp_pkey_type; - --#define OSSL_PKEY_SET_PRIVATE(obj) rb_iv_set((obj), "private", Qtrue) --#define OSSL_PKEY_SET_PUBLIC(obj) rb_iv_set((obj), "private", Qfalse) --#define OSSL_PKEY_IS_PRIVATE(obj) (rb_iv_get((obj), "private") == Qtrue) -+/* For ENGINE */ -+#define OSSL_PKEY_SET_PRIVATE(obj) rb_ivar_set((obj), rb_intern("private"), Qtrue) -+#define OSSL_PKEY_IS_PRIVATE(obj) (rb_attr_get((obj), rb_intern("private")) == Qtrue) - --#define NewPKey(klass) \ -- TypedData_Wrap_Struct((klass), &ossl_evp_pkey_type, 0) --#define SetPKey(obj, pkey) do { \ -- if (!(pkey)) { \ -- rb_raise(rb_eRuntimeError, "PKEY wasn't initialized!"); \ -- } \ -- RTYPEDDATA_DATA(obj) = (pkey); \ -- OSSL_PKEY_SET_PUBLIC(obj); \ --} while (0) -+#define GetPKey0(obj, pkey) \ -+ TypedData_Get_Struct((obj), EVP_PKEY, &ossl_evp_pkey_type, (pkey)) - #define GetPKey(obj, pkey) do {\ -- TypedData_Get_Struct((obj), EVP_PKEY, &ossl_evp_pkey_type, (pkey)); \ -+ GetPKey0((obj), (pkey)); \ - if (!(pkey)) { \ - rb_raise(rb_eRuntimeError, "PKEY wasn't initialized!");\ - } \ -diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c -index ca782bbe59..7d8e0fa502 100644 ---- a/ext/openssl/ossl_pkey_dh.c -+++ b/ext/openssl/ossl_pkey_dh.c -@@ -76,7 +76,10 @@ ossl_dh_initialize(int argc, VALUE *argv, VALUE self) - BIO *in; - VALUE arg; - -- GetPKey(self, pkey); -+ GetPKey0(self, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); -+ - /* The DH.new(size, generator) form is handled by lib/openssl/pkey.rb */ - if (rb_scan_args(argc, argv, "01", &arg) == 0) { - dh = DH_new(); -@@ -84,22 +87,44 @@ ossl_dh_initialize(int argc, VALUE *argv, VALUE self) - ossl_raise(eDHError, "DH_new"); - } - else { -- arg = ossl_to_der_if_possible(arg); -- in = ossl_obj2bio(&arg); -- dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); -- if (!dh){ -- OSSL_BIO_reset(in); -- dh = d2i_DHparams_bio(in, NULL); -- } -- BIO_free(in); -- if (!dh) { -- ossl_raise(eDHError, NULL); -- } -+ int type; -+ -+ arg = ossl_to_der_if_possible(arg); -+ in = ossl_obj2bio(&arg); -+ -+ /* First try DER-encoded parameters */ -+ dh = d2i_DHparams_bio(in, NULL); -+ OSSL_BIO_reset(in); -+ if (dh) { -+ BIO_free(in); -+ goto legacy; -+ } -+ -+ /* Use the generic routine - parses PEM-encoded parameters */ -+ pkey = ossl_pkey_read_generic(in, Qnil); -+ BIO_free(in); -+ if (!pkey) -+ ossl_raise(eDHError, "could not parse pkey"); -+ -+ type = EVP_PKEY_base_id(pkey); -+ if (type != EVP_PKEY_DH) { -+ EVP_PKEY_free(pkey); -+ rb_raise(eDHError, "incorrect pkey type: %s", OBJ_nid2sn(type)); -+ } -+ RTYPEDDATA_DATA(self) = pkey; -+ return self; - } -- if (!EVP_PKEY_assign_DH(pkey, dh)) { -- DH_free(dh); -- ossl_raise(eDHError, NULL); -+ -+ legacy: -+ if (dh) { -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_DH(pkey, dh) != 1) { -+ EVP_PKEY_free(pkey); -+ DH_free(dh); -+ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); -+ } - } -+ RTYPEDDATA_DATA(self) = pkey; - return self; - } - -@@ -110,15 +135,14 @@ ossl_dh_initialize_copy(VALUE self, VALUE other) - DH *dh, *dh_other; - const BIGNUM *pub, *priv; - -- GetPKey(self, pkey); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) -- ossl_raise(eDHError, "DH already initialized"); -+ GetPKey0(self, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - GetDH(other, dh_other); - - dh = DHparams_dup(dh_other); - if (!dh) - ossl_raise(eDHError, "DHparams_dup"); -- EVP_PKEY_assign_DH(pkey, dh); - - DH_get0_key(dh_other, &pub, &priv); - if (pub) { -@@ -133,6 +157,13 @@ ossl_dh_initialize_copy(VALUE self, VALUE other) - DH_set0_key(dh, pub2, priv2); - } - -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_DH(pkey, dh) != 1) { -+ EVP_PKEY_free(pkey); -+ DH_free(dh); -+ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); -+ } -+ RTYPEDDATA_DATA(self) = pkey; - return self; - } - -diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c -index 7af00eebec..1bba6c54b7 100644 ---- a/ext/openssl/ossl_pkey_dsa.c -+++ b/ext/openssl/ossl_pkey_dsa.c -@@ -83,12 +83,16 @@ VALUE eDSAError; - static VALUE - ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) - { -- EVP_PKEY *pkey, *tmp; -- DSA *dsa = NULL; -+ EVP_PKEY *pkey; -+ DSA *dsa; - BIO *in; - VALUE arg, pass; -+ int type; -+ -+ GetPKey0(self, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - -- GetPKey(self, pkey); - /* The DSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ - rb_scan_args(argc, argv, "02", &arg, &pass); - if (argc == 0) { -@@ -97,36 +101,41 @@ ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) - ossl_raise(eDSAError, "DSA_new"); - } - else { -- pass = ossl_pem_passwd_value(pass); -- arg = ossl_to_der_if_possible(arg); -- in = ossl_obj2bio(&arg); -- -- tmp = ossl_pkey_read_generic(in, pass); -- if (tmp) { -- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_DSA) -- rb_raise(eDSAError, "incorrect pkey type: %s", -- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); -- dsa = EVP_PKEY_get1_DSA(tmp); -- EVP_PKEY_free(tmp); -+ pass = ossl_pem_passwd_value(pass); -+ arg = ossl_to_der_if_possible(arg); -+ in = ossl_obj2bio(&arg); -+ -+ dsa = (DSA *)PEM_ASN1_read_bio((d2i_of_void *)d2i_DSAPublicKey, -+ PEM_STRING_DSA_PUBLIC, -+ in, NULL, NULL, NULL); -+ OSSL_BIO_reset(in); -+ if (dsa) -+ goto legacy; -+ -+ pkey = ossl_pkey_read_generic(in, pass); -+ BIO_free(in); -+ if (!pkey) -+ ossl_raise(eDSAError, "Neither PUB key nor PRIV key"); -+ -+ type = EVP_PKEY_base_id(pkey); -+ if (type != EVP_PKEY_DSA) { -+ EVP_PKEY_free(pkey); -+ rb_raise(eDSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); - } -- if (!dsa) { -- OSSL_BIO_reset(in); --#define PEM_read_bio_DSAPublicKey(bp,x,cb,u) (DSA *)PEM_ASN1_read_bio( \ -- (d2i_of_void *)d2i_DSAPublicKey, PEM_STRING_DSA_PUBLIC, (bp), (void **)(x), (cb), (u)) -- dsa = PEM_read_bio_DSAPublicKey(in, NULL, NULL, NULL); --#undef PEM_read_bio_DSAPublicKey -- } -- BIO_free(in); -- if (!dsa) { -- ossl_clear_error(); -- ossl_raise(eDSAError, "Neither PUB key nor PRIV key"); -- } -- } -- if (!EVP_PKEY_assign_DSA(pkey, dsa)) { -- DSA_free(dsa); -- ossl_raise(eDSAError, NULL); -+ RTYPEDDATA_DATA(self) = pkey; -+ return self; - } - -+ legacy: -+ if (dsa) { -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_DSA(pkey, dsa) != 1) { -+ EVP_PKEY_free(pkey); -+ DSA_free(dsa); -+ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); -+ } -+ } -+ RTYPEDDATA_DATA(self) = pkey; - return self; - } - -@@ -136,16 +145,24 @@ ossl_dsa_initialize_copy(VALUE self, VALUE other) - EVP_PKEY *pkey; - DSA *dsa, *dsa_new; - -- GetPKey(self, pkey); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) -- ossl_raise(eDSAError, "DSA already initialized"); -+ GetPKey0(self, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - GetDSA(other, dsa); - -- dsa_new = ASN1_dup((i2d_of_void *)i2d_DSAPrivateKey, (d2i_of_void *)d2i_DSAPrivateKey, (char *)dsa); -+ dsa_new = (DSA *)ASN1_dup((i2d_of_void *)i2d_DSAPrivateKey, -+ (d2i_of_void *)d2i_DSAPrivateKey, -+ (char *)dsa); - if (!dsa_new) - ossl_raise(eDSAError, "ASN1_dup"); - -- EVP_PKEY_assign_DSA(pkey, dsa_new); -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_DSA(pkey, dsa_new) != 1) { -+ EVP_PKEY_free(pkey); -+ DSA_free(dsa_new); -+ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); -+ } -+ RTYPEDDATA_DATA(self) = pkey; - - return self; - } -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index f52e67079d..bec9937bc6 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -114,13 +114,16 @@ ossl_ec_key_s_generate(VALUE klass, VALUE arg) - VALUE obj; - - obj = rb_obj_alloc(klass); -- GetPKey(obj, pkey); - - ec = ec_key_new_from_group(arg); -- if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec) != 1) { -+ EVP_PKEY_free(pkey); - EC_KEY_free(ec); - ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); - } -+ RTYPEDDATA_DATA(obj) = pkey; -+ - if (!EC_KEY_generate_key(ec)) - ossl_raise(eECError, "EC_KEY_generate_key"); - -@@ -141,51 +144,55 @@ ossl_ec_key_s_generate(VALUE klass, VALUE arg) - static VALUE ossl_ec_key_initialize(int argc, VALUE *argv, VALUE self) - { - EVP_PKEY *pkey; -- EC_KEY *ec = NULL; -+ EC_KEY *ec; -+ BIO *in; - VALUE arg, pass; -+ int type; - -- GetPKey(self, pkey); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) -- ossl_raise(eECError, "EC_KEY already initialized"); -+ GetPKey0(self, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - - rb_scan_args(argc, argv, "02", &arg, &pass); -- - if (NIL_P(arg)) { - if (!(ec = EC_KEY_new())) -- ossl_raise(eECError, NULL); -- } else if (rb_obj_is_kind_of(arg, cEC)) { -- EC_KEY *other_ec = NULL; -- -- GetEC(arg, other_ec); -- if (!(ec = EC_KEY_dup(other_ec))) -- ossl_raise(eECError, NULL); -- } else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { -- ec = ec_key_new_from_group(arg); -- } else { -- BIO *in = ossl_obj2bio(&arg); -- EVP_PKEY *tmp; -+ ossl_raise(eECError, "EC_KEY_new"); -+ } -+ else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { -+ ec = ec_key_new_from_group(arg); -+ } -+ else { - pass = ossl_pem_passwd_value(pass); -- tmp = ossl_pkey_read_generic(in, pass); -- if (tmp) { -- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_EC) -- rb_raise(eECError, "incorrect pkey type: %s", -- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); -- ec = EVP_PKEY_get1_EC_KEY(tmp); -- EVP_PKEY_free(tmp); -+ arg = ossl_to_der_if_possible(arg); -+ in = ossl_obj2bio(&arg); -+ -+ pkey = ossl_pkey_read_generic(in, pass); -+ BIO_free(in); -+ if (!pkey) { -+ ossl_clear_error(); -+ ec = ec_key_new_from_group(arg); -+ goto legacy; - } -- BIO_free(in); - -- if (!ec) { -- ossl_clear_error(); -- ec = ec_key_new_from_group(arg); -- } -+ type = EVP_PKEY_base_id(pkey); -+ if (type != EVP_PKEY_EC) { -+ EVP_PKEY_free(pkey); -+ rb_raise(eDSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); -+ } -+ RTYPEDDATA_DATA(self) = pkey; -+ return self; - } - -- if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { -- EC_KEY_free(ec); -- ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); -+ legacy: -+ if (ec) { -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec) != 1) { -+ EVP_PKEY_free(pkey); -+ EC_KEY_free(ec); -+ ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); -+ } - } -- -+ RTYPEDDATA_DATA(self) = pkey; - return self; - } - -@@ -195,18 +202,21 @@ ossl_ec_key_initialize_copy(VALUE self, VALUE other) - EVP_PKEY *pkey; - EC_KEY *ec, *ec_new; - -- GetPKey(self, pkey); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) -- ossl_raise(eECError, "EC already initialized"); -+ GetPKey0(self, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - GetEC(other, ec); - - ec_new = EC_KEY_dup(ec); - if (!ec_new) - ossl_raise(eECError, "EC_KEY_dup"); -- if (!EVP_PKEY_assign_EC_KEY(pkey, ec_new)) { -- EC_KEY_free(ec_new); -- ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); -+ -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec_new) != 1) { -+ EC_KEY_free(ec_new); -+ ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); - } -+ RTYPEDDATA_DATA(self) = pkey; - - return self; - } -diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c -index 8ebd3ec559..446150c8af 100644 ---- a/ext/openssl/ossl_pkey_rsa.c -+++ b/ext/openssl/ossl_pkey_rsa.c -@@ -76,12 +76,16 @@ VALUE eRSAError; - static VALUE - ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) - { -- EVP_PKEY *pkey, *tmp; -- RSA *rsa = NULL; -+ EVP_PKEY *pkey; -+ RSA *rsa; - BIO *in; - VALUE arg, pass; -+ int type; -+ -+ GetPKey0(self, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - -- GetPKey(self, pkey); - /* The RSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ - rb_scan_args(argc, argv, "02", &arg, &pass); - if (argc == 0) { -@@ -90,37 +94,45 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) - ossl_raise(eRSAError, "RSA_new"); - } - else { -- pass = ossl_pem_passwd_value(pass); -- arg = ossl_to_der_if_possible(arg); -- in = ossl_obj2bio(&arg); -- -- tmp = ossl_pkey_read_generic(in, pass); -- if (tmp) { -- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_RSA) -- rb_raise(eRSAError, "incorrect pkey type: %s", -- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); -- rsa = EVP_PKEY_get1_RSA(tmp); -- EVP_PKEY_free(tmp); -+ pass = ossl_pem_passwd_value(pass); -+ arg = ossl_to_der_if_possible(arg); -+ in = ossl_obj2bio(&arg); -+ -+ /* First try RSAPublicKey format */ -+ rsa = d2i_RSAPublicKey_bio(in, NULL); -+ OSSL_BIO_reset(in); -+ if (rsa) -+ goto legacy; -+ rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); -+ OSSL_BIO_reset(in); -+ if (rsa) -+ goto legacy; -+ -+ /* Use the generic routine */ -+ pkey = ossl_pkey_read_generic(in, pass); -+ BIO_free(in); -+ if (!pkey) -+ ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); -+ -+ type = EVP_PKEY_base_id(pkey); -+ if (type != EVP_PKEY_RSA) { -+ EVP_PKEY_free(pkey); -+ rb_raise(eRSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); - } -- if (!rsa) { -- OSSL_BIO_reset(in); -- rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); -- } -- if (!rsa) { -- OSSL_BIO_reset(in); -- rsa = d2i_RSAPublicKey_bio(in, NULL); -- } -- BIO_free(in); -- if (!rsa) { -- ossl_clear_error(); -- ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); -- } -- } -- if (!EVP_PKEY_assign_RSA(pkey, rsa)) { -- RSA_free(rsa); -- ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); -+ RTYPEDDATA_DATA(self) = pkey; -+ return self; - } - -+ legacy: -+ if (rsa) { -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_RSA(pkey, rsa) != 1) { -+ EVP_PKEY_free(pkey); -+ RSA_free(rsa); -+ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); -+ } -+ } -+ RTYPEDDATA_DATA(self) = pkey; - return self; - } - -@@ -130,16 +142,23 @@ ossl_rsa_initialize_copy(VALUE self, VALUE other) - EVP_PKEY *pkey; - RSA *rsa, *rsa_new; - -- GetPKey(self, pkey); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) -- ossl_raise(eRSAError, "RSA already initialized"); -+ GetPKey0(self, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - GetRSA(other, rsa); - -- rsa_new = ASN1_dup((i2d_of_void *)i2d_RSAPrivateKey, (d2i_of_void *)d2i_RSAPrivateKey, (char *)rsa); -+ rsa_new = (RSA *)ASN1_dup((i2d_of_void *)i2d_RSAPrivateKey, -+ (d2i_of_void *)d2i_RSAPrivateKey, -+ (char *)rsa); - if (!rsa_new) - ossl_raise(eRSAError, "ASN1_dup"); - -- EVP_PKEY_assign_RSA(pkey, rsa_new); -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_RSA(pkey, rsa_new) != 1) { -+ RSA_free(rsa_new); -+ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); -+ } -+ RTYPEDDATA_DATA(self) = pkey; - - return self; - } --- -2.32.0 - - -From 0ea28ac73e094bbb379b0915a67d44582e5e20da Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Thu, 22 Apr 2021 18:29:30 +0900 -Subject: [PATCH 08/10] pkey: deprecate OpenSSL::PKey::{RSA,DSA,DH}#set_* - methods - -The underlying OpenSSL functions, {RSA,DSA,DH}_set_*() are removed in -OpenSSL 3.0. - -Since the plan is to make EVP_PKEY immutable, there will be no direct -replacement for them and we have no choice here. - -It is suggested for users to use OpenSSL::PKey.from_data instead, -which construct a pkey from all necessary parameters at once. ---- - ext/openssl/ossl_pkey.h | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h -index ac386717d7..f6ad961937 100644 ---- a/ext/openssl/ossl_pkey.h -+++ b/ext/openssl/ossl_pkey.h -@@ -130,6 +130,8 @@ static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2, VALU - BIGNUM *bn2 = NULL, *orig_bn2 = NIL_P(v2) ? NULL : GetBNPtr(v2);\ - BIGNUM *bn3 = NULL, *orig_bn3 = NIL_P(v3) ? NULL : GetBNPtr(v3);\ - \ -+ rb_warning(#_keytype"#set_"#_group"= is incompatible with " \ -+ "OpenSSL 3.0; check OpenSSL::PKey.from_data"); \ - Get##_type(self, obj); \ - if ((orig_bn1 && !(bn1 = BN_dup(orig_bn1))) || \ - (orig_bn2 && !(bn2 = BN_dup(orig_bn2))) || \ -@@ -160,6 +162,8 @@ static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2) \ - BIGNUM *bn1 = NULL, *orig_bn1 = NIL_P(v1) ? NULL : GetBNPtr(v1);\ - BIGNUM *bn2 = NULL, *orig_bn2 = NIL_P(v2) ? NULL : GetBNPtr(v2);\ - \ -+ rb_warning(#_keytype"#set_"#_group"= is incompatible with " \ -+ "OpenSSL 3.0; check OpenSSL::PKey.from_data"); \ - Get##_type(self, obj); \ - if ((orig_bn1 && !(bn1 = BN_dup(orig_bn1))) || \ - (orig_bn2 && !(bn2 = BN_dup(orig_bn2)))) { \ --- -2.32.0 - - -From 6fda9b5c292fbaae2eb7d6c8e15f1ff53ae7e50c Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Tue, 21 Sep 2021 18:29:59 +0900 -Subject: [PATCH 09/10] test/openssl/test_pkey_ec: update test_check_key for - OpenSSL 3.0 - -OpenSSL::PKey::EC#generate_key! or #private_key= will not work on -OpenSSL 3.0. ---- - test/openssl/test_pkey_ec.rb | 32 +++++++++++++++++++------------- - 1 file changed, 19 insertions(+), 13 deletions(-) - -diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb -index d62f1b5eb8..730ad28062 100644 ---- a/test/openssl/test_pkey_ec.rb -+++ b/test/openssl/test_pkey_ec.rb -@@ -60,22 +60,28 @@ def test_marshal - end - - def test_check_key -- key = OpenSSL::PKey::EC.new("prime256v1").generate_key! -- assert_equal(true, key.check_key) -- assert_equal(true, key.private?) -- assert_equal(true, key.public?) -- key2 = OpenSSL::PKey::EC.new(key.group) -- assert_equal(false, key2.private?) -- assert_equal(false, key2.public?) -- key2.public_key = key.public_key -- assert_equal(false, key2.private?) -- assert_equal(true, key2.public?) -- key2.private_key = key.private_key -+ key0 = Fixtures.pkey("p256") -+ assert_equal(true, key0.check_key) -+ assert_equal(true, key0.private?) -+ assert_equal(true, key0.public?) -+ -+ key1 = OpenSSL::PKey.read(key0.public_to_der) -+ assert_equal(true, key1.check_key) -+ assert_equal(false, key1.private?) -+ assert_equal(true, key1.public?) -+ -+ key2 = OpenSSL::PKey.read(key0.private_to_der) - assert_equal(true, key2.private?) - assert_equal(true, key2.public?) - assert_equal(true, key2.check_key) -- key2.private_key += 1 -- assert_raise(OpenSSL::PKey::ECError) { key2.check_key } -+ -+ # EC#private_key= is deprecated in 3.0 and won't work on OpenSSL 3.0 -+ if !openssl?(3, 0, 0) -+ EnvUtil.suppress_warning do -+ key2.private_key += 1 -+ assert_raise(OpenSSL::PKey::ECError) { key2.check_key } -+ end -+ end - end - - def test_sign_verify --- -2.32.0 - - -From b63c0cb012981613463bdf4d80dcaedfa494a0d0 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 22 Oct 2021 16:24:07 +0900 -Subject: [PATCH 10/10] pkey/dh: deprecate OpenSSL::PKey::DH#generate_key! - -OpenSSL 3.0.0 has made keys immutable, so PKey::DH#generate_key! can't -work on it anymore. - -It's advised to use OpenSSL::PKey.generate_key instead. ---- - ext/openssl/lib/openssl/pkey.rb | 26 ++++++++++++++++++++++---- - test/openssl/test_pkey_dh.rb | 33 ++++++++++++++++++--------------- - 2 files changed, 40 insertions(+), 19 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index f6bf5892b0..cad376855d 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -61,14 +61,32 @@ def compute_key(pub_bn) - # called first in order to generate the per-session keys before performing - # the actual key exchange. - # -+ # Deprecated in version 3.0. This method is incompatible with -+ # OpenSSL 3.0.0 or later. -+ # - # See also OpenSSL::PKey.generate_key. - # - # Example: -- # dh = OpenSSL::PKey::DH.new(2048) -- # public_key = dh.public_key #contains no private/public key yet -- # public_key.generate_key! -- # puts public_key.private? # => true -+ # # DEPRECATED USAGE: This will not work on OpenSSL 3.0 or later -+ # dh0 = OpenSSL::PKey::DH.new(2048) -+ # dh = dh0.public_key # #public_key only copies the DH parameters (contrary to the name) -+ # dh.generate_key! -+ # puts dh.private? # => true -+ # puts dh0.pub_key == dh.pub_key #=> false -+ # -+ # # With OpenSSL::PKey.generate_key -+ # dh0 = OpenSSL::PKey::DH.new(2048) -+ # dh = OpenSSL::PKey.generate_key(dh0) -+ # puts dh0.pub_key == dh.pub_key #=> false - def generate_key! -+ msg = "OpenSSL::PKey::DH is immutable on OpenSSL 3.0; " \ -+ "use OpenSSL::PKey.generate_key instead" -+ if OpenSSL::OPENSSL_VERSION_NUMBER >= 0x30000000 -+ raise DHError, msg -+ else -+ warn "#{caller(1, 1)[0]}: warning: #{msg}" -+ end -+ - unless priv_key - tmp = OpenSSL::PKey.generate_key(self) - set_key(tmp.pub_key, tmp.priv_key) -diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb -index 757704caf6..248f4ebb42 100644 ---- a/test/openssl/test_pkey_dh.rb -+++ b/test/openssl/test_pkey_dh.rb -@@ -26,14 +26,19 @@ def test_new_break - end - - def test_derive_key -- dh1 = Fixtures.pkey("dh1024").generate_key! -- dh2 = Fixtures.pkey("dh1024").generate_key! -+ params = Fixtures.pkey("dh1024") -+ dh1 = OpenSSL::PKey.generate_key(params) -+ dh2 = OpenSSL::PKey.generate_key(params) - dh1_pub = OpenSSL::PKey.read(dh1.public_to_der) - dh2_pub = OpenSSL::PKey.read(dh2.public_to_der) -+ - z = dh1.g.mod_exp(dh1.priv_key, dh1.p).mod_exp(dh2.priv_key, dh1.p).to_s(2) - assert_equal z, dh1.derive(dh2_pub) - assert_equal z, dh2.derive(dh1_pub) - -+ assert_raise(OpenSSL::PKey::PKeyError) { params.derive(dh1_pub) } -+ assert_raise(OpenSSL::PKey::PKeyError) { dh1_pub.derive(params) } -+ - assert_equal z, dh1.compute_key(dh2.pub_key) - assert_equal z, dh2.compute_key(dh1.pub_key) - end -@@ -74,19 +79,17 @@ def test_public_key - end - - def test_generate_key -- dh = Fixtures.pkey("dh1024").public_key # creates a copy -- assert_no_key(dh) -- dh.generate_key! -- assert_key(dh) -- end -- -- def test_key_exchange -- dh = Fixtures.pkey("dh1024") -- dh2 = dh.public_key -- dh.generate_key! -- dh2.generate_key! -- assert_equal(dh.compute_key(dh2.pub_key), dh2.compute_key(dh.pub_key)) -- end -+ EnvUtil.suppress_warning { # Deprecated in v3.0.0; incompatible with OpenSSL 3.0 -+ dh = Fixtures.pkey("dh1024").public_key # creates a copy with params only -+ assert_no_key(dh) -+ dh.generate_key! -+ assert_key(dh) -+ -+ dh2 = dh.public_key -+ dh2.generate_key! -+ assert_equal(dh.compute_key(dh2.pub_key), dh2.compute_key(dh.pub_key)) -+ } -+ end if !openssl?(3, 0, 0) - - def test_params_ok? - dh0 = Fixtures.pkey("dh1024") --- -2.32.0 - diff --git a/ruby-3.1.0-Use-EVP-API-in-more-places.patch b/ruby-3.1.0-Use-EVP-API-in-more-places.patch index 4938949..f9c4580 100644 --- a/ruby-3.1.0-Use-EVP-API-in-more-places.patch +++ b/ruby-3.1.0-Use-EVP-API-in-more-places.patch @@ -698,7 +698,7 @@ diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb index b3c6647faf..17d93443fc 100644 --- a/ext/openssl/extconf.rb +++ b/ext/openssl/extconf.rb -@@ -173,6 +173,9 @@ def find_openssl_library +@@ -172,6 +172,9 @@ def find_openssl_library have_func("EVP_PBE_scrypt") have_func("SSL_CTX_set_post_handshake_auth") diff --git a/ruby-3.1.0-Use-OSSL_DECODER-to-load-encrypted-PEM-on-OpenSSL-3.0.patch b/ruby-3.1.0-Use-OSSL_DECODER-to-load-encrypted-PEM-on-OpenSSL-3.0.patch new file mode 100644 index 0000000..dfdd690 --- /dev/null +++ b/ruby-3.1.0-Use-OSSL_DECODER-to-load-encrypted-PEM-on-OpenSSL-3.0.patch @@ -0,0 +1,114 @@ +From 8c185e0ae5e42bf5f3d76a1a0898946671116fa3 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Wed, 3 Nov 2021 23:31:29 +0900 +Subject: [PATCH 1/2] pkey: test parsing concatenated PEM string + +PEM-encoded private keys are sometimes stored together with irrelevant +PEM blocks, such as the corresponding X.509 certificate. + +PEM_read_bio_*() family automatically skips unknown PEM blocks, but on +OpenSSL 3.0 we will be using the new OSSL_DECODER API instead due to +some breaking changes around the password callback. + +Let's add a test case so that we won't break the current behavior. +--- + test/openssl/test_pkey_rsa.rb | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb +index dbe87ba4..7510658d 100644 +--- a/test/openssl/test_pkey_rsa.rb ++++ b/test/openssl/test_pkey_rsa.rb +@@ -306,6 +306,12 @@ def test_RSAPrivateKey + + assert_equal asn1.to_der, rsa1024.to_der + assert_equal pem, rsa1024.export ++ ++ # Unknown PEM prepended ++ cert = issue_cert(OpenSSL::X509::Name.new([["CN", "nobody"]]), rsa1024, 1, [], nil, nil) ++ str = cert.to_text + cert.to_pem + rsa1024.to_pem ++ key = OpenSSL::PKey::RSA.new(str) ++ assert_same_rsa rsa1024, key + end + + def test_RSAPrivateKey_encrypted + +From a84ea531bbd080c3f58fe8d3dc9ffb1af2251f35 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Sat, 20 Mar 2021 23:16:16 +0900 +Subject: [PATCH 2/2] pkey: use OSSL_DECODER to load encrypted PEM on OpenSSL + 3.0 + +OpenSSL 3.0 has rewritten routines to load pkeys (PEM_read_bio_* and +d2i_* functions) around the newly introduced OSSL_DECODER API. + +This comes with a slight behavior change. They now decrypt and parse +each encountered PEM block, then check the kind of the block. This used +to be the reverse: they checked the PEM header to see the kind, and then +decrypted the content. This means that the password callback may now be +called repeatedly. + +Let's use the OSSL_DECODER API directly on OpenSSL 3.0 so that the +return value from the password callback will be reused automatically. +--- + ext/openssl/ossl_pkey.c | 40 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 40 insertions(+) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index f9f5162e..b08168a5 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -78,6 +78,45 @@ ossl_pkey_new(EVP_PKEY *pkey) + return obj; + } + ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++# include ++ ++EVP_PKEY * ++ossl_pkey_read_generic(BIO *bio, VALUE pass) ++{ ++ void *ppass = (void *)pass; ++ OSSL_DECODER_CTX *dctx; ++ EVP_PKEY *pkey = NULL; ++ int pos = 0, pos2; ++ ++ dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, NULL, 0, NULL, NULL); ++ if (!dctx) ++ goto out; ++ if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb, ppass) != 1) ++ goto out; ++ ++ /* First check DER */ ++ if (OSSL_DECODER_from_bio(dctx, bio) == 1) ++ goto out; ++ ++ /* Then check PEM; multiple OSSL_DECODER_from_bio() calls may be needed */ ++ OSSL_BIO_reset(bio); ++ if (OSSL_DECODER_CTX_set_input_type(dctx, "PEM") != 1) ++ goto out; ++ while (OSSL_DECODER_from_bio(dctx, bio) != 1) { ++ if (BIO_eof(bio)) ++ goto out; ++ pos2 = BIO_tell(bio); ++ if (pos2 < 0 || pos2 <= pos) ++ goto out; ++ pos = pos2; ++ } ++ ++ out: ++ OSSL_DECODER_CTX_free(dctx); ++ return pkey; ++} ++#else + EVP_PKEY * + ossl_pkey_read_generic(BIO *bio, VALUE pass) + { +@@ -106,6 +145,7 @@ ossl_pkey_read_generic(BIO *bio, VALUE pass) + out: + return pkey; + } ++#endif + + /* + * call-seq: diff --git a/ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch b/ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch index acb706e..d02ce45 100644 --- a/ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch +++ b/ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch @@ -974,7 +974,7 @@ index 693e55cd97..b3c6647faf 100644 -have_func("BN_GENCB_get_arg") have_func("EVP_MD_CTX_new") have_func("EVP_MD_CTX_free") - have_func("HMAC_CTX_new") + have_func("EVP_MD_CTX_pkey_ctx") diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h index 7d218f86f5..e575415f49 100644 --- a/ext/openssl/openssl_missing.h diff --git a/ruby.spec b/ruby.spec index 08d33a8..a1273d1 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 158 +%global release 159 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -173,6 +173,9 @@ Patch21: ruby-3.1.0-Properly-exclude-test-cases.patch # https://bugzilla.redhat.com/show_bug.cgi?id=2027099 # https://github.com/rubygems/rubygems/pull/5154 Patch22: rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch +# Fix segfault in `TestArray#test_sample` on s390x. +# https://github.com/ruby/ruby/pull/5239 +Patch23: ruby-3.1.0-Fix-stack-buffer-overflow.patch # OpenSSL 3.0 compatibility patches @@ -193,47 +196,63 @@ Patch40: ruby-3.1.0-Refactor-PEM-DER-serialization-code.patch # Implement more 'generic' operations using the EVP API. # https://github.com/ruby/openssl/pull/329 Patch41: ruby-3.1.0-Add-more-support-for-generic-pkey-types.patch +# Migrate from the low-level HMAC API to the EVP API. +# https://github.com/ruby/openssl/pull/371 +Patch42: ruby-3.1.0-Migrate-from-the-low-level-HMAC-API-to-the-EVP-API.patch # Allow setting algorithm-specific options in #sign and #verify. # https://github.com/ruby/openssl/pull/374 -Patch42: ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch +Patch43: ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch # Use high level EVP interface to generate parameters and keys. # https://github.com/ruby/openssl/pull/397 -Patch43: ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch +Patch44: ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch # Use EVP API in more places. # https://github.com/ruby/openssl/pull/436 -Patch44: ruby-3.1.0-Use-EVP-API-in-more-places.patch +Patch45: ruby-3.1.0-Use-EVP-API-in-more-places.patch # Implement PKey#{encrypt,decrypt,sign_raw,verify_{raw,verify_recover}}. # https://github.com/ruby/openssl/pull/382 -Patch45: ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch +Patch46: ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch # Fix `OpenSSL::TestSSL#test_dup` test failure. # https://github.com/ruby/openssl/commit/7b66eaa2dbabb6570dbbbdfac24c4dcdcc6793d7 -Patch46: ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch +Patch47: ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch # Fix `OpenSSL::TestDigest#test_digest_constants` test case. # https://github.com/ruby/openssl/commit/a3e59f4c2e200c76ef1d93945ff8737a05715e17 -Patch47: ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch +Patch48: ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch # Fix `OpenSSL::TestSSL#test_connect_certificate_verify_failed_exception_message` # test case. # https://github.com/ruby/openssl/commit/b5a0a198505452c7457b192da2e5cd5dda04f23d -Patch48: ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch +Patch49: ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch # Fix `OpenSSL::TestPKCS12#test_{new_with_no_keys,new_with_one_key_and_one_cert}` # test failures. # https://github.com/ruby/openssl/commit/998406d18f2acf73090e9fd9d92a7b4227ac593b -Patch49: ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch +Patch50: ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch # Fix `OpenSSL::TestPKey#test_s_generate_key` test case. # https://github.com/ruby/openssl/commit/c732387ee5aaa8c5a9717e8b3ffebb3d7430e99a -Patch50: ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch +Patch51: ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch # Miscellaneous changes for OpenSSL 3.0 support. # https://github.com/ruby/openssl/pull/468 -Patch51: ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch -# Support OpenSSL 3.0. -# https://github.com/ruby/openssl/pull/399 -Patch52: ruby-3.1.0-Support-OpenSSL-3.0.patch +Patch52: ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch +# Use OSSL_DECODER to load encrypted PEM. +# https://github.com/ruby/openssl/pull/479 +Patch53: ruby-3.1.0-Use-OSSL_DECODER-to-load-encrypted-PEM-on-OpenSSL-3.0.patch +# Allocate EVP_PKEY on #initialize. +# https://github.com/ruby/openssl/pull/478 +Patch54: ruby-3.1.0-Allocate-EVP_PKEY-on-initialize.patch +# Disable `OpenSSL::TestPKeyRSA#test_no_private_exp` test case which is not +# compatible with OpenSSL 3.0. +# https://github.com/ruby/ruby/commit/47975ece4096cdab16b3f200f93ea2377dfb41ac +Patch55: ruby-3.1.0-Disable-test_no_private_exp-on-OpenSSL-3.0.patch +# Deprecate PKey::*#set_* and PKey::{DH,EC}#generate_key! +# https://github.com/ruby/openssl/pull/480 +Patch56: ruby-3.1.0-Deprecate-PKey-set_-and-PKey-DH-EC-generate_key.patch +# Fix `OpenSSL::PKey::PKeyError: pkeys are immutable on OpenSSL 3.0` errors. +# https://github.com/rubygems/rubygems/pull/5196 +Patch57: rubygems-3.3.1-Fix-compatibility-with-OpenSSL3.0.patch +# Miscellaneous changes for OpenSSL 3.0 support. +# https://github.com/ruby/openssl/pull/481 +Patch58: ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support-part-2.patch # Fix `TestPumaControlCli#test_control_ssl` testcase in Puma. # https://github.com/ruby/openssl/pull/399#issuecomment-966239736 -Patch53: ruby-3.1.0-SSL_read-EOF-handling.patch -# Fix segfault in `TestArray#test_sample` on s390x. -# https://github.com/ruby/ruby/pull/5239 -Patch54: ruby-3.1.0-Fix-stack-buffer-overflow.patch +Patch59: ruby-3.1.0-SSL_read-EOF-handling.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -685,6 +704,7 @@ rm -rf ext/fiddle/libffi* %patch20 -p1 %patch21 -p1 %patch22 -p1 +%patch23 -p1 %patch30 -p1 -R %patch31 -p1 %patch40 -p1 @@ -702,6 +722,11 @@ rm -rf ext/fiddle/libffi* %patch52 -p1 %patch53 -p1 %patch54 -p1 +%patch55 -p1 +%patch56 -p1 +%patch57 -p1 +%patch58 -p1 +%patch59 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -980,13 +1005,6 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} -# Some tests are failing upstream due to OpenSSL 3.x compatibility. -# https://github.com/ruby/openssl/pull/399/checks?check_run_id=3716152870 -DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestEC#test_check_key/" -DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestPKeyDH#test_derive_key/" -DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestPKeyDH#test_key_exchange/" -DISABLE_TESTS="$DISABLE_TESTS -n !/OpenSSL::TestCipher#test_ciphers/" - # Several test broken by libffi-3.4.2. There should be fix in libffi, once # other components are fixed. # https://bugzilla.redhat.com/show_bug.cgi?id=2040380 @@ -1469,6 +1487,9 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Tue Jan 25 2022 Vít Ondruch - 3.0.3-158 +- Update OpenSSL 3 compatibility patches. + * Thu Jan 20 2022 Vít Ondruch - 3.0.3-158 - Disable package notes to prevent rubygem- build breakage. diff --git a/rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch b/rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch index d61020d..d5a0673 100644 --- a/rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch +++ b/rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch @@ -92,10 +92,9 @@ even fully sure it was the right thing to do when I added that, and it was not the culprit of the end user issue that led to making that change. --- - .github/workflows/install-rubygems.yml | 5 ---- - lib/rubygems.rb | 32 +++++++++++++------------- - test/rubygems/test_rubygems.rb | 23 ++++++++++++++++++ - 3 files changed, 39 insertions(+), 21 deletions(-) + lib/rubygems.rb | 32 ++++++++++++++++---------------- + test/rubygems/test_rubygems.rb | 23 +++++++++++++++++++++++ + 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/lib/rubygems.rb b/lib/rubygems.rb index b8747409304..11474b6554c 100644 @@ -189,8 +188,8 @@ Otherwise first OS customizations load and activate that fiddle version, but then when we change to `Gem.default_dir`, that fiddle version is no longer there. --- - bundler/spec/commands/clean_spec.rb | 2 +- - bundler/spec/install/gems/standalone_spec.rb | 2 +- + spec/bundler/commands/clean_spec.rb | 2 +- + spec/bundler/install/gems/standalone_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/bundler/commands/clean_spec.rb b/spec/bundler/commands/clean_spec.rb diff --git a/rubygems-3.3.1-Fix-compatibility-with-OpenSSL3.0.patch b/rubygems-3.3.1-Fix-compatibility-with-OpenSSL3.0.patch new file mode 100644 index 0000000..b405b5f --- /dev/null +++ b/rubygems-3.3.1-Fix-compatibility-with-OpenSSL3.0.patch @@ -0,0 +1,105 @@ +From 558128594de16add5b453833fd5b043a24c1b7f5 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Wed, 22 Dec 2021 01:38:47 +0900 +Subject: [PATCH 1/3] Use OpenSSL::PKey::EC.generate to generate ECC key pairs + +When Ruby/OpenSSL is built against OpenSSL 3.0, OpenSSL::PKey::PKey +instances are immutable and OpenSSL::PKey::EC#generate_key cannot work +because it modifies the receiver. + +OpenSSL::PKey::EC.generate is available on Ruby 2.4 (Ruby/OpenSSL 2.0) +or later. +--- + lib/rubygems/security.rb | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb +index 22759972070..2aa07381d69 100644 +--- a/lib/rubygems/security.rb ++++ b/lib/rubygems/security.rb +@@ -490,9 +490,13 @@ def self.create_key(algorithm) + when 'rsa' + OpenSSL::PKey::RSA.new(RSA_DSA_KEY_LENGTH) + when 'ec' +- domain_key = OpenSSL::PKey::EC.new(EC_NAME) +- domain_key.generate_key +- domain_key ++ if RUBY_VERSION >= "2.4.0" ++ OpenSSL::PKey::EC.generate(EC_NAME) ++ else ++ domain_key = OpenSSL::PKey::EC.new(EC_NAME) ++ domain_key.generate_key ++ domain_key ++ end + else + raise Gem::Security::Exception, + "#{algorithm} algorithm not found. RSA, DSA, and EC algorithms are supported." + +From 60067d4f09b7fb9c23bed38e91acfde0293f29a0 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Wed, 22 Dec 2021 01:49:05 +0900 +Subject: [PATCH 2/3] Use OpenSSL::X509::Certificate#check_private_key + +The method is for the exact purpose: to check that an instance of +OpenSSL::PKey::PKey matches the public key in a certificate. +--- + lib/rubygems/security.rb | 2 +- + lib/rubygems/security/policy.rb | 4 +--- + 2 files changed, 2 insertions(+), 4 deletions(-) + +diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb +index 2aa07381d69..2906819bd34 100644 +--- a/lib/rubygems/security.rb ++++ b/lib/rubygems/security.rb +@@ -530,7 +530,7 @@ def self.re_sign(expired_certificate, private_key, age = ONE_YEAR, + raise Gem::Security::Exception, + "incorrect signing key for re-signing " + + "#{expired_certificate.subject}" unless +- expired_certificate.public_key.to_pem == get_public_key(private_key).to_pem ++ expired_certificate.check_private_key(private_key) + + unless expired_certificate.subject.to_s == + expired_certificate.issuer.to_s +diff --git a/lib/rubygems/security/policy.rb b/lib/rubygems/security/policy.rb +index 3c3cb647ee3..06eae073f4a 100644 +--- a/lib/rubygems/security/policy.rb ++++ b/lib/rubygems/security/policy.rb +@@ -115,11 +115,9 @@ def check_key(signer, key) + raise Gem::Security::Exception, 'missing key or signature' + end + +- public_key = Gem::Security.get_public_key(key) +- + raise Gem::Security::Exception, + "certificate #{signer.subject} does not match the signing key" unless +- signer.public_key.to_pem == public_key.to_pem ++ signer.check_private_key(key) + + true + end + +From 6819e3d0fadc10ce8d10919402eedb730cf0e43f Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Wed, 22 Dec 2021 01:54:10 +0900 +Subject: [PATCH 3/3] Fix Gem::Security.get_public_key on OpenSSL 3.0 + +Ruby/OpenSSL 2.2 added OpenSSL::PKey::PKey#public_to_der for serializing +only the public key components contained in the instance. This works +for all possible key types. +--- + lib/rubygems/security.rb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb +index 2906819bd34..f21c1756422 100644 +--- a/lib/rubygems/security.rb ++++ b/lib/rubygems/security.rb +@@ -424,6 +424,8 @@ def self.create_cert(subject, key, age = ONE_YEAR, extensions = EXTENSIONS, + # Gets the right public key from a PKey instance + + def self.get_public_key(key) ++ # Ruby 3.0 (Ruby/OpenSSL 2.2) or later ++ return OpenSSL::PKey.read(key.public_to_der) if key.respond_to?(:public_to_der) + return key.public_key unless key.is_a?(OpenSSL::PKey::EC) + + ec_key = OpenSSL::PKey::EC.new(key.group.curve_name) From a51a61214c0c78df737f4badba1af8b7a429cc78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 25 Jan 2022 17:35:49 +0100 Subject: [PATCH 414/530] Drop Puma workaround. This is considered as Puma issue which should be addressed in latest release: https://github.com/puma/puma/issues/2753 --- ruby-3.1.0-SSL_read-EOF-handling.patch | 16 ---------------- ruby.spec | 4 ---- 2 files changed, 20 deletions(-) delete mode 100644 ruby-3.1.0-SSL_read-EOF-handling.patch diff --git a/ruby-3.1.0-SSL_read-EOF-handling.patch b/ruby-3.1.0-SSL_read-EOF-handling.patch deleted file mode 100644 index 1c5660f..0000000 --- a/ruby-3.1.0-SSL_read-EOF-handling.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c -index 3b425ca..40e748c 100644 ---- a/ext/openssl/ossl_ssl.c -+++ b/ext/openssl/ossl_ssl.c -@@ -1870,6 +1870,11 @@ ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock) - return str; - - GetSSL(self, ssl); -+ -+#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF -+ SSL_set_options(ssl, SSL_OP_IGNORE_UNEXPECTED_EOF); -+#endif -+ - io = rb_attr_get(self, id_i_io); - GetOpenFile(io, fptr); - if (ssl_started(ssl)) { diff --git a/ruby.spec b/ruby.spec index a1273d1..f92b10d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -250,9 +250,6 @@ Patch57: rubygems-3.3.1-Fix-compatibility-with-OpenSSL3.0.patch # Miscellaneous changes for OpenSSL 3.0 support. # https://github.com/ruby/openssl/pull/481 Patch58: ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support-part-2.patch -# Fix `TestPumaControlCli#test_control_ssl` testcase in Puma. -# https://github.com/ruby/openssl/pull/399#issuecomment-966239736 -Patch59: ruby-3.1.0-SSL_read-EOF-handling.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -726,7 +723,6 @@ rm -rf ext/fiddle/libffi* %patch56 -p1 %patch57 -p1 %patch58 -p1 -%patch59 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . From b0ce095f6d6e74a40b571143eba52c14ce04c074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 14 Jan 2022 19:20:05 +0100 Subject: [PATCH 415/530] Upgrade to Ruby 3.1.0. For details of the evolution please check `private-ruby-3.1` branch. --- ruby-1.9.3-mkmf-verbose.patch | 4 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 4 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 8 +- ruby-2.3.0-ruby_version.patch | 49 +- ruby-2.7.0-Initialize-ABRT-hook.patch | 4 +- ..._bug_reporter_add-witout-raising-err.patch | 2 +- ...onf.rb-require-OpenSSL-version-1.0.1.patch | 84 - ...-more-support-for-generic-pkey-types.patch | 1004 ------------ ....1.0-Allocate-EVP_PKEY-on-initialize.patch | 630 ------- ...-specific-options-in-sign-and-verify.patch | 358 ---- ...Key-set_-and-PKey-DH-EC-generate_key.patch | 719 -------- ...e-test_no_private_exp-on-OpenSSL-3.0.patch | 27 - ruby-3.1.0-Fix-stack-buffer-overflow.patch | 70 - ...et-rid-of-type-punning-pointer-casts.patch | 186 --- ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch | 58 - ...gn_raw-verify_raw-and-verify_recover.patch | 1319 --------------- ...he-low-level-HMAC-API-to-the-EVP-API.patch | 523 ------ ...anges-for-OpenSSL-3.0-support-part-2.patch | 458 ------ ...eous-changes-for-OpenSSL-3.0-support.patch | 304 ---- ruby-3.1.0-Properly-exclude-test-cases.patch | 93 -- ...-Refactor-PEM-DER-serialization-code.patch | 1450 ----------------- ruby-3.1.0-Support-GCCs-DWARF-5.patch | 229 --- ruby-3.1.0-Use-EVP-API-in-more-places.patch | 831 ---------- ...to-load-encrypted-PEM-on-OpenSSL-3.0.patch | 114 -- ...face-to-generate-parameters-and-keys.patch | 1113 ------------- ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch | 29 - ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch | 27 - ...t_digest-do-not-test-constants-for-l.patch | 29 - ...t_pkcs12-fix-test-failures-with-Open.patch | 439 ----- ...t_pkey-use-EC-keys-for-PKey.generate.patch | 67 - ...t_ssl-relax-regex-to-match-OpenSSL-s.patch | 31 - ...tils-remove-dup_public-helper-method.patch | 265 --- ruby.rpmlintrc | 66 +- ruby.spec | 447 +++-- ...ished-name-which-will-be-correctly-p.patch | 44 - ...ng_system-rb-customizations-too-late.patch | 261 --- ....1-Fix-compatibility-with-OpenSSL3.0.patch | 105 -- sources | 2 +- 40 files changed, 289 insertions(+), 11168 deletions(-) delete mode 100644 ruby-3.0.3-ext-openssl-extconf.rb-require-OpenSSL-version-1.0.1.patch delete mode 100644 ruby-3.1.0-Add-more-support-for-generic-pkey-types.patch delete mode 100644 ruby-3.1.0-Allocate-EVP_PKEY-on-initialize.patch delete mode 100644 ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch delete mode 100644 ruby-3.1.0-Deprecate-PKey-set_-and-PKey-DH-EC-generate_key.patch delete mode 100644 ruby-3.1.0-Disable-test_no_private_exp-on-OpenSSL-3.0.patch delete mode 100644 ruby-3.1.0-Fix-stack-buffer-overflow.patch delete mode 100644 ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch delete mode 100644 ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch delete mode 100644 ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch delete mode 100644 ruby-3.1.0-Migrate-from-the-low-level-HMAC-API-to-the-EVP-API.patch delete mode 100644 ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support-part-2.patch delete mode 100644 ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch delete mode 100644 ruby-3.1.0-Properly-exclude-test-cases.patch delete mode 100644 ruby-3.1.0-Refactor-PEM-DER-serialization-code.patch delete mode 100644 ruby-3.1.0-Support-GCCs-DWARF-5.patch delete mode 100644 ruby-3.1.0-Use-EVP-API-in-more-places.patch delete mode 100644 ruby-3.1.0-Use-OSSL_DECODER-to-load-encrypted-PEM-on-OpenSSL-3.0.patch delete mode 100644 ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch delete mode 100644 ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch delete mode 100644 ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch delete mode 100644 ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch delete mode 100644 ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch delete mode 100644 ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch delete mode 100644 ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch delete mode 100644 ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch delete mode 100644 rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch delete mode 100644 rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch delete mode 100644 rubygems-3.3.1-Fix-compatibility-with-OpenSSL3.0.patch diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index b9c2c6f..2113bea 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,15 +11,15 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1930,7 +1930,7 @@ def configuration(srcdir) +@@ -1974,7 +1974,7 @@ def configuration(srcdir) SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. -V = 0 +V = 1 + V0 = $(V:0=) Q1 = $(V:1=) Q = $(Q1:0=@) - ECHO1 = $(V:1=@ #{CONFIG['NULLCMD']}) -- 1.8.3.1 diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 32806da..f82660f 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index d261ea57b5..3c13076b82 100644 --- a/configure.ac +++ b/configure.ac -@@ -3240,6 +3240,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3368,6 +3368,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 118203c..041f475 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index c42436c23d..d261ea57b5 100644 --- a/configure.ac +++ b/configure.ac -@@ -3881,7 +3881,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4026,7 +4026,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then @@ -66,7 +66,7 @@ diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb index 07076d4..35e6c3c 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -114,7 +114,7 @@ +@@ -115,7 +115,7 @@ val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump case name when /^prefix$/ diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index de58295..dffeb91 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 3c13076b82..93af30321d 100644 --- a/configure.ac +++ b/configure.ac -@@ -3945,6 +3945,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4090,6 +4090,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index f7862fa..fdf0dfe 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.ac b/configure.ac index 93af30321d..bc13397e0e 100644 --- a/configure.ac +++ b/configure.ac -@@ -3917,6 +3917,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4062,6 +4062,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 93af30321d..bc13397e0e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -3941,6 +3945,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4086,6 +4090,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -67,7 +67,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index e9110a17ca..76a1f0a315 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -349,6 +349,7 @@ def CONFIG.[](name, mandatory = false) +@@ -359,6 +359,7 @@ def CONFIG.[](name, mandatory = false) vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] end @@ -75,7 +75,7 @@ index e9110a17ca..76a1f0a315 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -581,7 +582,16 @@ def stub +@@ -590,7 +591,16 @@ def stub install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index b0a73a9..1f42472 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -3832,9 +3832,6 @@ AS_CASE(["$target_os"], +@@ -3977,9 +3977,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 80b137e380..63cd3b4f8b 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -3857,56 +3854,62 @@ AC_ARG_WITH(ridir, +@@ -4002,56 +3999,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -3923,6 +3926,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4068,6 +4071,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -132,14 +132,14 @@ diff --git a/template/ruby.pc.in b/template/ruby.pc.in index 8a2c066..c81b211 100644 --- a/template/ruby.pc.in +++ b/template/ruby.pc.in -@@ -9,6 +9,7 @@ MAJOR=@MAJOR@ +@@ -2,6 +2,7 @@ MAJOR=@MAJOR@ MINOR=@MINOR@ TEENY=@TEENY@ ruby_version=@ruby_version@ +ruby_version_dir_name=@ruby_version_dir_name@ RUBY_API_VERSION=@RUBY_API_VERSION@ RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@ - RUBY_BASE_NAME=@RUBY_BASE_NAME@ + arch=@arch@ -- 2.1.0 @@ -171,7 +171,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index d4c110e..d39c9a6 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -439,7 +439,7 @@ def CONFIG.[](name, mandatory = false) +@@ -448,7 +448,7 @@ def CONFIG.[](name, mandatory = false) install?(:doc, :rdoc) do if $rdocdir @@ -190,31 +190,24 @@ Date: Tue, 31 Mar 2015 16:37:44 +0200 Subject: [PATCH 3/4] Add ruby_version_dir_name support for RubyGems. --- - lib/rubygems/defaults.rb | 9 +++++---- + lib/rubygems/defaults.rb | 7 ++++--- test/rubygems/test_gem.rb | 5 +++-- - 2 files changed, 8 insertions(+), 6 deletions(-) + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb index d4ff4a262c..3f9a5bf590 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -38,13 +38,13 @@ def self.default_dir - [ - File.dirname(RbConfig::CONFIG['sitedir']), - 'Gems', -- RbConfig::CONFIG['ruby_version'], -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] - ] - else - [ - RbConfig::CONFIG['rubylibprefix'], - 'gems', -- RbConfig::CONFIG['ruby_version'], -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] - ] - end +@@ -34,7 +34,7 @@ def self.default_spec_cache_dir + # specified in the environment -@@ -117,7 +117,8 @@ def self.user_dir + def self.default_dir +- @default_dir ||= File.join(RbConfig::CONFIG['rubylibprefix'], 'gems', RbConfig::CONFIG['ruby_version']) ++ @default_dir ||= File.join(RbConfig::CONFIG['rubylibprefix'], 'gems', RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']) + end + + ## +@@ -103,7 +103,8 @@ def self.user_dir gem_dir = File.join(Gem.user_home, ".gem") gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir) parts = [gem_dir, ruby_engine] @@ -224,7 +217,7 @@ index d4ff4a262c..3f9a5bf590 100644 File.join parts end -@@ -252,7 +253,7 @@ def self.vendor_dir # :nodoc: +@@ -234,7 +235,7 @@ def self.vendor_dir # :nodoc: return nil unless RbConfig::CONFIG.key? 'vendordir' File.join RbConfig::CONFIG['vendordir'], 'gems', @@ -237,7 +230,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1440,7 +1440,8 @@ def test_self_use_paths +@@ -1410,7 +1410,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -247,7 +240,7 @@ index b25068405d..e9fef4a311 100644 FileUtils.mkdir_p File.join(parts) -@@ -1516,7 +1517,7 @@ def test_self_vendor_dir +@@ -1486,7 +1487,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, 'vendor')) do expected = File.join RbConfig::CONFIG['vendordir'], 'gems', @@ -274,7 +267,7 @@ diff --git a/configure.ac b/configure.ac index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -107,7 +107,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -108,7 +108,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index 2b90d9e..fc2bd08 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -43,7 +43,7 @@ diff --git a/common.mk b/common.mk index b2e5b2b6d0..f39f81da5c 100644 --- a/common.mk +++ b/common.mk -@@ -81,7 +81,8 @@ ENC_MK = enc.mk +@@ -82,7 +82,8 @@ ENC_MK = enc.mk MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \ RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(mflags) @@ -57,7 +57,7 @@ diff --git a/ruby.c b/ruby.c index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1489,10 +1489,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1611,10 +1611,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); diff --git a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch index 64e2114..5c7afe8 100644 --- a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch +++ b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -20,7 +20,7 @@ diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_repor index 628fcd0340..2c677cc8a7 100644 --- a/test/-ext-/bug_reporter/test_bug_reporter.rb +++ b/test/-ext-/bug_reporter/test_bug_reporter.rb -@@ -21,7 +21,7 @@ def test_bug_reporter_add +@@ -22,7 +22,7 @@ def test_bug_reporter_add args = ["--disable-gems", "-r-test-/bug_reporter", "-C", tmpdir] stdin = "register_sample_bug_reporter(12345); Process.kill :SEGV, $$" diff --git a/ruby-3.0.3-ext-openssl-extconf.rb-require-OpenSSL-version-1.0.1.patch b/ruby-3.0.3-ext-openssl-extconf.rb-require-OpenSSL-version-1.0.1.patch deleted file mode 100644 index 4b8e9ab..0000000 --- a/ruby-3.0.3-ext-openssl-extconf.rb-require-OpenSSL-version-1.0.1.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 202ff1372a40a8adf9aac74bfe8a39141b0c57e5 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 27 Sep 2021 00:38:38 +0900 -Subject: [PATCH] ext/openssl/extconf.rb: require OpenSSL version >= 1.0.1, < 3 - -Ruby/OpenSSL 2.1.x and 2.2.x will not support OpenSSL 3.0 API. Let's -make extconf.rb explicitly check the version number to be within the -acceptable range, since it will not compile anyway. - -Reference: https://bugs.ruby-lang.org/issues/18192 ---- - ext/openssl/extconf.rb | 43 ++++++++++++++++++++++++------------------ - 1 file changed, 25 insertions(+), 18 deletions(-) - -diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb -index 264130bb..7e817ae2 100644 ---- a/ext/openssl/extconf.rb -+++ b/ext/openssl/extconf.rb -@@ -33,9 +33,6 @@ - have_library("ws2_32") - end - --Logging::message "=== Checking for required stuff... ===\n" --result = pkg_config("openssl") && have_header("openssl/ssl.h") -- - if $mingw - append_cflags '-D_FORTIFY_SOURCE=2' - append_ldflags '-fstack-protector' -@@ -92,19 +89,33 @@ def find_openssl_library - return false - end - --unless result -- unless find_openssl_library -- Logging::message "=== Checking for required stuff failed. ===\n" -- Logging::message "Makefile wasn't created. Fix the errors above.\n" -- raise "OpenSSL library could not be found. You might want to use " \ -- "--with-openssl-dir= option to specify the prefix where OpenSSL " \ -- "is installed." -- end -+Logging::message "=== Checking for required stuff... ===\n" -+pkg_config_found = pkg_config("openssl") && have_header("openssl/ssl.h") -+ -+if !pkg_config_found && !find_openssl_library -+ Logging::message "=== Checking for required stuff failed. ===\n" -+ Logging::message "Makefile wasn't created. Fix the errors above.\n" -+ raise "OpenSSL library could not be found. You might want to use " \ -+ "--with-openssl-dir= option to specify the prefix where OpenSSL " \ -+ "is installed." - end - --unless checking_for("OpenSSL version is 1.0.1 or later") { -- try_static_assert("OPENSSL_VERSION_NUMBER >= 0x10001000L", "openssl/opensslv.h") } -- raise "OpenSSL >= 1.0.1 or LibreSSL is required" -+version_ok = if have_macro("LIBRESSL_VERSION_NUMBER", "openssl/opensslv.h") -+ is_libressl = true -+ checking_for("LibreSSL version >= 2.5.0") { -+ try_static_assert("LIBRESSL_VERSION_NUMBER >= 0x20500000L", "openssl/opensslv.h") } -+else -+ checking_for("OpenSSL version >= 1.0.1 and < 3.0.0") { -+ try_static_assert("OPENSSL_VERSION_NUMBER >= 0x10001000L", "openssl/opensslv.h") && -+ !try_static_assert("OPENSSL_VERSION_MAJOR >= 3", "openssl/opensslv.h") } -+end -+unless version_ok -+ raise "OpenSSL >= 1.0.1, < 3.0.0 or LibreSSL >= 2.5.0 is required" -+end -+ -+# Prevent wincrypt.h from being included, which defines conflicting macro with openssl/x509.h -+if is_libressl && ($mswin || $mingw) -+ $defs.push("-DNOCRYPT") - end - - Logging::message "=== Checking for OpenSSL features... ===\n" -@@ -116,10 +127,6 @@ def find_openssl_library - have_func("ENGINE_load_#{name}()", "openssl/engine.h") - } - --if ($mswin || $mingw) && have_macro("LIBRESSL_VERSION_NUMBER", "openssl/opensslv.h") -- $defs.push("-DNOCRYPT") --end -- - # added in 1.0.2 - have_func("EC_curve_nist2nid") - have_func("X509_REVOKED_dup") diff --git a/ruby-3.1.0-Add-more-support-for-generic-pkey-types.patch b/ruby-3.1.0-Add-more-support-for-generic-pkey-types.patch deleted file mode 100644 index cede1aa..0000000 --- a/ruby-3.1.0-Add-more-support-for-generic-pkey-types.patch +++ /dev/null @@ -1,1004 +0,0 @@ -From 6bbdaef1a578fdbfc6a5bf82402ba4d3fd733d4a Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Tue, 21 Mar 2017 18:23:53 +0900 -Subject: [PATCH 1/6] pkey: assume generic PKeys contain private components - -The EVP interface cannot tell whether if a pkey contains the private -components or not. Assume it does if it does not respond to #private?. -This fixes the NoMethodError on calling #sign on a generic PKey. ---- - ext/openssl/ossl_pkey.c | 15 +++++++++++---- - 1 file changed, 11 insertions(+), 4 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 610a83fd2d..8d41623e80 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -252,12 +252,19 @@ GetPrivPKeyPtr(VALUE obj) - { - EVP_PKEY *pkey; - -- if (rb_funcallv(obj, id_private_q, 0, NULL) != Qtrue) { -- ossl_raise(rb_eArgError, "Private key is needed."); -- } - GetPKey(obj, pkey); -+ if (OSSL_PKEY_IS_PRIVATE(obj)) -+ return pkey; -+ /* -+ * The EVP API does not provide a way to check if the EVP_PKEY has private -+ * components. Assuming it does... -+ */ -+ if (!rb_respond_to(obj, id_private_q)) -+ return pkey; -+ if (RTEST(rb_funcallv(obj, id_private_q, 0, NULL))) -+ return pkey; - -- return pkey; -+ rb_raise(rb_eArgError, "private key is needed"); - } - - EVP_PKEY * --- -2.32.0 - - -From 86508f74b3d41166ed6091b7b31f18a26478c347 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 20 Mar 2017 23:18:26 +0900 -Subject: [PATCH 2/6] pkey: add PKey.generate_parameters and .generate_key - -Add two methods to create a PKey using the generic EVP interface. This -is useful for the PKey types we don't have a dedicated class. ---- - ext/openssl/ossl_pkey.c | 222 ++++++++++++++++++++++++++++++++++++++ - test/openssl/test_pkey.rb | 43 ++++++++ - 2 files changed, 265 insertions(+) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 8d41623e80..1f3dd39b9b 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -197,6 +197,226 @@ ossl_pkey_new_from_data(int argc, VALUE *argv, VALUE self) - return ossl_pkey_new(pkey); - } - -+static VALUE -+pkey_gen_apply_options_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ctx_v)) -+{ -+ VALUE key = rb_ary_entry(i, 0), value = rb_ary_entry(i, 1); -+ EVP_PKEY_CTX *ctx = (EVP_PKEY_CTX *)ctx_v; -+ -+ if (SYMBOL_P(key)) -+ key = rb_sym2str(key); -+ value = rb_String(value); -+ -+ if (EVP_PKEY_CTX_ctrl_str(ctx, StringValueCStr(key), StringValueCStr(value)) <= 0) -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_ctrl_str(ctx, %+"PRIsVALUE", %+"PRIsVALUE")", -+ key, value); -+ return Qnil; -+} -+ -+static VALUE -+pkey_gen_apply_options0(VALUE args_v) -+{ -+ VALUE *args = (VALUE *)args_v; -+ -+ rb_block_call(args[1], rb_intern("each"), 0, NULL, -+ pkey_gen_apply_options_i, args[0]); -+ return Qnil; -+} -+ -+struct pkey_blocking_generate_arg { -+ EVP_PKEY_CTX *ctx; -+ EVP_PKEY *pkey; -+ int state; -+ int yield: 1; -+ int genparam: 1; -+ int stop: 1; -+}; -+ -+static VALUE -+pkey_gen_cb_yield(VALUE ctx_v) -+{ -+ EVP_PKEY_CTX *ctx = (void *)ctx_v; -+ int i, info_num; -+ VALUE *argv; -+ -+ info_num = EVP_PKEY_CTX_get_keygen_info(ctx, -1); -+ argv = ALLOCA_N(VALUE, info_num); -+ for (i = 0; i < info_num; i++) -+ argv[i] = INT2NUM(EVP_PKEY_CTX_get_keygen_info(ctx, i)); -+ -+ return rb_yield_values2(info_num, argv); -+} -+ -+static int -+pkey_gen_cb(EVP_PKEY_CTX *ctx) -+{ -+ struct pkey_blocking_generate_arg *arg = EVP_PKEY_CTX_get_app_data(ctx); -+ -+ if (arg->yield) { -+ int state; -+ rb_protect(pkey_gen_cb_yield, (VALUE)ctx, &state); -+ if (state) { -+ arg->stop = 1; -+ arg->state = state; -+ } -+ } -+ return !arg->stop; -+} -+ -+static void -+pkey_blocking_gen_stop(void *ptr) -+{ -+ struct pkey_blocking_generate_arg *arg = ptr; -+ arg->stop = 1; -+} -+ -+static void * -+pkey_blocking_gen(void *ptr) -+{ -+ struct pkey_blocking_generate_arg *arg = ptr; -+ -+ if (arg->genparam && EVP_PKEY_paramgen(arg->ctx, &arg->pkey) <= 0) -+ return NULL; -+ if (!arg->genparam && EVP_PKEY_keygen(arg->ctx, &arg->pkey) <= 0) -+ return NULL; -+ return arg->pkey; -+} -+ -+static VALUE -+pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) -+{ -+ EVP_PKEY_CTX *ctx; -+ VALUE alg, options; -+ struct pkey_blocking_generate_arg gen_arg = { 0 }; -+ int state; -+ -+ rb_scan_args(argc, argv, "11", &alg, &options); -+ if (rb_obj_is_kind_of(alg, cPKey)) { -+ EVP_PKEY *base_pkey; -+ -+ GetPKey(alg, base_pkey); -+ ctx = EVP_PKEY_CTX_new(base_pkey, NULL/* engine */); -+ if (!ctx) -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); -+ } -+ else { -+ const EVP_PKEY_ASN1_METHOD *ameth; -+ ENGINE *tmpeng; -+ int pkey_id; -+ -+ StringValue(alg); -+ ameth = EVP_PKEY_asn1_find_str(&tmpeng, RSTRING_PTR(alg), -+ RSTRING_LENINT(alg)); -+ if (!ameth) -+ ossl_raise(ePKeyError, "algorithm %"PRIsVALUE" not found", alg); -+ EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); -+#if !defined(OPENSSL_NO_ENGINE) -+ if (tmpeng) -+ ENGINE_finish(tmpeng); -+#endif -+ -+ ctx = EVP_PKEY_CTX_new_id(pkey_id, NULL/* engine */); -+ if (!ctx) -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_id"); -+ } -+ -+ if (genparam && EVP_PKEY_paramgen_init(ctx) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_paramgen_init"); -+ } -+ if (!genparam && EVP_PKEY_keygen_init(ctx) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_keygen_init"); -+ } -+ -+ if (!NIL_P(options)) { -+ VALUE args[2]; -+ -+ args[0] = (VALUE)ctx; -+ args[1] = options; -+ rb_protect(pkey_gen_apply_options0, (VALUE)args, &state); -+ if (state) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ } -+ -+ gen_arg.genparam = genparam; -+ gen_arg.ctx = ctx; -+ gen_arg.yield = rb_block_given_p(); -+ EVP_PKEY_CTX_set_app_data(ctx, &gen_arg); -+ EVP_PKEY_CTX_set_cb(ctx, pkey_gen_cb); -+ if (gen_arg.yield) -+ pkey_blocking_gen(&gen_arg); -+ else -+ rb_thread_call_without_gvl(pkey_blocking_gen, &gen_arg, -+ pkey_blocking_gen_stop, &gen_arg); -+ EVP_PKEY_CTX_free(ctx); -+ if (!gen_arg.pkey) { -+ if (gen_arg.state) { -+ ossl_clear_error(); -+ rb_jump_tag(gen_arg.state); -+ } -+ else { -+ ossl_raise(ePKeyError, genparam ? "EVP_PKEY_paramgen" : "EVP_PKEY_keygen"); -+ } -+ } -+ -+ return ossl_pkey_new(gen_arg.pkey); -+} -+ -+/* -+ * call-seq: -+ * OpenSSL::PKey.generate_parameters(algo_name [, options]) -> pkey -+ * -+ * Generates new parameters for the algorithm. _algo_name_ is a String that -+ * represents the algorithm. The optional argument _options_ is a Hash that -+ * specifies the options specific to the algorithm. The order of the options -+ * can be important. -+ * -+ * A block can be passed optionally. The meaning of the arguments passed to -+ * the block varies depending on the implementation of the algorithm. The block -+ * may be called once or multiple times, or may not even be called. -+ * -+ * For the supported options, see the documentation for the 'openssl genpkey' -+ * utility command. -+ * -+ * == Example -+ * pkey = OpenSSL::PKey.generate_parameters("DSA", "dsa_paramgen_bits" => 2048) -+ * p pkey.p.num_bits #=> 2048 -+ */ -+static VALUE -+ossl_pkey_s_generate_parameters(int argc, VALUE *argv, VALUE self) -+{ -+ return pkey_generate(argc, argv, self, 1); -+} -+ -+/* -+ * call-seq: -+ * OpenSSL::PKey.generate_key(algo_name [, options]) -> pkey -+ * OpenSSL::PKey.generate_key(pkey [, options]) -> pkey -+ * -+ * Generates a new key (pair). -+ * -+ * If a String is given as the first argument, it generates a new random key -+ * for the algorithm specified by the name just as ::generate_parameters does. -+ * If an OpenSSL::PKey::PKey is given instead, it generates a new random key -+ * for the same algorithm as the key, using the parameters the key contains. -+ * -+ * See ::generate_parameters for the details of _options_ and the given block. -+ * -+ * == Example -+ * pkey_params = OpenSSL::PKey.generate_parameters("DSA", "dsa_paramgen_bits" => 2048) -+ * pkey_params.priv_key #=> nil -+ * pkey = OpenSSL::PKey.generate_key(pkey_params) -+ * pkey.priv_key #=> # 512, -+ "dsa_paramgen_q_bits" => 256, -+ }) -+ assert_instance_of OpenSSL::PKey::DSA, pkey -+ assert_equal 512, pkey.p.num_bits -+ assert_equal 256, pkey.q.num_bits -+ assert_equal nil, pkey.priv_key -+ -+ # Invalid options are checked -+ assert_raise(OpenSSL::PKey::PKeyError) { -+ OpenSSL::PKey.generate_parameters("DSA", "invalid" => "option") -+ } -+ -+ # Parameter generation callback is called -+ cb_called = [] -+ assert_raise(RuntimeError) { -+ OpenSSL::PKey.generate_parameters("DSA") { |*args| -+ cb_called << args -+ raise "exit!" if cb_called.size == 3 -+ } -+ } -+ assert_not_empty cb_called -+ end -+ -+ def test_s_generate_key -+ assert_raise(OpenSSL::PKey::PKeyError) { -+ # DSA key pair cannot be generated without parameters -+ OpenSSL::PKey.generate_key("DSA") -+ } -+ pkey_params = OpenSSL::PKey.generate_parameters("DSA", { -+ "dsa_paramgen_bits" => 512, -+ "dsa_paramgen_q_bits" => 256, -+ }) -+ pkey = OpenSSL::PKey.generate_key(pkey_params) -+ assert_instance_of OpenSSL::PKey::DSA, pkey -+ assert_equal 512, pkey.p.num_bits -+ assert_not_equal nil, pkey.priv_key -+ end - end --- -2.32.0 - - -From 5713605e70c96e3215aab0e0341548af29b5088e Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 15 May 2017 23:47:47 +0900 -Subject: [PATCH 3/6] pkey: port PKey::PKey#sign and #verify to the EVP_Digest* - interface - -Use EVP_DigestSign*() and EVP_DigestVerify*() interface instead of the -old EVP_Sign*() and EVP_Verify*() functions. They were added in OpenSSL -1.0.0. - -Also, allow the digest to be specified as nil, as certain EVP_PKEY types -don't expect a digest algorithm. ---- - ext/openssl/ossl_pkey.c | 90 ++++++++++++++++++++++----------------- - test/openssl/test_pkey.rb | 12 ++++++ - 2 files changed, 63 insertions(+), 39 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 1f3dd39b9b..a0d73f5821 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -753,35 +753,47 @@ static VALUE - ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) - { - EVP_PKEY *pkey; -- const EVP_MD *md; -+ const EVP_MD *md = NULL; - EVP_MD_CTX *ctx; -- unsigned int buf_len; -- VALUE str; -- int result; -+ size_t siglen; -+ int state; -+ VALUE sig; - - pkey = GetPrivPKeyPtr(self); -- md = ossl_evp_get_digestbyname(digest); -+ if (!NIL_P(digest)) -+ md = ossl_evp_get_digestbyname(digest); - StringValue(data); -- str = rb_str_new(0, EVP_PKEY_size(pkey)); - - ctx = EVP_MD_CTX_new(); - if (!ctx) -- ossl_raise(ePKeyError, "EVP_MD_CTX_new"); -- if (!EVP_SignInit_ex(ctx, md, NULL)) { -- EVP_MD_CTX_free(ctx); -- ossl_raise(ePKeyError, "EVP_SignInit_ex"); -+ ossl_raise(ePKeyError, "EVP_MD_CTX_new"); -+ if (EVP_DigestSignInit(ctx, NULL, md, /* engine */NULL, pkey) < 1) { -+ EVP_MD_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_DigestSignInit"); -+ } -+ if (EVP_DigestSignUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) < 1) { -+ EVP_MD_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_DigestSignUpdate"); -+ } -+ if (EVP_DigestSignFinal(ctx, NULL, &siglen) < 1) { -+ EVP_MD_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_DigestSignFinal"); - } -- if (!EVP_SignUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data))) { -- EVP_MD_CTX_free(ctx); -- ossl_raise(ePKeyError, "EVP_SignUpdate"); -+ if (siglen > LONG_MAX) -+ rb_raise(ePKeyError, "signature would be too large"); -+ sig = ossl_str_new(NULL, (long)siglen, &state); -+ if (state) { -+ EVP_MD_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ if (EVP_DigestSignFinal(ctx, (unsigned char *)RSTRING_PTR(sig), -+ &siglen) < 1) { -+ EVP_MD_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_DigestSignFinal"); - } -- result = EVP_SignFinal(ctx, (unsigned char *)RSTRING_PTR(str), &buf_len, pkey); - EVP_MD_CTX_free(ctx); -- if (!result) -- ossl_raise(ePKeyError, "EVP_SignFinal"); -- rb_str_set_len(str, buf_len); -- -- return str; -+ rb_str_set_len(sig, siglen); -+ return sig; - } - - /* -@@ -809,38 +821,38 @@ static VALUE - ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) - { - EVP_PKEY *pkey; -- const EVP_MD *md; -+ const EVP_MD *md = NULL; - EVP_MD_CTX *ctx; -- int siglen, result; -+ int ret; - - GetPKey(self, pkey); - ossl_pkey_check_public_key(pkey); -- md = ossl_evp_get_digestbyname(digest); -+ if (!NIL_P(digest)) -+ md = ossl_evp_get_digestbyname(digest); - StringValue(sig); -- siglen = RSTRING_LENINT(sig); - StringValue(data); - - ctx = EVP_MD_CTX_new(); - if (!ctx) -- ossl_raise(ePKeyError, "EVP_MD_CTX_new"); -- if (!EVP_VerifyInit_ex(ctx, md, NULL)) { -- EVP_MD_CTX_free(ctx); -- ossl_raise(ePKeyError, "EVP_VerifyInit_ex"); -+ ossl_raise(ePKeyError, "EVP_MD_CTX_new"); -+ if (EVP_DigestVerifyInit(ctx, NULL, md, /* engine */NULL, pkey) < 1) { -+ EVP_MD_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_DigestVerifyInit"); - } -- if (!EVP_VerifyUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data))) { -- EVP_MD_CTX_free(ctx); -- ossl_raise(ePKeyError, "EVP_VerifyUpdate"); -+ if (EVP_DigestVerifyUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) < 1) { -+ EVP_MD_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_DigestVerifyUpdate"); - } -- result = EVP_VerifyFinal(ctx, (unsigned char *)RSTRING_PTR(sig), siglen, pkey); -+ ret = EVP_DigestVerifyFinal(ctx, (unsigned char *)RSTRING_PTR(sig), -+ RSTRING_LEN(sig)); - EVP_MD_CTX_free(ctx); -- switch (result) { -- case 0: -- ossl_clear_error(); -- return Qfalse; -- case 1: -- return Qtrue; -- default: -- ossl_raise(ePKeyError, "EVP_VerifyFinal"); -+ if (ret < 0) -+ ossl_raise(ePKeyError, "EVP_DigestVerifyFinal"); -+ if (ret) -+ return Qtrue; -+ else { -+ ossl_clear_error(); -+ return Qfalse; - } - } - -diff --git a/test/openssl/test_pkey.rb b/test/openssl/test_pkey.rb -index a325a1ea2b..247ba84f83 100644 ---- a/test/openssl/test_pkey.rb -+++ b/test/openssl/test_pkey.rb -@@ -68,4 +68,16 @@ def test_s_generate_key - assert_equal 512, pkey.p.num_bits - assert_not_equal nil, pkey.priv_key - end -+ -+ def test_hmac_sign_verify -+ pkey = OpenSSL::PKey.generate_key("HMAC", { "key" => "abcd" }) -+ -+ hmac = OpenSSL::HMAC.new("abcd", "SHA256").update("data").digest -+ assert_equal hmac, pkey.sign("SHA256", "data") -+ -+ # EVP_PKEY_HMAC does not support verify -+ assert_raise(OpenSSL::PKey::PKeyError) { -+ pkey.verify("SHA256", "data", hmac) -+ } -+ end - end --- -2.32.0 - - -From 76566a2e1bab42a2e1587ecbec23779ee00020fc Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 15 May 2017 23:47:47 +0900 -Subject: [PATCH 4/6] pkey: support 'one-shot' signing and verification - -OpenSSL 1.1.1 added EVP_DigestSign() and EVP_DigestVerify() functions -to the interface. Some EVP_PKEY methods such as PureEdDSA algorithms -do not support the streaming mechanism and require us to use them. ---- - ext/openssl/ossl_pkey.c | 30 ++++++++++++++++++++++++++ - test/openssl/test_pkey.rb | 45 +++++++++++++++++++++++++++++++++++++++ - 2 files changed, 75 insertions(+) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index a0d73f5821..19544ec7f0 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -771,6 +771,26 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_DigestSignInit"); - } -+#if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) -+ if (EVP_DigestSign(ctx, NULL, &siglen, (unsigned char *)RSTRING_PTR(data), -+ RSTRING_LEN(data)) < 1) { -+ EVP_MD_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_DigestSign"); -+ } -+ if (siglen > LONG_MAX) -+ rb_raise(ePKeyError, "signature would be too large"); -+ sig = ossl_str_new(NULL, (long)siglen, &state); -+ if (state) { -+ EVP_MD_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ if (EVP_DigestSign(ctx, (unsigned char *)RSTRING_PTR(sig), &siglen, -+ (unsigned char *)RSTRING_PTR(data), -+ RSTRING_LEN(data)) < 1) { -+ EVP_MD_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_DigestSign"); -+ } -+#else - if (EVP_DigestSignUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) < 1) { - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_DigestSignUpdate"); -@@ -791,6 +811,7 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_DigestSignFinal"); - } -+#endif - EVP_MD_CTX_free(ctx); - rb_str_set_len(sig, siglen); - return sig; -@@ -839,6 +860,14 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_DigestVerifyInit"); - } -+#if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) -+ ret = EVP_DigestVerify(ctx, (unsigned char *)RSTRING_PTR(sig), -+ RSTRING_LEN(sig), (unsigned char *)RSTRING_PTR(data), -+ RSTRING_LEN(data)); -+ EVP_MD_CTX_free(ctx); -+ if (ret < 0) -+ ossl_raise(ePKeyError, "EVP_DigestVerify"); -+#else - if (EVP_DigestVerifyUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) < 1) { - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_DigestVerifyUpdate"); -@@ -848,6 +877,7 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) - EVP_MD_CTX_free(ctx); - if (ret < 0) - ossl_raise(ePKeyError, "EVP_DigestVerifyFinal"); -+#endif - if (ret) - return Qtrue; - else { -diff --git a/test/openssl/test_pkey.rb b/test/openssl/test_pkey.rb -index 247ba84f83..d811b9c75f 100644 ---- a/test/openssl/test_pkey.rb -+++ b/test/openssl/test_pkey.rb -@@ -80,4 +80,49 @@ def test_hmac_sign_verify - pkey.verify("SHA256", "data", hmac) - } - end -+ -+ def test_ed25519 -+ # Test vector from RFC 8032 Section 7.1 TEST 2 -+ priv_pem = <<~EOF -+ -----BEGIN PRIVATE KEY----- -+ MC4CAQAwBQYDK2VwBCIEIEzNCJso/5banbbDRuwRTg9bijGfNaumJNqM9u1PuKb7 -+ -----END PRIVATE KEY----- -+ EOF -+ pub_pem = <<~EOF -+ -----BEGIN PUBLIC KEY----- -+ MCowBQYDK2VwAyEAPUAXw+hDiVqStwqnTRt+vJyYLM8uxJaMwM1V8Sr0Zgw= -+ -----END PUBLIC KEY----- -+ EOF -+ begin -+ priv = OpenSSL::PKey.read(priv_pem) -+ pub = OpenSSL::PKey.read(pub_pem) -+ rescue OpenSSL::PKey::PKeyError -+ # OpenSSL < 1.1.1 -+ pend "Ed25519 is not implemented" -+ end -+ assert_instance_of OpenSSL::PKey::PKey, priv -+ assert_instance_of OpenSSL::PKey::PKey, pub -+ assert_equal priv_pem, priv.private_to_pem -+ assert_equal pub_pem, priv.public_to_pem -+ assert_equal pub_pem, pub.public_to_pem -+ -+ sig = [<<~EOF.gsub(/[^0-9a-f]/, "")].pack("H*") -+ 92a009a9f0d4cab8720e820b5f642540 -+ a2b27b5416503f8fb3762223ebdb69da -+ 085ac1e43e15996e458f3613d0f11d8c -+ 387b2eaeb4302aeeb00d291612bb0c00 -+ EOF -+ data = ["72"].pack("H*") -+ assert_equal sig, priv.sign(nil, data) -+ assert_equal true, priv.verify(nil, sig, data) -+ assert_equal true, pub.verify(nil, sig, data) -+ assert_equal false, pub.verify(nil, sig, data.succ) -+ -+ # PureEdDSA wants nil as the message digest -+ assert_raise(OpenSSL::PKey::PKeyError) { priv.sign("SHA512", data) } -+ assert_raise(OpenSSL::PKey::PKeyError) { pub.verify("SHA512", sig, data) } -+ -+ # Ed25519 pkey type does not support key derivation -+ assert_raise(OpenSSL::PKey::PKeyError) { priv.derive(pub) } -+ end - end --- -2.32.0 - - -From fabdd22bddc572ba3342ec0b09e3fef8ed6245b8 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sat, 18 Mar 2017 21:58:46 +0900 -Subject: [PATCH 5/6] pkey: add PKey::PKey#derive - -Add OpenSSL::PKey::PKey#derive as the wrapper for EVP_PKEY_CTX_derive(). -This is useful for pkey types that we don't have dedicated classes, such -as X25519. ---- - ext/openssl/ossl_pkey.c | 52 ++++++++++++++++++++++++++++++++++++ - test/openssl/test_pkey.rb | 26 ++++++++++++++++++ - test/openssl/test_pkey_dh.rb | 13 +++++++++ - test/openssl/test_pkey_ec.rb | 16 +++++++++++ - 4 files changed, 107 insertions(+) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 19544ec7f0..df8b425a0f 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -886,6 +886,57 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) - } - } - -+/* -+ * call-seq: -+ * pkey.derive(peer_pkey) -> string -+ * -+ * Derives a shared secret from _pkey_ and _peer_pkey_. _pkey_ must contain -+ * the private components, _peer_pkey_ must contain the public components. -+ */ -+static VALUE -+ossl_pkey_derive(int argc, VALUE *argv, VALUE self) -+{ -+ EVP_PKEY *pkey, *peer_pkey; -+ EVP_PKEY_CTX *ctx; -+ VALUE peer_pkey_obj, str; -+ size_t keylen; -+ int state; -+ -+ GetPKey(self, pkey); -+ rb_scan_args(argc, argv, "1", &peer_pkey_obj); -+ GetPKey(peer_pkey_obj, peer_pkey); -+ -+ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); -+ if (!ctx) -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); -+ if (EVP_PKEY_derive_init(ctx) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_derive_init"); -+ } -+ if (EVP_PKEY_derive_set_peer(ctx, peer_pkey) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_derive_set_peer"); -+ } -+ if (EVP_PKEY_derive(ctx, NULL, &keylen) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_derive"); -+ } -+ if (keylen > LONG_MAX) -+ rb_raise(ePKeyError, "derived key would be too large"); -+ str = ossl_str_new(NULL, (long)keylen, &state); -+ if (state) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ if (EVP_PKEY_derive(ctx, (unsigned char *)RSTRING_PTR(str), &keylen) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_derive"); -+ } -+ EVP_PKEY_CTX_free(ctx); -+ rb_str_set_len(str, keylen); -+ return str; -+} -+ - /* - * INIT - */ -@@ -983,6 +1034,7 @@ Init_ossl_pkey(void) - - rb_define_method(cPKey, "sign", ossl_pkey_sign, 2); - rb_define_method(cPKey, "verify", ossl_pkey_verify, 3); -+ rb_define_method(cPKey, "derive", ossl_pkey_derive, -1); - - id_private_q = rb_intern("private?"); - -diff --git a/test/openssl/test_pkey.rb b/test/openssl/test_pkey.rb -index d811b9c75f..5307fe5b08 100644 ---- a/test/openssl/test_pkey.rb -+++ b/test/openssl/test_pkey.rb -@@ -125,4 +125,30 @@ def test_ed25519 - # Ed25519 pkey type does not support key derivation - assert_raise(OpenSSL::PKey::PKeyError) { priv.derive(pub) } - end -+ -+ def test_x25519 -+ # Test vector from RFC 7748 Section 6.1 -+ alice_pem = <<~EOF -+ -----BEGIN PRIVATE KEY----- -+ MC4CAQAwBQYDK2VuBCIEIHcHbQpzGKV9PBbBclGyZkXfTC+H68CZKrF3+6UduSwq -+ -----END PRIVATE KEY----- -+ EOF -+ bob_pem = <<~EOF -+ -----BEGIN PUBLIC KEY----- -+ MCowBQYDK2VuAyEA3p7bfXt9wbTTW2HC7OQ1Nz+DQ8hbeGdNrfx+FG+IK08= -+ -----END PUBLIC KEY----- -+ EOF -+ shared_secret = "4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742" -+ begin -+ alice = OpenSSL::PKey.read(alice_pem) -+ bob = OpenSSL::PKey.read(bob_pem) -+ rescue OpenSSL::PKey::PKeyError -+ # OpenSSL < 1.1.0 -+ pend "X25519 is not implemented" -+ end -+ assert_instance_of OpenSSL::PKey::PKey, alice -+ assert_equal alice_pem, alice.private_to_pem -+ assert_equal bob_pem, bob.public_to_pem -+ assert_equal [shared_secret].pack("H*"), alice.derive(bob) -+ end - end -diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb -index 4a05626a12..9efc3ba68d 100644 ---- a/test/openssl/test_pkey_dh.rb -+++ b/test/openssl/test_pkey_dh.rb -@@ -18,6 +18,19 @@ def test_new_break - end - end - -+ def test_derive_key -+ dh1 = Fixtures.pkey("dh1024").generate_key! -+ dh2 = Fixtures.pkey("dh1024").generate_key! -+ dh1_pub = OpenSSL::PKey.read(dh1.public_to_der) -+ dh2_pub = OpenSSL::PKey.read(dh2.public_to_der) -+ z = dh1.g.mod_exp(dh1.priv_key, dh1.p).mod_exp(dh2.priv_key, dh1.p).to_s(2) -+ assert_equal z, dh1.derive(dh2_pub) -+ assert_equal z, dh2.derive(dh1_pub) -+ -+ assert_equal z, dh1.compute_key(dh2.pub_key) -+ assert_equal z, dh2.compute_key(dh1.pub_key) -+ end -+ - def test_DHparams - dh1024 = Fixtures.pkey("dh1024") - asn1 = OpenSSL::ASN1::Sequence([ -diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb -index a0e6a23ff8..95d4338a51 100644 ---- a/test/openssl/test_pkey_ec.rb -+++ b/test/openssl/test_pkey_ec.rb -@@ -93,6 +93,22 @@ def test_sign_verify - assert_equal false, p256.verify("SHA256", signature1, data) - end - -+ def test_derive_key -+ # NIST CAVP, KAS_ECC_CDH_PrimitiveTest.txt, P-256 COUNT = 0 -+ qCAVSx = "700c48f77f56584c5cc632ca65640db91b6bacce3a4df6b42ce7cc838833d287" -+ qCAVSy = "db71e509e3fd9b060ddb20ba5c51dcc5948d46fbf640dfe0441782cab85fa4ac" -+ dIUT = "7d7dc5f71eb29ddaf80d6214632eeae03d9058af1fb6d22ed80badb62bc1a534" -+ zIUT = "46fc62106420ff012e54a434fbdd2d25ccc5852060561e68040dd7778997bd7b" -+ a = OpenSSL::PKey::EC.new("prime256v1") -+ a.private_key = OpenSSL::BN.new(dIUT, 16) -+ b = OpenSSL::PKey::EC.new("prime256v1") -+ uncompressed = OpenSSL::BN.new("04" + qCAVSx + qCAVSy, 16) -+ b.public_key = OpenSSL::PKey::EC::Point.new(b.group, uncompressed) -+ assert_equal [zIUT].pack("H*"), a.derive(b) -+ -+ assert_equal a.derive(b), a.dh_compute_key(b.public_key) -+ end -+ - def test_dsa_sign_verify - data1 = "foo" - data2 = "bar" --- -2.32.0 - - -From 97078c7fa8a724c7c71f9850d31fc401239da228 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sat, 18 Mar 2017 22:34:19 +0900 -Subject: [PATCH 6/6] pkey: reimplement PKey::DH#compute_key and - PKey::EC#dh_compute_key - -Use the new OpenSSL::PKey::PKey#derive instead of the raw -{EC,}DH_compute_key(), mainly to reduce amount of the C code. ---- - ext/openssl/lib/openssl/pkey.rb | 33 +++++++++++++++++++++++++++++++ - ext/openssl/ossl_pkey_dh.c | 35 --------------------------------- - ext/openssl/ossl_pkey_ec.c | 32 ------------------------------ - 3 files changed, 33 insertions(+), 67 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index 9cc3276356..be60ac2beb 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -9,6 +9,24 @@ - module OpenSSL::PKey - class DH - include OpenSSL::Marshal -+ -+ # :call-seq: -+ # dh.compute_key(pub_bn) -> string -+ # -+ # Returns a String containing a shared secret computed from the other -+ # party's public value. -+ # -+ # This method is provided for backwards compatibility, and calls #derive -+ # internally. -+ # -+ # === Parameters -+ # * _pub_bn_ is a OpenSSL::BN, *not* the DH instance returned by -+ # DH#public_key as that contains the DH parameters only. -+ def compute_key(pub_bn) -+ peer = dup -+ peer.set_key(pub_bn, nil) -+ derive(peer) -+ end - end - - class DSA -@@ -18,7 +36,22 @@ class DSA - if defined?(EC) - class EC - include OpenSSL::Marshal -+ -+ # :call-seq: -+ # ec.dh_compute_key(pubkey) -> string -+ # -+ # Derives a shared secret by ECDH. _pubkey_ must be an instance of -+ # OpenSSL::PKey::EC::Point and must belong to the same group. -+ # -+ # This method is provided for backwards compatibility, and calls #derive -+ # internally. -+ def dh_compute_key(pubkey) -+ peer = OpenSSL::PKey::EC.new(group) -+ peer.public_key = pubkey -+ derive(peer) -+ end - end -+ - class EC::Point - # :call-seq: - # point.to_bn([conversion_form]) -> OpenSSL::BN -diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c -index bc50e5566b..5bc1c49ca1 100644 ---- a/ext/openssl/ossl_pkey_dh.c -+++ b/ext/openssl/ossl_pkey_dh.c -@@ -476,40 +476,6 @@ ossl_dh_generate_key(VALUE self) - return self; - } - --/* -- * call-seq: -- * dh.compute_key(pub_bn) -> aString -- * -- * Returns a String containing a shared secret computed from the other party's public value. -- * See DH_compute_key() for further information. -- * -- * === Parameters -- * * _pub_bn_ is a OpenSSL::BN, *not* the DH instance returned by -- * DH#public_key as that contains the DH parameters only. -- */ --static VALUE --ossl_dh_compute_key(VALUE self, VALUE pub) --{ -- DH *dh; -- const BIGNUM *pub_key, *dh_p; -- VALUE str; -- int len; -- -- GetDH(self, dh); -- DH_get0_pqg(dh, &dh_p, NULL, NULL); -- if (!dh_p) -- ossl_raise(eDHError, "incomplete DH"); -- pub_key = GetBNPtr(pub); -- len = DH_size(dh); -- str = rb_str_new(0, len); -- if ((len = DH_compute_key((unsigned char *)RSTRING_PTR(str), pub_key, dh)) < 0) { -- ossl_raise(eDHError, NULL); -- } -- rb_str_set_len(str, len); -- -- return str; --} -- - /* - * Document-method: OpenSSL::PKey::DH#set_pqg - * call-seq: -@@ -587,7 +553,6 @@ Init_ossl_dh(void) - rb_define_method(cDH, "public_key", ossl_dh_to_public_key, 0); - rb_define_method(cDH, "params_ok?", ossl_dh_check_params, 0); - rb_define_method(cDH, "generate_key!", ossl_dh_generate_key, 0); -- rb_define_method(cDH, "compute_key", ossl_dh_compute_key, 1); - - DEF_OSSL_PKEY_BN(cDH, dh, p); - DEF_OSSL_PKEY_BN(cDH, dh, q); -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index 6fe2533e2a..c2534251c3 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -487,37 +487,6 @@ static VALUE ossl_ec_key_check_key(VALUE self) - return Qtrue; - } - --/* -- * call-seq: -- * key.dh_compute_key(pubkey) => String -- * -- * See the OpenSSL documentation for ECDH_compute_key() -- */ --static VALUE ossl_ec_key_dh_compute_key(VALUE self, VALUE pubkey) --{ -- EC_KEY *ec; -- EC_POINT *point; -- int buf_len; -- VALUE str; -- -- GetEC(self, ec); -- GetECPoint(pubkey, point); -- --/* BUG: need a way to figure out the maximum string size */ -- buf_len = 1024; -- str = rb_str_new(0, buf_len); --/* BUG: take KDF as a block */ -- buf_len = ECDH_compute_key(RSTRING_PTR(str), buf_len, point, ec, NULL); -- if (buf_len < 0) -- ossl_raise(eECError, "ECDH_compute_key"); -- -- rb_str_resize(str, buf_len); -- -- return str; --} -- --/* sign_setup */ -- - /* - * call-seq: - * key.dsa_sign_asn1(data) => String -@@ -1657,7 +1626,6 @@ void Init_ossl_ec(void) - rb_define_alias(cEC, "generate_key", "generate_key!"); - rb_define_method(cEC, "check_key", ossl_ec_key_check_key, 0); - -- rb_define_method(cEC, "dh_compute_key", ossl_ec_key_dh_compute_key, 1); - rb_define_method(cEC, "dsa_sign_asn1", ossl_ec_key_dsa_sign_asn1, 1); - rb_define_method(cEC, "dsa_verify_asn1", ossl_ec_key_dsa_verify_asn1, 2); - /* do_sign/do_verify */ --- -2.32.0 - diff --git a/ruby-3.1.0-Allocate-EVP_PKEY-on-initialize.patch b/ruby-3.1.0-Allocate-EVP_PKEY-on-initialize.patch deleted file mode 100644 index 33789b4..0000000 --- a/ruby-3.1.0-Allocate-EVP_PKEY-on-initialize.patch +++ /dev/null @@ -1,630 +0,0 @@ -From 316cb2a41f154e4663d7e7fead60cfc0bfa86af9 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 12 Apr 2021 13:55:10 +0900 -Subject: [PATCH 1/2] pkey: do not check NULL argument in ossl_pkey_new() - -Passing NULL to ossl_pkey_new() makes no sense in the first place, and -in fact it is ensured not to be NULL in all cases. ---- - ext/openssl/ossl_pkey.c | 6 +----- - ext/openssl/ossl_pkey.h | 1 + - 2 files changed, 2 insertions(+), 5 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index f9f5162e..820e4a2c 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -38,12 +38,8 @@ static VALUE - pkey_new0(EVP_PKEY *pkey) - { - VALUE klass, obj; -- int type; - -- if (!pkey || (type = EVP_PKEY_base_id(pkey)) == EVP_PKEY_NONE) -- ossl_raise(rb_eRuntimeError, "pkey is empty"); -- -- switch (type) { -+ switch (EVP_PKEY_base_id(pkey)) { - #if !defined(OPENSSL_NO_RSA) - case EVP_PKEY_RSA: klass = cRSA; break; - #endif -diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h -index 4beede22..f0476780 100644 ---- a/ext/openssl/ossl_pkey.h -+++ b/ext/openssl/ossl_pkey.h -@@ -35,6 +35,7 @@ extern const rb_data_type_t ossl_evp_pkey_type; - } \ - } while (0) - -+/* Takes ownership of the EVP_PKEY */ - VALUE ossl_pkey_new(EVP_PKEY *); - void ossl_pkey_check_public_key(const EVP_PKEY *); - EVP_PKEY *ossl_pkey_read_generic(BIO *, VALUE); - -From 74f6c6175688502a5bf27ae35367616858630c0f Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 12 Apr 2021 18:32:40 +0900 -Subject: [PATCH 2/2] pkey: allocate EVP_PKEY on #initialize - -Allocate an EVP_PKEY when the content is ready: when #initialize -or #initialize_copy is called, rather than when a T_DATA is allocated. -This is more natural because the lower level API has been deprecated -and an EVP_PKEY is becoming the minimum unit of handling keys. ---- - ext/openssl/ossl_pkey.c | 15 ++---- - ext/openssl/ossl_pkey.h | 15 ++---- - ext/openssl/ossl_pkey_dh.c | 71 +++++++++++++++++++-------- - ext/openssl/ossl_pkey_dsa.c | 93 ++++++++++++++++++++--------------- - ext/openssl/ossl_pkey_ec.c | 91 +++++++++++++++++++---------------- - ext/openssl/ossl_pkey_rsa.c | 96 ++++++++++++++++++++++--------------- - 6 files changed, 218 insertions(+), 163 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 820e4a2c..ea75d63f 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -54,8 +54,8 @@ pkey_new0(EVP_PKEY *pkey) - #endif - default: klass = cPKey; break; - } -- obj = NewPKey(klass); -- SetPKey(obj, pkey); -+ obj = rb_obj_alloc(klass); -+ RTYPEDDATA_DATA(obj) = pkey; - return obj; - } - -@@ -511,16 +511,7 @@ DupPKeyPtr(VALUE obj) - static VALUE - ossl_pkey_alloc(VALUE klass) - { -- EVP_PKEY *pkey; -- VALUE obj; -- -- obj = NewPKey(klass); -- if (!(pkey = EVP_PKEY_new())) { -- ossl_raise(ePKeyError, NULL); -- } -- SetPKey(obj, pkey); -- -- return obj; -+ return TypedData_Wrap_Struct(klass, &ossl_evp_pkey_type, NULL); - } - - /* -diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h -index f0476780..ed18bc69 100644 ---- a/ext/openssl/ossl_pkey.h -+++ b/ext/openssl/ossl_pkey.h -@@ -15,19 +15,10 @@ extern VALUE cPKey; - extern VALUE ePKeyError; - extern const rb_data_type_t ossl_evp_pkey_type; - --#define OSSL_PKEY_SET_PRIVATE(obj) rb_iv_set((obj), "private", Qtrue) --#define OSSL_PKEY_SET_PUBLIC(obj) rb_iv_set((obj), "private", Qfalse) --#define OSSL_PKEY_IS_PRIVATE(obj) (rb_iv_get((obj), "private") == Qtrue) -+/* For ENGINE */ -+#define OSSL_PKEY_SET_PRIVATE(obj) rb_ivar_set((obj), rb_intern("private"), Qtrue) -+#define OSSL_PKEY_IS_PRIVATE(obj) (rb_attr_get((obj), rb_intern("private")) == Qtrue) - --#define NewPKey(klass) \ -- TypedData_Wrap_Struct((klass), &ossl_evp_pkey_type, 0) --#define SetPKey(obj, pkey) do { \ -- if (!(pkey)) { \ -- rb_raise(rb_eRuntimeError, "PKEY wasn't initialized!"); \ -- } \ -- RTYPEDDATA_DATA(obj) = (pkey); \ -- OSSL_PKEY_SET_PUBLIC(obj); \ --} while (0) - #define GetPKey(obj, pkey) do {\ - TypedData_Get_Struct((obj), EVP_PKEY, &ossl_evp_pkey_type, (pkey)); \ - if (!(pkey)) { \ -diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c -index ca782bbe..04c11b21 100644 ---- a/ext/openssl/ossl_pkey_dh.c -+++ b/ext/openssl/ossl_pkey_dh.c -@@ -72,34 +72,57 @@ static VALUE - ossl_dh_initialize(int argc, VALUE *argv, VALUE self) - { - EVP_PKEY *pkey; -+ int type; - DH *dh; -- BIO *in; -+ BIO *in = NULL; - VALUE arg; - -- GetPKey(self, pkey); -+ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); -+ - /* The DH.new(size, generator) form is handled by lib/openssl/pkey.rb */ - if (rb_scan_args(argc, argv, "01", &arg) == 0) { - dh = DH_new(); - if (!dh) - ossl_raise(eDHError, "DH_new"); -+ goto legacy; - } -- else { -- arg = ossl_to_der_if_possible(arg); -- in = ossl_obj2bio(&arg); -- dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); -- if (!dh){ -- OSSL_BIO_reset(in); -- dh = d2i_DHparams_bio(in, NULL); -- } -- BIO_free(in); -- if (!dh) { -- ossl_raise(eDHError, NULL); -- } -+ -+ arg = ossl_to_der_if_possible(arg); -+ in = ossl_obj2bio(&arg); -+ -+ /* -+ * On OpenSSL <= 1.1.1 and current versions of LibreSSL, the generic -+ * routine does not support DER-encoded parameters -+ */ -+ dh = d2i_DHparams_bio(in, NULL); -+ if (dh) -+ goto legacy; -+ OSSL_BIO_reset(in); -+ -+ pkey = ossl_pkey_read_generic(in, Qnil); -+ BIO_free(in); -+ if (!pkey) -+ ossl_raise(eDHError, "could not parse pkey"); -+ -+ type = EVP_PKEY_base_id(pkey); -+ if (type != EVP_PKEY_DH) { -+ EVP_PKEY_free(pkey); -+ rb_raise(eDHError, "incorrect pkey type: %s", OBJ_nid2sn(type)); - } -- if (!EVP_PKEY_assign_DH(pkey, dh)) { -- DH_free(dh); -- ossl_raise(eDHError, NULL); -+ RTYPEDDATA_DATA(self) = pkey; -+ return self; -+ -+ legacy: -+ BIO_free(in); -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_DH(pkey, dh) != 1) { -+ EVP_PKEY_free(pkey); -+ DH_free(dh); -+ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); - } -+ RTYPEDDATA_DATA(self) = pkey; - return self; - } - -@@ -110,15 +133,14 @@ ossl_dh_initialize_copy(VALUE self, VALUE other) - DH *dh, *dh_other; - const BIGNUM *pub, *priv; - -- GetPKey(self, pkey); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) -- ossl_raise(eDHError, "DH already initialized"); -+ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - GetDH(other, dh_other); - - dh = DHparams_dup(dh_other); - if (!dh) - ossl_raise(eDHError, "DHparams_dup"); -- EVP_PKEY_assign_DH(pkey, dh); - - DH_get0_key(dh_other, &pub, &priv); - if (pub) { -@@ -133,6 +155,13 @@ ossl_dh_initialize_copy(VALUE self, VALUE other) - DH_set0_key(dh, pub2, priv2); - } - -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_DH(pkey, dh) != 1) { -+ EVP_PKEY_free(pkey); -+ DH_free(dh); -+ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); -+ } -+ RTYPEDDATA_DATA(self) = pkey; - return self; - } - -diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c -index 7af00eeb..15724548 100644 ---- a/ext/openssl/ossl_pkey_dsa.c -+++ b/ext/openssl/ossl_pkey_dsa.c -@@ -83,50 +83,59 @@ VALUE eDSAError; - static VALUE - ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) - { -- EVP_PKEY *pkey, *tmp; -- DSA *dsa = NULL; -- BIO *in; -+ EVP_PKEY *pkey; -+ DSA *dsa; -+ BIO *in = NULL; - VALUE arg, pass; -+ int type; -+ -+ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - -- GetPKey(self, pkey); - /* The DSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ - rb_scan_args(argc, argv, "02", &arg, &pass); - if (argc == 0) { - dsa = DSA_new(); - if (!dsa) - ossl_raise(eDSAError, "DSA_new"); -+ goto legacy; - } -- else { -- pass = ossl_pem_passwd_value(pass); -- arg = ossl_to_der_if_possible(arg); -- in = ossl_obj2bio(&arg); -- -- tmp = ossl_pkey_read_generic(in, pass); -- if (tmp) { -- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_DSA) -- rb_raise(eDSAError, "incorrect pkey type: %s", -- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); -- dsa = EVP_PKEY_get1_DSA(tmp); -- EVP_PKEY_free(tmp); -- } -- if (!dsa) { -- OSSL_BIO_reset(in); --#define PEM_read_bio_DSAPublicKey(bp,x,cb,u) (DSA *)PEM_ASN1_read_bio( \ -- (d2i_of_void *)d2i_DSAPublicKey, PEM_STRING_DSA_PUBLIC, (bp), (void **)(x), (cb), (u)) -- dsa = PEM_read_bio_DSAPublicKey(in, NULL, NULL, NULL); --#undef PEM_read_bio_DSAPublicKey -- } -- BIO_free(in); -- if (!dsa) { -- ossl_clear_error(); -- ossl_raise(eDSAError, "Neither PUB key nor PRIV key"); -- } -- } -- if (!EVP_PKEY_assign_DSA(pkey, dsa)) { -- DSA_free(dsa); -- ossl_raise(eDSAError, NULL); -+ -+ pass = ossl_pem_passwd_value(pass); -+ arg = ossl_to_der_if_possible(arg); -+ in = ossl_obj2bio(&arg); -+ -+ /* DER-encoded DSAPublicKey format isn't supported by the generic routine */ -+ dsa = (DSA *)PEM_ASN1_read_bio((d2i_of_void *)d2i_DSAPublicKey, -+ PEM_STRING_DSA_PUBLIC, -+ in, NULL, NULL, NULL); -+ if (dsa) -+ goto legacy; -+ OSSL_BIO_reset(in); -+ -+ pkey = ossl_pkey_read_generic(in, pass); -+ BIO_free(in); -+ if (!pkey) -+ ossl_raise(eDSAError, "Neither PUB key nor PRIV key"); -+ -+ type = EVP_PKEY_base_id(pkey); -+ if (type != EVP_PKEY_DSA) { -+ EVP_PKEY_free(pkey); -+ rb_raise(eDSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); - } -+ RTYPEDDATA_DATA(self) = pkey; -+ return self; - -+ legacy: -+ BIO_free(in); -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_DSA(pkey, dsa) != 1) { -+ EVP_PKEY_free(pkey); -+ DSA_free(dsa); -+ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); -+ } -+ RTYPEDDATA_DATA(self) = pkey; - return self; - } - -@@ -136,16 +145,24 @@ ossl_dsa_initialize_copy(VALUE self, VALUE other) - EVP_PKEY *pkey; - DSA *dsa, *dsa_new; - -- GetPKey(self, pkey); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) -- ossl_raise(eDSAError, "DSA already initialized"); -+ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - GetDSA(other, dsa); - -- dsa_new = ASN1_dup((i2d_of_void *)i2d_DSAPrivateKey, (d2i_of_void *)d2i_DSAPrivateKey, (char *)dsa); -+ dsa_new = (DSA *)ASN1_dup((i2d_of_void *)i2d_DSAPrivateKey, -+ (d2i_of_void *)d2i_DSAPrivateKey, -+ (char *)dsa); - if (!dsa_new) - ossl_raise(eDSAError, "ASN1_dup"); - -- EVP_PKEY_assign_DSA(pkey, dsa_new); -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_DSA(pkey, dsa_new) != 1) { -+ EVP_PKEY_free(pkey); -+ DSA_free(dsa_new); -+ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); -+ } -+ RTYPEDDATA_DATA(self) = pkey; - - return self; - } -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index db80d112..71e63969 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -114,13 +114,16 @@ ossl_ec_key_s_generate(VALUE klass, VALUE arg) - VALUE obj; - - obj = rb_obj_alloc(klass); -- GetPKey(obj, pkey); - - ec = ec_key_new_from_group(arg); -- if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec) != 1) { -+ EVP_PKEY_free(pkey); - EC_KEY_free(ec); - ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); - } -+ RTYPEDDATA_DATA(obj) = pkey; -+ - if (!EC_KEY_generate_key(ec)) - ossl_raise(eECError, "EC_KEY_generate_key"); - -@@ -141,51 +144,54 @@ ossl_ec_key_s_generate(VALUE klass, VALUE arg) - static VALUE ossl_ec_key_initialize(int argc, VALUE *argv, VALUE self) - { - EVP_PKEY *pkey; -- EC_KEY *ec = NULL; -+ EC_KEY *ec; -+ BIO *in; - VALUE arg, pass; -+ int type; - -- GetPKey(self, pkey); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) -- ossl_raise(eECError, "EC_KEY already initialized"); -+ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - - rb_scan_args(argc, argv, "02", &arg, &pass); -- - if (NIL_P(arg)) { - if (!(ec = EC_KEY_new())) -- ossl_raise(eECError, NULL); -- } else if (rb_obj_is_kind_of(arg, cEC)) { -- EC_KEY *other_ec = NULL; -+ ossl_raise(eECError, "EC_KEY_new"); -+ goto legacy; -+ } -+ else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { -+ ec = ec_key_new_from_group(arg); -+ goto legacy; -+ } - -- GetEC(arg, other_ec); -- if (!(ec = EC_KEY_dup(other_ec))) -- ossl_raise(eECError, NULL); -- } else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { -- ec = ec_key_new_from_group(arg); -- } else { -- BIO *in = ossl_obj2bio(&arg); -- EVP_PKEY *tmp; -- pass = ossl_pem_passwd_value(pass); -- tmp = ossl_pkey_read_generic(in, pass); -- if (tmp) { -- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_EC) -- rb_raise(eECError, "incorrect pkey type: %s", -- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); -- ec = EVP_PKEY_get1_EC_KEY(tmp); -- EVP_PKEY_free(tmp); -- } -- BIO_free(in); -+ pass = ossl_pem_passwd_value(pass); -+ arg = ossl_to_der_if_possible(arg); -+ in = ossl_obj2bio(&arg); - -- if (!ec) { -- ossl_clear_error(); -- ec = ec_key_new_from_group(arg); -- } -+ pkey = ossl_pkey_read_generic(in, pass); -+ BIO_free(in); -+ if (!pkey) { -+ ossl_clear_error(); -+ ec = ec_key_new_from_group(arg); -+ goto legacy; - } - -- if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { -- EC_KEY_free(ec); -- ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); -+ type = EVP_PKEY_base_id(pkey); -+ if (type != EVP_PKEY_EC) { -+ EVP_PKEY_free(pkey); -+ rb_raise(eDSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); - } -+ RTYPEDDATA_DATA(self) = pkey; -+ return self; - -+ legacy: -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec) != 1) { -+ EVP_PKEY_free(pkey); -+ EC_KEY_free(ec); -+ ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); -+ } -+ RTYPEDDATA_DATA(self) = pkey; - return self; - } - -@@ -195,18 +201,21 @@ ossl_ec_key_initialize_copy(VALUE self, VALUE other) - EVP_PKEY *pkey; - EC_KEY *ec, *ec_new; - -- GetPKey(self, pkey); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) -- ossl_raise(eECError, "EC already initialized"); -+ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - GetEC(other, ec); - - ec_new = EC_KEY_dup(ec); - if (!ec_new) - ossl_raise(eECError, "EC_KEY_dup"); -- if (!EVP_PKEY_assign_EC_KEY(pkey, ec_new)) { -- EC_KEY_free(ec_new); -- ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); -+ -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_EC_KEY(pkey, ec_new) != 1) { -+ EC_KEY_free(ec_new); -+ ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); - } -+ RTYPEDDATA_DATA(self) = pkey; - - return self; - } -diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c -index 8ebd3ec5..b8dbc0e1 100644 ---- a/ext/openssl/ossl_pkey_rsa.c -+++ b/ext/openssl/ossl_pkey_rsa.c -@@ -76,51 +76,62 @@ VALUE eRSAError; - static VALUE - ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) - { -- EVP_PKEY *pkey, *tmp; -- RSA *rsa = NULL; -- BIO *in; -+ EVP_PKEY *pkey; -+ RSA *rsa; -+ BIO *in = NULL; - VALUE arg, pass; -+ int type; -+ -+ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - -- GetPKey(self, pkey); - /* The RSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ - rb_scan_args(argc, argv, "02", &arg, &pass); - if (argc == 0) { - rsa = RSA_new(); - if (!rsa) - ossl_raise(eRSAError, "RSA_new"); -+ goto legacy; - } -- else { -- pass = ossl_pem_passwd_value(pass); -- arg = ossl_to_der_if_possible(arg); -- in = ossl_obj2bio(&arg); -- -- tmp = ossl_pkey_read_generic(in, pass); -- if (tmp) { -- if (EVP_PKEY_base_id(tmp) != EVP_PKEY_RSA) -- rb_raise(eRSAError, "incorrect pkey type: %s", -- OBJ_nid2sn(EVP_PKEY_base_id(tmp))); -- rsa = EVP_PKEY_get1_RSA(tmp); -- EVP_PKEY_free(tmp); -- } -- if (!rsa) { -- OSSL_BIO_reset(in); -- rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); -- } -- if (!rsa) { -- OSSL_BIO_reset(in); -- rsa = d2i_RSAPublicKey_bio(in, NULL); -- } -- BIO_free(in); -- if (!rsa) { -- ossl_clear_error(); -- ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); -- } -- } -- if (!EVP_PKEY_assign_RSA(pkey, rsa)) { -- RSA_free(rsa); -- ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); -+ -+ pass = ossl_pem_passwd_value(pass); -+ arg = ossl_to_der_if_possible(arg); -+ in = ossl_obj2bio(&arg); -+ -+ /* First try RSAPublicKey format */ -+ rsa = d2i_RSAPublicKey_bio(in, NULL); -+ if (rsa) -+ goto legacy; -+ OSSL_BIO_reset(in); -+ rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); -+ if (rsa) -+ goto legacy; -+ OSSL_BIO_reset(in); -+ -+ /* Use the generic routine */ -+ pkey = ossl_pkey_read_generic(in, pass); -+ BIO_free(in); -+ if (!pkey) -+ ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); -+ -+ type = EVP_PKEY_base_id(pkey); -+ if (type != EVP_PKEY_RSA) { -+ EVP_PKEY_free(pkey); -+ rb_raise(eRSAError, "incorrect pkey type: %s", OBJ_nid2sn(type)); - } -+ RTYPEDDATA_DATA(self) = pkey; -+ return self; - -+ legacy: -+ BIO_free(in); -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_RSA(pkey, rsa) != 1) { -+ EVP_PKEY_free(pkey); -+ RSA_free(rsa); -+ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); -+ } -+ RTYPEDDATA_DATA(self) = pkey; - return self; - } - -@@ -130,16 +141,23 @@ ossl_rsa_initialize_copy(VALUE self, VALUE other) - EVP_PKEY *pkey; - RSA *rsa, *rsa_new; - -- GetPKey(self, pkey); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_NONE) -- ossl_raise(eRSAError, "RSA already initialized"); -+ TypedData_Get_Struct(self, EVP_PKEY, &ossl_evp_pkey_type, pkey); -+ if (pkey) -+ rb_raise(rb_eTypeError, "pkey already initialized"); - GetRSA(other, rsa); - -- rsa_new = ASN1_dup((i2d_of_void *)i2d_RSAPrivateKey, (d2i_of_void *)d2i_RSAPrivateKey, (char *)rsa); -+ rsa_new = (RSA *)ASN1_dup((i2d_of_void *)i2d_RSAPrivateKey, -+ (d2i_of_void *)d2i_RSAPrivateKey, -+ (char *)rsa); - if (!rsa_new) - ossl_raise(eRSAError, "ASN1_dup"); - -- EVP_PKEY_assign_RSA(pkey, rsa_new); -+ pkey = EVP_PKEY_new(); -+ if (!pkey || EVP_PKEY_assign_RSA(pkey, rsa_new) != 1) { -+ RSA_free(rsa_new); -+ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); -+ } -+ RTYPEDDATA_DATA(self) = pkey; - - return self; - } - diff --git a/ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch b/ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch deleted file mode 100644 index 679411a..0000000 --- a/ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch +++ /dev/null @@ -1,358 +0,0 @@ -From f2cf3afc6fa1e13e960f732c0bc658ad408ee219 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 12 Jun 2020 14:12:59 +0900 -Subject: [PATCH 1/3] pkey: fix potential memory leak in PKey#sign - -Fix potential leak of EVP_MD_CTX object in an error path. This path is -normally unreachable, since the size of a signature generated by any -supported algorithms would not be larger than LONG_MAX. ---- - ext/openssl/ossl_pkey.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index df8b425a0f..7488190e0e 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -777,8 +777,10 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_DigestSign"); - } -- if (siglen > LONG_MAX) -+ if (siglen > LONG_MAX) { -+ EVP_MD_CTX_free(ctx); - rb_raise(ePKeyError, "signature would be too large"); -+ } - sig = ossl_str_new(NULL, (long)siglen, &state); - if (state) { - EVP_MD_CTX_free(ctx); -@@ -799,8 +801,10 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_DigestSignFinal"); - } -- if (siglen > LONG_MAX) -+ if (siglen > LONG_MAX) { -+ EVP_MD_CTX_free(ctx); - rb_raise(ePKeyError, "signature would be too large"); -+ } - sig = ossl_str_new(NULL, (long)siglen, &state); - if (state) { - EVP_MD_CTX_free(ctx); --- -2.32.0 - - -From 8b30ce20eb9e03180c28288e29a96308e594f860 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 2 Apr 2021 23:58:48 +0900 -Subject: [PATCH 2/3] pkey: prepare pkey_ctx_apply_options() for usage by other - operations - -The routine to apply Hash to EVP_PKEY_CTX_ctrl_str() is currently used -by key generation, but it is useful for other operations too. Let's -change it to a slightly more generic name. ---- - ext/openssl/ossl_pkey.c | 22 ++++++++++++++-------- - 1 file changed, 14 insertions(+), 8 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 7488190e0e..fed4a2b81f 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -198,7 +198,7 @@ ossl_pkey_new_from_data(int argc, VALUE *argv, VALUE self) - } - - static VALUE --pkey_gen_apply_options_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ctx_v)) -+pkey_ctx_apply_options_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ctx_v)) - { - VALUE key = rb_ary_entry(i, 0), value = rb_ary_entry(i, 1); - EVP_PKEY_CTX *ctx = (EVP_PKEY_CTX *)ctx_v; -@@ -214,15 +214,25 @@ pkey_gen_apply_options_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, ctx_v)) - } - - static VALUE --pkey_gen_apply_options0(VALUE args_v) -+pkey_ctx_apply_options0(VALUE args_v) - { - VALUE *args = (VALUE *)args_v; - - rb_block_call(args[1], rb_intern("each"), 0, NULL, -- pkey_gen_apply_options_i, args[0]); -+ pkey_ctx_apply_options_i, args[0]); - return Qnil; - } - -+static void -+pkey_ctx_apply_options(EVP_PKEY_CTX *ctx, VALUE options, int *state) -+{ -+ VALUE args[2]; -+ args[0] = (VALUE)ctx; -+ args[1] = options; -+ -+ rb_protect(pkey_ctx_apply_options0, (VALUE)args, state); -+} -+ - struct pkey_blocking_generate_arg { - EVP_PKEY_CTX *ctx; - EVP_PKEY *pkey; -@@ -330,11 +340,7 @@ pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) - } - - if (!NIL_P(options)) { -- VALUE args[2]; -- -- args[0] = (VALUE)ctx; -- args[1] = options; -- rb_protect(pkey_gen_apply_options0, (VALUE)args, &state); -+ pkey_ctx_apply_options(ctx, options, &state); - if (state) { - EVP_PKEY_CTX_free(ctx); - rb_jump_tag(state); --- -2.32.0 - - -From 4c7b0f91da666961d11908b94520db4e09ce4e67 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sat, 18 Jul 2020 20:40:39 +0900 -Subject: [PATCH 3/3] pkey: allow setting algorithm-specific options in #sign - and #verify - -Similarly to OpenSSL::PKey.generate_key and .generate_parameters, let -OpenSSL::PKey::PKey#sign and #verify take an optional parameter for -specifying control strings for EVP_PKEY_CTX_ctrl_str(). ---- - ext/openssl/ossl_pkey.c | 113 ++++++++++++++++++++++------------ - test/openssl/test_pkey_rsa.rb | 34 +++++----- - 2 files changed, 89 insertions(+), 58 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index fed4a2b81f..22e9f19982 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -739,33 +739,51 @@ ossl_pkey_public_to_pem(VALUE self) - } - - /* -- * call-seq: -- * pkey.sign(digest, data) -> String -+ * call-seq: -+ * pkey.sign(digest, data [, options]) -> string - * -- * To sign the String _data_, _digest_, an instance of OpenSSL::Digest, must -- * be provided. The return value is again a String containing the signature. -- * A PKeyError is raised should errors occur. -- * Any previous state of the Digest instance is irrelevant to the signature -- * outcome, the digest instance is reset to its initial state during the -- * operation. -+ * Hashes and signs the +data+ using a message digest algorithm +digest+ and -+ * a private key +pkey+. - * -- * == Example -- * data = 'Sign me!' -- * digest = OpenSSL::Digest.new('SHA256') -- * pkey = OpenSSL::PKey::RSA.new(2048) -- * signature = pkey.sign(digest, data) -+ * See #verify for the verification operation. -+ * -+ * See also the man page EVP_DigestSign(3). -+ * -+ * +digest+:: -+ * A String that represents the message digest algorithm name, or +nil+ -+ * if the PKey type requires no digest algorithm. -+ * For backwards compatibility, this can be an instance of OpenSSL::Digest. -+ * Its state will not affect the signature. -+ * +data+:: -+ * A String. The data to be hashed and signed. -+ * +options+:: -+ * A Hash that contains algorithm specific control operations to \OpenSSL. -+ * See OpenSSL's man page EVP_PKEY_CTX_ctrl_str(3) for details. -+ * +options+ parameter was added in version 2.3. -+ * -+ * Example: -+ * data = "Sign me!" -+ * pkey = OpenSSL::PKey.generate_key("RSA", rsa_keygen_bits: 2048) -+ * signopts = { rsa_padding_mode: "pss" } -+ * signature = pkey.sign("SHA256", data, signopts) -+ * -+ * # Creates a copy of the RSA key pkey, but without the private components -+ * pub_key = pkey.public_key -+ * puts pub_key.verify("SHA256", signature, data, signopts) # => true - */ - static VALUE --ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) -+ossl_pkey_sign(int argc, VALUE *argv, VALUE self) - { - EVP_PKEY *pkey; -+ VALUE digest, data, options, sig; - const EVP_MD *md = NULL; - EVP_MD_CTX *ctx; -+ EVP_PKEY_CTX *pctx; - size_t siglen; - int state; -- VALUE sig; - - pkey = GetPrivPKeyPtr(self); -+ rb_scan_args(argc, argv, "21", &digest, &data, &options); - if (!NIL_P(digest)) - md = ossl_evp_get_digestbyname(digest); - StringValue(data); -@@ -773,10 +791,17 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) - ctx = EVP_MD_CTX_new(); - if (!ctx) - ossl_raise(ePKeyError, "EVP_MD_CTX_new"); -- if (EVP_DigestSignInit(ctx, NULL, md, /* engine */NULL, pkey) < 1) { -+ if (EVP_DigestSignInit(ctx, &pctx, md, /* engine */NULL, pkey) < 1) { - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_DigestSignInit"); - } -+ if (!NIL_P(options)) { -+ pkey_ctx_apply_options(pctx, options, &state); -+ if (state) { -+ EVP_MD_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ } - #if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) - if (EVP_DigestSign(ctx, NULL, &siglen, (unsigned char *)RSTRING_PTR(data), - RSTRING_LEN(data)) < 1) { -@@ -828,35 +853,40 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data) - } - - /* -- * call-seq: -- * pkey.verify(digest, signature, data) -> String -+ * call-seq: -+ * pkey.verify(digest, signature, data [, options]) -> true or false - * -- * To verify the String _signature_, _digest_, an instance of -- * OpenSSL::Digest, must be provided to re-compute the message digest of the -- * original _data_, also a String. The return value is +true+ if the -- * signature is valid, +false+ otherwise. A PKeyError is raised should errors -- * occur. -- * Any previous state of the Digest instance is irrelevant to the validation -- * outcome, the digest instance is reset to its initial state during the -- * operation. -+ * Verifies the +signature+ for the +data+ using a message digest algorithm -+ * +digest+ and a public key +pkey+. - * -- * == Example -- * data = 'Sign me!' -- * digest = OpenSSL::Digest.new('SHA256') -- * pkey = OpenSSL::PKey::RSA.new(2048) -- * signature = pkey.sign(digest, data) -- * pub_key = pkey.public_key -- * puts pub_key.verify(digest, signature, data) # => true -+ * Returns +true+ if the signature is successfully verified, +false+ otherwise. -+ * The caller must check the return value. -+ * -+ * See #sign for the signing operation and an example. -+ * -+ * See also the man page EVP_DigestVerify(3). -+ * -+ * +digest+:: -+ * See #sign. -+ * +signature+:: -+ * A String containing the signature to be verified. -+ * +data+:: -+ * See #sign. -+ * +options+:: -+ * See #sign. +options+ parameter was added in version 2.3. - */ - static VALUE --ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) -+ossl_pkey_verify(int argc, VALUE *argv, VALUE self) - { - EVP_PKEY *pkey; -+ VALUE digest, sig, data, options; - const EVP_MD *md = NULL; - EVP_MD_CTX *ctx; -- int ret; -+ EVP_PKEY_CTX *pctx; -+ int state, ret; - - GetPKey(self, pkey); -+ rb_scan_args(argc, argv, "31", &digest, &sig, &data, &options); - ossl_pkey_check_public_key(pkey); - if (!NIL_P(digest)) - md = ossl_evp_get_digestbyname(digest); -@@ -866,10 +896,17 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) - ctx = EVP_MD_CTX_new(); - if (!ctx) - ossl_raise(ePKeyError, "EVP_MD_CTX_new"); -- if (EVP_DigestVerifyInit(ctx, NULL, md, /* engine */NULL, pkey) < 1) { -+ if (EVP_DigestVerifyInit(ctx, &pctx, md, /* engine */NULL, pkey) < 1) { - EVP_MD_CTX_free(ctx); - ossl_raise(ePKeyError, "EVP_DigestVerifyInit"); - } -+ if (!NIL_P(options)) { -+ pkey_ctx_apply_options(pctx, options, &state); -+ if (state) { -+ EVP_MD_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ } - #if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) - ret = EVP_DigestVerify(ctx, (unsigned char *)RSTRING_PTR(sig), - RSTRING_LEN(sig), (unsigned char *)RSTRING_PTR(data), -@@ -1042,8 +1079,8 @@ Init_ossl_pkey(void) - rb_define_method(cPKey, "public_to_der", ossl_pkey_public_to_der, 0); - rb_define_method(cPKey, "public_to_pem", ossl_pkey_public_to_pem, 0); - -- rb_define_method(cPKey, "sign", ossl_pkey_sign, 2); -- rb_define_method(cPKey, "verify", ossl_pkey_verify, 3); -+ rb_define_method(cPKey, "sign", ossl_pkey_sign, -1); -+ rb_define_method(cPKey, "verify", ossl_pkey_verify, -1); - rb_define_method(cPKey, "derive", ossl_pkey_derive, -1); - - id_private_q = rb_intern("private?"); -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index 88164c3b52..d1e68dbc9f 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -117,27 +117,21 @@ def test_sign_verify - assert_equal false, rsa1024.verify("SHA256", signature1, data) - end - -- def test_digest_state_irrelevant_sign -+ def test_sign_verify_options - key = Fixtures.pkey("rsa1024") -- digest1 = OpenSSL::Digest.new('SHA1') -- digest2 = OpenSSL::Digest.new('SHA1') -- data = 'Sign me!' -- digest1 << 'Change state of digest1' -- sig1 = key.sign(digest1, data) -- sig2 = key.sign(digest2, data) -- assert_equal(sig1, sig2) -- end -- -- def test_digest_state_irrelevant_verify -- key = Fixtures.pkey("rsa1024") -- digest1 = OpenSSL::Digest.new('SHA1') -- digest2 = OpenSSL::Digest.new('SHA1') -- data = 'Sign me!' -- sig = key.sign(digest1, data) -- digest1.reset -- digest1 << 'Change state of digest1' -- assert(key.verify(digest1, sig, data)) -- assert(key.verify(digest2, sig, data)) -+ data = "Sign me!" -+ pssopts = { -+ "rsa_padding_mode" => "pss", -+ "rsa_pss_saltlen" => 20, -+ "rsa_mgf1_md" => "SHA1" -+ } -+ sig_pss = key.sign("SHA256", data, pssopts) -+ assert_equal 128, sig_pss.bytesize -+ assert_equal true, key.verify("SHA256", sig_pss, data, pssopts) -+ assert_equal true, key.verify_pss("SHA256", sig_pss, data, -+ salt_length: 20, mgf1_hash: "SHA1") -+ # Defaults to PKCS #1 v1.5 padding => verification failure -+ assert_equal false, key.verify("SHA256", sig_pss, data) - end - - def test_verify_empty_rsa --- -2.32.0 - diff --git a/ruby-3.1.0-Deprecate-PKey-set_-and-PKey-DH-EC-generate_key.patch b/ruby-3.1.0-Deprecate-PKey-set_-and-PKey-DH-EC-generate_key.patch deleted file mode 100644 index d8f936e..0000000 --- a/ruby-3.1.0-Deprecate-PKey-set_-and-PKey-DH-EC-generate_key.patch +++ /dev/null @@ -1,719 +0,0 @@ -From 46ca47060ca8ef3419ec36c2326a81b442d9b43b Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sun, 12 Dec 2021 01:25:20 +0900 -Subject: [PATCH 1/5] pkey/dh: avoid using DH#set_key in DH#compute_key - -DH#set_key will not work on OpenSSL 3.0 because keys are immutable. -For now, let's reimplement DH#compute_key by manually constructing a -DER-encoded SubjectPublicKeyInfo structure and feeding it to -OpenSSL::PKey.read. - -Eventually, we should implement a new method around EVP_PKEY_fromdata() -and use it instead. ---- - ext/openssl/lib/openssl/pkey.rb | 16 +++++++++++++--- - 1 file changed, 13 insertions(+), 3 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index f6bf5892..5864faa9 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -47,9 +47,19 @@ def public_key - # * _pub_bn_ is a OpenSSL::BN, *not* the DH instance returned by - # DH#public_key as that contains the DH parameters only. - def compute_key(pub_bn) -- peer = dup -- peer.set_key(pub_bn, nil) -- derive(peer) -+ # FIXME: This is constructing an X.509 SubjectPublicKeyInfo and is very -+ # inefficient -+ obj = OpenSSL::ASN1.Sequence([ -+ OpenSSL::ASN1.Sequence([ -+ OpenSSL::ASN1.ObjectId("dhKeyAgreement"), -+ OpenSSL::ASN1.Sequence([ -+ OpenSSL::ASN1.Integer(p), -+ OpenSSL::ASN1.Integer(g), -+ ]), -+ ]), -+ OpenSSL::ASN1.BitString(OpenSSL::ASN1.Integer(pub_bn).to_der), -+ ]) -+ derive(OpenSSL::PKey.read(obj.to_der)) - end - - # :call-seq: - -From fc9aabc18df3c189cc6a76a1470ca908c4f16480 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 17 Dec 2021 02:22:25 +0900 -Subject: [PATCH 2/5] pkey/ec: avoid using EC#public_key= in EC#dh_compute_key - -Similarly to DH#compute_key, work around it by constructing a -SubjectPublicKeyInfo. This should be considered as a temporary -implementation. ---- - ext/openssl/lib/openssl/pkey.rb | 11 ++++++++--- - 1 file changed, 8 insertions(+), 3 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index 5864faa9..ba04cf4b 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -259,9 +259,14 @@ def dsa_verify_asn1(data, sig) - # This method is provided for backwards compatibility, and calls #derive - # internally. - def dh_compute_key(pubkey) -- peer = OpenSSL::PKey::EC.new(group) -- peer.public_key = pubkey -- derive(peer) -+ obj = OpenSSL::ASN1.Sequence([ -+ OpenSSL::ASN1.Sequence([ -+ OpenSSL::ASN1.ObjectId("id-ecPublicKey"), -+ group.to_der, -+ ]), -+ OpenSSL::ASN1.BitString(pubkey.to_octet_string(:uncompressed)), -+ ]) -+ derive(OpenSSL::PKey.read(obj.to_der)) - end - end - - -From 8ee6a582c7e4614eec4f5ca5ab59898fbcb50d2a Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 22 Oct 2021 16:24:07 +0900 -Subject: [PATCH 3/5] pkey/dh: deprecate OpenSSL::PKey::DH#generate_key! - -OpenSSL::PKey::DH#generate_key! will not work on OpenSSL 3.0 because -keys are made immutable. Users should use OpenSSL::PKey.generate_key -instead. ---- - ext/openssl/lib/openssl/pkey.rb | 23 +++++++++++++++++++---- - ext/openssl/ossl_pkey_dh.c | 9 +++++---- - test/openssl/test_pkey_dh.rb | 18 ++++++++++-------- - 3 files changed, 34 insertions(+), 16 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index ba04cf4b..c3e06290 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -71,14 +71,29 @@ def compute_key(pub_bn) - # called first in order to generate the per-session keys before performing - # the actual key exchange. - # -+ # Deprecated in version 3.0. This method is incompatible with -+ # OpenSSL 3.0.0 or later. -+ # - # See also OpenSSL::PKey.generate_key. - # - # Example: -- # dh = OpenSSL::PKey::DH.new(2048) -- # public_key = dh.public_key #contains no private/public key yet -- # public_key.generate_key! -- # puts public_key.private? # => true -+ # # DEPRECATED USAGE: This will not work on OpenSSL 3.0 or later -+ # dh0 = OpenSSL::PKey::DH.new(2048) -+ # dh = dh0.public_key # #public_key only copies the DH parameters (contrary to the name) -+ # dh.generate_key! -+ # puts dh.private? # => true -+ # puts dh0.pub_key == dh.pub_key #=> false -+ # -+ # # With OpenSSL::PKey.generate_key -+ # dh0 = OpenSSL::PKey::DH.new(2048) -+ # dh = OpenSSL::PKey.generate_key(dh0) -+ # puts dh0.pub_key == dh.pub_key #=> false - def generate_key! -+ if OpenSSL::OPENSSL_VERSION_NUMBER >= 0x30000000 -+ raise DHError, "OpenSSL::PKey::DH is immutable on OpenSSL 3.0; " \ -+ "use OpenSSL::PKey.generate_key instead" -+ end -+ - unless priv_key - tmp = OpenSSL::PKey.generate_key(self) - set_key(tmp.pub_key, tmp.priv_key) -diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c -index 04c11b2157..e70d60ed19 100644 ---- a/ext/openssl/ossl_pkey_dh.c -+++ b/ext/openssl/ossl_pkey_dh.c -@@ -58,15 +58,16 @@ VALUE eDHError; - * - * Examples: - * # Creating an instance from scratch -- * dh = DH.new -+ * # Note that this is deprecated and will not work on OpenSSL 3.0 or later. -+ * dh = OpenSSL::PKey::DH.new - * dh.set_pqg(bn_p, nil, bn_g) - * - * # Generating a parameters and a key pair -- * dh = DH.new(2048) # An alias of DH.generate(2048) -+ * dh = OpenSSL::PKey::DH.new(2048) # An alias of OpenSSL::PKey::DH.generate(2048) - * - * # Reading DH parameters -- * dh = DH.new(File.read('parameters.pem')) # -> dh, but no public/private key yet -- * dh.generate_key! # -> dh with public and private key -+ * dh_params = OpenSSL::PKey::DH.new(File.read('parameters.pem')) # loads parameters only -+ * dh = OpenSSL::PKey.generate_key(dh_params) # generates a key pair - */ - static VALUE - ossl_dh_initialize(int argc, VALUE *argv, VALUE self) -diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb -index 757704ca..ac11af38 100644 ---- a/test/openssl/test_pkey_dh.rb -+++ b/test/openssl/test_pkey_dh.rb -@@ -26,14 +26,19 @@ def test_new_break - end - - def test_derive_key -- dh1 = Fixtures.pkey("dh1024").generate_key! -- dh2 = Fixtures.pkey("dh1024").generate_key! -+ params = Fixtures.pkey("dh1024") -+ dh1 = OpenSSL::PKey.generate_key(params) -+ dh2 = OpenSSL::PKey.generate_key(params) - dh1_pub = OpenSSL::PKey.read(dh1.public_to_der) - dh2_pub = OpenSSL::PKey.read(dh2.public_to_der) -+ - z = dh1.g.mod_exp(dh1.priv_key, dh1.p).mod_exp(dh2.priv_key, dh1.p).to_s(2) - assert_equal z, dh1.derive(dh2_pub) - assert_equal z, dh2.derive(dh1_pub) - -+ assert_raise(OpenSSL::PKey::PKeyError) { params.derive(dh1_pub) } -+ assert_raise(OpenSSL::PKey::PKeyError) { dh1_pub.derive(params) } -+ - assert_equal z, dh1.compute_key(dh2.pub_key) - assert_equal z, dh2.compute_key(dh1.pub_key) - end -@@ -74,19 +79,16 @@ def test_public_key - end - - def test_generate_key -- dh = Fixtures.pkey("dh1024").public_key # creates a copy -+ # Deprecated in v3.0.0; incompatible with OpenSSL 3.0 -+ dh = Fixtures.pkey("dh1024").public_key # creates a copy with params only - assert_no_key(dh) - dh.generate_key! - assert_key(dh) -- end - -- def test_key_exchange -- dh = Fixtures.pkey("dh1024") - dh2 = dh.public_key -- dh.generate_key! - dh2.generate_key! - assert_equal(dh.compute_key(dh2.pub_key), dh2.compute_key(dh.pub_key)) -- end -+ end if !openssl?(3, 0, 0) - - def test_params_ok? - dh0 = Fixtures.pkey("dh1024") - -From 5e2e66cce870ea86001dbb0eaa3092badfd37994 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 17 Dec 2021 02:21:42 +0900 -Subject: [PATCH 4/5] pkey/ec: deprecate OpenSSL::PKey::EC#generate_key! - -OpenSSL::PKey::EC#generate_key! will not work on OpenSSL 3.0 because -keys are made immutable. Users should use OpenSSL::PKey.generate_key -instead. ---- - ext/openssl/ossl_pkey_ec.c | 4 ++++ - test/openssl/test_pkey_ec.rb | 21 +++++++++++++-------- - 2 files changed, 17 insertions(+), 8 deletions(-) - -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index db80d112..398a550a 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -442,6 +442,9 @@ ossl_ec_key_to_der(VALUE self) - */ - static VALUE ossl_ec_key_generate_key(VALUE self) - { -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); -+#else - EC_KEY *ec; - - GetEC(self, ec); -@@ -449,6 +452,7 @@ static VALUE ossl_ec_key_generate_key(VALUE self) - ossl_raise(eECError, "EC_KEY_generate_key"); - - return self; -+#endif - } - - /* -diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb -index 3f5958af..33f78a4c 100644 ---- a/test/openssl/test_pkey_ec.rb -+++ b/test/openssl/test_pkey_ec.rb -@@ -13,15 +13,13 @@ def test_ec_key - # FIPS-selftest failure on some environment, so skip for now. - next if ["Oakley", "X25519"].any? { |n| curve_name.start_with?(n) } - -- key = OpenSSL::PKey::EC.new(curve_name) -- key.generate_key! -- -+ key = OpenSSL::PKey::EC.generate(curve_name) - assert_predicate key, :private? - assert_predicate key, :public? - assert_nothing_raised { key.check_key } - end - -- key1 = OpenSSL::PKey::EC.new("prime256v1").generate_key! -+ key1 = OpenSSL::PKey::EC.generate("prime256v1") - - key2 = OpenSSL::PKey::EC.new - key2.group = key1.group -@@ -52,6 +50,13 @@ def test_generate - assert_equal(true, ec.private?) - end - -+ def test_generate_key -+ ec = OpenSSL::PKey::EC.new("prime256v1") -+ assert_equal false, ec.private? -+ ec.generate_key! -+ assert_equal true, ec.private? -+ end if !openssl?(3, 0, 0) -+ - def test_marshal - key = Fixtures.pkey("p256") - deserialized = Marshal.load(Marshal.dump(key)) -@@ -136,7 +141,7 @@ def test_sign_verify_raw - end - - def test_dsa_sign_asn1_FIPS186_3 -- key = OpenSSL::PKey::EC.new("prime256v1").generate_key! -+ key = OpenSSL::PKey::EC.generate("prime256v1") - size = key.group.order.num_bits / 8 + 1 - dgst = (1..size).to_a.pack('C*') - sig = key.dsa_sign_asn1(dgst) -@@ -145,8 +150,8 @@ def test_dsa_sign_asn1_FIPS186_3 - end - - def test_dh_compute_key -- key_a = OpenSSL::PKey::EC.new("prime256v1").generate_key! -- key_b = OpenSSL::PKey::EC.new(key_a.group).generate_key! -+ key_a = OpenSSL::PKey::EC.generate("prime256v1") -+ key_b = OpenSSL::PKey::EC.generate(key_a.group) - - pub_a = key_a.public_key - pub_b = key_b.public_key -@@ -276,7 +281,7 @@ def test_ec_group - - def test_ec_point - group = OpenSSL::PKey::EC::Group.new("prime256v1") -- key = OpenSSL::PKey::EC.new(group).generate_key! -+ key = OpenSSL::PKey::EC.generate(group) - point = key.public_key - - point2 = OpenSSL::PKey::EC::Point.new(group, point.to_bn) - -From 6848d2d969d90e6a400d89848ecec21076b87888 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Tue, 21 Sep 2021 18:29:59 +0900 -Subject: [PATCH 5/5] pkey: deprecate PKey#set_* methods - -OpenSSL 3.0 made EVP_PKEY immutable. This means we can only have a const -pointer of the low level struct and the following methods can no longer -be provided when linked against OpenSSL 3.0: - - - OpenSSL::PKey::RSA#set_key - - OpenSSL::PKey::RSA#set_factors - - OpenSSL::PKey::RSA#set_crt_params - - OpenSSL::PKey::DSA#set_pqg - - OpenSSL::PKey::DSA#set_key - - OpenSSL::PKey::DH#set_pqg - - OpenSSL::PKey::DH#set_key - - OpenSSL::PKey::EC#group= - - OpenSSL::PKey::EC#private_key= - - OpenSSL::PKey::EC#public_key= - -There is no direct replacement for this functionality at the moment. -I plan to introduce a wrapper around EVP_PKEY_fromdata(), which takes -all key components at once to construct an EVP_PKEY. ---- - ext/openssl/ossl_pkey.h | 16 +++++++ - ext/openssl/ossl_pkey_ec.c | 12 +++++ - test/openssl/test_pkey_dh.rb | 38 +++++++++++----- - test/openssl/test_pkey_dsa.rb | 8 +++- - test/openssl/test_pkey_ec.rb | 58 ++++++++++++++---------- - test/openssl/test_pkey_rsa.rb | 85 ++++++++++++++++++++++------------- - 6 files changed, 149 insertions(+), 68 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h -index 4beede22..4536e58e 100644 ---- a/ext/openssl/ossl_pkey.h -+++ b/ext/openssl/ossl_pkey.h -@@ -116,6 +116,7 @@ static VALUE ossl_##_keytype##_get_##_name(VALUE self) \ - OSSL_PKEY_BN_DEF_GETTER0(_keytype, _type, a2, \ - _type##_get0_##_group(obj, NULL, &bn)) - -+#if !OSSL_OPENSSL_PREREQ(3, 0, 0) - #define OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) \ - /* \ - * call-seq: \ -@@ -173,6 +174,21 @@ static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2) \ - } \ - return self; \ - } -+#else -+#define OSSL_PKEY_BN_DEF_SETTER3(_keytype, _type, _group, a1, a2, a3) \ -+static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2, VALUE v3) \ -+{ \ -+ rb_raise(ePKeyError, \ -+ #_keytype"#set_"#_group"= is incompatible with OpenSSL 3.0"); \ -+} -+ -+#define OSSL_PKEY_BN_DEF_SETTER2(_keytype, _type, _group, a1, a2) \ -+static VALUE ossl_##_keytype##_set_##_group(VALUE self, VALUE v1, VALUE v2) \ -+{ \ -+ rb_raise(ePKeyError, \ -+ #_keytype"#set_"#_group"= is incompatible with OpenSSL 3.0"); \ -+} -+#endif - - #define OSSL_PKEY_BN_DEF_SETTER_OLD(_keytype, _type, _group, _name) \ - /* \ -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index 398a550a..7a6ed1c9 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -251,6 +251,9 @@ ossl_ec_key_get_group(VALUE self) - static VALUE - ossl_ec_key_set_group(VALUE self, VALUE group_v) - { -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); -+#else - EC_KEY *ec; - EC_GROUP *group; - -@@ -261,6 +264,7 @@ ossl_ec_key_set_group(VALUE self, VALUE group_v) - ossl_raise(eECError, "EC_KEY_set_group"); - - return group_v; -+#endif - } - - /* -@@ -289,6 +293,9 @@ static VALUE ossl_ec_key_get_private_key(VALUE self) - */ - static VALUE ossl_ec_key_set_private_key(VALUE self, VALUE private_key) - { -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); -+#else - EC_KEY *ec; - BIGNUM *bn = NULL; - -@@ -307,6 +314,7 @@ static VALUE ossl_ec_key_set_private_key(VALUE self, VALUE private_key) - } - - return private_key; -+#endif - } - - /* -@@ -335,6 +343,9 @@ static VALUE ossl_ec_key_get_public_key(VALUE self) - */ - static VALUE ossl_ec_key_set_public_key(VALUE self, VALUE public_key) - { -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ rb_raise(ePKeyError, "pkeys are immutable on OpenSSL 3.0"); -+#else - EC_KEY *ec; - EC_POINT *point = NULL; - -@@ -353,6 +364,7 @@ static VALUE ossl_ec_key_set_public_key(VALUE self, VALUE public_key) - } - - return public_key; -+#endif - } - - /* -diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb -index ac11af38..161af189 100644 ---- a/test/openssl/test_pkey_dh.rb -+++ b/test/openssl/test_pkey_dh.rb -@@ -107,13 +107,32 @@ def test_params_ok? - end - - def test_dup -- dh = Fixtures.pkey("dh1024") -- dh2 = dh.dup -- assert_equal dh.to_der, dh2.to_der # params -- assert_equal_params dh, dh2 # keys -- dh2.set_pqg(dh2.p + 1, nil, dh2.g) -- assert_not_equal dh2.p, dh.p -- assert_equal dh2.g, dh.g -+ # Parameters only -+ dh1 = Fixtures.pkey("dh1024") -+ dh2 = dh1.dup -+ assert_equal dh1.to_der, dh2.to_der -+ assert_not_equal nil, dh1.p -+ assert_not_equal nil, dh1.g -+ assert_equal [dh1.p, dh1.g], [dh2.p, dh2.g] -+ assert_equal nil, dh1.pub_key -+ assert_equal nil, dh1.priv_key -+ assert_equal [dh1.pub_key, dh1.priv_key], [dh2.pub_key, dh2.priv_key] -+ -+ # PKey is immutable in OpenSSL >= 3.0 -+ if !openssl?(3, 0, 0) -+ dh2.set_pqg(dh2.p + 1, nil, dh2.g) -+ assert_not_equal dh2.p, dh1.p -+ end -+ -+ # With a key pair -+ dh3 = OpenSSL::PKey.generate_key(Fixtures.pkey("dh1024")) -+ dh4 = dh3.dup -+ assert_equal dh3.to_der, dh4.to_der -+ assert_equal dh1.to_der, dh4.to_der # encodes parameters only -+ assert_equal [dh1.p, dh1.g], [dh4.p, dh4.g] -+ assert_not_equal nil, dh3.pub_key -+ assert_not_equal nil, dh3.priv_key -+ assert_equal [dh3.pub_key, dh3.priv_key], [dh4.pub_key, dh4.priv_key] - end - - def test_marshal -@@ -125,11 +144,6 @@ def test_marshal - - private - -- def assert_equal_params(dh1, dh2) -- assert_equal(dh1.g, dh2.g) -- assert_equal(dh1.p, dh2.p) -- end -- - def assert_no_key(dh) - assert_equal(false, dh.public?) - assert_equal(false, dh.private?) -diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb -index 0994607f..726b7dbf 100644 ---- a/test/openssl/test_pkey_dsa.rb -+++ b/test/openssl/test_pkey_dsa.rb -@@ -208,8 +208,12 @@ def test_dup - key = Fixtures.pkey("dsa1024") - key2 = key.dup - assert_equal key.params, key2.params -- key2.set_pqg(key2.p + 1, key2.q, key2.g) -- assert_not_equal key.params, key2.params -+ -+ # PKey is immutable in OpenSSL >= 3.0 -+ if !openssl?(3, 0, 0) -+ key2.set_pqg(key2.p + 1, key2.q, key2.g) -+ assert_not_equal key.params, key2.params -+ end - end - - def test_marshal -diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb -index 33f78a4c..ffe5a94e 100644 ---- a/test/openssl/test_pkey_ec.rb -+++ b/test/openssl/test_pkey_ec.rb -@@ -21,11 +21,15 @@ def test_ec_key - - key1 = OpenSSL::PKey::EC.generate("prime256v1") - -- key2 = OpenSSL::PKey::EC.new -- key2.group = key1.group -- key2.private_key = key1.private_key -- key2.public_key = key1.public_key -- assert_equal key1.to_der, key2.to_der -+ # PKey is immutable in OpenSSL >= 3.0; constructing an empty EC object is -+ # deprecated -+ if !openssl?(3, 0, 0) -+ key2 = OpenSSL::PKey::EC.new -+ key2.group = key1.group -+ key2.private_key = key1.private_key -+ key2.public_key = key1.public_key -+ assert_equal key1.to_der, key2.to_der -+ end - - key3 = OpenSSL::PKey::EC.new(key1) - assert_equal key1.to_der, key3.to_der -@@ -35,10 +39,14 @@ def test_ec_key - - key5 = key1.dup - assert_equal key1.to_der, key5.to_der -- key_tmp = OpenSSL::PKey::EC.new("prime256v1").generate_key! -- key5.private_key = key_tmp.private_key -- key5.public_key = key_tmp.public_key -- assert_not_equal key1.to_der, key5.to_der -+ -+ # PKey is immutable in OpenSSL >= 3.0; EC object should not be modified -+ if !openssl?(3, 0, 0) -+ key_tmp = OpenSSL::PKey::EC.generate("prime256v1") -+ key5.private_key = key_tmp.private_key -+ key5.public_key = key_tmp.public_key -+ assert_not_equal key1.to_der, key5.to_der -+ end - end - - def test_generate -@@ -65,22 +73,26 @@ def test_marshal - end - - def test_check_key -- key = OpenSSL::PKey::EC.new("prime256v1").generate_key! -- assert_equal(true, key.check_key) -- assert_equal(true, key.private?) -- assert_equal(true, key.public?) -- key2 = OpenSSL::PKey::EC.new(key.group) -- assert_equal(false, key2.private?) -- assert_equal(false, key2.public?) -- key2.public_key = key.public_key -- assert_equal(false, key2.private?) -- assert_equal(true, key2.public?) -- key2.private_key = key.private_key -+ key0 = Fixtures.pkey("p256") -+ assert_equal(true, key0.check_key) -+ assert_equal(true, key0.private?) -+ assert_equal(true, key0.public?) -+ -+ key1 = OpenSSL::PKey.read(key0.public_to_der) -+ assert_equal(true, key1.check_key) -+ assert_equal(false, key1.private?) -+ assert_equal(true, key1.public?) -+ -+ key2 = OpenSSL::PKey.read(key0.private_to_der) - assert_equal(true, key2.private?) - assert_equal(true, key2.public?) - assert_equal(true, key2.check_key) -- key2.private_key += 1 -- assert_raise(OpenSSL::PKey::ECError) { key2.check_key } -+ -+ # EC#private_key= is deprecated in 3.0 and won't work on OpenSSL 3.0 -+ if !openssl?(3, 0, 0) -+ key2.private_key += 1 -+ assert_raise(OpenSSL::PKey::ECError) { key2.check_key } -+ end - end - - def test_sign_verify -@@ -112,7 +124,7 @@ def test_derive_key - assert_equal [zIUT].pack("H*"), a.derive(b) - - assert_equal a.derive(b), a.dh_compute_key(b.public_key) -- end -+ end if !openssl?(3, 0, 0) # TODO: Test it without using #private_key= - - def test_sign_verify_raw - key = Fixtures.pkey("p256") -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index dbe87ba4..1c7f9ccf 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -31,15 +31,18 @@ def test_private - assert(!key4.private?) - rsa1024 = Fixtures.pkey("rsa1024") - -- # Generated by RSA#set_key -- key5 = OpenSSL::PKey::RSA.new -- key5.set_key(rsa1024.n, rsa1024.e, rsa1024.d) -- assert(key5.private?) -- -- # Generated by RSA#set_key, without d -- key6 = OpenSSL::PKey::RSA.new -- key6.set_key(rsa1024.n, rsa1024.e, nil) -- assert(!key6.private?) -+ if !openssl?(3, 0, 0) -+ key = OpenSSL::PKey::RSA.new -+ # Generated by RSA#set_key -+ key5 = OpenSSL::PKey::RSA.new -+ key5.set_key(rsa1024.n, rsa1024.e, rsa1024.d) -+ assert(key5.private?) -+ -+ # Generated by RSA#set_key, without d -+ key6 = OpenSSL::PKey::RSA.new -+ key6.set_key(rsa1024.n, rsa1024.e, nil) -+ assert(!key6.private?) -+ end - end - - def test_new -@@ -235,36 +238,52 @@ def test_encrypt_decrypt_legacy - - def test_export - rsa1024 = Fixtures.pkey("rsa1024") -- key = OpenSSL::PKey::RSA.new - -- # key has only n, e and d -- key.set_key(rsa1024.n, rsa1024.e, rsa1024.d) -- assert_equal rsa1024.public_key.export, key.export -+ pub = OpenSSL::PKey.read(rsa1024.public_to_der) -+ assert_not_equal rsa1024.export, pub.export -+ assert_equal rsa1024.public_to_pem, pub.export -+ -+ # PKey is immutable in OpenSSL >= 3.0 -+ if !openssl?(3, 0, 0) -+ key = OpenSSL::PKey::RSA.new - -- # key has only n, e, d, p and q -- key.set_factors(rsa1024.p, rsa1024.q) -- assert_equal rsa1024.public_key.export, key.export -+ # key has only n, e and d -+ key.set_key(rsa1024.n, rsa1024.e, rsa1024.d) -+ assert_equal rsa1024.public_key.export, key.export - -- # key has n, e, d, p, q, dmp1, dmq1 and iqmp -- key.set_crt_params(rsa1024.dmp1, rsa1024.dmq1, rsa1024.iqmp) -- assert_equal rsa1024.export, key.export -+ # key has only n, e, d, p and q -+ key.set_factors(rsa1024.p, rsa1024.q) -+ assert_equal rsa1024.public_key.export, key.export -+ -+ # key has n, e, d, p, q, dmp1, dmq1 and iqmp -+ key.set_crt_params(rsa1024.dmp1, rsa1024.dmq1, rsa1024.iqmp) -+ assert_equal rsa1024.export, key.export -+ end - end - - def test_to_der - rsa1024 = Fixtures.pkey("rsa1024") -- key = OpenSSL::PKey::RSA.new - -- # key has only n, e and d -- key.set_key(rsa1024.n, rsa1024.e, rsa1024.d) -- assert_equal rsa1024.public_key.to_der, key.to_der -+ pub = OpenSSL::PKey.read(rsa1024.public_to_der) -+ assert_not_equal rsa1024.to_der, pub.to_der -+ assert_equal rsa1024.public_to_der, pub.to_der - -- # key has only n, e, d, p and q -- key.set_factors(rsa1024.p, rsa1024.q) -- assert_equal rsa1024.public_key.to_der, key.to_der -+ # PKey is immutable in OpenSSL >= 3.0 -+ if !openssl?(3, 0, 0) -+ key = OpenSSL::PKey::RSA.new - -- # key has n, e, d, p, q, dmp1, dmq1 and iqmp -- key.set_crt_params(rsa1024.dmp1, rsa1024.dmq1, rsa1024.iqmp) -- assert_equal rsa1024.to_der, key.to_der -+ # key has only n, e and d -+ key.set_key(rsa1024.n, rsa1024.e, rsa1024.d) -+ assert_equal rsa1024.public_key.to_der, key.to_der -+ -+ # key has only n, e, d, p and q -+ key.set_factors(rsa1024.p, rsa1024.q) -+ assert_equal rsa1024.public_key.to_der, key.to_der -+ -+ # key has n, e, d, p, q, dmp1, dmq1 and iqmp -+ key.set_crt_params(rsa1024.dmp1, rsa1024.dmq1, rsa1024.iqmp) -+ assert_equal rsa1024.to_der, key.to_der -+ end - end - - def test_RSAPrivateKey -@@ -501,8 +520,12 @@ def test_dup - key = Fixtures.pkey("rsa1024") - key2 = key.dup - assert_equal key.params, key2.params -- key2.set_key(key2.n, 3, key2.d) -- assert_not_equal key.params, key2.params -+ -+ # PKey is immutable in OpenSSL >= 3.0 -+ if !openssl?(3, 0, 0) -+ key2.set_key(key2.n, 3, key2.d) -+ assert_not_equal key.params, key2.params -+ end - end - - def test_marshal diff --git a/ruby-3.1.0-Disable-test_no_private_exp-on-OpenSSL-3.0.patch b/ruby-3.1.0-Disable-test_no_private_exp-on-OpenSSL-3.0.patch deleted file mode 100644 index 2b640ea..0000000 --- a/ruby-3.1.0-Disable-test_no_private_exp-on-OpenSSL-3.0.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 47975ece4096cdab16b3f200f93ea2377dfb41ac Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 31 May 2021 14:17:21 +0900 -Subject: [PATCH] test/openssl/test_pkey_rsa: disable test_no_private_exp on - OpenSSL 3.0 - -OpenSSL::PKey::RSA#set_key does not exist when built with OpenSSL 3.0, -so it is not possible to create an RSA object with incomplete state. - -https://github.com/ruby/openssl/commit/ca03c9c070 ---- - test/openssl/test_pkey_rsa.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index 4548bdb2cfa6..dbe87ba4c1b0 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -11,7 +11,7 @@ def test_no_private_exp - key.set_factors(rsa.p, rsa.q) - assert_raise(OpenSSL::PKey::RSAError){ key.private_encrypt("foo") } - assert_raise(OpenSSL::PKey::RSAError){ key.private_decrypt("foo") } -- end -+ end if !openssl?(3, 0, 0) # Impossible state in OpenSSL 3.0 - - def test_private - # Generated by key size and public exponent diff --git a/ruby-3.1.0-Fix-stack-buffer-overflow.patch b/ruby-3.1.0-Fix-stack-buffer-overflow.patch deleted file mode 100644 index 4e842ff..0000000 --- a/ruby-3.1.0-Fix-stack-buffer-overflow.patch +++ /dev/null @@ -1,70 +0,0 @@ -From cc44179cb8419b0e48ef9baa6f1722603643c1a0 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Tue, 17 Aug 2021 22:01:57 +0900 -Subject: [PATCH] Fix stack buffer overflow - -https://hackerone.com/reports/1306859 ---- - include/ruby/internal/memory.h | 6 +++--- - random.c | 7 ++----- - 2 files changed, 5 insertions(+), 8 deletions(-) - -diff --git a/include/ruby/internal/memory.h b/include/ruby/internal/memory.h -index 7d24df4945..64f3101fc2 100644 ---- a/include/ruby/internal/memory.h -+++ b/include/ruby/internal/memory.h -@@ -110,18 +110,18 @@ extern void *alloca(); - ((var) = RBIMPL_CAST((type *)ruby_xrealloc2((void *)(var), (n), sizeof(type)))) - - #define ALLOCA_N(type,n) \ -- RBIMPL_CAST((type *)alloca(rbimpl_size_mul_or_raise(sizeof(type), (n)))) -+ RBIMPL_CAST((type *)(!(n) ? NULL : alloca(rbimpl_size_mul_or_raise(sizeof(type), (n))))) - - /* allocates _n_ bytes temporary buffer and stores VALUE including it - * in _v_. _n_ may be evaluated twice. */ - #define RB_ALLOCV(v, n) \ - ((n) < RUBY_ALLOCV_LIMIT ? \ -- ((v) = 0, alloca(n)) : \ -+ ((v) = 0, !(n) ? NULL : alloca(n)) : \ - rb_alloc_tmp_buffer(&(v), (n))) - #define RB_ALLOCV_N(type, v, n) \ - RBIMPL_CAST((type *) \ - (((size_t)(n) < RUBY_ALLOCV_LIMIT / sizeof(type)) ? \ -- ((v) = 0, alloca((n) * sizeof(type))) : \ -+ ((v) = 0, !(n) ? NULL : alloca((n) * sizeof(type))) : \ - rb_alloc_tmp_buffer2(&(v), (n), sizeof(type)))) - #define RB_ALLOCV_END(v) rb_free_tmp_buffer(&(v)) - -diff --git a/random.c b/random.c -index 7567d13dd7..4d70c17116 100644 ---- a/random.c -+++ b/random.c -@@ -369,15 +369,12 @@ rand_init(const rb_random_interface_t *rng, rb_random_t *rnd, VALUE seed) - int sign; - - len = rb_absint_numwords(seed, 32, NULL); -+ if (len == 0) len = 1; - buf = ALLOCV_N(uint32_t, buf0, len); - sign = rb_integer_pack(seed, buf, len, sizeof(uint32_t), 0, - INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER); - if (sign < 0) - sign = -sign; -- if (len == 0) { -- buf[0] = 0; -- len = 1; -- } - if (len > 1) { - if (sign != 2 && buf[len-1] == 1) /* remove leading-zero-guard */ - len--; -@@ -814,7 +811,7 @@ rand_mt_init(rb_random_t *rnd, const uint32_t *buf, size_t len) - { - struct MT *mt = &((rb_random_mt_t *)rnd)->mt; - if (len <= 1) { -- init_genrand(mt, buf[0]); -+ init_genrand(mt, len ? buf[0] : 0); - } - else { - init_by_array(mt, buf, (int)len); --- -2.34.1 - diff --git a/ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch b/ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch deleted file mode 100644 index ae8f722..0000000 --- a/ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch +++ /dev/null @@ -1,186 +0,0 @@ -From 104b009e26c050584e4d186c8cc4e1496a14061b Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Thu, 5 Aug 2021 20:09:25 +0900 -Subject: [PATCH] Get rid of type-punning pointer casts [Bug #18062] - ---- - vm_eval.c | 4 +++- - vm_insnhelper.c | 7 +++++-- - vm_method.c | 41 ++++++++++++++++++++++++++--------------- - 3 files changed, 34 insertions(+), 18 deletions(-) - -diff --git a/vm_eval.c b/vm_eval.c -index 6d4b5c3c0b28..7ce9f157e671 100644 ---- a/vm_eval.c -+++ b/vm_eval.c -@@ -350,9 +350,11 @@ cc_new(VALUE klass, ID mid, int argc, const rb_callable_method_entry_t *cme) - { - struct rb_class_cc_entries *ccs; - struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); -+ VALUE ccs_data; - -- if (rb_id_table_lookup(cc_tbl, mid, (VALUE*)&ccs)) { -+ if (rb_id_table_lookup(cc_tbl, mid, &ccs_data)) { - // ok -+ ccs = (struct rb_class_cc_entries *)ccs_data; - } - else { - ccs = vm_ccs_create(klass, cme); -diff --git a/vm_insnhelper.c b/vm_insnhelper.c -index 14928b2afe8e..e186376b24d7 100644 ---- a/vm_insnhelper.c -+++ b/vm_insnhelper.c -@@ -1637,9 +1637,11 @@ vm_search_cc(const VALUE klass, const struct rb_callinfo * const ci) - const ID mid = vm_ci_mid(ci); - struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); - struct rb_class_cc_entries *ccs = NULL; -+ VALUE ccs_data; - - if (cc_tbl) { -- if (rb_id_table_lookup(cc_tbl, mid, (VALUE *)&ccs)) { -+ if (rb_id_table_lookup(cc_tbl, mid, &ccs_data)) { -+ ccs = (struct rb_class_cc_entries *)ccs_data; - const int ccs_len = ccs->len; - VM_ASSERT(vm_ccs_verify(ccs, mid, klass)); - -@@ -1706,8 +1708,9 @@ vm_search_cc(const VALUE klass, const struct rb_callinfo * const ci) - if (ccs == NULL) { - VM_ASSERT(cc_tbl != NULL); - -- if (LIKELY(rb_id_table_lookup(cc_tbl, mid, (VALUE*)&ccs))) { -+ if (LIKELY(rb_id_table_lookup(cc_tbl, mid, &ccs_data))) { - // rb_callable_method_entry() prepares ccs. -+ ccs = (struct rb_class_cc_entries *)ccs_data; - } - else { - // TODO: required? -diff --git a/vm_method.c b/vm_method.c -index 016dba1dbb18..1fd0bd57f7ca 100644 ---- a/vm_method.c -+++ b/vm_method.c -@@ -42,11 +42,11 @@ vm_ccs_dump(VALUE klass, ID target_mid) - { - struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); - if (cc_tbl) { -- const struct rb_class_cc_entries *ccs; -+ VALUE ccs; - if (target_mid) { -- if (rb_id_table_lookup(cc_tbl, target_mid, (VALUE *)&ccs)) { -+ if (rb_id_table_lookup(cc_tbl, target_mid, &ccs)) { - fprintf(stderr, " [CCTB] %p\n", (void *)cc_tbl); -- vm_ccs_dump_i(target_mid, (VALUE)ccs, NULL); -+ vm_ccs_dump_i(target_mid, ccs, NULL); - } - } - else { -@@ -72,11 +72,11 @@ vm_mtbl_dump(VALUE klass, ID target_mid) - fprintf(stderr, "# vm_mtbl\n"); - while (klass) { - rp_m(" -> ", klass); -- rb_method_entry_t *me; -+ VALUE me; - - if (RCLASS_M_TBL(klass)) { - if (target_mid != 0) { -- if (rb_id_table_lookup(RCLASS_M_TBL(klass), target_mid, (VALUE *)&me)) { -+ if (rb_id_table_lookup(RCLASS_M_TBL(klass), target_mid, &me)) { - rp_m(" [MTBL] ", me); - } - } -@@ -90,7 +90,7 @@ vm_mtbl_dump(VALUE klass, ID target_mid) - } - if (RCLASS_CALLABLE_M_TBL(klass)) { - if (target_mid != 0) { -- if (rb_id_table_lookup(RCLASS_CALLABLE_M_TBL(klass), target_mid, (VALUE *)&me)) { -+ if (rb_id_table_lookup(RCLASS_CALLABLE_M_TBL(klass), target_mid, &me)) { - rp_m(" [CM**] ", me); - } - } -@@ -144,10 +144,11 @@ clear_method_cache_by_id_in_class(VALUE klass, ID mid) - // check only current class - - struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); -- struct rb_class_cc_entries *ccs; -+ VALUE ccs_data; - - // invalidate CCs -- if (cc_tbl && rb_id_table_lookup(cc_tbl, mid, (VALUE *)&ccs)) { -+ if (cc_tbl && rb_id_table_lookup(cc_tbl, mid, &ccs_data)) { -+ struct rb_class_cc_entries *ccs = (struct rb_class_cc_entries *)ccs_data; - rb_vm_ccs_free(ccs); - rb_id_table_delete(cc_tbl, mid); - RB_DEBUG_COUNTER_INC(cc_invalidate_leaf_ccs); -@@ -205,9 +206,10 @@ clear_method_cache_by_id_in_class(VALUE klass, ID mid) - } - else { - rb_vm_t *vm = GET_VM(); -- if (rb_id_table_lookup(vm->negative_cme_table, mid, (VALUE *)&cme)) { -+ VALUE cme_data = (VALUE) cme; -+ if (rb_id_table_lookup(vm->negative_cme_table, mid, &cme_data)) { - rb_id_table_delete(vm->negative_cme_table, mid); -- vm_me_invalidate_cache((rb_callable_method_entry_t *)cme); -+ vm_me_invalidate_cache((rb_callable_method_entry_t *)cme_data); - - RB_DEBUG_COUNTER_INC(cc_invalidate_negative); - } -@@ -1023,6 +1025,7 @@ prepare_callable_method_entry(VALUE defined_class, ID id, const rb_method_entry_ - { - struct rb_id_table *mtbl; - const rb_callable_method_entry_t *cme; -+ VALUE cme_data; - - if (me) { - if (me->defined_class == 0) { -@@ -1032,7 +1035,8 @@ prepare_callable_method_entry(VALUE defined_class, ID id, const rb_method_entry_ - - mtbl = RCLASS_CALLABLE_M_TBL(defined_class); - -- if (mtbl && rb_id_table_lookup(mtbl, id, (VALUE *)&cme)) { -+ if (mtbl && rb_id_table_lookup(mtbl, id, &cme_data)) { -+ cme = (rb_callable_method_entry_t *)cme_data; - RB_DEBUG_COUNTER_INC(mc_cme_complement_hit); - VM_ASSERT(callable_method_entry_p(cme)); - VM_ASSERT(!METHOD_ENTRY_INVALIDATED(cme)); -@@ -1076,9 +1080,10 @@ cached_callable_method_entry(VALUE klass, ID mid) - ASSERT_vm_locking(); - - struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); -- struct rb_class_cc_entries *ccs; -+ VALUE ccs_data; - -- if (cc_tbl && rb_id_table_lookup(cc_tbl, mid, (VALUE *)&ccs)) { -+ if (cc_tbl && rb_id_table_lookup(cc_tbl, mid, &ccs_data)) { -+ struct rb_class_cc_entries *ccs = (struct rb_class_cc_entries *)ccs_data; - VM_ASSERT(vm_ccs_p(ccs)); - - if (LIKELY(!METHOD_ENTRY_INVALIDATED(ccs->cme))) { -@@ -1104,12 +1109,14 @@ cache_callable_method_entry(VALUE klass, ID mid, const rb_callable_method_entry_ - - struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); - struct rb_class_cc_entries *ccs; -+ VALUE ccs_data; - - if (!cc_tbl) { - cc_tbl = RCLASS_CC_TBL(klass) = rb_id_table_create(2); - } - -- if (rb_id_table_lookup(cc_tbl, mid, (VALUE *)&ccs)) { -+ if (rb_id_table_lookup(cc_tbl, mid, &ccs_data)) { -+ ccs = (struct rb_class_cc_entries *)ccs_data; - VM_ASSERT(ccs->cme == cme); - } - else { -@@ -1123,8 +1130,12 @@ negative_cme(ID mid) - { - rb_vm_t *vm = GET_VM(); - const rb_callable_method_entry_t *cme; -+ VALUE cme_data; - -- if (!rb_id_table_lookup(vm->negative_cme_table, mid, (VALUE *)&cme)) { -+ if (rb_id_table_lookup(vm->negative_cme_table, mid, &cme_data)) { -+ cme = (rb_callable_method_entry_t *)cme_data; -+ } -+ else { - cme = (rb_callable_method_entry_t *)rb_method_entry_alloc(mid, Qnil, Qnil, NULL); - rb_id_table_insert(vm->negative_cme_table, mid, (VALUE)cme); - } diff --git a/ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch b/ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch deleted file mode 100644 index 86f534d..0000000 --- a/ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 72317b333b85eed483ad00bcd4f40944019a7c13 Mon Sep 17 00:00:00 2001 -From: "xtkoba+ruby@gmail.com" -Date: Fri, 13 Aug 2021 13:45:53 +0000 -Subject: [PATCH] Ignore `DW_FORM_ref_addr` [Bug #17052] - -Ignore `DW_FORM_ref_addr` form and other forms that are not supposed -to be used currently. ---- - addr2line.c | 23 ++++++++++++++++++++--- - 1 file changed, 20 insertions(+), 3 deletions(-) - -diff --git a/addr2line.c b/addr2line.c -index fed1a8da84e5..92c6da5e3bea 100644 ---- a/addr2line.c -+++ b/addr2line.c -@@ -1593,14 +1593,31 @@ di_read_cu(DebugInfoReader *reader) - } - - static void --read_abstract_origin(DebugInfoReader *reader, uint64_t abstract_origin, line_info_t *line) -+read_abstract_origin(DebugInfoReader *reader, uint64_t form, uint64_t abstract_origin, line_info_t *line) - { - char *p = reader->p; - char *q = reader->q; - int level = reader->level; - DIE die; - -- reader->p = reader->current_cu + abstract_origin; -+ switch (form) { -+ case DW_FORM_ref1: -+ case DW_FORM_ref2: -+ case DW_FORM_ref4: -+ case DW_FORM_ref8: -+ case DW_FORM_ref_udata: -+ reader->p = reader->current_cu + abstract_origin; -+ break; -+ case DW_FORM_ref_addr: -+ goto finish; /* not supported yet */ -+ case DW_FORM_ref_sig8: -+ goto finish; /* not supported yet */ -+ case DW_FORM_ref_sup4: -+ case DW_FORM_ref_sup8: -+ goto finish; /* not supported yet */ -+ default: -+ goto finish; -+ } - if (!di_read_die(reader, &die)) goto finish; - - /* enumerate abbrev */ -@@ -1665,7 +1682,7 @@ debug_info_read(DebugInfoReader *reader, int num_traces, void **traces, - /* 1 or 3 */ - break; /* goto skip_die; */ - case DW_AT_abstract_origin: -- read_abstract_origin(reader, v.as.uint64, &line); -+ read_abstract_origin(reader, v.form, v.as.uint64, &line); - break; /* goto skip_die; */ - } - } diff --git a/ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch b/ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch deleted file mode 100644 index a558cec..0000000 --- a/ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch +++ /dev/null @@ -1,1319 +0,0 @@ -From 3e6cd88c621d8834712d2279f925b9af83c2bb34 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 18 May 2020 20:06:16 +0900 -Subject: [PATCH 1/6] pkey: implement PKey#encrypt and #decrypt - -Support public key encryption and decryption operations using the EVP -API. ---- - ext/openssl/ossl_pkey.c | 141 ++++++++++++++++++++++++++++++++++ - test/openssl/test_pkey_rsa.rb | 34 ++++++++ - 2 files changed, 175 insertions(+) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 21cd4b2cda..baf8ce9f20 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -986,6 +986,145 @@ ossl_pkey_derive(int argc, VALUE *argv, VALUE self) - return str; - } - -+/* -+ * call-seq: -+ * pkey.encrypt(data [, options]) -> string -+ * -+ * Performs a public key encryption operation using +pkey+. -+ * -+ * See #decrypt for the reverse operation. -+ * -+ * Added in version 3.0. See also the man page EVP_PKEY_encrypt(3). -+ * -+ * +data+:: -+ * A String to be encrypted. -+ * +options+:: -+ * A Hash that contains algorithm specific control operations to \OpenSSL. -+ * See OpenSSL's man page EVP_PKEY_CTX_ctrl_str(3) for details. -+ * -+ * Example: -+ * pkey = OpenSSL::PKey.generate_key("RSA", rsa_keygen_bits: 2048) -+ * data = "secret data" -+ * encrypted = pkey.encrypt(data, rsa_padding_mode: "oaep") -+ * decrypted = pkey.decrypt(data, rsa_padding_mode: "oaep") -+ * p decrypted #=> "secret data" -+ */ -+static VALUE -+ossl_pkey_encrypt(int argc, VALUE *argv, VALUE self) -+{ -+ EVP_PKEY *pkey; -+ EVP_PKEY_CTX *ctx; -+ VALUE data, options, str; -+ size_t outlen; -+ int state; -+ -+ GetPKey(self, pkey); -+ rb_scan_args(argc, argv, "11", &data, &options); -+ StringValue(data); -+ -+ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); -+ if (!ctx) -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); -+ if (EVP_PKEY_encrypt_init(ctx) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_encrypt_init"); -+ } -+ if (!NIL_P(options)) { -+ pkey_ctx_apply_options(ctx, options, &state); -+ if (state) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ } -+ if (EVP_PKEY_encrypt(ctx, NULL, &outlen, -+ (unsigned char *)RSTRING_PTR(data), -+ RSTRING_LEN(data)) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_encrypt"); -+ } -+ if (outlen > LONG_MAX) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_raise(ePKeyError, "encrypted data would be too large"); -+ } -+ str = ossl_str_new(NULL, (long)outlen, &state); -+ if (state) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ if (EVP_PKEY_encrypt(ctx, (unsigned char *)RSTRING_PTR(str), &outlen, -+ (unsigned char *)RSTRING_PTR(data), -+ RSTRING_LEN(data)) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_encrypt"); -+ } -+ EVP_PKEY_CTX_free(ctx); -+ rb_str_set_len(str, outlen); -+ return str; -+} -+ -+/* -+ * call-seq: -+ * pkey.decrypt(data [, options]) -> string -+ * -+ * Performs a public key decryption operation using +pkey+. -+ * -+ * See #encrypt for a description of the parameters and an example. -+ * -+ * Added in version 3.0. See also the man page EVP_PKEY_decrypt(3). -+ */ -+static VALUE -+ossl_pkey_decrypt(int argc, VALUE *argv, VALUE self) -+{ -+ EVP_PKEY *pkey; -+ EVP_PKEY_CTX *ctx; -+ VALUE data, options, str; -+ size_t outlen; -+ int state; -+ -+ GetPKey(self, pkey); -+ rb_scan_args(argc, argv, "11", &data, &options); -+ StringValue(data); -+ -+ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); -+ if (!ctx) -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); -+ if (EVP_PKEY_decrypt_init(ctx) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_decrypt_init"); -+ } -+ if (!NIL_P(options)) { -+ pkey_ctx_apply_options(ctx, options, &state); -+ if (state) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ } -+ if (EVP_PKEY_decrypt(ctx, NULL, &outlen, -+ (unsigned char *)RSTRING_PTR(data), -+ RSTRING_LEN(data)) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_decrypt"); -+ } -+ if (outlen > LONG_MAX) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_raise(ePKeyError, "decrypted data would be too large"); -+ } -+ str = ossl_str_new(NULL, (long)outlen, &state); -+ if (state) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ if (EVP_PKEY_decrypt(ctx, (unsigned char *)RSTRING_PTR(str), &outlen, -+ (unsigned char *)RSTRING_PTR(data), -+ RSTRING_LEN(data)) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_decrypt"); -+ } -+ EVP_PKEY_CTX_free(ctx); -+ rb_str_set_len(str, outlen); -+ return str; -+} -+ - /* - * INIT - */ -@@ -1085,6 +1224,8 @@ Init_ossl_pkey(void) - rb_define_method(cPKey, "sign", ossl_pkey_sign, -1); - rb_define_method(cPKey, "verify", ossl_pkey_verify, -1); - rb_define_method(cPKey, "derive", ossl_pkey_derive, -1); -+ rb_define_method(cPKey, "encrypt", ossl_pkey_encrypt, -1); -+ rb_define_method(cPKey, "decrypt", ossl_pkey_decrypt, -1); - - id_private_q = rb_intern("private?"); - -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index 5f8d04e754..d6bfca3ac5 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -173,6 +173,40 @@ def test_sign_verify_pss - } - end - -+ def test_encrypt_decrypt -+ rsapriv = Fixtures.pkey("rsa-1") -+ rsapub = dup_public(rsapriv) -+ -+ # Defaults to PKCS #1 v1.5 -+ raw = "data" -+ enc = rsapub.encrypt(raw) -+ assert_equal raw, rsapriv.decrypt(enc) -+ -+ # Invalid options -+ assert_raise(OpenSSL::PKey::PKeyError) { -+ rsapub.encrypt(raw, { "nonexistent" => "option" }) -+ } -+ end -+ -+ def test_encrypt_decrypt_legacy -+ rsapriv = Fixtures.pkey("rsa-1") -+ rsapub = dup_public(rsapriv) -+ -+ # Defaults to PKCS #1 v1.5 -+ raw = "data" -+ enc_legacy = rsapub.public_encrypt(raw) -+ assert_equal raw, rsapriv.decrypt(enc_legacy) -+ enc_new = rsapub.encrypt(raw) -+ assert_equal raw, rsapriv.private_decrypt(enc_new) -+ -+ # OAEP with default parameters -+ raw = "data" -+ enc_legacy = rsapub.public_encrypt(raw, OpenSSL::PKey::RSA::PKCS1_OAEP_PADDING) -+ assert_equal raw, rsapriv.decrypt(enc_legacy, { "rsa_padding_mode" => "oaep" }) -+ enc_new = rsapub.encrypt(raw, { "rsa_padding_mode" => "oaep" }) -+ assert_equal raw, rsapriv.private_decrypt(enc_legacy, OpenSSL::PKey::RSA::PKCS1_OAEP_PADDING) -+ end -+ - def test_export - rsa1024 = Fixtures.pkey("rsa1024") - key = OpenSSL::PKey::RSA.new --- -2.32.0 - - -From 6f5c75b06967b5b2db1d13646d74310e1cdc563e Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Tue, 25 May 2021 18:43:29 +0900 -Subject: [PATCH 2/6] pkey: update version reference in #sign and #verify - documentation - -The next release is decided to be 3.0 rather than 2.3. ---- - ext/openssl/ossl_pkey.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index baf8ce9f20..d08f6f7e60 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -761,7 +761,7 @@ ossl_pkey_public_to_pem(VALUE self) - * +options+:: - * A Hash that contains algorithm specific control operations to \OpenSSL. - * See OpenSSL's man page EVP_PKEY_CTX_ctrl_str(3) for details. -- * +options+ parameter was added in version 2.3. -+ * +options+ parameter was added in version 3.0. - * - * Example: - * data = "Sign me!" -@@ -875,7 +875,7 @@ ossl_pkey_sign(int argc, VALUE *argv, VALUE self) - * +data+:: - * See #sign. - * +options+:: -- * See #sign. +options+ parameter was added in version 2.3. -+ * See #sign. +options+ parameter was added in version 3.0. - */ - static VALUE - ossl_pkey_verify(int argc, VALUE *argv, VALUE self) --- -2.32.0 - - -From 99fc31a9b4843b7f8923b5ce8b36115b2c66f4db Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 22 May 2020 16:10:35 +0900 -Subject: [PATCH 3/6] pkey: implement PKey#sign_raw, #verify_raw, and - #verify_recover - -Add a variant of PKey#sign and #verify that do not hash the data -automatically. - -Sometimes the caller has the hashed data only, but not the plaintext -to be signed. In that case, users would have to use the low-level API -such as RSA#private_encrypt or #public_decrypt directly. - -OpenSSL 1.0.0 and later supports EVP_PKEY_sign() and EVP_PKEY_verify() -which provide the same functionality as part of the EVP API. This patch -adds wrappers for them. ---- - ext/openssl/ossl_pkey.c | 232 ++++++++++++++++++++++++++++++++++ - test/openssl/test_pkey_dsa.rb | 25 +++- - test/openssl/test_pkey_ec.rb | 21 ++- - test/openssl/test_pkey_rsa.rb | 78 ++++++++---- - 4 files changed, 325 insertions(+), 31 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index d08f6f7e60..ba909c7632 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -935,6 +935,235 @@ ossl_pkey_verify(int argc, VALUE *argv, VALUE self) - } - } - -+/* -+ * call-seq: -+ * pkey.sign_raw(digest, data [, options]) -> string -+ * -+ * Signs +data+ using a private key +pkey+. Unlike #sign, +data+ will not be -+ * hashed by +digest+ automatically. -+ * -+ * See #verify_raw for the verification operation. -+ * -+ * Added in version 3.0. See also the man page EVP_PKEY_sign(3). -+ * -+ * +digest+:: -+ * A String that represents the message digest algorithm name, or +nil+ -+ * if the PKey type requires no digest algorithm. -+ * Although this method will not hash +data+ with it, this parameter may still -+ * be required depending on the signature algorithm. -+ * +data+:: -+ * A String. The data to be signed. -+ * +options+:: -+ * A Hash that contains algorithm specific control operations to \OpenSSL. -+ * See OpenSSL's man page EVP_PKEY_CTX_ctrl_str(3) for details. -+ * -+ * Example: -+ * data = "Sign me!" -+ * hash = OpenSSL::Digest.digest("SHA256", data) -+ * pkey = OpenSSL::PKey.generate_key("RSA", rsa_keygen_bits: 2048) -+ * signopts = { rsa_padding_mode: "pss" } -+ * signature = pkey.sign_raw("SHA256", hash, signopts) -+ * -+ * # Creates a copy of the RSA key pkey, but without the private components -+ * pub_key = pkey.public_key -+ * puts pub_key.verify_raw("SHA256", signature, hash, signopts) # => true -+ */ -+static VALUE -+ossl_pkey_sign_raw(int argc, VALUE *argv, VALUE self) -+{ -+ EVP_PKEY *pkey; -+ VALUE digest, data, options, sig; -+ const EVP_MD *md = NULL; -+ EVP_PKEY_CTX *ctx; -+ size_t outlen; -+ int state; -+ -+ GetPKey(self, pkey); -+ rb_scan_args(argc, argv, "21", &digest, &data, &options); -+ if (!NIL_P(digest)) -+ md = ossl_evp_get_digestbyname(digest); -+ StringValue(data); -+ -+ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); -+ if (!ctx) -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); -+ if (EVP_PKEY_sign_init(ctx) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_sign_init"); -+ } -+ if (md && EVP_PKEY_CTX_set_signature_md(ctx, md) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_set_signature_md"); -+ } -+ if (!NIL_P(options)) { -+ pkey_ctx_apply_options(ctx, options, &state); -+ if (state) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ } -+ if (EVP_PKEY_sign(ctx, NULL, &outlen, (unsigned char *)RSTRING_PTR(data), -+ RSTRING_LEN(data)) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_sign"); -+ } -+ if (outlen > LONG_MAX) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_raise(ePKeyError, "signature would be too large"); -+ } -+ sig = ossl_str_new(NULL, (long)outlen, &state); -+ if (state) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ if (EVP_PKEY_sign(ctx, (unsigned char *)RSTRING_PTR(sig), &outlen, -+ (unsigned char *)RSTRING_PTR(data), -+ RSTRING_LEN(data)) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_sign"); -+ } -+ EVP_PKEY_CTX_free(ctx); -+ rb_str_set_len(sig, outlen); -+ return sig; -+} -+ -+/* -+ * call-seq: -+ * pkey.verify_raw(digest, signature, data [, options]) -> true or false -+ * -+ * Verifies the +signature+ for the +data+ using a public key +pkey+. Unlike -+ * #verify, this method will not hash +data+ with +digest+ automatically. -+ * -+ * Returns +true+ if the signature is successfully verified, +false+ otherwise. -+ * The caller must check the return value. -+ * -+ * See #sign_raw for the signing operation and an example code. -+ * -+ * Added in version 3.0. See also the man page EVP_PKEY_verify(3). -+ * -+ * +signature+:: -+ * A String containing the signature to be verified. -+ */ -+static VALUE -+ossl_pkey_verify_raw(int argc, VALUE *argv, VALUE self) -+{ -+ EVP_PKEY *pkey; -+ VALUE digest, sig, data, options; -+ const EVP_MD *md = NULL; -+ EVP_PKEY_CTX *ctx; -+ int state, ret; -+ -+ GetPKey(self, pkey); -+ rb_scan_args(argc, argv, "31", &digest, &sig, &data, &options); -+ ossl_pkey_check_public_key(pkey); -+ if (!NIL_P(digest)) -+ md = ossl_evp_get_digestbyname(digest); -+ StringValue(sig); -+ StringValue(data); -+ -+ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); -+ if (!ctx) -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); -+ if (EVP_PKEY_verify_init(ctx) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_verify_init"); -+ } -+ if (md && EVP_PKEY_CTX_set_signature_md(ctx, md) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_set_signature_md"); -+ } -+ if (!NIL_P(options)) { -+ pkey_ctx_apply_options(ctx, options, &state); -+ if (state) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ } -+ ret = EVP_PKEY_verify(ctx, (unsigned char *)RSTRING_PTR(sig), -+ RSTRING_LEN(sig), -+ (unsigned char *)RSTRING_PTR(data), -+ RSTRING_LEN(data)); -+ EVP_PKEY_CTX_free(ctx); -+ if (ret < 0) -+ ossl_raise(ePKeyError, "EVP_PKEY_verify"); -+ -+ if (ret) -+ return Qtrue; -+ else { -+ ossl_clear_error(); -+ return Qfalse; -+ } -+} -+ -+/* -+ * call-seq: -+ * pkey.verify_recover(digest, signature [, options]) -> string -+ * -+ * Recovers the signed data from +signature+ using a public key +pkey+. Not all -+ * signature algorithms support this operation. -+ * -+ * Added in version 3.0. See also the man page EVP_PKEY_verify_recover(3). -+ * -+ * +signature+:: -+ * A String containing the signature to be verified. -+ */ -+static VALUE -+ossl_pkey_verify_recover(int argc, VALUE *argv, VALUE self) -+{ -+ EVP_PKEY *pkey; -+ VALUE digest, sig, options, out; -+ const EVP_MD *md = NULL; -+ EVP_PKEY_CTX *ctx; -+ int state; -+ size_t outlen; -+ -+ GetPKey(self, pkey); -+ rb_scan_args(argc, argv, "21", &digest, &sig, &options); -+ ossl_pkey_check_public_key(pkey); -+ if (!NIL_P(digest)) -+ md = ossl_evp_get_digestbyname(digest); -+ StringValue(sig); -+ -+ ctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); -+ if (!ctx) -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); -+ if (EVP_PKEY_verify_recover_init(ctx) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_verify_recover_init"); -+ } -+ if (md && EVP_PKEY_CTX_set_signature_md(ctx, md) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_set_signature_md"); -+ } -+ if (!NIL_P(options)) { -+ pkey_ctx_apply_options(ctx, options, &state); -+ if (state) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ } -+ if (EVP_PKEY_verify_recover(ctx, NULL, &outlen, -+ (unsigned char *)RSTRING_PTR(sig), -+ RSTRING_LEN(sig)) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_verify_recover"); -+ } -+ out = ossl_str_new(NULL, (long)outlen, &state); -+ if (state) { -+ EVP_PKEY_CTX_free(ctx); -+ rb_jump_tag(state); -+ } -+ if (EVP_PKEY_verify_recover(ctx, (unsigned char *)RSTRING_PTR(out), &outlen, -+ (unsigned char *)RSTRING_PTR(sig), -+ RSTRING_LEN(sig)) <= 0) { -+ EVP_PKEY_CTX_free(ctx); -+ ossl_raise(ePKeyError, "EVP_PKEY_verify_recover"); -+ } -+ EVP_PKEY_CTX_free(ctx); -+ rb_str_set_len(out, outlen); -+ return out; -+} -+ - /* - * call-seq: - * pkey.derive(peer_pkey) -> string -@@ -1223,6 +1452,9 @@ Init_ossl_pkey(void) - - rb_define_method(cPKey, "sign", ossl_pkey_sign, -1); - rb_define_method(cPKey, "verify", ossl_pkey_verify, -1); -+ rb_define_method(cPKey, "sign_raw", ossl_pkey_sign_raw, -1); -+ rb_define_method(cPKey, "verify_raw", ossl_pkey_verify_raw, -1); -+ rb_define_method(cPKey, "verify_recover", ossl_pkey_verify_recover, -1); - rb_define_method(cPKey, "derive", ossl_pkey_derive, -1); - rb_define_method(cPKey, "encrypt", ossl_pkey_encrypt, -1); - rb_define_method(cPKey, "decrypt", ossl_pkey_decrypt, -1); -diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb -index 85bb6ec0ae..147e50176b 100644 ---- a/test/openssl/test_pkey_dsa.rb -+++ b/test/openssl/test_pkey_dsa.rb -@@ -48,12 +48,31 @@ def test_sign_verify - assert_equal false, dsa512.verify("SHA256", signature1, data) - end - -- def test_sys_sign_verify -- key = Fixtures.pkey("dsa256") -+ def test_sign_verify_raw -+ key = Fixtures.pkey("dsa512") - data = 'Sign me!' - digest = OpenSSL::Digest.digest('SHA1', data) -+ -+ invalid_sig = key.sign_raw(nil, digest.succ) -+ malformed_sig = "*" * invalid_sig.bytesize -+ -+ # Sign by #syssign - sig = key.syssign(digest) -- assert(key.sysverify(digest, sig)) -+ assert_equal true, key.sysverify(digest, sig) -+ assert_equal false, key.sysverify(digest, invalid_sig) -+ assert_raise(OpenSSL::PKey::DSAError) { key.sysverify(digest, malformed_sig) } -+ assert_equal true, key.verify_raw(nil, sig, digest) -+ assert_equal false, key.verify_raw(nil, invalid_sig, digest) -+ assert_raise(OpenSSL::PKey::PKeyError) { key.verify_raw(nil, malformed_sig, digest) } -+ -+ # Sign by #sign_raw -+ sig = key.sign_raw(nil, digest) -+ assert_equal true, key.sysverify(digest, sig) -+ assert_equal false, key.sysverify(digest, invalid_sig) -+ assert_raise(OpenSSL::PKey::DSAError) { key.sysverify(digest, malformed_sig) } -+ assert_equal true, key.verify_raw(nil, sig, digest) -+ assert_equal false, key.verify_raw(nil, invalid_sig, digest) -+ assert_raise(OpenSSL::PKey::PKeyError) { key.verify_raw(nil, malformed_sig, digest) } - end - - def test_DSAPrivateKey -diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb -index 95d4338a51..4b6df0290f 100644 ---- a/test/openssl/test_pkey_ec.rb -+++ b/test/openssl/test_pkey_ec.rb -@@ -109,13 +109,30 @@ def test_derive_key - assert_equal a.derive(b), a.dh_compute_key(b.public_key) - end - -- def test_dsa_sign_verify -+ def test_sign_verify_raw -+ key = Fixtures.pkey("p256") - data1 = "foo" - data2 = "bar" -- key = OpenSSL::PKey::EC.new("prime256v1").generate_key! -+ -+ malformed_sig = "*" * 30 -+ -+ # Sign by #dsa_sign_asn1 - sig = key.dsa_sign_asn1(data1) - assert_equal true, key.dsa_verify_asn1(data1, sig) - assert_equal false, key.dsa_verify_asn1(data2, sig) -+ assert_raise(OpenSSL::PKey::ECError) { key.dsa_verify_asn1(data1, malformed_sig) } -+ assert_equal true, key.verify_raw(nil, sig, data1) -+ assert_equal false, key.verify_raw(nil, sig, data2) -+ assert_raise(OpenSSL::PKey::PKeyError) { key.verify_raw(nil, malformed_sig, data1) } -+ -+ # Sign by #sign_raw -+ sig = key.sign_raw(nil, data1) -+ assert_equal true, key.dsa_verify_asn1(data1, sig) -+ assert_equal false, key.dsa_verify_asn1(data2, sig) -+ assert_raise(OpenSSL::PKey::ECError) { key.dsa_verify_asn1(data1, malformed_sig) } -+ assert_equal true, key.verify_raw(nil, sig, data1) -+ assert_equal false, key.verify_raw(nil, sig, data2) -+ assert_raise(OpenSSL::PKey::PKeyError) { key.verify_raw(nil, malformed_sig, data1) } - end - - def test_dsa_sign_asn1_FIPS186_3 -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index d6bfca3ac5..5e127f5407 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -13,32 +13,6 @@ def test_no_private_exp - assert_raise(OpenSSL::PKey::RSAError){ key.private_decrypt("foo") } - end - -- def test_padding -- key = OpenSSL::PKey::RSA.new(512, 3) -- -- # Need right size for raw mode -- plain0 = "x" * (512/8) -- cipher = key.private_encrypt(plain0, OpenSSL::PKey::RSA::NO_PADDING) -- plain1 = key.public_decrypt(cipher, OpenSSL::PKey::RSA::NO_PADDING) -- assert_equal(plain0, plain1) -- -- # Need smaller size for pkcs1 mode -- plain0 = "x" * (512/8 - 11) -- cipher1 = key.private_encrypt(plain0, OpenSSL::PKey::RSA::PKCS1_PADDING) -- plain1 = key.public_decrypt(cipher1, OpenSSL::PKey::RSA::PKCS1_PADDING) -- assert_equal(plain0, plain1) -- -- cipherdef = key.private_encrypt(plain0) # PKCS1_PADDING is default -- plain1 = key.public_decrypt(cipherdef) -- assert_equal(plain0, plain1) -- assert_equal(cipher1, cipherdef) -- -- # Failure cases -- assert_raise(ArgumentError){ key.private_encrypt() } -- assert_raise(ArgumentError){ key.private_encrypt("hi", 1, nil) } -- assert_raise(OpenSSL::PKey::RSAError){ key.private_encrypt(plain0, 666) } -- end -- - def test_private - # Generated by key size and public exponent - key = OpenSSL::PKey::RSA.new(512, 3) -@@ -133,6 +107,58 @@ def test_sign_verify_options - assert_equal false, key.verify("SHA256", sig_pss, data) - end - -+ def test_sign_verify_raw -+ key = Fixtures.pkey("rsa-1") -+ data = "Sign me!" -+ hash = OpenSSL::Digest.digest("SHA1", data) -+ signature = key.sign_raw("SHA1", hash) -+ assert_equal true, key.verify_raw("SHA1", signature, hash) -+ assert_equal true, key.verify("SHA1", signature, data) -+ -+ # Too long data -+ assert_raise(OpenSSL::PKey::PKeyError) { -+ key.sign_raw("SHA1", "x" * (key.n.num_bytes + 1)) -+ } -+ -+ # With options -+ pssopts = { -+ "rsa_padding_mode" => "pss", -+ "rsa_pss_saltlen" => 20, -+ "rsa_mgf1_md" => "SHA256" -+ } -+ sig_pss = key.sign_raw("SHA1", hash, pssopts) -+ assert_equal true, key.verify("SHA1", sig_pss, data, pssopts) -+ assert_equal true, key.verify_raw("SHA1", sig_pss, hash, pssopts) -+ end -+ -+ def test_sign_verify_raw_legacy -+ key = Fixtures.pkey("rsa-1") -+ bits = key.n.num_bits -+ -+ # Need right size for raw mode -+ plain0 = "x" * (bits/8) -+ cipher = key.private_encrypt(plain0, OpenSSL::PKey::RSA::NO_PADDING) -+ plain1 = key.public_decrypt(cipher, OpenSSL::PKey::RSA::NO_PADDING) -+ assert_equal(plain0, plain1) -+ -+ # Need smaller size for pkcs1 mode -+ plain0 = "x" * (bits/8 - 11) -+ cipher1 = key.private_encrypt(plain0, OpenSSL::PKey::RSA::PKCS1_PADDING) -+ plain1 = key.public_decrypt(cipher1, OpenSSL::PKey::RSA::PKCS1_PADDING) -+ assert_equal(plain0, plain1) -+ -+ cipherdef = key.private_encrypt(plain0) # PKCS1_PADDING is default -+ plain1 = key.public_decrypt(cipherdef) -+ assert_equal(plain0, plain1) -+ assert_equal(cipher1, cipherdef) -+ -+ # Failure cases -+ assert_raise(ArgumentError){ key.private_encrypt() } -+ assert_raise(ArgumentError){ key.private_encrypt("hi", 1, nil) } -+ assert_raise(OpenSSL::PKey::RSAError){ key.private_encrypt(plain0, 666) } -+ end -+ -+ - def test_verify_empty_rsa - rsa = OpenSSL::PKey::RSA.new - assert_raise(OpenSSL::PKey::PKeyError, "[Bug #12783]") { --- -2.32.0 - - -From 4330b1b9661fcab1172473f4fdd9986602c1e78c Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 18 May 2020 20:24:08 +0900 -Subject: [PATCH 4/6] pkey/rsa: port RSA#{private,public}_{encrypt,decrypt} to - the EVP API - -Implement these methods using the new OpenSSL::PKey::PKey#{encrypt,sign} -family. The definitions are now in lib/openssl/pkey.rb. - -Also, recommend using those generic methods in the documentation. ---- - ext/openssl/lib/openssl/pkey.rb | 106 ++++++++++++++++++++++++ - ext/openssl/ossl_pkey_rsa.c | 141 -------------------------------- - 2 files changed, 106 insertions(+), 141 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index 569559e1ce..dd8c7c0b09 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -243,5 +243,111 @@ def new(*args, &blk) # :nodoc: - end - end - end -+ -+ # :call-seq: -+ # rsa.private_encrypt(string) -> String -+ # rsa.private_encrypt(string, padding) -> String -+ # -+ # Encrypt +string+ with the private key. +padding+ defaults to -+ # PKCS1_PADDING. The encrypted string output can be decrypted using -+ # #public_decrypt. -+ # -+ # Deprecated in version 3.0. -+ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw, and -+ # PKey::PKey#verify_recover instead. -+ def private_encrypt(string, padding = PKCS1_PADDING) -+ n or raise OpenSSL::PKey::RSAError, "incomplete RSA" -+ private? or raise OpenSSL::PKey::RSAError, "private key needed." -+ begin -+ sign_raw(nil, string, { -+ "rsa_padding_mode" => translate_padding_mode(padding), -+ }) -+ rescue OpenSSL::PKey::PKeyError -+ raise OpenSSL::PKey::RSAError, $!.message -+ end -+ end -+ -+ # :call-seq: -+ # rsa.public_decrypt(string) -> String -+ # rsa.public_decrypt(string, padding) -> String -+ # -+ # Decrypt +string+, which has been encrypted with the private key, with the -+ # public key. +padding+ defaults to PKCS1_PADDING. -+ # -+ # Deprecated in version 3.0. -+ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw, and -+ # PKey::PKey#verify_recover instead. -+ def public_decrypt(string, padding = PKCS1_PADDING) -+ n or raise OpenSSL::PKey::RSAError, "incomplete RSA" -+ begin -+ verify_recover(nil, string, { -+ "rsa_padding_mode" => translate_padding_mode(padding), -+ }) -+ rescue OpenSSL::PKey::PKeyError -+ raise OpenSSL::PKey::RSAError, $!.message -+ end -+ end -+ -+ # :call-seq: -+ # rsa.public_encrypt(string) -> String -+ # rsa.public_encrypt(string, padding) -> String -+ # -+ # Encrypt +string+ with the public key. +padding+ defaults to -+ # PKCS1_PADDING. The encrypted string output can be decrypted using -+ # #private_decrypt. -+ # -+ # Deprecated in version 3.0. -+ # Consider using PKey::PKey#encrypt and PKey::PKey#decrypt instead. -+ def public_encrypt(data, padding = PKCS1_PADDING) -+ n or raise OpenSSL::PKey::RSAError, "incomplete RSA" -+ begin -+ encrypt(data, { -+ "rsa_padding_mode" => translate_padding_mode(padding), -+ }) -+ rescue OpenSSL::PKey::PKeyError -+ raise OpenSSL::PKey::RSAError, $!.message -+ end -+ end -+ -+ # :call-seq: -+ # rsa.private_decrypt(string) -> String -+ # rsa.private_decrypt(string, padding) -> String -+ # -+ # Decrypt +string+, which has been encrypted with the public key, with the -+ # private key. +padding+ defaults to PKCS1_PADDING. -+ # -+ # Deprecated in version 3.0. -+ # Consider using PKey::PKey#encrypt and PKey::PKey#decrypt instead. -+ def private_decrypt(data, padding = PKCS1_PADDING) -+ n or raise OpenSSL::PKey::RSAError, "incomplete RSA" -+ private? or raise OpenSSL::PKey::RSAError, "private key needed." -+ begin -+ decrypt(data, { -+ "rsa_padding_mode" => translate_padding_mode(padding), -+ }) -+ rescue OpenSSL::PKey::PKeyError -+ raise OpenSSL::PKey::RSAError, $!.message -+ end -+ end -+ -+ PKCS1_PADDING = 1 -+ SSLV23_PADDING = 2 -+ NO_PADDING = 3 -+ PKCS1_OAEP_PADDING = 4 -+ -+ private def translate_padding_mode(num) -+ case num -+ when PKCS1_PADDING -+ "pkcs1" -+ when SSLV23_PADDING -+ "sslv23" -+ when NO_PADDING -+ "none" -+ when PKCS1_OAEP_PADDING -+ "oaep" -+ else -+ raise OpenSSL::PKey::PKeyError, "unsupported padding mode" -+ end -+ end - end - end -diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c -index 1c5476cdcd..8ebd3ec559 100644 ---- a/ext/openssl/ossl_pkey_rsa.c -+++ b/ext/openssl/ossl_pkey_rsa.c -@@ -229,138 +229,6 @@ ossl_rsa_to_der(VALUE self) - return ossl_pkey_export_spki(self, 1); - } - --/* -- * call-seq: -- * rsa.public_encrypt(string) => String -- * rsa.public_encrypt(string, padding) => String -- * -- * Encrypt _string_ with the public key. _padding_ defaults to PKCS1_PADDING. -- * The encrypted string output can be decrypted using #private_decrypt. -- */ --static VALUE --ossl_rsa_public_encrypt(int argc, VALUE *argv, VALUE self) --{ -- RSA *rsa; -- const BIGNUM *rsa_n; -- int buf_len, pad; -- VALUE str, buffer, padding; -- -- GetRSA(self, rsa); -- RSA_get0_key(rsa, &rsa_n, NULL, NULL); -- if (!rsa_n) -- ossl_raise(eRSAError, "incomplete RSA"); -- rb_scan_args(argc, argv, "11", &buffer, &padding); -- pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); -- StringValue(buffer); -- str = rb_str_new(0, RSA_size(rsa)); -- buf_len = RSA_public_encrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), -- (unsigned char *)RSTRING_PTR(str), rsa, pad); -- if (buf_len < 0) ossl_raise(eRSAError, NULL); -- rb_str_set_len(str, buf_len); -- -- return str; --} -- --/* -- * call-seq: -- * rsa.public_decrypt(string) => String -- * rsa.public_decrypt(string, padding) => String -- * -- * Decrypt _string_, which has been encrypted with the private key, with the -- * public key. _padding_ defaults to PKCS1_PADDING. -- */ --static VALUE --ossl_rsa_public_decrypt(int argc, VALUE *argv, VALUE self) --{ -- RSA *rsa; -- const BIGNUM *rsa_n; -- int buf_len, pad; -- VALUE str, buffer, padding; -- -- GetRSA(self, rsa); -- RSA_get0_key(rsa, &rsa_n, NULL, NULL); -- if (!rsa_n) -- ossl_raise(eRSAError, "incomplete RSA"); -- rb_scan_args(argc, argv, "11", &buffer, &padding); -- pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); -- StringValue(buffer); -- str = rb_str_new(0, RSA_size(rsa)); -- buf_len = RSA_public_decrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), -- (unsigned char *)RSTRING_PTR(str), rsa, pad); -- if (buf_len < 0) ossl_raise(eRSAError, NULL); -- rb_str_set_len(str, buf_len); -- -- return str; --} -- --/* -- * call-seq: -- * rsa.private_encrypt(string) => String -- * rsa.private_encrypt(string, padding) => String -- * -- * Encrypt _string_ with the private key. _padding_ defaults to PKCS1_PADDING. -- * The encrypted string output can be decrypted using #public_decrypt. -- */ --static VALUE --ossl_rsa_private_encrypt(int argc, VALUE *argv, VALUE self) --{ -- RSA *rsa; -- const BIGNUM *rsa_n; -- int buf_len, pad; -- VALUE str, buffer, padding; -- -- GetRSA(self, rsa); -- RSA_get0_key(rsa, &rsa_n, NULL, NULL); -- if (!rsa_n) -- ossl_raise(eRSAError, "incomplete RSA"); -- if (!RSA_PRIVATE(self, rsa)) -- ossl_raise(eRSAError, "private key needed."); -- rb_scan_args(argc, argv, "11", &buffer, &padding); -- pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); -- StringValue(buffer); -- str = rb_str_new(0, RSA_size(rsa)); -- buf_len = RSA_private_encrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), -- (unsigned char *)RSTRING_PTR(str), rsa, pad); -- if (buf_len < 0) ossl_raise(eRSAError, NULL); -- rb_str_set_len(str, buf_len); -- -- return str; --} -- --/* -- * call-seq: -- * rsa.private_decrypt(string) => String -- * rsa.private_decrypt(string, padding) => String -- * -- * Decrypt _string_, which has been encrypted with the public key, with the -- * private key. _padding_ defaults to PKCS1_PADDING. -- */ --static VALUE --ossl_rsa_private_decrypt(int argc, VALUE *argv, VALUE self) --{ -- RSA *rsa; -- const BIGNUM *rsa_n; -- int buf_len, pad; -- VALUE str, buffer, padding; -- -- GetRSA(self, rsa); -- RSA_get0_key(rsa, &rsa_n, NULL, NULL); -- if (!rsa_n) -- ossl_raise(eRSAError, "incomplete RSA"); -- if (!RSA_PRIVATE(self, rsa)) -- ossl_raise(eRSAError, "private key needed."); -- rb_scan_args(argc, argv, "11", &buffer, &padding); -- pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding); -- StringValue(buffer); -- str = rb_str_new(0, RSA_size(rsa)); -- buf_len = RSA_private_decrypt(RSTRING_LENINT(buffer), (unsigned char *)RSTRING_PTR(buffer), -- (unsigned char *)RSTRING_PTR(str), rsa, pad); -- if (buf_len < 0) ossl_raise(eRSAError, NULL); -- rb_str_set_len(str, buf_len); -- -- return str; --} -- - /* - * call-seq: - * rsa.sign_pss(digest, data, salt_length:, mgf1_hash:) -> String -@@ -657,10 +525,6 @@ Init_ossl_rsa(void) - rb_define_alias(cRSA, "to_pem", "export"); - rb_define_alias(cRSA, "to_s", "export"); - rb_define_method(cRSA, "to_der", ossl_rsa_to_der, 0); -- rb_define_method(cRSA, "public_encrypt", ossl_rsa_public_encrypt, -1); -- rb_define_method(cRSA, "public_decrypt", ossl_rsa_public_decrypt, -1); -- rb_define_method(cRSA, "private_encrypt", ossl_rsa_private_encrypt, -1); -- rb_define_method(cRSA, "private_decrypt", ossl_rsa_private_decrypt, -1); - rb_define_method(cRSA, "sign_pss", ossl_rsa_sign_pss, -1); - rb_define_method(cRSA, "verify_pss", ossl_rsa_verify_pss, -1); - -@@ -678,11 +542,6 @@ Init_ossl_rsa(void) - - rb_define_method(cRSA, "params", ossl_rsa_get_params, 0); - -- DefRSAConst(PKCS1_PADDING); -- DefRSAConst(SSLV23_PADDING); -- DefRSAConst(NO_PADDING); -- DefRSAConst(PKCS1_OAEP_PADDING); -- - /* - * TODO: Test it - rb_define_method(cRSA, "blinding_on!", ossl_rsa_blinding_on, 0); --- -2.32.0 - - -From d45a31cf70f5a55d7f6cf5082efc4dbb68d1169d Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 10 Jul 2020 13:43:20 +0900 -Subject: [PATCH 5/6] pkey/ec: refactor EC#dsa_{sign,verify}_asn1 with - PKey#{sign,verify}_raw - -With the newly added OpenSSL::PKey::PKey#{sign,verify}_raw, -OpenSSL::PKey::EC's low level signing operation methods can be -implemented in Ruby. The definitions are now in lib/openssl/pkey.rb. ---- - ext/openssl/lib/openssl/pkey.rb | 22 +++++++++++++ - ext/openssl/ossl_pkey_ec.c | 55 --------------------------------- - 2 files changed, 22 insertions(+), 55 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index dd8c7c0b09..e587109694 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -164,6 +164,28 @@ def new(*args, &blk) # :nodoc: - class EC - include OpenSSL::Marshal - -+ # :call-seq: -+ # key.dsa_sign_asn1(data) -> String -+ # -+ # Deprecated in version 3.0. -+ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. -+ def dsa_sign_asn1(data) -+ sign_raw(nil, data) -+ rescue OpenSSL::PKey::PKeyError -+ raise OpenSSL::PKey::ECError, $!.message -+ end -+ -+ # :call-seq: -+ # key.dsa_verify_asn1(data, sig) -> true | false -+ # -+ # Deprecated in version 3.0. -+ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. -+ def dsa_verify_asn1(data, sig) -+ verify_raw(nil, sig, data) -+ rescue OpenSSL::PKey::PKeyError -+ raise OpenSSL::PKey::ECError, $!.message -+ end -+ - # :call-seq: - # ec.dh_compute_key(pubkey) -> string - # -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index 829529d4b9..f52e67079d 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -476,57 +476,6 @@ static VALUE ossl_ec_key_check_key(VALUE self) - return Qtrue; - } - --/* -- * call-seq: -- * key.dsa_sign_asn1(data) => String -- * -- * See the OpenSSL documentation for ECDSA_sign() -- */ --static VALUE ossl_ec_key_dsa_sign_asn1(VALUE self, VALUE data) --{ -- EC_KEY *ec; -- unsigned int buf_len; -- VALUE str; -- -- GetEC(self, ec); -- StringValue(data); -- -- if (EC_KEY_get0_private_key(ec) == NULL) -- ossl_raise(eECError, "Private EC key needed!"); -- -- str = rb_str_new(0, ECDSA_size(ec)); -- if (ECDSA_sign(0, (unsigned char *) RSTRING_PTR(data), RSTRING_LENINT(data), (unsigned char *) RSTRING_PTR(str), &buf_len, ec) != 1) -- ossl_raise(eECError, "ECDSA_sign"); -- rb_str_set_len(str, buf_len); -- -- return str; --} -- --/* -- * call-seq: -- * key.dsa_verify_asn1(data, sig) => true or false -- * -- * See the OpenSSL documentation for ECDSA_verify() -- */ --static VALUE ossl_ec_key_dsa_verify_asn1(VALUE self, VALUE data, VALUE sig) --{ -- EC_KEY *ec; -- -- GetEC(self, ec); -- StringValue(data); -- StringValue(sig); -- -- switch (ECDSA_verify(0, (unsigned char *)RSTRING_PTR(data), RSTRING_LENINT(data), -- (unsigned char *)RSTRING_PTR(sig), RSTRING_LENINT(sig), ec)) { -- case 1: -- return Qtrue; -- case 0: -- return Qfalse; -- default: -- ossl_raise(eECError, "ECDSA_verify"); -- } --} -- - /* - * OpenSSL::PKey::EC::Group - */ -@@ -1615,10 +1564,6 @@ void Init_ossl_ec(void) - rb_define_alias(cEC, "generate_key", "generate_key!"); - rb_define_method(cEC, "check_key", ossl_ec_key_check_key, 0); - -- rb_define_method(cEC, "dsa_sign_asn1", ossl_ec_key_dsa_sign_asn1, 1); -- rb_define_method(cEC, "dsa_verify_asn1", ossl_ec_key_dsa_verify_asn1, 2); --/* do_sign/do_verify */ -- - rb_define_method(cEC, "export", ossl_ec_key_export, -1); - rb_define_alias(cEC, "to_pem", "export"); - rb_define_method(cEC, "to_der", ossl_ec_key_to_der, 0); --- -2.32.0 - - -From 2494043e302c920e90e06cce443c5cd428e183f7 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 10 Jul 2020 13:51:18 +0900 -Subject: [PATCH 6/6] pkey/dsa: refactor DSA#sys{sign,verify} with - PKey#{sign,verify}_raw - -With the newly added OpenSSL::PKey::PKey#{sign,verify}_raw, -OpenSSL::PKey::DSA's low level signing operation methods can be -implemented in Ruby. The definitions are now in lib/openssl/pkey.rb. ---- - ext/openssl/lib/openssl/pkey.rb | 54 ++++++++++++++++++++ - ext/openssl/ossl_pkey_dsa.c | 88 --------------------------------- - 2 files changed, 54 insertions(+), 88 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index e587109694..f6bf5892b0 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -158,6 +158,60 @@ def new(*args, &blk) # :nodoc: - end - end - end -+ -+ # :call-seq: -+ # dsa.syssign(string) -> string -+ # -+ # Computes and returns the \DSA signature of +string+, where +string+ is -+ # expected to be an already-computed message digest of the original input -+ # data. The signature is issued using the private key of this DSA instance. -+ # -+ # Deprecated in version 3.0. -+ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. -+ # -+ # +string+:: -+ # A message digest of the original input data to be signed. -+ # -+ # Example: -+ # dsa = OpenSSL::PKey::DSA.new(2048) -+ # doc = "Sign me" -+ # digest = OpenSSL::Digest.digest('SHA1', doc) -+ # -+ # # With legacy #syssign and #sysverify: -+ # sig = dsa.syssign(digest) -+ # p dsa.sysverify(digest, sig) #=> true -+ # -+ # # With #sign_raw and #verify_raw: -+ # sig = dsa.sign_raw(nil, digest) -+ # p dsa.verify_raw(nil, sig, digest) #=> true -+ def syssign(string) -+ q or raise OpenSSL::PKey::DSAError, "incomplete DSA" -+ private? or raise OpenSSL::PKey::DSAError, "Private DSA key needed!" -+ begin -+ sign_raw(nil, string) -+ rescue OpenSSL::PKey::PKeyError -+ raise OpenSSL::PKey::DSAError, $!.message -+ end -+ end -+ -+ # :call-seq: -+ # dsa.sysverify(digest, sig) -> true | false -+ # -+ # Verifies whether the signature is valid given the message digest input. -+ # It does so by validating +sig+ using the public key of this DSA instance. -+ # -+ # Deprecated in version 3.0. -+ # Consider using PKey::PKey#sign_raw and PKey::PKey#verify_raw instead. -+ # -+ # +digest+:: -+ # A message digest of the original input data to be signed. -+ # +sig+:: -+ # A \DSA signature value. -+ def sysverify(digest, sig) -+ verify_raw(nil, sig, digest) -+ rescue OpenSSL::PKey::PKeyError -+ raise OpenSSL::PKey::DSAError, $!.message -+ end - end - - if defined?(EC) -diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c -index ab9ac781e8..7af00eebec 100644 ---- a/ext/openssl/ossl_pkey_dsa.c -+++ b/ext/openssl/ossl_pkey_dsa.c -@@ -264,92 +264,6 @@ ossl_dsa_get_params(VALUE self) - return hash; - } - --/* -- * call-seq: -- * dsa.syssign(string) -> aString -- * -- * Computes and returns the DSA signature of _string_, where _string_ is -- * expected to be an already-computed message digest of the original input -- * data. The signature is issued using the private key of this DSA instance. -- * -- * === Parameters -- * * _string_ is a message digest of the original input data to be signed. -- * -- * === Example -- * dsa = OpenSSL::PKey::DSA.new(2048) -- * doc = "Sign me" -- * digest = OpenSSL::Digest.digest('SHA1', doc) -- * sig = dsa.syssign(digest) -- * -- * -- */ --static VALUE --ossl_dsa_sign(VALUE self, VALUE data) --{ -- DSA *dsa; -- const BIGNUM *dsa_q; -- unsigned int buf_len; -- VALUE str; -- -- GetDSA(self, dsa); -- DSA_get0_pqg(dsa, NULL, &dsa_q, NULL); -- if (!dsa_q) -- ossl_raise(eDSAError, "incomplete DSA"); -- if (!DSA_PRIVATE(self, dsa)) -- ossl_raise(eDSAError, "Private DSA key needed!"); -- StringValue(data); -- str = rb_str_new(0, DSA_size(dsa)); -- if (!DSA_sign(0, (unsigned char *)RSTRING_PTR(data), RSTRING_LENINT(data), -- (unsigned char *)RSTRING_PTR(str), -- &buf_len, dsa)) { /* type is ignored (0) */ -- ossl_raise(eDSAError, NULL); -- } -- rb_str_set_len(str, buf_len); -- -- return str; --} -- --/* -- * call-seq: -- * dsa.sysverify(digest, sig) -> true | false -- * -- * Verifies whether the signature is valid given the message digest input. It -- * does so by validating _sig_ using the public key of this DSA instance. -- * -- * === Parameters -- * * _digest_ is a message digest of the original input data to be signed -- * * _sig_ is a DSA signature value -- * -- * === Example -- * dsa = OpenSSL::PKey::DSA.new(2048) -- * doc = "Sign me" -- * digest = OpenSSL::Digest.digest('SHA1', doc) -- * sig = dsa.syssign(digest) -- * puts dsa.sysverify(digest, sig) # => true -- * -- */ --static VALUE --ossl_dsa_verify(VALUE self, VALUE digest, VALUE sig) --{ -- DSA *dsa; -- int ret; -- -- GetDSA(self, dsa); -- StringValue(digest); -- StringValue(sig); -- /* type is ignored (0) */ -- ret = DSA_verify(0, (unsigned char *)RSTRING_PTR(digest), RSTRING_LENINT(digest), -- (unsigned char *)RSTRING_PTR(sig), RSTRING_LENINT(sig), dsa); -- if (ret < 0) { -- ossl_raise(eDSAError, NULL); -- } -- else if (ret == 1) { -- return Qtrue; -- } -- -- return Qfalse; --} -- - /* - * Document-method: OpenSSL::PKey::DSA#set_pqg - * call-seq: -@@ -404,8 +318,6 @@ Init_ossl_dsa(void) - rb_define_alias(cDSA, "to_pem", "export"); - rb_define_alias(cDSA, "to_s", "export"); - rb_define_method(cDSA, "to_der", ossl_dsa_to_der, 0); -- rb_define_method(cDSA, "syssign", ossl_dsa_sign, 1); -- rb_define_method(cDSA, "sysverify", ossl_dsa_verify, 2); - - DEF_OSSL_PKEY_BN(cDSA, dsa, p); - DEF_OSSL_PKEY_BN(cDSA, dsa, q); --- -2.32.0 - diff --git a/ruby-3.1.0-Migrate-from-the-low-level-HMAC-API-to-the-EVP-API.patch b/ruby-3.1.0-Migrate-from-the-low-level-HMAC-API-to-the-EVP-API.patch deleted file mode 100644 index d25cae9..0000000 --- a/ruby-3.1.0-Migrate-from-the-low-level-HMAC-API-to-the-EVP-API.patch +++ /dev/null @@ -1,523 +0,0 @@ -From 8253d7c9cea16c2aa009b59db4f5d93afb74c6eb Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Tue, 30 Jun 2020 14:27:13 +0900 -Subject: [PATCH 1/2] hmac: add a test case for OpenSSL::HMAC singleton methods - ---- - test/openssl/test_hmac.rb | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/test/openssl/test_hmac.rb b/test/openssl/test_hmac.rb -index 9cb3c5a86..7202a5902 100644 ---- a/test/openssl/test_hmac.rb -+++ b/test/openssl/test_hmac.rb -@@ -49,6 +49,15 @@ def test_eq - refute_equal h1, h2.digest - refute_equal h1, h3 - end -+ -+ def test_singleton_methods -+ # RFC 2202 2. Test Cases for HMAC-MD5 -+ key = ["0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"].pack("H*") -+ digest = OpenSSL::HMAC.digest("MD5", key, "Hi There") -+ assert_equal ["9294727a3638bb1c13f48ef8158bfc9d"].pack("H*"), digest -+ hexdigest = OpenSSL::HMAC.hexdigest("MD5", key, "Hi There") -+ assert_equal "9294727a3638bb1c13f48ef8158bfc9d", hexdigest -+ end - end - - end - -From 0317e2fc028be40a7d64d0e4337d3e21539613ce Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 18 May 2020 16:15:07 +0900 -Subject: [PATCH 2/2] hmac: migrate from the low-level HMAC API to the EVP API - -Use the EVP API instead of the low-level HMAC API. Use of the HMAC API -has been discouraged and is being marked as deprecated starting from -OpenSSL 3.0.0. - -The two singleton methods OpenSSL::HMAC, HMAC.digest and HMAC.hexdigest -are now in lib/openssl/hmac.rb. ---- - ext/openssl/extconf.rb | 3 +- - ext/openssl/lib/openssl/hmac.rb | 40 +++++++ - ext/openssl/openssl_missing.c | 26 ----- - ext/openssl/openssl_missing.h | 10 +- - ext/openssl/ossl.h | 1 - - ext/openssl/ossl_hmac.c | 179 ++++++++------------------------ - 6 files changed, 89 insertions(+), 170 deletions(-) - -diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb -index 693e55cd9..063498a76 100644 ---- a/ext/openssl/extconf.rb -+++ b/ext/openssl/extconf.rb -@@ -141,8 +141,7 @@ def find_openssl_library - have_func("BN_GENCB_get_arg") - have_func("EVP_MD_CTX_new") - have_func("EVP_MD_CTX_free") --have_func("HMAC_CTX_new") --have_func("HMAC_CTX_free") -+have_func("EVP_MD_CTX_pkey_ctx") - have_func("X509_STORE_get_ex_data") - have_func("X509_STORE_set_ex_data") - have_func("X509_STORE_get_ex_new_index") -diff --git a/ext/openssl/lib/openssl/hmac.rb b/ext/openssl/lib/openssl/hmac.rb -index 3d4427611d..9bc8bc8df3 100644 ---- a/ext/openssl/lib/openssl/hmac.rb -+++ b/ext/openssl/lib/openssl/hmac.rb -@@ -9,5 +9,45 @@ def ==(other) - - OpenSSL.fixed_length_secure_compare(self.digest, other.digest) - end -+ -+ class << self -+ # :call-seq: -+ # HMAC.digest(digest, key, data) -> aString -+ # -+ # Returns the authentication code as a binary string. The _digest_ parameter -+ # specifies the digest algorithm to use. This may be a String representing -+ # the algorithm name or an instance of OpenSSL::Digest. -+ # -+ # === Example -+ # key = 'key' -+ # data = 'The quick brown fox jumps over the lazy dog' -+ # -+ # hmac = OpenSSL::HMAC.digest('SHA1', key, data) -+ # #=> "\xDE|\x9B\x85\xB8\xB7\x8A\xA6\xBC\x8Az6\xF7\n\x90p\x1C\x9D\xB4\xD9" -+ def digest(digest, key, data) -+ hmac = new(key, digest) -+ hmac << data -+ hmac.digest -+ end -+ -+ # :call-seq: -+ # HMAC.hexdigest(digest, key, data) -> aString -+ # -+ # Returns the authentication code as a hex-encoded string. The _digest_ -+ # parameter specifies the digest algorithm to use. This may be a String -+ # representing the algorithm name or an instance of OpenSSL::Digest. -+ # -+ # === Example -+ # key = 'key' -+ # data = 'The quick brown fox jumps over the lazy dog' -+ # -+ # hmac = OpenSSL::HMAC.hexdigest('SHA1', key, data) -+ # #=> "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9" -+ def hexdigest(digest, key, data) -+ hmac = new(key, digest) -+ hmac << data -+ hmac.hexdigest -+ end -+ end - end - end -diff --git a/ext/openssl/openssl_missing.c b/ext/openssl/openssl_missing.c -index b36ef0288..010c158dc 100644 ---- a/ext/openssl/openssl_missing.c -+++ b/ext/openssl/openssl_missing.c -@@ -13,9 +13,6 @@ - #if !defined(OPENSSL_NO_ENGINE) - # include - #endif --#if !defined(OPENSSL_NO_HMAC) --# include --#endif - #include - - #include "openssl_missing.h" -@@ -58,29 +55,6 @@ ossl_EC_curve_nist2nid(const char *name) - #endif - - /*** added in 1.1.0 ***/ --#if !defined(HAVE_HMAC_CTX_NEW) --HMAC_CTX * --ossl_HMAC_CTX_new(void) --{ -- HMAC_CTX *ctx = OPENSSL_malloc(sizeof(HMAC_CTX)); -- if (!ctx) -- return NULL; -- HMAC_CTX_init(ctx); -- return ctx; --} --#endif -- --#if !defined(HAVE_HMAC_CTX_FREE) --void --ossl_HMAC_CTX_free(HMAC_CTX *ctx) --{ -- if (ctx) { -- HMAC_CTX_cleanup(ctx); -- OPENSSL_free(ctx); -- } --} --#endif -- - #if !defined(HAVE_X509_CRL_GET0_SIGNATURE) - void - ossl_X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, -diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h -index 7d218f86f..06d2a9082 100644 ---- a/ext/openssl/openssl_missing.h -+++ b/ext/openssl/openssl_missing.h -@@ -54,14 +54,8 @@ int ossl_EC_curve_nist2nid(const char *); - # define EVP_MD_CTX_free EVP_MD_CTX_destroy - #endif - --#if !defined(HAVE_HMAC_CTX_NEW) --HMAC_CTX *ossl_HMAC_CTX_new(void); --# define HMAC_CTX_new ossl_HMAC_CTX_new --#endif -- --#if !defined(HAVE_HMAC_CTX_FREE) --void ossl_HMAC_CTX_free(HMAC_CTX *); --# define HMAC_CTX_free ossl_HMAC_CTX_free -+#if !defined(HAVE_EVP_MD_CTX_PKEY_CTX) -+# define EVP_MD_CTX_pkey_ctx(x) (x)->pctx - #endif - - #if !defined(HAVE_X509_STORE_GET_EX_DATA) -diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h -index c20f506bd..577eb6d6b 100644 ---- a/ext/openssl/ossl.h -+++ b/ext/openssl/ossl.h -@@ -24,7 +24,6 @@ - #include - #include - #include --#include - #include - #include - #ifndef OPENSSL_NO_TS -diff --git a/ext/openssl/ossl_hmac.c b/ext/openssl/ossl_hmac.c -index 70e9fb819..a21db6c48 100644 ---- a/ext/openssl/ossl_hmac.c -+++ b/ext/openssl/ossl_hmac.c -@@ -7,14 +7,12 @@ - * This program is licensed under the same licence as Ruby. - * (See the file 'LICENCE'.) - */ --#if !defined(OPENSSL_NO_HMAC) -- - #include "ossl.h" - - #define NewHMAC(klass) \ - TypedData_Wrap_Struct((klass), &ossl_hmac_type, 0) - #define GetHMAC(obj, ctx) do { \ -- TypedData_Get_Struct((obj), HMAC_CTX, &ossl_hmac_type, (ctx)); \ -+ TypedData_Get_Struct((obj), EVP_MD_CTX, &ossl_hmac_type, (ctx)); \ - if (!(ctx)) { \ - ossl_raise(rb_eRuntimeError, "HMAC wasn't initialized"); \ - } \ -@@ -36,7 +34,7 @@ VALUE eHMACError; - static void - ossl_hmac_free(void *ctx) - { -- HMAC_CTX_free(ctx); -+ EVP_MD_CTX_free(ctx); - } - - static const rb_data_type_t ossl_hmac_type = { -@@ -51,12 +49,12 @@ static VALUE - ossl_hmac_alloc(VALUE klass) - { - VALUE obj; -- HMAC_CTX *ctx; -+ EVP_MD_CTX *ctx; - - obj = NewHMAC(klass); -- ctx = HMAC_CTX_new(); -+ ctx = EVP_MD_CTX_new(); - if (!ctx) -- ossl_raise(eHMACError, NULL); -+ ossl_raise(eHMACError, "EVP_MD_CTX"); - RTYPEDDATA_DATA(obj) = ctx; - - return obj; -@@ -76,8 +74,7 @@ ossl_hmac_alloc(VALUE klass) - * === Example - * - * key = 'key' -- * digest = OpenSSL::Digest.new('sha1') -- * instance = OpenSSL::HMAC.new(key, digest) -+ * instance = OpenSSL::HMAC.new(key, 'SHA1') - * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f - * instance.class - * #=> OpenSSL::HMAC -@@ -86,7 +83,7 @@ ossl_hmac_alloc(VALUE klass) - * - * Two instances can be securely compared with #== in constant time: - * -- * other_instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1')) -+ * other_instance = OpenSSL::HMAC.new('key', 'SHA1') - * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f - * instance == other_instance - * #=> true -@@ -95,12 +92,23 @@ ossl_hmac_alloc(VALUE klass) - static VALUE - ossl_hmac_initialize(VALUE self, VALUE key, VALUE digest) - { -- HMAC_CTX *ctx; -+ EVP_MD_CTX *ctx; -+ EVP_PKEY *pkey; - -- StringValue(key); - GetHMAC(self, ctx); -- HMAC_Init_ex(ctx, RSTRING_PTR(key), RSTRING_LENINT(key), -- ossl_evp_get_digestbyname(digest), NULL); -+ StringValue(key); -+ pkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, -+ (unsigned char *)RSTRING_PTR(key), -+ RSTRING_LENINT(key)); -+ if (!pkey) -+ ossl_raise(eHMACError, "EVP_PKEY_new_mac_key"); -+ if (EVP_DigestSignInit(ctx, NULL, ossl_evp_get_digestbyname(digest), -+ NULL, pkey) != 1) { -+ EVP_PKEY_free(pkey); -+ ossl_raise(eHMACError, "EVP_DigestSignInit"); -+ } -+ /* Decrement reference counter; EVP_MD_CTX still keeps it */ -+ EVP_PKEY_free(pkey); - - return self; - } -@@ -108,16 +116,15 @@ ossl_hmac_initialize(VALUE self, VALUE key, VALUE digest) - static VALUE - ossl_hmac_copy(VALUE self, VALUE other) - { -- HMAC_CTX *ctx1, *ctx2; -+ EVP_MD_CTX *ctx1, *ctx2; - - rb_check_frozen(self); - if (self == other) return self; - - GetHMAC(self, ctx1); - GetHMAC(other, ctx2); -- -- if (!HMAC_CTX_copy(ctx1, ctx2)) -- ossl_raise(eHMACError, "HMAC_CTX_copy"); -+ if (EVP_MD_CTX_copy(ctx1, ctx2) != 1) -+ ossl_raise(eHMACError, "EVP_MD_CTX_copy"); - return self; - } - -@@ -142,33 +149,16 @@ ossl_hmac_copy(VALUE self, VALUE other) - static VALUE - ossl_hmac_update(VALUE self, VALUE data) - { -- HMAC_CTX *ctx; -+ EVP_MD_CTX *ctx; - - StringValue(data); - GetHMAC(self, ctx); -- HMAC_Update(ctx, (unsigned char *)RSTRING_PTR(data), RSTRING_LEN(data)); -+ if (EVP_DigestSignUpdate(ctx, RSTRING_PTR(data), RSTRING_LEN(data)) != 1) -+ ossl_raise(eHMACError, "EVP_DigestSignUpdate"); - - return self; - } - --static void --hmac_final(HMAC_CTX *ctx, unsigned char *buf, unsigned int *buf_len) --{ -- HMAC_CTX *final; -- -- final = HMAC_CTX_new(); -- if (!final) -- ossl_raise(eHMACError, "HMAC_CTX_new"); -- -- if (!HMAC_CTX_copy(final, ctx)) { -- HMAC_CTX_free(final); -- ossl_raise(eHMACError, "HMAC_CTX_copy"); -- } -- -- HMAC_Final(final, buf, buf_len); -- HMAC_CTX_free(final); --} -- - /* - * call-seq: - * hmac.digest -> string -@@ -176,7 +166,7 @@ hmac_final(HMAC_CTX *ctx, unsigned char *buf, unsigned int *buf_len) - * Returns the authentication code an instance represents as a binary string. - * - * === Example -- * instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1')) -+ * instance = OpenSSL::HMAC.new('key', 'SHA1') - * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f - * instance.digest - * #=> "\xF4+\xB0\xEE\xB0\x18\xEB\xBDE\x97\xAEr\x13q\x1E\xC6\a`\x84?" -@@ -184,15 +174,16 @@ hmac_final(HMAC_CTX *ctx, unsigned char *buf, unsigned int *buf_len) - static VALUE - ossl_hmac_digest(VALUE self) - { -- HMAC_CTX *ctx; -- unsigned int buf_len; -+ EVP_MD_CTX *ctx; -+ size_t buf_len; - VALUE ret; - - GetHMAC(self, ctx); - ret = rb_str_new(NULL, EVP_MAX_MD_SIZE); -- hmac_final(ctx, (unsigned char *)RSTRING_PTR(ret), &buf_len); -- assert(buf_len <= EVP_MAX_MD_SIZE); -- rb_str_set_len(ret, buf_len); -+ if (EVP_DigestSignFinal(ctx, (unsigned char *)RSTRING_PTR(ret), -+ &buf_len) != 1) -+ ossl_raise(eHMACError, "EVP_DigestSignFinal"); -+ rb_str_set_len(ret, (long)buf_len); - - return ret; - } -@@ -207,13 +198,14 @@ ossl_hmac_digest(VALUE self) - static VALUE - ossl_hmac_hexdigest(VALUE self) - { -- HMAC_CTX *ctx; -+ EVP_MD_CTX *ctx; - unsigned char buf[EVP_MAX_MD_SIZE]; -- unsigned int buf_len; -+ size_t buf_len; - VALUE ret; - - GetHMAC(self, ctx); -- hmac_final(ctx, buf, &buf_len); -+ if (EVP_DigestSignFinal(ctx, buf, &buf_len) != 1) -+ ossl_raise(eHMACError, "EVP_DigestSignFinal"); - ret = rb_str_new(NULL, buf_len * 2); - ossl_bin2hex(buf, RSTRING_PTR(ret), buf_len); - -@@ -230,7 +222,7 @@ ossl_hmac_hexdigest(VALUE self) - * === Example - * - * data = "The quick brown fox jumps over the lazy dog" -- * instance = OpenSSL::HMAC.new('key', OpenSSL::Digest.new('sha1')) -+ * instance = OpenSSL::HMAC.new('key', 'SHA1') - * #=> f42bb0eeb018ebbd4597ae7213711ec60760843f - * - * instance.update(data) -@@ -242,84 +234,17 @@ ossl_hmac_hexdigest(VALUE self) - static VALUE - ossl_hmac_reset(VALUE self) - { -- HMAC_CTX *ctx; -+ EVP_MD_CTX *ctx; -+ EVP_PKEY *pkey; - - GetHMAC(self, ctx); -- HMAC_Init_ex(ctx, NULL, 0, NULL, NULL); -+ pkey = EVP_PKEY_CTX_get0_pkey(EVP_MD_CTX_pkey_ctx(ctx)); -+ if (EVP_DigestSignInit(ctx, NULL, EVP_MD_CTX_md(ctx), NULL, pkey) != 1) -+ ossl_raise(eHMACError, "EVP_DigestSignInit"); - - return self; - } - --/* -- * call-seq: -- * HMAC.digest(digest, key, data) -> aString -- * -- * Returns the authentication code as a binary string. The _digest_ parameter -- * specifies the digest algorithm to use. This may be a String representing -- * the algorithm name or an instance of OpenSSL::Digest. -- * -- * === Example -- * -- * key = 'key' -- * data = 'The quick brown fox jumps over the lazy dog' -- * -- * hmac = OpenSSL::HMAC.digest('sha1', key, data) -- * #=> "\xDE|\x9B\x85\xB8\xB7\x8A\xA6\xBC\x8Az6\xF7\n\x90p\x1C\x9D\xB4\xD9" -- * -- */ --static VALUE --ossl_hmac_s_digest(VALUE klass, VALUE digest, VALUE key, VALUE data) --{ -- unsigned char *buf; -- unsigned int buf_len; -- -- StringValue(key); -- StringValue(data); -- buf = HMAC(ossl_evp_get_digestbyname(digest), RSTRING_PTR(key), -- RSTRING_LENINT(key), (unsigned char *)RSTRING_PTR(data), -- RSTRING_LEN(data), NULL, &buf_len); -- -- return rb_str_new((const char *)buf, buf_len); --} -- --/* -- * call-seq: -- * HMAC.hexdigest(digest, key, data) -> aString -- * -- * Returns the authentication code as a hex-encoded string. The _digest_ -- * parameter specifies the digest algorithm to use. This may be a String -- * representing the algorithm name or an instance of OpenSSL::Digest. -- * -- * === Example -- * -- * key = 'key' -- * data = 'The quick brown fox jumps over the lazy dog' -- * -- * hmac = OpenSSL::HMAC.hexdigest('sha1', key, data) -- * #=> "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9" -- * -- */ --static VALUE --ossl_hmac_s_hexdigest(VALUE klass, VALUE digest, VALUE key, VALUE data) --{ -- unsigned char buf[EVP_MAX_MD_SIZE]; -- unsigned int buf_len; -- VALUE ret; -- -- StringValue(key); -- StringValue(data); -- -- if (!HMAC(ossl_evp_get_digestbyname(digest), RSTRING_PTR(key), -- RSTRING_LENINT(key), (unsigned char *)RSTRING_PTR(data), -- RSTRING_LEN(data), buf, &buf_len)) -- ossl_raise(eHMACError, "HMAC"); -- -- ret = rb_str_new(NULL, buf_len * 2); -- ossl_bin2hex(buf, RSTRING_PTR(ret), buf_len); -- -- return ret; --} -- - /* - * INIT - */ -@@ -353,8 +278,7 @@ Init_ossl_hmac(void) - * data1 = File.read("file1") - * data2 = File.read("file2") - * key = "key" -- * digest = OpenSSL::Digest.new('SHA256') -- * hmac = OpenSSL::HMAC.new(key, digest) -+ * hmac = OpenSSL::HMAC.new(key, 'SHA256') - * hmac << data1 - * hmac << data2 - * mac = hmac.digest -@@ -364,8 +288,6 @@ Init_ossl_hmac(void) - cHMAC = rb_define_class_under(mOSSL, "HMAC", rb_cObject); - - rb_define_alloc_func(cHMAC, ossl_hmac_alloc); -- rb_define_singleton_method(cHMAC, "digest", ossl_hmac_s_digest, 3); -- rb_define_singleton_method(cHMAC, "hexdigest", ossl_hmac_s_hexdigest, 3); - - rb_define_method(cHMAC, "initialize", ossl_hmac_initialize, 2); - rb_define_method(cHMAC, "initialize_copy", ossl_hmac_copy, 1); -@@ -378,12 +300,3 @@ Init_ossl_hmac(void) - rb_define_alias(cHMAC, "inspect", "hexdigest"); - rb_define_alias(cHMAC, "to_s", "hexdigest"); - } -- --#else /* NO_HMAC */ --# warning >>> OpenSSL is compiled without HMAC support <<< --void --Init_ossl_hmac(void) --{ -- rb_warning("HMAC is not available: OpenSSL is compiled without HMAC."); --} --#endif /* NO_HMAC */ --- -2.34.1 - diff --git a/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support-part-2.patch b/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support-part-2.patch deleted file mode 100644 index b906c19..0000000 --- a/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support-part-2.patch +++ /dev/null @@ -1,458 +0,0 @@ -From 91d04f991f8b9910efea7bbe5aecb0fea2bbd5fa Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sun, 24 Oct 2021 17:50:18 +0900 -Subject: [PATCH 1/8] cipher: update test_ciphers - -Do not attempt to actually use all algorithms. Not all algorithms listed -in OpenSSL::Cipher.ciphers are always available. ---- - test/openssl/test_cipher.rb | 13 +++++-------- - 1 file changed, 5 insertions(+), 8 deletions(-) - -diff --git a/test/openssl/test_cipher.rb b/test/openssl/test_cipher.rb -index 6d18c0c8..b5fdf0b3 100644 ---- a/test/openssl/test_cipher.rb -+++ b/test/openssl/test_cipher.rb -@@ -135,14 +135,11 @@ def test_ctr_if_exists - end - - def test_ciphers -- OpenSSL::Cipher.ciphers.each{|name| -- next if /netbsd/ =~ RUBY_PLATFORM && /idea|rc5/i =~ name -- begin -- assert_kind_of(OpenSSL::Cipher, OpenSSL::Cipher.new(name)) -- rescue OpenSSL::Cipher::CipherError => e -- raise unless /wrap/ =~ name and /wrap mode not allowed/ =~ e.message -- end -- } -+ ciphers = OpenSSL::Cipher.ciphers -+ assert_kind_of Array, ciphers -+ assert_include ciphers, "aes-128-cbc" -+ assert_include ciphers, "aes128" # alias of aes-128-cbc -+ assert_include ciphers, "aes-128-gcm" - end - - def test_AES - -From 6a60c7b2e7b6afe8b8c98d864ef2740094d86e1d Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sat, 11 Dec 2021 16:27:42 +0900 -Subject: [PATCH 2/8] hmac: fix wrong usage of EVP_DigestSignFinal() - -According to the manpage, the "siglen" parameter must be initialized -beforehand. ---- - ext/openssl/ossl_hmac.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/ext/openssl/ossl_hmac.c b/ext/openssl/ossl_hmac.c -index f89ff2f9..bfe3a74b 100644 ---- a/ext/openssl/ossl_hmac.c -+++ b/ext/openssl/ossl_hmac.c -@@ -175,7 +175,7 @@ static VALUE - ossl_hmac_digest(VALUE self) - { - EVP_MD_CTX *ctx; -- size_t buf_len; -+ size_t buf_len = EVP_MAX_MD_SIZE; - VALUE ret; - - GetHMAC(self, ctx); -@@ -200,7 +200,7 @@ ossl_hmac_hexdigest(VALUE self) - { - EVP_MD_CTX *ctx; - unsigned char buf[EVP_MAX_MD_SIZE]; -- size_t buf_len; -+ size_t buf_len = EVP_MAX_MD_SIZE; - VALUE ret; - - GetHMAC(self, ctx); - -From 46995816392a79d037df5550b2fb226652c06f42 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sat, 11 Dec 2021 16:30:30 +0900 -Subject: [PATCH 3/8] hmac: skip test_dup on OpenSSL 3.0 for now - -EVP_MD_CTX_copy() doesn't seem to work as intended on HMAC EVP_MD_CTX -on OpenSSL 3.0.0 and causes a double free. I haven't found the root -problem yet, but let's skip the test case for now. ---- - test/openssl/test_hmac.rb | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/test/openssl/test_hmac.rb b/test/openssl/test_hmac.rb -index 2f53a813..47cb3718 100644 ---- a/test/openssl/test_hmac.rb -+++ b/test/openssl/test_hmac.rb -@@ -19,6 +19,7 @@ def test_hmac - end - - def test_dup -+ pend "HMAC#initialize_copy is currently broken on OpenSSL 3.0.0" if openssl?(3, 0, 0) - h1 = OpenSSL::HMAC.new("KEY", "MD5") - h1.update("DATA") - h = h1.dup - -From 69a27d8de4bd291cb4eb21a4d715b197e7da5a06 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Thu, 15 Apr 2021 00:51:58 +0900 -Subject: [PATCH 4/8] engine: disable OpenSSL::Engine on OpenSSL 3.0 - -The entire ENGINE API is deprecated in OpenSSL 3.0 in favor of the new -"Provider" concept. - -OpenSSL::Engine will not be defined when compiled with OpenSSL 3.0. -We would need a way to interact with providers from Ruby programs, but -since the concept is completely different from the ENGINE API, it will -not be through the current OpenSSL::Engine interface. ---- - ext/openssl/openssl_missing.c | 3 --- - ext/openssl/ossl.h | 8 +++++--- - ext/openssl/ossl_engine.c | 3 ++- - ext/openssl/ossl_pkey.c | 4 ++++ - 4 files changed, 11 insertions(+), 7 deletions(-) - -diff --git a/ext/openssl/openssl_missing.c b/ext/openssl/openssl_missing.c -index 8b93cba6..4415703d 100644 ---- a/ext/openssl/openssl_missing.c -+++ b/ext/openssl/openssl_missing.c -@@ -10,9 +10,6 @@ - #include RUBY_EXTCONF_H - - #include /* memcpy() */ --#if !defined(OPENSSL_NO_ENGINE) --# include --#endif - #include - - #include "openssl_missing.h" -diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h -index 3a0ab1e5..4b512689 100644 ---- a/ext/openssl/ossl.h -+++ b/ext/openssl/ossl.h -@@ -18,6 +18,7 @@ - #include - #include - #include -+ - #include - #include - #include -@@ -30,9 +31,6 @@ - #include - #endif - #include --#if !defined(OPENSSL_NO_ENGINE) --# include --#endif - #if !defined(OPENSSL_NO_OCSP) - # include - #endif -@@ -54,6 +52,10 @@ - (LIBRESSL_VERSION_NUMBER >= (maj << 28) | (min << 20) | (pat << 12)) - #endif - -+#if !defined(OPENSSL_NO_ENGINE) && !OSSL_OPENSSL_PREREQ(3, 0, 0) -+# define OSSL_USE_ENGINE -+#endif -+ - /* - * Common Module - */ -diff --git a/ext/openssl/ossl_engine.c b/ext/openssl/ossl_engine.c -index 661a1368..1abde7f7 100644 ---- a/ext/openssl/ossl_engine.c -+++ b/ext/openssl/ossl_engine.c -@@ -9,7 +9,8 @@ - */ - #include "ossl.h" - --#if !defined(OPENSSL_NO_ENGINE) -+#ifdef OSSL_USE_ENGINE -+# include - - #define NewEngine(klass) \ - TypedData_Wrap_Struct((klass), &ossl_engine_type, 0) -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 7030be3c..94760d32 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -9,6 +9,10 @@ - */ - #include "ossl.h" - -+#ifdef OSSL_USE_ENGINE -+# include -+#endif -+ - /* - * Classes - */ - -From b1ee2f23b28c2d0b14fd9b4b9fef13e870370746 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Wed, 17 Nov 2021 11:39:06 +0900 -Subject: [PATCH 5/8] ssl: add constants for new SSL_OP_* flags - -Add all SSL_OP_* constants defined in OpenSSL 3.0.0 which are not -specific to DTLS. ---- - ext/openssl/ossl_ssl.c | 35 +++++++++++++++++++++++++++++------ - 1 file changed, 29 insertions(+), 6 deletions(-) - -diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c -index 3b425ca7..9a0682a7 100644 ---- a/ext/openssl/ossl_ssl.c -+++ b/ext/openssl/ossl_ssl.c -@@ -2941,13 +2941,28 @@ Init_ossl_ssl(void) - rb_define_const(mSSL, "VERIFY_CLIENT_ONCE", INT2NUM(SSL_VERIFY_CLIENT_ONCE)); - - rb_define_const(mSSL, "OP_ALL", ULONG2NUM(SSL_OP_ALL)); -+#ifdef SSL_OP_CLEANSE_PLAINTEXT /* OpenSSL 3.0 */ -+ rb_define_const(mSSL, "OP_CLEANSE_PLAINTEXT", ULONG2NUM(SSL_OP_CLEANSE_PLAINTEXT)); -+#endif - rb_define_const(mSSL, "OP_LEGACY_SERVER_CONNECT", ULONG2NUM(SSL_OP_LEGACY_SERVER_CONNECT)); -+#ifdef SSL_OP_ENABLE_KTLS /* OpenSSL 3.0 */ -+ rb_define_const(mSSL, "OP_ENABLE_KTLS", ULONG2NUM(SSL_OP_ENABLE_KTLS)); -+#endif - #ifdef SSL_OP_TLSEXT_PADDING /* OpenSSL 1.0.1h and OpenSSL 1.0.2 */ - rb_define_const(mSSL, "OP_TLSEXT_PADDING", ULONG2NUM(SSL_OP_TLSEXT_PADDING)); - #endif - #ifdef SSL_OP_SAFARI_ECDHE_ECDSA_BUG /* OpenSSL 1.0.1f and OpenSSL 1.0.2 */ - rb_define_const(mSSL, "OP_SAFARI_ECDHE_ECDSA_BUG", ULONG2NUM(SSL_OP_SAFARI_ECDHE_ECDSA_BUG)); - #endif -+#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF /* OpenSSL 3.0 */ -+ rb_define_const(mSSL, "OP_IGNORE_UNEXPECTED_EOF", ULONG2NUM(SSL_OP_IGNORE_UNEXPECTED_EOF)); -+#endif -+#ifdef SSL_OP_ALLOW_CLIENT_RENEGOTIATION /* OpenSSL 3.0 */ -+ rb_define_const(mSSL, "OP_ALLOW_CLIENT_RENEGOTIATION", ULONG2NUM(SSL_OP_ALLOW_CLIENT_RENEGOTIATION)); -+#endif -+#ifdef SSL_OP_DISABLE_TLSEXT_CA_NAMES /* OpenSSL 3.0 */ -+ rb_define_const(mSSL, "OP_DISABLE_TLSEXT_CA_NAMES", ULONG2NUM(SSL_OP_DISABLE_TLSEXT_CA_NAMES)); -+#endif - #ifdef SSL_OP_ALLOW_NO_DHE_KEX /* OpenSSL 1.1.1 */ - rb_define_const(mSSL, "OP_ALLOW_NO_DHE_KEX", ULONG2NUM(SSL_OP_ALLOW_NO_DHE_KEX)); - #endif -@@ -2959,13 +2974,15 @@ Init_ossl_ssl(void) - #ifdef SSL_OP_NO_ENCRYPT_THEN_MAC /* OpenSSL 1.1.1 */ - rb_define_const(mSSL, "OP_NO_ENCRYPT_THEN_MAC", ULONG2NUM(SSL_OP_NO_ENCRYPT_THEN_MAC)); - #endif -- rb_define_const(mSSL, "OP_CIPHER_SERVER_PREFERENCE", ULONG2NUM(SSL_OP_CIPHER_SERVER_PREFERENCE)); -- rb_define_const(mSSL, "OP_TLS_ROLLBACK_BUG", ULONG2NUM(SSL_OP_TLS_ROLLBACK_BUG)); --#ifdef SSL_OP_NO_RENEGOTIATION /* OpenSSL 1.1.1 */ -- rb_define_const(mSSL, "OP_NO_RENEGOTIATION", ULONG2NUM(SSL_OP_NO_RENEGOTIATION)); -+#ifdef SSL_OP_ENABLE_MIDDLEBOX_COMPAT /* OpenSSL 1.1.1 */ -+ rb_define_const(mSSL, "OP_ENABLE_MIDDLEBOX_COMPAT", ULONG2NUM(SSL_OP_ENABLE_MIDDLEBOX_COMPAT)); -+#endif -+#ifdef SSL_OP_PRIORITIZE_CHACHA /* OpenSSL 1.1.1 */ -+ rb_define_const(mSSL, "OP_PRIORITIZE_CHACHA", ULONG2NUM(SSL_OP_PRIORITIZE_CHACHA)); -+#endif -+#ifdef SSL_OP_NO_ANTI_REPLAY /* OpenSSL 1.1.1 */ -+ rb_define_const(mSSL, "OP_NO_ANTI_REPLAY", ULONG2NUM(SSL_OP_NO_ANTI_REPLAY)); - #endif -- rb_define_const(mSSL, "OP_CRYPTOPRO_TLSEXT_BUG", ULONG2NUM(SSL_OP_CRYPTOPRO_TLSEXT_BUG)); -- - rb_define_const(mSSL, "OP_NO_SSLv3", ULONG2NUM(SSL_OP_NO_SSLv3)); - rb_define_const(mSSL, "OP_NO_TLSv1", ULONG2NUM(SSL_OP_NO_TLSv1)); - rb_define_const(mSSL, "OP_NO_TLSv1_1", ULONG2NUM(SSL_OP_NO_TLSv1_1)); -@@ -2973,6 +2990,12 @@ Init_ossl_ssl(void) - #ifdef SSL_OP_NO_TLSv1_3 /* OpenSSL 1.1.1 */ - rb_define_const(mSSL, "OP_NO_TLSv1_3", ULONG2NUM(SSL_OP_NO_TLSv1_3)); - #endif -+ rb_define_const(mSSL, "OP_CIPHER_SERVER_PREFERENCE", ULONG2NUM(SSL_OP_CIPHER_SERVER_PREFERENCE)); -+ rb_define_const(mSSL, "OP_TLS_ROLLBACK_BUG", ULONG2NUM(SSL_OP_TLS_ROLLBACK_BUG)); -+#ifdef SSL_OP_NO_RENEGOTIATION /* OpenSSL 1.1.1 */ -+ rb_define_const(mSSL, "OP_NO_RENEGOTIATION", ULONG2NUM(SSL_OP_NO_RENEGOTIATION)); -+#endif -+ rb_define_const(mSSL, "OP_CRYPTOPRO_TLSEXT_BUG", ULONG2NUM(SSL_OP_CRYPTOPRO_TLSEXT_BUG)); - - /* SSL_OP_* flags for DTLS */ - #if 0 - -From e168df0f3570709bfb38e9a39838bd0a7e78164c Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sun, 12 Dec 2021 00:47:35 +0900 -Subject: [PATCH 6/8] ssl: update test_options_disable_versions - -Use the combination of TLS 1.2 and TLS 1.3 instead of TLS 1.1 and TLS -1.2 so that will the test case will be run on latest platforms. ---- - test/openssl/test_ssl.rb | 75 +++++++++++++++++++++------------------- - 1 file changed, 40 insertions(+), 35 deletions(-) - -diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb -index 22691292..2abade06 100644 ---- a/test/openssl/test_ssl.rb -+++ b/test/openssl/test_ssl.rb -@@ -1180,46 +1180,51 @@ def test_minmax_version - end - - def test_options_disable_versions -- # Note: Use of these OP_* flags has been deprecated since OpenSSL 1.1.0. -+ # It's recommended to use SSLContext#{min,max}_version= instead in real -+ # applications. The purpose of this test case is to check that SSL options -+ # are properly propagated to OpenSSL library. - supported = check_supported_protocol_versions -+ if !defined?(OpenSSL::SSL::TLS1_3_VERSION) || -+ !supported.include?(OpenSSL::SSL::TLS1_2_VERSION) || -+ !supported.include?(OpenSSL::SSL::TLS1_3_VERSION) || -+ !defined?(OpenSSL::SSL::OP_NO_TLSv1_3) # LibreSSL < 3.4 -+ pend "this test case requires both TLS 1.2 and TLS 1.3 to be supported " \ -+ "and enabled by default" -+ end - -- if supported.include?(OpenSSL::SSL::TLS1_1_VERSION) && -- supported.include?(OpenSSL::SSL::TLS1_2_VERSION) -- # Server disables ~ TLS 1.1 -- ctx_proc = proc { |ctx| -- ctx.options |= OpenSSL::SSL::OP_NO_SSLv2 | OpenSSL::SSL::OP_NO_SSLv3 | -- OpenSSL::SSL::OP_NO_TLSv1 | OpenSSL::SSL::OP_NO_TLSv1_1 -- } -- start_server(ctx_proc: ctx_proc, ignore_listener_error: true) { |port| -- # Client only supports TLS 1.1 -- ctx1 = OpenSSL::SSL::SSLContext.new -- ctx1.min_version = ctx1.max_version = OpenSSL::SSL::TLS1_1_VERSION -- assert_handshake_error { server_connect(port, ctx1) { } } -+ # Server disables TLS 1.2 and earlier -+ ctx_proc = proc { |ctx| -+ ctx.options |= OpenSSL::SSL::OP_NO_SSLv2 | OpenSSL::SSL::OP_NO_SSLv3 | -+ OpenSSL::SSL::OP_NO_TLSv1 | OpenSSL::SSL::OP_NO_TLSv1_1 | -+ OpenSSL::SSL::OP_NO_TLSv1_2 -+ } -+ start_server(ctx_proc: ctx_proc, ignore_listener_error: true) { |port| -+ # Client only supports TLS 1.2 -+ ctx1 = OpenSSL::SSL::SSLContext.new -+ ctx1.min_version = ctx1.max_version = OpenSSL::SSL::TLS1_2_VERSION -+ assert_handshake_error { server_connect(port, ctx1) { } } - -- # Client only supports TLS 1.2 -- ctx2 = OpenSSL::SSL::SSLContext.new -- ctx2.min_version = ctx2.max_version = OpenSSL::SSL::TLS1_2_VERSION -- assert_nothing_raised { server_connect(port, ctx2) { } } -- } -+ # Client only supports TLS 1.3 -+ ctx2 = OpenSSL::SSL::SSLContext.new -+ ctx2.min_version = ctx2.max_version = OpenSSL::SSL::TLS1_3_VERSION -+ assert_nothing_raised { server_connect(port, ctx2) { } } -+ } - -- # Server only supports TLS 1.1 -- ctx_proc = proc { |ctx| -- ctx.min_version = ctx.max_version = OpenSSL::SSL::TLS1_1_VERSION -- } -- start_server(ctx_proc: ctx_proc, ignore_listener_error: true) { |port| -- # Client disables TLS 1.1 -- ctx1 = OpenSSL::SSL::SSLContext.new -- ctx1.options |= OpenSSL::SSL::OP_NO_TLSv1_1 -- assert_handshake_error { server_connect(port, ctx1) { } } -+ # Server only supports TLS 1.2 -+ ctx_proc = proc { |ctx| -+ ctx.min_version = ctx.max_version = OpenSSL::SSL::TLS1_2_VERSION -+ } -+ start_server(ctx_proc: ctx_proc, ignore_listener_error: true) { |port| -+ # Client doesn't support TLS 1.2 -+ ctx1 = OpenSSL::SSL::SSLContext.new -+ ctx1.options |= OpenSSL::SSL::OP_NO_TLSv1_2 -+ assert_handshake_error { server_connect(port, ctx1) { } } - -- # Client disables TLS 1.2 -- ctx2 = OpenSSL::SSL::SSLContext.new -- ctx2.options |= OpenSSL::SSL::OP_NO_TLSv1_2 -- assert_nothing_raised { server_connect(port, ctx2) { } } -- } -- else -- pend "TLS 1.1 and TLS 1.2 must be supported; skipping" -- end -+ # Client supports TLS 1.2 by default -+ ctx2 = OpenSSL::SSL::SSLContext.new -+ ctx2.options |= OpenSSL::SSL::OP_NO_TLSv1_3 -+ assert_nothing_raised { server_connect(port, ctx2) { } } -+ } - end - - def test_ssl_methods_constant - -From ccdb6f7bfa5f988a07beecedbf2b6205b6ab8492 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sat, 20 Mar 2021 23:16:41 +0900 -Subject: [PATCH 7/8] pkey: assume a pkey always has public key components on - OpenSSL 3.0 - -OpenSSL 3.0's EVP_PKEY_get0() returns NULL for provider-backed pkeys. -This causes segfault because it was supposed to never return NULL -before. - -We can't check the existence of public key components in this way on -OpenSSL 3.0. Let's just skip it for now. ---- - ext/openssl/ossl_pkey.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 94760d32..09d45d85 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -428,9 +428,19 @@ ossl_pkey_s_generate_key(int argc, VALUE *argv, VALUE self) - return pkey_generate(argc, argv, self, 0); - } - -+/* -+ * TODO: There is no convenient way to check the presence of public key -+ * components on OpenSSL 3.0. But since keys are immutable on 3.0, pkeys without -+ * these should only be created by OpenSSL::PKey.generate_parameters or by -+ * parsing DER-/PEM-encoded string. We would need another flag for that. -+ */ - void - ossl_pkey_check_public_key(const EVP_PKEY *pkey) - { -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ if (EVP_PKEY_missing_parameters(pkey)) -+ ossl_raise(ePKeyError, "parameters missing"); -+#else - void *ptr; - const BIGNUM *n, *e, *pubkey; - -@@ -466,6 +476,7 @@ ossl_pkey_check_public_key(const EVP_PKEY *pkey) - return; - } - ossl_raise(ePKeyError, "public key missing"); -+#endif - } - - EVP_PKEY * - -From d6535d13d174cd87ae99f3e60e97f7a00e1474e5 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 12 Apr 2021 10:43:46 +0900 -Subject: [PATCH 8/8] pkey: use EVP_PKEY_CTX_new_from_name() on OpenSSL 3.0 - -Replace EVP_PKEY_CTX_new_id() with the new EVP_PKEY_CTX_new_from_name() -which takes the algorithm name in a string instead of in an NID. ---- - ext/openssl/ossl_pkey.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 09d45d85..2a4835a2 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -315,6 +315,11 @@ pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) - ossl_raise(ePKeyError, "EVP_PKEY_CTX_new"); - } - else { -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ ctx = EVP_PKEY_CTX_new_from_name(NULL, StringValueCStr(alg), NULL); -+ if (!ctx) -+ ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_from_name"); -+#else - const EVP_PKEY_ASN1_METHOD *ameth; - ENGINE *tmpeng; - int pkey_id; -@@ -333,6 +338,7 @@ pkey_generate(int argc, VALUE *argv, VALUE self, int genparam) - ctx = EVP_PKEY_CTX_new_id(pkey_id, NULL/* engine */); - if (!ctx) - ossl_raise(ePKeyError, "EVP_PKEY_CTX_new_id"); -+#endif - } - - if (genparam && EVP_PKEY_paramgen_init(ctx) <= 0) { diff --git a/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch b/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch deleted file mode 100644 index a780108..0000000 --- a/ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch +++ /dev/null @@ -1,304 +0,0 @@ -From 8f948ed68a4ed6c05ff66d822711e3b70ae4bb3f Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 27 Sep 2021 13:32:03 +0900 -Subject: [PATCH 1/5] ext/openssl/ossl.h: add helper macros for - OpenSSL/LibreSSL versions - -Add following convenient macros: - - - OSSL_IS_LIBRESSL - - OSSL_OPENSSL_PREREQ(maj, min, pat) - - OSSL_LIBRESSL_PREREQ(maj, min, pat) ---- - ext/openssl/ossl.h | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h -index c20f506bda..a0cef29d74 100644 ---- a/ext/openssl/ossl.h -+++ b/ext/openssl/ossl.h -@@ -42,6 +42,18 @@ - #include - #include - -+#ifndef LIBRESSL_VERSION_NUMBER -+# define OSSL_IS_LIBRESSL 0 -+# define OSSL_OPENSSL_PREREQ(maj, min, pat) \ -+ (OPENSSL_VERSION_NUMBER >= (maj << 28) | (min << 20) | (pat << 12)) -+# define OSSL_LIBRESSL_PREREQ(maj, min, pat) 0 -+#else -+# define OSSL_IS_LIBRESSL 1 -+# define OSSL_OPENSSL_PREREQ(maj, min, pat) 0 -+# define OSSL_LIBRESSL_PREREQ(maj, min, pat) \ -+ (LIBRESSL_VERSION_NUMBER >= (maj << 28) | (min << 20) | (pat << 12)) -+#endif -+ - /* - * Common Module - */ --- -2.32.0 - - -From bbf235091e49807ece8f3a3df95bbfcc9d3ab43d Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sat, 22 Feb 2020 05:37:01 +0900 -Subject: [PATCH 2/5] ts: use TS_VERIFY_CTX_set_certs instead of - TS_VERIFY_CTS_set_certs - -OpenSSL 3.0 fixed the typo in the function name and replaced the -current 'CTS' version with a macro. ---- - ext/openssl/extconf.rb | 5 ++++- - ext/openssl/openssl_missing.h | 5 +++++ - ext/openssl/ossl_ts.c | 2 +- - 3 files changed, 10 insertions(+), 2 deletions(-) - -diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb -index 17d93443fc..09cae05b72 100644 ---- a/ext/openssl/extconf.rb -+++ b/ext/openssl/extconf.rb -@@ -165,7 +165,7 @@ def find_openssl_library - have_func("TS_STATUS_INFO_get0_status") - have_func("TS_STATUS_INFO_get0_text") - have_func("TS_STATUS_INFO_get0_failure_info") --have_func("TS_VERIFY_CTS_set_certs") -+have_func("TS_VERIFY_CTS_set_certs(NULL, NULL)", "openssl/ts.h") - have_func("TS_VERIFY_CTX_set_store") - have_func("TS_VERIFY_CTX_add_flags") - have_func("TS_RESP_CTX_set_time_cb") -@@ -174,6 +174,9 @@ def find_openssl_library - - # added in 1.1.1 - have_func("EVP_PKEY_check") -+ -+# added in 3.0.0 -+have_func("TS_VERIFY_CTX_set_certs(NULL, NULL)", "openssl/ts.h") - - Logging::message "=== Checking done. ===\n" - -diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h -index e575415f49..fe486bcfcf 100644 ---- a/ext/openssl/openssl_missing.h -+++ b/ext/openssl/openssl_missing.h -@@ -236,4 +236,9 @@ IMPL_PKEY_GETTER(EC_KEY, ec) - } while (0) - #endif - -+/* added in 3.0.0 */ -+#if !defined(HAVE_TS_VERIFY_CTX_SET_CERTS) -+# define TS_VERIFY_CTX_set_certs(ctx, crts) TS_VERIFY_CTS_set_certs(ctx, crts) -+#endif -+ - #endif /* _OSSL_OPENSSL_MISSING_H_ */ -diff --git a/ext/openssl/ossl_ts.c b/ext/openssl/ossl_ts.c -index 692c0d620f..f1da7c1947 100644 ---- a/ext/openssl/ossl_ts.c -+++ b/ext/openssl/ossl_ts.c -@@ -820,7 +820,7 @@ ossl_ts_resp_verify(int argc, VALUE *argv, VALUE self) - X509_up_ref(cert); - } - -- TS_VERIFY_CTS_set_certs(ctx, x509inter); -+ TS_VERIFY_CTX_set_certs(ctx, x509inter); - TS_VERIFY_CTX_add_flags(ctx, TS_VFY_SIGNATURE); - TS_VERIFY_CTX_set_store(ctx, x509st); - --- -2.32.0 - - -From 5fba3bc1df93ab6abc3ea53be3393480f36ea259 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 19 Mar 2021 19:18:25 +0900 -Subject: [PATCH 3/5] ssl: use SSL_get_rbio() to check if SSL is started or not - -Use SSL_get_rbio() instead of SSL_get_fd(). SSL_get_fd() internally -calls SSL_get_rbio() and it's enough for our purpose. - -In OpenSSL 3.0, SSL_get_fd() leaves an entry in the OpenSSL error queue -if BIO has not been set up yet, and we would have to clean it up. ---- - ext/openssl/ossl_ssl.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c -index 4b7efa39f5..ec430bfb0c 100644 ---- a/ext/openssl/ossl_ssl.c -+++ b/ext/openssl/ossl_ssl.c -@@ -1535,8 +1535,8 @@ ossl_sslctx_flush_sessions(int argc, VALUE *argv, VALUE self) - static inline int - ssl_started(SSL *ssl) - { -- /* the FD is set in ossl_ssl_setup(), called by #connect or #accept */ -- return SSL_get_fd(ssl) >= 0; -+ /* BIO is created through ossl_ssl_setup(), called by #connect or #accept */ -+ return SSL_get_rbio(ssl) != NULL; - } - - static void --- -2.32.0 - -From 0a253027e6be47c0b7fd8b664f1048f24d7ca657 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Thu, 22 Apr 2021 13:57:47 +0900 -Subject: [PATCH 4/5] digest: use EVP_MD_CTX_get0_md() instead of - EVP_MD_CTX_md() if exists - -The function was renamed in OpenSSL 3.0 due to the change of the -lifetime of EVP_MD objects. They are no longer necessarily statically -allocated and can be reference-counted -- when an EVP_MD_CTX is free'd, -the associated EVP_MD can also become inaccessible. - -Currently Ruby/OpenSSL only handles builtin algorithms, so no special -handling is needed except for adapting to the rename. ---- - ext/openssl/extconf.rb | 1 + - ext/openssl/openssl_missing.h | 4 ++++ - ext/openssl/ossl_digest.c | 6 +++--- - ext/openssl/ossl_hmac.c | 2 +- - 4 files changed, 9 insertions(+), 4 deletions(-) - -diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb -index 98f96afe..842b7f5b 100644 ---- a/ext/openssl/extconf.rb -+++ b/ext/openssl/extconf.rb -@@ -177,6 +177,7 @@ def find_openssl_library - - # added in 3.0.0 - have_func("TS_VERIFY_CTX_set_certs(NULL, NULL)", "openssl/ts.h") -+have_func("EVP_MD_CTX_get0_md") - - Logging::message "=== Checking done. ===\n" - -diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h -index 1b1a54a8..64212349 100644 ---- a/ext/openssl/openssl_missing.h -+++ b/ext/openssl/openssl_missing.h -@@ -241,4 +241,8 @@ IMPL_PKEY_GETTER(EC_KEY, ec) - # define TS_VERIFY_CTX_set_certs(ctx, crts) TS_VERIFY_CTS_set_certs(ctx, crts) - #endif - -+#ifndef HAVE_EVP_MD_CTX_GET0_MD -+# define EVP_MD_CTX_get0_md(ctx) EVP_MD_CTX_md(ctx) -+#endif -+ - #endif /* _OSSL_OPENSSL_MISSING_H_ */ -diff --git a/ext/openssl/ossl_digest.c b/ext/openssl/ossl_digest.c -index b2506de7..fc326ec1 100644 ---- a/ext/openssl/ossl_digest.c -+++ b/ext/openssl/ossl_digest.c -@@ -63,7 +63,7 @@ ossl_evp_get_digestbyname(VALUE obj) - - GetDigest(obj, ctx); - -- md = EVP_MD_CTX_md(ctx); -+ md = EVP_MD_CTX_get0_md(ctx); - } - - return md; -@@ -176,7 +176,7 @@ ossl_digest_reset(VALUE self) - EVP_MD_CTX *ctx; - - GetDigest(self, ctx); -- if (EVP_DigestInit_ex(ctx, EVP_MD_CTX_md(ctx), NULL) != 1) { -+ if (EVP_DigestInit_ex(ctx, EVP_MD_CTX_get0_md(ctx), NULL) != 1) { - ossl_raise(eDigestError, "Digest initialization failed."); - } - -@@ -259,7 +259,7 @@ ossl_digest_name(VALUE self) - - GetDigest(self, ctx); - -- return rb_str_new2(EVP_MD_name(EVP_MD_CTX_md(ctx))); -+ return rb_str_new_cstr(EVP_MD_name(EVP_MD_CTX_get0_md(ctx))); - } - - /* -diff --git a/ext/openssl/ossl_hmac.c b/ext/openssl/ossl_hmac.c -index a21db6c4..2642728b 100644 ---- a/ext/openssl/ossl_hmac.c -+++ b/ext/openssl/ossl_hmac.c -@@ -239,7 +239,7 @@ ossl_hmac_reset(VALUE self) - - GetHMAC(self, ctx); - pkey = EVP_PKEY_CTX_get0_pkey(EVP_MD_CTX_pkey_ctx(ctx)); -- if (EVP_DigestSignInit(ctx, NULL, EVP_MD_CTX_md(ctx), NULL, pkey) != 1) -+ if (EVP_DigestSignInit(ctx, NULL, EVP_MD_CTX_get0_md(ctx), NULL, pkey) != 1) - ossl_raise(eHMACError, "EVP_DigestSignInit"); - - return self; - -From c106d888c62e44a11cdbba5e4d2d0cb837ec3e52 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Tue, 22 Jun 2021 18:50:17 +0900 -Subject: [PATCH 5/5] hmac: use EVP_MD_CTX_get_pkey_ctx() instead of - EVP_MD_CTX_pkey_ctx() - -OpenSSL 3.0 renamed EVP_MD_CTX_pkey_ctx() to include "get" in the -function name. Adjust compatibility macro so that we can use the new -function name for all OpenSSL 1.0.2-3.0. ---- - ext/openssl/extconf.rb | 1 + - ext/openssl/openssl_missing.h | 16 ++++++++++++---- - ext/openssl/ossl_hmac.c | 2 +- - 3 files changed, 14 insertions(+), 5 deletions(-) - -diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb -index 842b7f5b..d9d34b7c 100644 ---- a/ext/openssl/extconf.rb -+++ b/ext/openssl/extconf.rb -@@ -178,6 +178,7 @@ def find_openssl_library - # added in 3.0.0 - have_func("TS_VERIFY_CTX_set_certs(NULL, NULL)", "openssl/ts.h") - have_func("EVP_MD_CTX_get0_md") -+have_func("EVP_MD_CTX_get_pkey_ctx") - - Logging::message "=== Checking done. ===\n" - -diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h -index 64212349..55c4f378 100644 ---- a/ext/openssl/openssl_missing.h -+++ b/ext/openssl/openssl_missing.h -@@ -42,10 +42,6 @@ int ossl_EC_curve_nist2nid(const char *); - # define EVP_MD_CTX_free EVP_MD_CTX_destroy - #endif - --#if !defined(HAVE_EVP_MD_CTX_PKEY_CTX) --# define EVP_MD_CTX_pkey_ctx(x) (x)->pctx --#endif -- - #if !defined(HAVE_X509_STORE_GET_EX_DATA) - # define X509_STORE_get_ex_data(x, idx) \ - CRYPTO_get_ex_data(&(x)->ex_data, (idx)) -@@ -245,4 +241,16 @@ IMPL_PKEY_GETTER(EC_KEY, ec) - # define EVP_MD_CTX_get0_md(ctx) EVP_MD_CTX_md(ctx) - #endif - -+/* -+ * OpenSSL 1.1.0 added EVP_MD_CTX_pkey_ctx(), and then it was renamed to -+ * EVP_MD_CTX_get_pkey_ctx(x) in OpenSSL 3.0. -+ */ -+#ifndef HAVE_EVP_MD_CTX_GET_PKEY_CTX -+# ifdef HAVE_EVP_MD_CTX_PKEY_CTX -+# define EVP_MD_CTX_get_pkey_ctx(x) EVP_MD_CTX_pkey_ctx(x) -+# else -+# define EVP_MD_CTX_get_pkey_ctx(x) (x)->pctx -+# endif -+#endif -+ - #endif /* _OSSL_OPENSSL_MISSING_H_ */ -diff --git a/ext/openssl/ossl_hmac.c b/ext/openssl/ossl_hmac.c -index 2642728b..f89ff2f9 100644 ---- a/ext/openssl/ossl_hmac.c -+++ b/ext/openssl/ossl_hmac.c -@@ -238,7 +238,7 @@ ossl_hmac_reset(VALUE self) - EVP_PKEY *pkey; - - GetHMAC(self, ctx); -- pkey = EVP_PKEY_CTX_get0_pkey(EVP_MD_CTX_pkey_ctx(ctx)); -+ pkey = EVP_PKEY_CTX_get0_pkey(EVP_MD_CTX_get_pkey_ctx(ctx)); - if (EVP_DigestSignInit(ctx, NULL, EVP_MD_CTX_get0_md(ctx), NULL, pkey) != 1) - ossl_raise(eHMACError, "EVP_DigestSignInit"); - diff --git a/ruby-3.1.0-Properly-exclude-test-cases.patch b/ruby-3.1.0-Properly-exclude-test-cases.patch deleted file mode 100644 index ca2cd9b..0000000 --- a/ruby-3.1.0-Properly-exclude-test-cases.patch +++ /dev/null @@ -1,93 +0,0 @@ -From 96684439e96aa92e10376b5be45f006772028295 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 21 Oct 2021 13:02:38 +0200 -Subject: [PATCH] Properly exclude test cases. - -Lets consider the following scenario: - -~~~ -irb(#):001:0> p suite -OpenSSL::TestEC -=> OpenSSL::TestEC - -irb(#):002:0> p all_test_methods -["test_ECPrivateKey", "test_ECPrivateKey_encrypted", "test_PUBKEY", "test_check_key", "test_derive_key", "test_dh_compute_key", "test_dsa_sign_asn1_FIPS186_3", "test_ec_group", "test_ec_key", "test_ec_point", "test_ec_point_add", "test_ec_point_mul", "test_generate", "test_marshal", "test_sign_verify", "test_sign_verify_raw"] -=> -["test_ECPrivateKey", - "test_ECPrivateKey_encrypted", - "test_PUBKEY", - "test_check_key", - "test_derive_key", - "test_dh_compute_key", - "test_dsa_sign_asn1_FIPS186_3", - "test_ec_group", - "test_ec_key", - "test_ec_point", - "test_ec_point_add", - "test_ec_point_mul", - "test_generate", - "test_marshal", - "test_sign_verify", - "test_sign_verify_raw"] - -irb(#):003:0> p filter -/\A(?=.*)(?!.*(?-mix:(?-mix:memory_leak)|(?-mix:OpenSSL::TestEC.test_check_key)))/ -=> /\A(?=.*)(?!.*(?-mix:(?-mix:memory_leak)|(?-mix:OpenSSL::TestEC.test_check_key)))/ - -irb(#):004:0> method = "test_check_key" -=> "test_check_key" -~~~ - -The intention here is to exclude the `test_check_key` test case. -Unfortunately this does not work as expected, because the negative filter -is never checked: - -~~~ - -irb(#):005:0> filter === method -=> true - -irb(#):006:0> filter === "#{suite}##{method}" -=> false - -irb(#):007:0> filter === method || filter === "#{suite}##{method}" -=> true -~~~ - -Therefore always filter against the fully qualified method name -`#{suite}##{method}`, which should provide the expected result. - -However, if plain string filter is used, keep checking also only the -method name. - -This resolves [Bug #16936]. ---- - tool/lib/minitest/unit.rb | 12 +++++++++--- - 1 file changed, 9 insertions(+), 3 deletions(-) - -diff --git a/tool/lib/minitest/unit.rb b/tool/lib/minitest/unit.rb -index c58a609bfa..d5af6cb906 100644 ---- a/tool/lib/minitest/unit.rb -+++ b/tool/lib/minitest/unit.rb -@@ -956,9 +956,15 @@ def _run_suite suite, type - - all_test_methods = suite.send "#{type}_methods" - -- filtered_test_methods = all_test_methods.find_all { |m| -- filter === m || filter === "#{suite}##{m}" -- } -+ filtered_test_methods = if Regexp === filter -+ all_test_methods.find_all { |m| -+ filter === "#{suite}##{m}" -+ } -+ else -+ all_test_methods.find_all {|m| -+ filter === m || filter === "#{suite}##{m}" -+ } -+ end - - leakchecker = LeakChecker.new - --- -2.32.0 - diff --git a/ruby-3.1.0-Refactor-PEM-DER-serialization-code.patch b/ruby-3.1.0-Refactor-PEM-DER-serialization-code.patch deleted file mode 100644 index d1de216..0000000 --- a/ruby-3.1.0-Refactor-PEM-DER-serialization-code.patch +++ /dev/null @@ -1,1450 +0,0 @@ -From 8b8e1d7f9b6b5a335864bbd0716df2af1ec41d91 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Thu, 16 Mar 2017 16:06:53 +0900 -Subject: [PATCH 1/5] pkey: simplify ossl_pkey_new() - -ossl_{rsa,dsa,dh,ec}_new() called from this function are not used -anywhere else. Inline them into pkey_new0() and reduce code -duplication. ---- - ext/openssl/ossl_pkey.c | 22 +++++++++------------- - ext/openssl/ossl_pkey.h | 3 --- - ext/openssl/ossl_pkey_dh.c | 21 --------------------- - ext/openssl/ossl_pkey_dsa.c | 21 --------------------- - ext/openssl/ossl_pkey_ec.c | 20 -------------------- - ext/openssl/ossl_pkey_rsa.c | 22 ---------------------- - 6 files changed, 9 insertions(+), 100 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 23204087ac..c6dbf57272 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -95,7 +95,7 @@ const rb_data_type_t ossl_evp_pkey_type = { - static VALUE - pkey_new0(EVP_PKEY *pkey) - { -- VALUE obj; -+ VALUE klass, obj; - int type; - - if (!pkey || (type = EVP_PKEY_base_id(pkey)) == EVP_PKEY_NONE) -@@ -103,26 +103,22 @@ pkey_new0(EVP_PKEY *pkey) - - switch (type) { - #if !defined(OPENSSL_NO_RSA) -- case EVP_PKEY_RSA: -- return ossl_rsa_new(pkey); -+ case EVP_PKEY_RSA: klass = cRSA; break; - #endif - #if !defined(OPENSSL_NO_DSA) -- case EVP_PKEY_DSA: -- return ossl_dsa_new(pkey); -+ case EVP_PKEY_DSA: klass = cDSA; break; - #endif - #if !defined(OPENSSL_NO_DH) -- case EVP_PKEY_DH: -- return ossl_dh_new(pkey); -+ case EVP_PKEY_DH: klass = cDH; break; - #endif - #if !defined(OPENSSL_NO_EC) -- case EVP_PKEY_EC: -- return ossl_ec_new(pkey); -+ case EVP_PKEY_EC: klass = cEC; break; - #endif -- default: -- obj = NewPKey(cPKey); -- SetPKey(obj, pkey); -- return obj; -+ default: klass = cPKey; break; - } -+ obj = NewPKey(klass); -+ SetPKey(obj, pkey); -+ return obj; - } - - VALUE -diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h -index 0db59305f7..e363a261c2 100644 ---- a/ext/openssl/ossl_pkey.h -+++ b/ext/openssl/ossl_pkey.h -@@ -56,7 +56,6 @@ void Init_ossl_pkey(void); - extern VALUE cRSA; - extern VALUE eRSAError; - --VALUE ossl_rsa_new(EVP_PKEY *); - void Init_ossl_rsa(void); - - /* -@@ -65,7 +64,6 @@ void Init_ossl_rsa(void); - extern VALUE cDSA; - extern VALUE eDSAError; - --VALUE ossl_dsa_new(EVP_PKEY *); - void Init_ossl_dsa(void); - - /* -@@ -74,7 +72,6 @@ void Init_ossl_dsa(void); - extern VALUE cDH; - extern VALUE eDHError; - --VALUE ossl_dh_new(EVP_PKEY *); - void Init_ossl_dh(void); - - /* -diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c -index bf4e3f9322..dff69cfc33 100644 ---- a/ext/openssl/ossl_pkey_dh.c -+++ b/ext/openssl/ossl_pkey_dh.c -@@ -54,27 +54,6 @@ dh_instance(VALUE klass, DH *dh) - return obj; - } - --VALUE --ossl_dh_new(EVP_PKEY *pkey) --{ -- VALUE obj; -- -- if (!pkey) { -- obj = dh_instance(cDH, DH_new()); -- } else { -- obj = NewPKey(cDH); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_DH) { -- ossl_raise(rb_eTypeError, "Not a DH key!"); -- } -- SetPKey(obj, pkey); -- } -- if (obj == Qfalse) { -- ossl_raise(eDHError, NULL); -- } -- -- return obj; --} -- - /* - * Private - */ -diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c -index 431c20e05c..e9be9ac482 100644 ---- a/ext/openssl/ossl_pkey_dsa.c -+++ b/ext/openssl/ossl_pkey_dsa.c -@@ -68,27 +68,6 @@ dsa_instance(VALUE klass, DSA *dsa) - return obj; - } - --VALUE --ossl_dsa_new(EVP_PKEY *pkey) --{ -- VALUE obj; -- -- if (!pkey) { -- obj = dsa_instance(cDSA, DSA_new()); -- } else { -- obj = NewPKey(cDSA); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_DSA) { -- ossl_raise(rb_eTypeError, "Not a DSA key!"); -- } -- SetPKey(obj, pkey); -- } -- if (obj == Qfalse) { -- ossl_raise(eDSAError, NULL); -- } -- -- return obj; --} -- - /* - * Private - */ -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index fc2bc6c815..eabf495f19 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -84,26 +84,6 @@ static VALUE ec_instance(VALUE klass, EC_KEY *ec) - return obj; - } - --VALUE ossl_ec_new(EVP_PKEY *pkey) --{ -- VALUE obj; -- -- if (!pkey) { -- obj = ec_instance(cEC, EC_KEY_new()); -- } else { -- obj = NewPKey(cEC); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_EC) { -- ossl_raise(rb_eTypeError, "Not a EC key!"); -- } -- SetPKey(obj, pkey); -- } -- if (obj == Qfalse) { -- ossl_raise(eECError, NULL); -- } -- -- return obj; --} -- - /* - * Creates a new EC_KEY on the EC group obj. arg can be an EC::Group or a String - * representing an OID. -diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c -index 761866c66a..c1ae44fe40 100644 ---- a/ext/openssl/ossl_pkey_rsa.c -+++ b/ext/openssl/ossl_pkey_rsa.c -@@ -69,28 +69,6 @@ rsa_instance(VALUE klass, RSA *rsa) - return obj; - } - --VALUE --ossl_rsa_new(EVP_PKEY *pkey) --{ -- VALUE obj; -- -- if (!pkey) { -- obj = rsa_instance(cRSA, RSA_new()); -- } -- else { -- obj = NewPKey(cRSA); -- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_RSA) { -- ossl_raise(rb_eTypeError, "Not a RSA key!"); -- } -- SetPKey(obj, pkey); -- } -- if (obj == Qfalse) { -- ossl_raise(eRSAError, NULL); -- } -- -- return obj; --} -- - /* - * Private - */ --- -2.32.0 - - -From 2b0d259ef7aae707922996d305675a68dad27abd Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Thu, 16 Mar 2017 16:09:35 +0900 -Subject: [PATCH 2/5] pkey: inline {rsa,dsa,dh,ec}_instance() - -Merge the code into the callers so that the wrapping Ruby object is -allocated before the raw key object is allocated. This prevents possible -memory leak on Ruby object allocation failure, and also reduces the -lines of code. ---- - ext/openssl/ossl_pkey_dh.c | 63 ++++++++++++---------------------- - ext/openssl/ossl_pkey_dsa.c | 68 ++++++++++++++----------------------- - ext/openssl/ossl_pkey_ec.c | 34 ++++--------------- - ext/openssl/ossl_pkey_rsa.c | 67 +++++++++++++----------------------- - 4 files changed, 76 insertions(+), 156 deletions(-) - -diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c -index dff69cfc33..bc50e5566b 100644 ---- a/ext/openssl/ossl_pkey_dh.c -+++ b/ext/openssl/ossl_pkey_dh.c -@@ -29,31 +29,6 @@ - VALUE cDH; - VALUE eDHError; - --/* -- * Public -- */ --static VALUE --dh_instance(VALUE klass, DH *dh) --{ -- EVP_PKEY *pkey; -- VALUE obj; -- -- if (!dh) { -- return Qfalse; -- } -- obj = NewPKey(klass); -- if (!(pkey = EVP_PKEY_new())) { -- return Qfalse; -- } -- if (!EVP_PKEY_assign_DH(pkey, dh)) { -- EVP_PKEY_free(pkey); -- return Qfalse; -- } -- SetPKey(obj, pkey); -- -- return obj; --} -- - /* - * Private - */ -@@ -84,7 +59,7 @@ dh_generate(int size, int gen) - if (!dh || !cb) { - DH_free(dh); - BN_GENCB_free(cb); -- return NULL; -+ ossl_raise(eDHError, "malloc failure"); - } - - if (rb_block_given_p()) -@@ -110,12 +85,12 @@ dh_generate(int size, int gen) - ossl_clear_error(); - rb_jump_tag(cb_arg.state); - } -- return NULL; -+ ossl_raise(eDHError, "DH_generate_parameters_ex"); - } - - if (!DH_generate_key(dh)) { - DH_free(dh); -- return NULL; -+ ossl_raise(eDHError, "DH_generate_key"); - } - - return dh; -@@ -136,6 +111,7 @@ dh_generate(int size, int gen) - static VALUE - ossl_dh_s_generate(int argc, VALUE *argv, VALUE klass) - { -+ EVP_PKEY *pkey; - DH *dh ; - int g = 2; - VALUE size, gen, obj; -@@ -143,13 +119,14 @@ ossl_dh_s_generate(int argc, VALUE *argv, VALUE klass) - if (rb_scan_args(argc, argv, "11", &size, &gen) == 2) { - g = NUM2INT(gen); - } -+ obj = rb_obj_alloc(klass); -+ GetPKey(obj, pkey); -+ - dh = dh_generate(NUM2INT(size), g); -- obj = dh_instance(klass, dh); -- if (obj == Qfalse) { -- DH_free(dh); -- ossl_raise(eDHError, NULL); -+ if (!EVP_PKEY_assign_DH(pkey, dh)) { -+ DH_free(dh); -+ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); - } -- - return obj; - } - -@@ -195,9 +172,7 @@ ossl_dh_initialize(int argc, VALUE *argv, VALUE self) - if (!NIL_P(gen)) { - g = NUM2INT(gen); - } -- if (!(dh = dh_generate(NUM2INT(arg), g))) { -- ossl_raise(eDHError, NULL); -- } -+ dh = dh_generate(NUM2INT(arg), g); - } - else { - arg = ossl_to_der_if_possible(arg); -@@ -434,17 +409,21 @@ ossl_dh_to_text(VALUE self) - static VALUE - ossl_dh_to_public_key(VALUE self) - { -+ EVP_PKEY *pkey; - DH *orig_dh, *dh; - VALUE obj; - -+ obj = rb_obj_alloc(rb_obj_class(self)); -+ GetPKey(obj, pkey); -+ - GetDH(self, orig_dh); -- dh = DHparams_dup(orig_dh); /* err check perfomed by dh_instance */ -- obj = dh_instance(rb_obj_class(self), dh); -- if (obj == Qfalse) { -- DH_free(dh); -- ossl_raise(eDHError, NULL); -+ dh = DHparams_dup(orig_dh); -+ if (!dh) -+ ossl_raise(eDHError, "DHparams_dup"); -+ if (!EVP_PKEY_assign_DH(pkey, dh)) { -+ DH_free(dh); -+ ossl_raise(eDHError, "EVP_PKEY_assign_DH"); - } -- - return obj; - } - -diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c -index e9be9ac482..c907f31c19 100644 ---- a/ext/openssl/ossl_pkey_dsa.c -+++ b/ext/openssl/ossl_pkey_dsa.c -@@ -43,31 +43,6 @@ DSA_PRIVATE(VALUE obj, DSA *dsa) - VALUE cDSA; - VALUE eDSAError; - --/* -- * Public -- */ --static VALUE --dsa_instance(VALUE klass, DSA *dsa) --{ -- EVP_PKEY *pkey; -- VALUE obj; -- -- if (!dsa) { -- return Qfalse; -- } -- obj = NewPKey(klass); -- if (!(pkey = EVP_PKEY_new())) { -- return Qfalse; -- } -- if (!EVP_PKEY_assign_DSA(pkey, dsa)) { -- EVP_PKEY_free(pkey); -- return Qfalse; -- } -- SetPKey(obj, pkey); -- -- return obj; --} -- - /* - * Private - */ -@@ -100,9 +75,9 @@ dsa_generate(int size) - unsigned long h; - - if (!dsa || !cb) { -- DSA_free(dsa); -- BN_GENCB_free(cb); -- return NULL; -+ DSA_free(dsa); -+ BN_GENCB_free(cb); -+ ossl_raise(eDSAError, "malloc failure"); - } - - if (rb_block_given_p()) -@@ -132,12 +107,12 @@ dsa_generate(int size) - ossl_clear_error(); - rb_jump_tag(cb_arg.state); - } -- return NULL; -+ ossl_raise(eDSAError, "DSA_generate_parameters_ex"); - } - - if (!DSA_generate_key(dsa)) { -- DSA_free(dsa); -- return NULL; -+ DSA_free(dsa); -+ ossl_raise(eDSAError, "DSA_generate_key"); - } - - return dsa; -@@ -157,14 +132,18 @@ dsa_generate(int size) - static VALUE - ossl_dsa_s_generate(VALUE klass, VALUE size) - { -- DSA *dsa = dsa_generate(NUM2INT(size)); /* err handled by dsa_instance */ -- VALUE obj = dsa_instance(klass, dsa); -+ EVP_PKEY *pkey; -+ DSA *dsa; -+ VALUE obj; - -- if (obj == Qfalse) { -- DSA_free(dsa); -- ossl_raise(eDSAError, NULL); -- } -+ obj = rb_obj_alloc(klass); -+ GetPKey(obj, pkey); - -+ dsa = dsa_generate(NUM2INT(size)); -+ if (!EVP_PKEY_assign_DSA(pkey, dsa)) { -+ DSA_free(dsa); -+ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); -+ } - return obj; - } - -@@ -460,20 +439,23 @@ ossl_dsa_to_text(VALUE self) - static VALUE - ossl_dsa_to_public_key(VALUE self) - { -- EVP_PKEY *pkey; -+ EVP_PKEY *pkey, *pkey_new; - DSA *dsa; - VALUE obj; - - GetPKeyDSA(self, pkey); -- /* err check performed by dsa_instance */ -+ obj = rb_obj_alloc(rb_obj_class(self)); -+ GetPKey(obj, pkey_new); -+ - #define DSAPublicKey_dup(dsa) (DSA *)ASN1_dup( \ - (i2d_of_void *)i2d_DSAPublicKey, (d2i_of_void *)d2i_DSAPublicKey, (char *)(dsa)) - dsa = DSAPublicKey_dup(EVP_PKEY_get0_DSA(pkey)); - #undef DSAPublicKey_dup -- obj = dsa_instance(rb_obj_class(self), dsa); -- if (obj == Qfalse) { -- DSA_free(dsa); -- ossl_raise(eDSAError, NULL); -+ if (!dsa) -+ ossl_raise(eDSAError, "DSAPublicKey_dup"); -+ if (!EVP_PKEY_assign_DSA(pkey_new, dsa)) { -+ DSA_free(dsa); -+ ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); - } - return obj; - } -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index eabf495f19..aec9d1e60f 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -63,27 +63,6 @@ static ID id_i_group; - static VALUE ec_group_new(const EC_GROUP *group); - static VALUE ec_point_new(const EC_POINT *point, const EC_GROUP *group); - --static VALUE ec_instance(VALUE klass, EC_KEY *ec) --{ -- EVP_PKEY *pkey; -- VALUE obj; -- -- if (!ec) { -- return Qfalse; -- } -- obj = NewPKey(klass); -- if (!(pkey = EVP_PKEY_new())) { -- return Qfalse; -- } -- if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { -- EVP_PKEY_free(pkey); -- return Qfalse; -- } -- SetPKey(obj, pkey); -- -- return obj; --} -- - /* - * Creates a new EC_KEY on the EC group obj. arg can be an EC::Group or a String - * representing an OID. -@@ -130,17 +109,18 @@ ec_key_new_from_group(VALUE arg) - static VALUE - ossl_ec_key_s_generate(VALUE klass, VALUE arg) - { -+ EVP_PKEY *pkey; - EC_KEY *ec; - VALUE obj; - -- ec = ec_key_new_from_group(arg); -+ obj = rb_obj_alloc(klass); -+ GetPKey(obj, pkey); - -- obj = ec_instance(klass, ec); -- if (obj == Qfalse) { -- EC_KEY_free(ec); -- ossl_raise(eECError, NULL); -+ ec = ec_key_new_from_group(arg); -+ if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) { -+ EC_KEY_free(ec); -+ ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY"); - } -- - if (!EC_KEY_generate_key(ec)) - ossl_raise(eECError, "EC_KEY_generate_key"); - -diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c -index c1ae44fe40..fbdb9c8960 100644 ---- a/ext/openssl/ossl_pkey_rsa.c -+++ b/ext/openssl/ossl_pkey_rsa.c -@@ -44,31 +44,6 @@ RSA_PRIVATE(VALUE obj, RSA *rsa) - VALUE cRSA; - VALUE eRSAError; - --/* -- * Public -- */ --static VALUE --rsa_instance(VALUE klass, RSA *rsa) --{ -- EVP_PKEY *pkey; -- VALUE obj; -- -- if (!rsa) { -- return Qfalse; -- } -- obj = NewPKey(klass); -- if (!(pkey = EVP_PKEY_new())) { -- return Qfalse; -- } -- if (!EVP_PKEY_assign_RSA(pkey, rsa)) { -- EVP_PKEY_free(pkey); -- return Qfalse; -- } -- SetPKey(obj, pkey); -- -- return obj; --} -- - /* - * Private - */ -@@ -102,7 +77,7 @@ rsa_generate(int size, unsigned long exp) - RSA_free(rsa); - BN_free(e); - BN_GENCB_free(cb); -- return NULL; -+ ossl_raise(eRSAError, "malloc failure"); - } - for (i = 0; i < (int)sizeof(exp) * 8; ++i) { - if (exp & (1UL << i)) { -@@ -110,7 +85,7 @@ rsa_generate(int size, unsigned long exp) - BN_free(e); - RSA_free(rsa); - BN_GENCB_free(cb); -- return NULL; -+ ossl_raise(eRSAError, "BN_set_bit"); - } - } - } -@@ -139,7 +114,7 @@ rsa_generate(int size, unsigned long exp) - ossl_clear_error(); - rb_jump_tag(cb_arg.state); - } -- return NULL; -+ ossl_raise(eRSAError, "RSA_generate_key_ex"); - } - - return rsa; -@@ -158,26 +133,26 @@ static VALUE - ossl_rsa_s_generate(int argc, VALUE *argv, VALUE klass) - { - /* why does this method exist? why can't initialize take an optional exponent? */ -+ EVP_PKEY *pkey; - RSA *rsa; - VALUE size, exp; - VALUE obj; - - rb_scan_args(argc, argv, "11", &size, &exp); -+ obj = rb_obj_alloc(klass); -+ GetPKey(obj, pkey); - -- rsa = rsa_generate(NUM2INT(size), NIL_P(exp) ? RSA_F4 : NUM2ULONG(exp)); /* err handled by rsa_instance */ -- obj = rsa_instance(klass, rsa); -- -- if (obj == Qfalse) { -- RSA_free(rsa); -- ossl_raise(eRSAError, NULL); -+ rsa = rsa_generate(NUM2INT(size), NIL_P(exp) ? RSA_F4 : NUM2ULONG(exp)); -+ if (!EVP_PKEY_assign_RSA(pkey, rsa)) { -+ RSA_free(rsa); -+ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); - } -- - return obj; - } - - /* - * call-seq: -- * RSA.new(key_size) => RSA instance -+ * RSA.new(size [, exponent]) => RSA instance - * RSA.new(encoded_key) => RSA instance - * RSA.new(encoded_key, pass_phrase) => RSA instance - * -@@ -206,10 +181,11 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) - GetPKey(self, pkey); - if(rb_scan_args(argc, argv, "02", &arg, &pass) == 0) { - rsa = RSA_new(); -+ if (!rsa) -+ ossl_raise(eRSAError, "RSA_new"); - } - else if (RB_INTEGER_TYPE_P(arg)) { - rsa = rsa_generate(NUM2INT(arg), NIL_P(pass) ? RSA_F4 : NUM2ULONG(pass)); -- if (!rsa) ossl_raise(eRSAError, NULL); - } - else { - pass = ossl_pem_passwd_value(pass); -@@ -243,7 +219,7 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) - } - if (!EVP_PKEY_assign_RSA(pkey, rsa)) { - RSA_free(rsa); -- ossl_raise(eRSAError, NULL); -+ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); - } - - return self; -@@ -787,17 +763,20 @@ ossl_rsa_to_text(VALUE self) - static VALUE - ossl_rsa_to_public_key(VALUE self) - { -- EVP_PKEY *pkey; -+ EVP_PKEY *pkey, *pkey_new; - RSA *rsa; - VALUE obj; - - GetPKeyRSA(self, pkey); -- /* err check performed by rsa_instance */ -+ obj = rb_obj_alloc(rb_obj_class(self)); -+ GetPKey(obj, pkey_new); -+ - rsa = RSAPublicKey_dup(EVP_PKEY_get0_RSA(pkey)); -- obj = rsa_instance(rb_obj_class(self), rsa); -- if (obj == Qfalse) { -- RSA_free(rsa); -- ossl_raise(eRSAError, NULL); -+ if (!rsa) -+ ossl_raise(eRSAError, "RSAPublicKey_dup"); -+ if (!EVP_PKEY_assign_RSA(pkey_new, rsa)) { -+ RSA_free(rsa); -+ ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); - } - return obj; - } --- -2.32.0 - - -From 1e1fedc6c2c9d42bc76b5a24bf0f39c8101f8d53 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sat, 18 Mar 2017 17:26:33 +0900 -Subject: [PATCH 3/5] pkey: have PKey.read parse PEM-encoded DHParameter - -Try PEM_read_bio_Parameters(). Only PEM format is supported at the -moment since corresponding d2i_* functions are not provided by OpenSSL. ---- - ext/openssl/ossl_pkey.c | 3 +++ - test/openssl/test_pkey_dh.rb | 2 ++ - test/openssl/utils.rb | 3 --- - 3 files changed, 5 insertions(+), 3 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index c6dbf57272..a00d66aada 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -178,6 +178,9 @@ ossl_pkey_new_from_data(int argc, VALUE *argv, VALUE self) - OSSL_BIO_reset(bio); - if ((pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL))) - goto ok; -+ OSSL_BIO_reset(bio); -+ if ((pkey = PEM_read_bio_Parameters(bio, NULL))) -+ goto ok; - - BIO_free(bio); - ossl_raise(ePKeyError, "Could not parse PKey"); -diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb -index fd2c7a66a9..4a05626a12 100644 ---- a/test/openssl/test_pkey_dh.rb -+++ b/test/openssl/test_pkey_dh.rb -@@ -36,6 +36,8 @@ def test_DHparams - EOF - key = OpenSSL::PKey::DH.new(pem) - assert_same_dh dup_public(dh1024), key -+ key = OpenSSL::PKey.read(pem) -+ assert_same_dh dup_public(dh1024), key - - assert_equal asn1.to_der, dh1024.to_der - assert_equal pem, dh1024.export -diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb -index 3776fbac4e..c1d737b2ab 100644 ---- a/test/openssl/utils.rb -+++ b/test/openssl/utils.rb -@@ -42,9 +42,6 @@ module Fixtures - - def pkey(name) - OpenSSL::PKey.read(read_file("pkey", name)) -- rescue OpenSSL::PKey::PKeyError -- # TODO: DH parameters can be read by OpenSSL::PKey.read atm -- OpenSSL::PKey::DH.new(read_file("pkey", name)) - end - - def read_file(category, name) --- -2.32.0 - - -From 70655b40a980dad36dfb3054d309f6484e2a70b7 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Tue, 13 Jun 2017 23:39:41 +0900 -Subject: [PATCH 4/5] pkey: refactor DER/PEM-encoded string parsing code - -Export the flow used by OpenSSL::PKey.read and let the subclasses call -it before attempting other formats. ---- - ext/openssl/ossl_pkey.c | 57 +++++++++++++++++++++---------------- - ext/openssl/ossl_pkey.h | 1 + - ext/openssl/ossl_pkey_dsa.c | 37 +++++++++++------------- - ext/openssl/ossl_pkey_ec.c | 29 +++++++------------ - ext/openssl/ossl_pkey_rsa.c | 26 ++++++++--------- - 5 files changed, 73 insertions(+), 77 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index a00d66aada..47ddd0f014 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -136,6 +136,35 @@ ossl_pkey_new(EVP_PKEY *pkey) - return obj; - } - -+EVP_PKEY * -+ossl_pkey_read_generic(BIO *bio, VALUE pass) -+{ -+ void *ppass = (void *)pass; -+ EVP_PKEY *pkey; -+ -+ if ((pkey = d2i_PrivateKey_bio(bio, NULL))) -+ goto out; -+ OSSL_BIO_reset(bio); -+ if ((pkey = d2i_PKCS8PrivateKey_bio(bio, NULL, ossl_pem_passwd_cb, ppass))) -+ goto out; -+ OSSL_BIO_reset(bio); -+ if ((pkey = d2i_PUBKEY_bio(bio, NULL))) -+ goto out; -+ OSSL_BIO_reset(bio); -+ /* PEM_read_bio_PrivateKey() also parses PKCS #8 formats */ -+ if ((pkey = PEM_read_bio_PrivateKey(bio, NULL, ossl_pem_passwd_cb, ppass))) -+ goto out; -+ OSSL_BIO_reset(bio); -+ if ((pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL))) -+ goto out; -+ OSSL_BIO_reset(bio); -+ if ((pkey = PEM_read_bio_Parameters(bio, NULL))) -+ goto out; -+ -+ out: -+ return pkey; -+} -+ - /* - * call-seq: - * OpenSSL::PKey.read(string [, pwd ]) -> PKey -@@ -160,33 +189,11 @@ ossl_pkey_new_from_data(int argc, VALUE *argv, VALUE self) - VALUE data, pass; - - rb_scan_args(argc, argv, "11", &data, &pass); -- pass = ossl_pem_passwd_value(pass); -- - bio = ossl_obj2bio(&data); -- if ((pkey = d2i_PrivateKey_bio(bio, NULL))) -- goto ok; -- OSSL_BIO_reset(bio); -- if ((pkey = d2i_PKCS8PrivateKey_bio(bio, NULL, ossl_pem_passwd_cb, (void *)pass))) -- goto ok; -- OSSL_BIO_reset(bio); -- if ((pkey = d2i_PUBKEY_bio(bio, NULL))) -- goto ok; -- OSSL_BIO_reset(bio); -- /* PEM_read_bio_PrivateKey() also parses PKCS #8 formats */ -- if ((pkey = PEM_read_bio_PrivateKey(bio, NULL, ossl_pem_passwd_cb, (void *)pass))) -- goto ok; -- OSSL_BIO_reset(bio); -- if ((pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL))) -- goto ok; -- OSSL_BIO_reset(bio); -- if ((pkey = PEM_read_bio_Parameters(bio, NULL))) -- goto ok; -- -- BIO_free(bio); -- ossl_raise(ePKeyError, "Could not parse PKey"); -- --ok: -+ pkey = ossl_pkey_read_generic(bio, ossl_pem_passwd_value(pass)); - BIO_free(bio); -+ if (!pkey) -+ ossl_raise(ePKeyError, "Could not parse PKey"); - return ossl_pkey_new(pkey); - } - -diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h -index e363a261c2..895927e3fb 100644 ---- a/ext/openssl/ossl_pkey.h -+++ b/ext/openssl/ossl_pkey.h -@@ -45,6 +45,7 @@ void ossl_generate_cb_stop(void *ptr); - - VALUE ossl_pkey_new(EVP_PKEY *); - void ossl_pkey_check_public_key(const EVP_PKEY *); -+EVP_PKEY *ossl_pkey_read_generic(BIO *, VALUE); - EVP_PKEY *GetPKeyPtr(VALUE); - EVP_PKEY *DupPKeyPtr(VALUE); - EVP_PKEY *GetPrivPKeyPtr(VALUE); -diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c -index c907f31c19..56f58559ed 100644 ---- a/ext/openssl/ossl_pkey_dsa.c -+++ b/ext/openssl/ossl_pkey_dsa.c -@@ -170,37 +170,34 @@ ossl_dsa_s_generate(VALUE klass, VALUE size) - static VALUE - ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) - { -- EVP_PKEY *pkey; -- DSA *dsa; -+ EVP_PKEY *pkey, *tmp; -+ DSA *dsa = NULL; - BIO *in; - VALUE arg, pass; - - GetPKey(self, pkey); -- if(rb_scan_args(argc, argv, "02", &arg, &pass) == 0) { -+ rb_scan_args(argc, argv, "02", &arg, &pass); -+ if (argc == 0) { - dsa = DSA_new(); -+ if (!dsa) -+ ossl_raise(eDSAError, "DSA_new"); - } -- else if (RB_INTEGER_TYPE_P(arg)) { -- if (!(dsa = dsa_generate(NUM2INT(arg)))) { -- ossl_raise(eDSAError, NULL); -- } -+ else if (argc == 1 && RB_INTEGER_TYPE_P(arg)) { -+ dsa = dsa_generate(NUM2INT(arg)); - } - else { - pass = ossl_pem_passwd_value(pass); - arg = ossl_to_der_if_possible(arg); - in = ossl_obj2bio(&arg); -- dsa = PEM_read_bio_DSAPrivateKey(in, NULL, ossl_pem_passwd_cb, (void *)pass); -- if (!dsa) { -- OSSL_BIO_reset(in); -- dsa = PEM_read_bio_DSA_PUBKEY(in, NULL, NULL, NULL); -- } -- if (!dsa) { -- OSSL_BIO_reset(in); -- dsa = d2i_DSAPrivateKey_bio(in, NULL); -- } -- if (!dsa) { -- OSSL_BIO_reset(in); -- dsa = d2i_DSA_PUBKEY_bio(in, NULL); -- } -+ -+ tmp = ossl_pkey_read_generic(in, pass); -+ if (tmp) { -+ if (EVP_PKEY_base_id(tmp) != EVP_PKEY_DSA) -+ rb_raise(eDSAError, "incorrect pkey type: %s", -+ OBJ_nid2sn(EVP_PKEY_base_id(tmp))); -+ dsa = EVP_PKEY_get1_DSA(tmp); -+ EVP_PKEY_free(tmp); -+ } - if (!dsa) { - OSSL_BIO_reset(in); - #define PEM_read_bio_DSAPublicKey(bp,x,cb,u) (DSA *)PEM_ASN1_read_bio( \ -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index aec9d1e60f..ca8f5c6e4e 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -162,24 +162,17 @@ static VALUE ossl_ec_key_initialize(int argc, VALUE *argv, VALUE self) - } else if (rb_obj_is_kind_of(arg, cEC_GROUP)) { - ec = ec_key_new_from_group(arg); - } else { -- BIO *in; -- -- pass = ossl_pem_passwd_value(pass); -- in = ossl_obj2bio(&arg); -- -- ec = PEM_read_bio_ECPrivateKey(in, NULL, ossl_pem_passwd_cb, (void *)pass); -- if (!ec) { -- OSSL_BIO_reset(in); -- ec = PEM_read_bio_EC_PUBKEY(in, NULL, ossl_pem_passwd_cb, (void *)pass); -- } -- if (!ec) { -- OSSL_BIO_reset(in); -- ec = d2i_ECPrivateKey_bio(in, NULL); -- } -- if (!ec) { -- OSSL_BIO_reset(in); -- ec = d2i_EC_PUBKEY_bio(in, NULL); -- } -+ BIO *in = ossl_obj2bio(&arg); -+ EVP_PKEY *tmp; -+ pass = ossl_pem_passwd_value(pass); -+ tmp = ossl_pkey_read_generic(in, pass); -+ if (tmp) { -+ if (EVP_PKEY_base_id(tmp) != EVP_PKEY_EC) -+ rb_raise(eECError, "incorrect pkey type: %s", -+ OBJ_nid2sn(EVP_PKEY_base_id(tmp))); -+ ec = EVP_PKEY_get1_EC_KEY(tmp); -+ EVP_PKEY_free(tmp); -+ } - BIO_free(in); - - if (!ec) { -diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c -index fbdb9c8960..8415121c7d 100644 ---- a/ext/openssl/ossl_pkey_rsa.c -+++ b/ext/openssl/ossl_pkey_rsa.c -@@ -179,7 +179,8 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) - VALUE arg, pass; - - GetPKey(self, pkey); -- if(rb_scan_args(argc, argv, "02", &arg, &pass) == 0) { -+ rb_scan_args(argc, argv, "02", &arg, &pass); -+ if (argc == 0) { - rsa = RSA_new(); - if (!rsa) - ossl_raise(eRSAError, "RSA_new"); -@@ -191,19 +192,15 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) - pass = ossl_pem_passwd_value(pass); - arg = ossl_to_der_if_possible(arg); - in = ossl_obj2bio(&arg); -- rsa = PEM_read_bio_RSAPrivateKey(in, NULL, ossl_pem_passwd_cb, (void *)pass); -- if (!rsa) { -- OSSL_BIO_reset(in); -- rsa = PEM_read_bio_RSA_PUBKEY(in, NULL, NULL, NULL); -- } -- if (!rsa) { -- OSSL_BIO_reset(in); -- rsa = d2i_RSAPrivateKey_bio(in, NULL); -- } -- if (!rsa) { -- OSSL_BIO_reset(in); -- rsa = d2i_RSA_PUBKEY_bio(in, NULL); -- } -+ -+ tmp = ossl_pkey_read_generic(in, pass); -+ if (tmp) { -+ if (EVP_PKEY_base_id(tmp) != EVP_PKEY_RSA) -+ rb_raise(eRSAError, "incorrect pkey type: %s", -+ OBJ_nid2sn(EVP_PKEY_base_id(tmp))); -+ rsa = EVP_PKEY_get1_RSA(tmp); -+ EVP_PKEY_free(tmp); -+ } - if (!rsa) { - OSSL_BIO_reset(in); - rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL); -@@ -214,6 +211,7 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) - } - BIO_free(in); - if (!rsa) { -+ ossl_clear_error(); - ossl_raise(eRSAError, "Neither PUB key nor PRIV key"); - } - } --- -2.32.0 - - -From eacc680b1efc82935efc945bbe23c9073f17f440 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Wed, 14 Jun 2017 00:25:43 +0900 -Subject: [PATCH 5/5] pkey: refactor #export/#to_pem and #to_der - -Add ossl_pkey_export_traditional() and ossl_pkey_export_spki() helper -functions, and use them. This reduces code duplication. ---- - ext/openssl/ossl_pkey.c | 54 +++++++++++++++++++++-- - ext/openssl/ossl_pkey.h | 14 ++++++ - ext/openssl/ossl_pkey_dsa.c | 49 +++------------------ - ext/openssl/ossl_pkey_ec.c | 86 ++++++++----------------------------- - ext/openssl/ossl_pkey_rsa.c | 84 +++++++++++------------------------- - 5 files changed, 114 insertions(+), 173 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 47ddd0f014..610a83fd2d 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -341,6 +341,52 @@ ossl_pkey_inspect(VALUE self) - OBJ_nid2sn(nid)); - } - -+VALUE -+ossl_pkey_export_traditional(int argc, VALUE *argv, VALUE self, int to_der) -+{ -+ EVP_PKEY *pkey; -+ VALUE cipher, pass; -+ const EVP_CIPHER *enc = NULL; -+ BIO *bio; -+ -+ GetPKey(self, pkey); -+ rb_scan_args(argc, argv, "02", &cipher, &pass); -+ if (!NIL_P(cipher)) { -+ enc = ossl_evp_get_cipherbyname(cipher); -+ pass = ossl_pem_passwd_value(pass); -+ } -+ -+ bio = BIO_new(BIO_s_mem()); -+ if (!bio) -+ ossl_raise(ePKeyError, "BIO_new"); -+ if (to_der) { -+ if (!i2d_PrivateKey_bio(bio, pkey)) { -+ BIO_free(bio); -+ ossl_raise(ePKeyError, "i2d_PrivateKey_bio"); -+ } -+ } -+ else { -+#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER) -+ if (!PEM_write_bio_PrivateKey_traditional(bio, pkey, enc, NULL, 0, -+ ossl_pem_passwd_cb, -+ (void *)pass)) { -+#else -+ char pem_str[80]; -+ const char *aname; -+ -+ EVP_PKEY_asn1_get0_info(NULL, NULL, NULL, NULL, &aname, pkey->ameth); -+ snprintf(pem_str, sizeof(pem_str), "%s PRIVATE KEY", aname); -+ if (!PEM_ASN1_write_bio((i2d_of_void *)i2d_PrivateKey, pem_str, bio, -+ pkey, enc, NULL, 0, ossl_pem_passwd_cb, -+ (void *)pass)) { -+#endif -+ BIO_free(bio); -+ ossl_raise(ePKeyError, "PEM_write_bio_PrivateKey_traditional"); -+ } -+ } -+ return ossl_membio2str(bio); -+} -+ - static VALUE - do_pkcs8_export(int argc, VALUE *argv, VALUE self, int to_der) - { -@@ -410,8 +456,8 @@ ossl_pkey_private_to_pem(int argc, VALUE *argv, VALUE self) - return do_pkcs8_export(argc, argv, self, 0); - } - --static VALUE --do_spki_export(VALUE self, int to_der) -+VALUE -+ossl_pkey_export_spki(VALUE self, int to_der) - { - EVP_PKEY *pkey; - BIO *bio; -@@ -444,7 +490,7 @@ do_spki_export(VALUE self, int to_der) - static VALUE - ossl_pkey_public_to_der(VALUE self) - { -- return do_spki_export(self, 1); -+ return ossl_pkey_export_spki(self, 1); - } - - /* -@@ -456,7 +502,7 @@ ossl_pkey_public_to_der(VALUE self) - static VALUE - ossl_pkey_public_to_pem(VALUE self) - { -- return do_spki_export(self, 0); -+ return ossl_pkey_export_spki(self, 0); - } - - /* -diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h -index 895927e3fb..7dbaed47bc 100644 ---- a/ext/openssl/ossl_pkey.h -+++ b/ext/openssl/ossl_pkey.h -@@ -49,6 +49,20 @@ EVP_PKEY *ossl_pkey_read_generic(BIO *, VALUE); - EVP_PKEY *GetPKeyPtr(VALUE); - EVP_PKEY *DupPKeyPtr(VALUE); - EVP_PKEY *GetPrivPKeyPtr(VALUE); -+ -+/* -+ * Serializes _self_ in X.509 SubjectPublicKeyInfo format and returns the -+ * resulting String. Sub-classes use this when overriding #to_der. -+ */ -+VALUE ossl_pkey_export_spki(VALUE self, int to_der); -+/* -+ * Serializes the private key _self_ in the traditional private key format -+ * and returns the resulting String. Sub-classes use this when overriding -+ * #to_der. -+ */ -+VALUE ossl_pkey_export_traditional(int argc, VALUE *argv, VALUE self, -+ int to_der); -+ - void Init_ossl_pkey(void); - - /* -diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c -index 56f58559ed..0e68f7f27f 100644 ---- a/ext/openssl/ossl_pkey_dsa.c -+++ b/ext/openssl/ossl_pkey_dsa.c -@@ -296,34 +296,12 @@ static VALUE - ossl_dsa_export(int argc, VALUE *argv, VALUE self) - { - DSA *dsa; -- BIO *out; -- const EVP_CIPHER *ciph = NULL; -- VALUE cipher, pass, str; - - GetDSA(self, dsa); -- rb_scan_args(argc, argv, "02", &cipher, &pass); -- if (!NIL_P(cipher)) { -- ciph = ossl_evp_get_cipherbyname(cipher); -- pass = ossl_pem_passwd_value(pass); -- } -- if (!(out = BIO_new(BIO_s_mem()))) { -- ossl_raise(eDSAError, NULL); -- } -- if (DSA_HAS_PRIVATE(dsa)) { -- if (!PEM_write_bio_DSAPrivateKey(out, dsa, ciph, NULL, 0, -- ossl_pem_passwd_cb, (void *)pass)){ -- BIO_free(out); -- ossl_raise(eDSAError, NULL); -- } -- } else { -- if (!PEM_write_bio_DSA_PUBKEY(out, dsa)) { -- BIO_free(out); -- ossl_raise(eDSAError, NULL); -- } -- } -- str = ossl_membio2str(out); -- -- return str; -+ if (DSA_HAS_PRIVATE(dsa)) -+ return ossl_pkey_export_traditional(argc, argv, self, 0); -+ else -+ return ossl_pkey_export_spki(self, 0); - } - - /* -@@ -337,25 +315,12 @@ static VALUE - ossl_dsa_to_der(VALUE self) - { - DSA *dsa; -- int (*i2d_func)(DSA *, unsigned char **); -- unsigned char *p; -- long len; -- VALUE str; - - GetDSA(self, dsa); -- if(DSA_HAS_PRIVATE(dsa)) -- i2d_func = (int (*)(DSA *,unsigned char **))i2d_DSAPrivateKey; -+ if (DSA_HAS_PRIVATE(dsa)) -+ return ossl_pkey_export_traditional(0, NULL, self, 1); - else -- i2d_func = i2d_DSA_PUBKEY; -- if((len = i2d_func(dsa, NULL)) <= 0) -- ossl_raise(eDSAError, NULL); -- str = rb_str_new(0, len); -- p = (unsigned char *)RSTRING_PTR(str); -- if(i2d_func(dsa, &p) < 0) -- ossl_raise(eDSAError, NULL); -- ossl_str_adjust(str, p); -- -- return str; -+ return ossl_pkey_export_spki(self, 1); - } - - -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index ca8f5c6e4e..6fe2533e2a 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -141,7 +141,7 @@ ossl_ec_key_s_generate(VALUE klass, VALUE arg) - static VALUE ossl_ec_key_initialize(int argc, VALUE *argv, VALUE self) - { - EVP_PKEY *pkey; -- EC_KEY *ec; -+ EC_KEY *ec = NULL; - VALUE arg, pass; - - GetPKey(self, pkey); -@@ -378,66 +378,6 @@ static VALUE ossl_ec_key_is_private(VALUE self) - return EC_KEY_get0_private_key(ec) ? Qtrue : Qfalse; - } - --static VALUE ossl_ec_key_to_string(VALUE self, VALUE ciph, VALUE pass, int format) --{ -- EC_KEY *ec; -- BIO *out; -- int i = -1; -- int private = 0; -- VALUE str; -- const EVP_CIPHER *cipher = NULL; -- -- GetEC(self, ec); -- -- if (EC_KEY_get0_public_key(ec) == NULL) -- ossl_raise(eECError, "can't export - no public key set"); -- -- if (EC_KEY_check_key(ec) != 1) -- ossl_raise(eECError, "can't export - EC_KEY_check_key failed"); -- -- if (EC_KEY_get0_private_key(ec)) -- private = 1; -- -- if (!NIL_P(ciph)) { -- cipher = ossl_evp_get_cipherbyname(ciph); -- pass = ossl_pem_passwd_value(pass); -- } -- -- if (!(out = BIO_new(BIO_s_mem()))) -- ossl_raise(eECError, "BIO_new(BIO_s_mem())"); -- -- switch(format) { -- case EXPORT_PEM: -- if (private) { -- i = PEM_write_bio_ECPrivateKey(out, ec, cipher, NULL, 0, ossl_pem_passwd_cb, (void *)pass); -- } else { -- i = PEM_write_bio_EC_PUBKEY(out, ec); -- } -- -- break; -- case EXPORT_DER: -- if (private) { -- i = i2d_ECPrivateKey_bio(out, ec); -- } else { -- i = i2d_EC_PUBKEY_bio(out, ec); -- } -- -- break; -- default: -- BIO_free(out); -- ossl_raise(rb_eRuntimeError, "unknown format (internal error)"); -- } -- -- if (i != 1) { -- BIO_free(out); -- ossl_raise(eECError, "outlen=%d", i); -- } -- -- str = ossl_membio2str(out); -- -- return str; --} -- - /* - * call-seq: - * key.export([cipher, pass_phrase]) => String -@@ -448,11 +388,16 @@ static VALUE ossl_ec_key_to_string(VALUE self, VALUE ciph, VALUE pass, int forma - * instance. Note that encryption will only be effective for a private key, - * public keys will always be encoded in plain text. - */ --static VALUE ossl_ec_key_export(int argc, VALUE *argv, VALUE self) -+static VALUE -+ossl_ec_key_export(int argc, VALUE *argv, VALUE self) - { -- VALUE cipher, passwd; -- rb_scan_args(argc, argv, "02", &cipher, &passwd); -- return ossl_ec_key_to_string(self, cipher, passwd, EXPORT_PEM); -+ EC_KEY *ec; -+ -+ GetEC(self, ec); -+ if (EC_KEY_get0_private_key(ec)) -+ return ossl_pkey_export_traditional(argc, argv, self, 0); -+ else -+ return ossl_pkey_export_spki(self, 0); - } - - /* -@@ -461,9 +406,16 @@ static VALUE ossl_ec_key_export(int argc, VALUE *argv, VALUE self) - * - * See the OpenSSL documentation for i2d_ECPrivateKey_bio() - */ --static VALUE ossl_ec_key_to_der(VALUE self) -+static VALUE -+ossl_ec_key_to_der(VALUE self) - { -- return ossl_ec_key_to_string(self, Qnil, Qnil, EXPORT_DER); -+ EC_KEY *ec; -+ -+ GetEC(self, ec); -+ if (EC_KEY_get0_private_key(ec)) -+ return ossl_pkey_export_traditional(0, NULL, self, 1); -+ else -+ return ossl_pkey_export_spki(self, 1); - } - - /* -diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c -index 8415121c7d..3c298a2aea 100644 ---- a/ext/openssl/ossl_pkey_rsa.c -+++ b/ext/openssl/ossl_pkey_rsa.c -@@ -173,8 +173,8 @@ ossl_rsa_s_generate(int argc, VALUE *argv, VALUE klass) - static VALUE - ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) - { -- EVP_PKEY *pkey; -- RSA *rsa; -+ EVP_PKEY *pkey, *tmp; -+ RSA *rsa = NULL; - BIO *in; - VALUE arg, pass; - -@@ -279,6 +279,21 @@ ossl_rsa_is_private(VALUE self) - return RSA_PRIVATE(self, rsa) ? Qtrue : Qfalse; - } - -+static int -+can_export_rsaprivatekey(VALUE self) -+{ -+ RSA *rsa; -+ const BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp; -+ -+ GetRSA(self, rsa); -+ -+ RSA_get0_key(rsa, &n, &e, &d); -+ RSA_get0_factors(rsa, &p, &q); -+ RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp); -+ -+ return n && e && d && p && q && dmp1 && dmq1 && iqmp; -+} -+ - /* - * call-seq: - * rsa.export([cipher, pass_phrase]) => PEM-format String -@@ -292,41 +307,10 @@ ossl_rsa_is_private(VALUE self) - static VALUE - ossl_rsa_export(int argc, VALUE *argv, VALUE self) - { -- RSA *rsa; -- const BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp; -- BIO *out; -- const EVP_CIPHER *ciph = NULL; -- VALUE cipher, pass, str; -- -- GetRSA(self, rsa); -- -- rb_scan_args(argc, argv, "02", &cipher, &pass); -- -- if (!NIL_P(cipher)) { -- ciph = ossl_evp_get_cipherbyname(cipher); -- pass = ossl_pem_passwd_value(pass); -- } -- if (!(out = BIO_new(BIO_s_mem()))) { -- ossl_raise(eRSAError, NULL); -- } -- RSA_get0_key(rsa, &n, &e, &d); -- RSA_get0_factors(rsa, &p, &q); -- RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp); -- if (n && e && d && p && q && dmp1 && dmq1 && iqmp) { -- if (!PEM_write_bio_RSAPrivateKey(out, rsa, ciph, NULL, 0, -- ossl_pem_passwd_cb, (void *)pass)) { -- BIO_free(out); -- ossl_raise(eRSAError, NULL); -- } -- } else { -- if (!PEM_write_bio_RSA_PUBKEY(out, rsa)) { -- BIO_free(out); -- ossl_raise(eRSAError, NULL); -- } -- } -- str = ossl_membio2str(out); -- -- return str; -+ if (can_export_rsaprivatekey(self)) -+ return ossl_pkey_export_traditional(argc, argv, self, 0); -+ else -+ return ossl_pkey_export_spki(self, 0); - } - - /* -@@ -338,30 +322,10 @@ ossl_rsa_export(int argc, VALUE *argv, VALUE self) - static VALUE - ossl_rsa_to_der(VALUE self) - { -- RSA *rsa; -- const BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp; -- int (*i2d_func)(const RSA *, unsigned char **); -- unsigned char *ptr; -- long len; -- VALUE str; -- -- GetRSA(self, rsa); -- RSA_get0_key(rsa, &n, &e, &d); -- RSA_get0_factors(rsa, &p, &q); -- RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp); -- if (n && e && d && p && q && dmp1 && dmq1 && iqmp) -- i2d_func = i2d_RSAPrivateKey; -+ if (can_export_rsaprivatekey(self)) -+ return ossl_pkey_export_traditional(0, NULL, self, 1); - else -- i2d_func = (int (*)(const RSA *, unsigned char **))i2d_RSA_PUBKEY; -- if((len = i2d_func(rsa, NULL)) <= 0) -- ossl_raise(eRSAError, NULL); -- str = rb_str_new(0, len); -- ptr = (unsigned char *)RSTRING_PTR(str); -- if(i2d_func(rsa, &ptr) < 0) -- ossl_raise(eRSAError, NULL); -- ossl_str_adjust(str, ptr); -- -- return str; -+ return ossl_pkey_export_spki(self, 1); - } - - /* --- -2.32.0 - diff --git a/ruby-3.1.0-Support-GCCs-DWARF-5.patch b/ruby-3.1.0-Support-GCCs-DWARF-5.patch deleted file mode 100644 index d9b434a..0000000 --- a/ruby-3.1.0-Support-GCCs-DWARF-5.patch +++ /dev/null @@ -1,229 +0,0 @@ -From 3b91792d3d644d6d6b0059cb315c9fe5d3626bab Mon Sep 17 00:00:00 2001 -From: Yusuke Endoh -Date: Sat, 6 Mar 2021 00:03:57 +0900 -Subject: [PATCH] Support GCC's DWARF 5 [Bug #17585] - -Co-Authored-By: xtkoba (Tee KOBAYASHI) ---- - addr2line.c | 119 ++++++++++++++++++++++++++++++++++++++++++---------- - 1 file changed, 97 insertions(+), 22 deletions(-) - -diff --git a/addr2line.c b/addr2line.c -index 0029cffbca..855efb40d4 100644 ---- a/addr2line.c -+++ b/addr2line.c -@@ -159,11 +159,12 @@ typedef struct obj_info { - struct dwarf_section debug_info; - struct dwarf_section debug_line; - struct dwarf_section debug_ranges; -+ struct dwarf_section debug_rnglists; - struct dwarf_section debug_str; - struct obj_info *next; - } obj_info_t; - --#define DWARF_SECTION_COUNT 5 -+#define DWARF_SECTION_COUNT 6 - - static struct dwarf_section * - obj_dwarf_section_at(obj_info_t *obj, int n) -@@ -173,6 +174,7 @@ obj_dwarf_section_at(obj_info_t *obj, int n) - &obj->debug_info, - &obj->debug_line, - &obj->debug_ranges, -+ &obj->debug_rnglists, - &obj->debug_str - }; - if (n < 0 || DWARF_SECTION_COUNT <= n) { -@@ -411,7 +413,7 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line, - FILL_LINE(); - break; - case DW_LNS_advance_pc: -- a = uleb128((char **)&p); -+ a = uleb128((char **)&p) * header.minimum_instruction_length; - addr += a; - break; - case DW_LNS_advance_line: { -@@ -451,7 +453,7 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line, - /* isa = (unsigned int)*/(void)uleb128((char **)&p); - break; - case 0: -- a = *(unsigned char *)p++; -+ a = uleb128((char **)&p); - op = *p++; - switch (op) { - case DW_LNE_end_sequence: -@@ -808,6 +810,18 @@ enum - DW_FORM_addrx4 = 0x2c - }; - -+/* Range list entry encodings */ -+enum { -+ DW_RLE_end_of_list = 0x00, -+ DW_RLE_base_addressx = 0x01, -+ DW_RLE_startx_endx = 0x02, -+ DW_RLE_startx_length = 0x03, -+ DW_RLE_offset_pair = 0x04, -+ DW_RLE_base_address = 0x05, -+ DW_RLE_start_end = 0x06, -+ DW_RLE_start_length = 0x07 -+}; -+ - enum { - VAL_none = 0, - VAL_cstr = 1, -@@ -961,6 +975,23 @@ debug_info_reader_init(DebugInfoReader *reader, obj_info_t *obj) - reader->current_low_pc = 0; - } - -+static void -+di_skip_die_attributes(char **p) -+{ -+ for (;;) { -+ uint64_t at = uleb128(p); -+ uint64_t form = uleb128(p); -+ if (!at && !form) break; -+ switch (form) { -+ default: -+ break; -+ case DW_FORM_implicit_const: -+ sleb128(p); -+ break; -+ } -+ } -+} -+ - static void - di_read_debug_abbrev_cu(DebugInfoReader *reader) - { -@@ -975,12 +1006,7 @@ di_read_debug_abbrev_cu(DebugInfoReader *reader) - prev = abbrev_number; - uleb128(&p); /* tag */ - p++; /* has_children */ -- /* skip content */ -- for (;;) { -- uint64_t at = uleb128(&p); -- uint64_t form = uleb128(&p); -- if (!at && !form) break; -- } -+ di_skip_die_attributes(&p); - } - } - -@@ -1244,12 +1270,7 @@ di_find_abbrev(DebugInfoReader *reader, uint64_t abbrev_number) - /* skip 255th record */ - uleb128(&p); /* tag */ - p++; /* has_children */ -- /* skip content */ -- for (;;) { -- uint64_t at = uleb128(&p); -- uint64_t form = uleb128(&p); -- if (!at && !form) break; -- } -+ di_skip_die_attributes(&p); - for (uint64_t n = uleb128(&p); abbrev_number != n; n = uleb128(&p)) { - if (n == 0) { - fprintf(stderr,"%d: Abbrev Number %"PRId64" not found\n",__LINE__, abbrev_number); -@@ -1257,12 +1278,7 @@ di_find_abbrev(DebugInfoReader *reader, uint64_t abbrev_number) - } - uleb128(&p); /* tag */ - p++; /* has_children */ -- /* skip content */ -- for (;;) { -- uint64_t at = uleb128(&p); -- uint64_t form = uleb128(&p); -- if (!at && !form) break; -- } -+ di_skip_die_attributes(&p); - } - return p; - } -@@ -1390,6 +1406,21 @@ ranges_set(ranges_t *ptr, DebugInfoValue *v) - } - } - -+static uint64_t -+read_dw_form_addr(DebugInfoReader *reader, char **ptr) -+{ -+ char *p = *ptr; -+ *ptr = p + reader->format; -+ if (reader->format == 4) { -+ return read_uint32(&p); -+ } else if (reader->format == 8) { -+ return read_uint64(&p); -+ } else { -+ fprintf(stderr,"unknown address_size:%d", reader->address_size); -+ abort(); -+ } -+} -+ - static uintptr_t - ranges_include(DebugInfoReader *reader, ranges_t *ptr, uint64_t addr) - { -@@ -1403,8 +1434,50 @@ ranges_include(DebugInfoReader *reader, ranges_t *ptr, uint64_t addr) - } - else if (ptr->ranges_set) { - /* TODO: support base address selection entry */ -- char *p = reader->obj->debug_ranges.ptr + ptr->ranges; -+ char *p; - uint64_t base = ptr->low_pc_set ? ptr->low_pc : reader->current_low_pc; -+ if (reader->obj->debug_rnglists.ptr) { -+ p = reader->obj->debug_rnglists.ptr + ptr->ranges; -+ for (;;) { -+ uint8_t rle = read_uint8(&p); -+ uintptr_t base_address = 0; -+ uintptr_t from, to; -+ if (rle == DW_RLE_end_of_list) break; -+ switch (rle) { -+ case DW_RLE_base_addressx: -+ uleb128(&p); -+ break; -+ case DW_RLE_startx_endx: -+ uleb128(&p); -+ uleb128(&p); -+ break; -+ case DW_RLE_startx_length: -+ uleb128(&p); -+ uleb128(&p); -+ break; -+ case DW_RLE_offset_pair: -+ from = base_address + uleb128(&p); -+ to = base_address + uleb128(&p); -+ if (base + from <= addr && addr < base + to) { -+ return from; -+ } -+ break; -+ case DW_RLE_base_address: -+ base_address = read_dw_form_addr(reader, &p); -+ break; -+ case DW_RLE_start_end: -+ read_dw_form_addr(reader, &p); -+ read_dw_form_addr(reader, &p); -+ break; -+ case DW_RLE_start_length: -+ read_dw_form_addr(reader, &p); -+ uleb128(&p); -+ break; -+ } -+ } -+ return false; -+ } -+ p = reader->obj->debug_ranges.ptr + ptr->ranges; - for (;;) { - uintptr_t from = read_uintptr(&p); - uintptr_t to = read_uintptr(&p); -@@ -1750,6 +1823,7 @@ fill_lines(int num_traces, void **traces, int check_debuglink, - ".debug_info", - ".debug_line", - ".debug_ranges", -+ ".debug_rnglists", - ".debug_str" - }; - -@@ -2006,6 +2080,7 @@ found_mach_header: - "__debug_info", - "__debug_line", - "__debug_ranges", -+ "__debug_rnglists", - "__debug_str" - }; - struct LP(segment_command) *scmd = (struct LP(segment_command) *)lcmd; diff --git a/ruby-3.1.0-Use-EVP-API-in-more-places.patch b/ruby-3.1.0-Use-EVP-API-in-more-places.patch deleted file mode 100644 index f9c4580..0000000 --- a/ruby-3.1.0-Use-EVP-API-in-more-places.patch +++ /dev/null @@ -1,831 +0,0 @@ -From cf070378020088cd7e69b1cb08be68152ab8a078 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sun, 17 May 2020 18:25:38 +0900 -Subject: [PATCH 1/3] pkey: implement #to_text using EVP API - -Use EVP_PKEY_print_private() instead of the low-level API *_print() -functions, such as RSA_print(). - -EVP_PKEY_print_*() family was added in OpenSSL 1.0.0. - -Note that it falls back to EVP_PKEY_print_public() and -EVP_PKEY_print_params() as necessary. This is required for EVP_PKEY_DH -type for which _private() fails if the private component is not set in -the pkey object. - -Since the new API works in the same way for all key types, we now -implement #to_text in the base class OpenSSL::PKey::PKey rather than in -each subclass. ---- - ext/openssl/ossl_pkey.c | 38 +++++++++++++++++++++++++++++++++++++ - ext/openssl/ossl_pkey_dh.c | 29 ---------------------------- - ext/openssl/ossl_pkey_dsa.c | 29 ---------------------------- - ext/openssl/ossl_pkey_ec.c | 27 -------------------------- - ext/openssl/ossl_pkey_rsa.c | 31 ------------------------------ - test/openssl/test_pkey.rb | 5 +++++ - 6 files changed, 43 insertions(+), 116 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index f9282b9417..21cd4b2cda 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -539,6 +539,43 @@ ossl_pkey_inspect(VALUE self) - OBJ_nid2sn(nid)); - } - -+/* -+ * call-seq: -+ * pkey.to_text -> string -+ * -+ * Dumps key parameters, public key, and private key components contained in -+ * the key into a human-readable text. -+ * -+ * This is intended for debugging purpose. -+ * -+ * See also the man page EVP_PKEY_print_private(3). -+ */ -+static VALUE -+ossl_pkey_to_text(VALUE self) -+{ -+ EVP_PKEY *pkey; -+ BIO *bio; -+ -+ GetPKey(self, pkey); -+ if (!(bio = BIO_new(BIO_s_mem()))) -+ ossl_raise(ePKeyError, "BIO_new"); -+ -+ if (EVP_PKEY_print_private(bio, pkey, 0, NULL) == 1) -+ goto out; -+ OSSL_BIO_reset(bio); -+ if (EVP_PKEY_print_public(bio, pkey, 0, NULL) == 1) -+ goto out; -+ OSSL_BIO_reset(bio); -+ if (EVP_PKEY_print_params(bio, pkey, 0, NULL) == 1) -+ goto out; -+ -+ BIO_free(bio); -+ ossl_raise(ePKeyError, "EVP_PKEY_print_params"); -+ -+ out: -+ return ossl_membio2str(bio); -+} -+ - VALUE - ossl_pkey_export_traditional(int argc, VALUE *argv, VALUE self, int to_der) - { -@@ -1039,6 +1076,7 @@ Init_ossl_pkey(void) - rb_define_method(cPKey, "initialize", ossl_pkey_initialize, 0); - rb_define_method(cPKey, "oid", ossl_pkey_oid, 0); - rb_define_method(cPKey, "inspect", ossl_pkey_inspect, 0); -+ rb_define_method(cPKey, "to_text", ossl_pkey_to_text, 0); - rb_define_method(cPKey, "private_to_der", ossl_pkey_private_to_der, -1); - rb_define_method(cPKey, "private_to_pem", ossl_pkey_private_to_pem, -1); - rb_define_method(cPKey, "public_to_der", ossl_pkey_public_to_der, 0); -diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c -index 6b477b077c..acd3bf474e 100644 ---- a/ext/openssl/ossl_pkey_dh.c -+++ b/ext/openssl/ossl_pkey_dh.c -@@ -266,34 +266,6 @@ ossl_dh_get_params(VALUE self) - return hash; - } - --/* -- * call-seq: -- * dh.to_text -> aString -- * -- * Prints all parameters of key to buffer -- * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!! -- * Don't use :-)) (I's up to you) -- */ --static VALUE --ossl_dh_to_text(VALUE self) --{ -- DH *dh; -- BIO *out; -- VALUE str; -- -- GetDH(self, dh); -- if (!(out = BIO_new(BIO_s_mem()))) { -- ossl_raise(eDHError, NULL); -- } -- if (!DHparams_print(out, dh)) { -- BIO_free(out); -- ossl_raise(eDHError, NULL); -- } -- str = ossl_membio2str(out); -- -- return str; --} -- - /* - * call-seq: - * dh.public_key -> aDH -@@ -426,7 +398,6 @@ Init_ossl_dh(void) - rb_define_method(cDH, "initialize_copy", ossl_dh_initialize_copy, 1); - rb_define_method(cDH, "public?", ossl_dh_is_public, 0); - rb_define_method(cDH, "private?", ossl_dh_is_private, 0); -- rb_define_method(cDH, "to_text", ossl_dh_to_text, 0); - rb_define_method(cDH, "export", ossl_dh_export, 0); - rb_define_alias(cDH, "to_pem", "export"); - rb_define_alias(cDH, "to_s", "export"); -diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c -index 1c5a8a737e..f017cceb4a 100644 ---- a/ext/openssl/ossl_pkey_dsa.c -+++ b/ext/openssl/ossl_pkey_dsa.c -@@ -264,34 +264,6 @@ ossl_dsa_get_params(VALUE self) - return hash; - } - --/* -- * call-seq: -- * dsa.to_text -> aString -- * -- * Prints all parameters of key to buffer -- * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!! -- * Don't use :-)) (I's up to you) -- */ --static VALUE --ossl_dsa_to_text(VALUE self) --{ -- DSA *dsa; -- BIO *out; -- VALUE str; -- -- GetDSA(self, dsa); -- if (!(out = BIO_new(BIO_s_mem()))) { -- ossl_raise(eDSAError, NULL); -- } -- if (!DSA_print(out, dsa, 0)) { /* offset = 0 */ -- BIO_free(out); -- ossl_raise(eDSAError, NULL); -- } -- str = ossl_membio2str(out); -- -- return str; --} -- - /* - * call-seq: - * dsa.public_key -> aDSA -@@ -469,7 +441,6 @@ Init_ossl_dsa(void) - - rb_define_method(cDSA, "public?", ossl_dsa_is_public, 0); - rb_define_method(cDSA, "private?", ossl_dsa_is_private, 0); -- rb_define_method(cDSA, "to_text", ossl_dsa_to_text, 0); - rb_define_method(cDSA, "export", ossl_dsa_export, -1); - rb_define_alias(cDSA, "to_pem", "export"); - rb_define_alias(cDSA, "to_s", "export"); -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index c2534251c3..ecb8305184 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -417,32 +417,6 @@ ossl_ec_key_to_der(VALUE self) - else - return ossl_pkey_export_spki(self, 1); - } -- --/* -- * call-seq: -- * key.to_text => String -- * -- * See the OpenSSL documentation for EC_KEY_print() -- */ --static VALUE ossl_ec_key_to_text(VALUE self) --{ -- EC_KEY *ec; -- BIO *out; -- VALUE str; -- -- GetEC(self, ec); -- if (!(out = BIO_new(BIO_s_mem()))) { -- ossl_raise(eECError, "BIO_new(BIO_s_mem())"); -- } -- if (!EC_KEY_print(out, ec, 0)) { -- BIO_free(out); -- ossl_raise(eECError, "EC_KEY_print"); -- } -- str = ossl_membio2str(out); -- -- return str; --} -- - /* - * call-seq: - * key.generate_key! => self -@@ -1633,7 +1607,6 @@ void Init_ossl_ec(void) - rb_define_method(cEC, "export", ossl_ec_key_export, -1); - rb_define_alias(cEC, "to_pem", "export"); - rb_define_method(cEC, "to_der", ossl_ec_key_to_der, 0); -- rb_define_method(cEC, "to_text", ossl_ec_key_to_text, 0); - - - rb_define_alloc_func(cEC_GROUP, ossl_ec_group_alloc); -diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c -index 43f82cb29e..7a7e66dbda 100644 ---- a/ext/openssl/ossl_pkey_rsa.c -+++ b/ext/openssl/ossl_pkey_rsa.c -@@ -587,36 +587,6 @@ ossl_rsa_get_params(VALUE self) - return hash; - } - --/* -- * call-seq: -- * rsa.to_text => String -- * -- * THIS METHOD IS INSECURE, PRIVATE INFORMATION CAN LEAK OUT!!! -- * -- * Dumps all parameters of a keypair to a String -- * -- * Don't use :-)) (It's up to you) -- */ --static VALUE --ossl_rsa_to_text(VALUE self) --{ -- RSA *rsa; -- BIO *out; -- VALUE str; -- -- GetRSA(self, rsa); -- if (!(out = BIO_new(BIO_s_mem()))) { -- ossl_raise(eRSAError, NULL); -- } -- if (!RSA_print(out, rsa, 0)) { /* offset = 0 */ -- BIO_free(out); -- ossl_raise(eRSAError, NULL); -- } -- str = ossl_membio2str(out); -- -- return str; --} -- - /* - * call-seq: - * rsa.public_key -> RSA -@@ -738,7 +708,6 @@ Init_ossl_rsa(void) - - rb_define_method(cRSA, "public?", ossl_rsa_is_public, 0); - rb_define_method(cRSA, "private?", ossl_rsa_is_private, 0); -- rb_define_method(cRSA, "to_text", ossl_rsa_to_text, 0); - rb_define_method(cRSA, "export", ossl_rsa_export, -1); - rb_define_alias(cRSA, "to_pem", "export"); - rb_define_alias(cRSA, "to_s", "export"); -diff --git a/test/openssl/test_pkey.rb b/test/openssl/test_pkey.rb -index 5307fe5b08..3630458b3c 100644 ---- a/test/openssl/test_pkey.rb -+++ b/test/openssl/test_pkey.rb -@@ -151,4 +151,9 @@ def test_x25519 - assert_equal bob_pem, bob.public_to_pem - assert_equal [shared_secret].pack("H*"), alice.derive(bob) - end -+ -+ def test_to_text -+ rsa = Fixtures.pkey("rsa1024") -+ assert_include rsa.to_text, "publicExponent" -+ end - end --- -2.32.0 - - -From 0c45b22e485bfa62f4d704b08e3704e6444118c4 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Thu, 15 Apr 2021 19:11:32 +0900 -Subject: [PATCH 2/3] pkey: implement {DH,DSA,RSA}#public_key in Ruby - -The low-level API that is used to implement #public_key is deprecated -in OpenSSL 3.0. It is actually very simple to implement in another way, -using existing methods only, in much shorter code. Let's do it. - -While we are at it, the documentation is updated to recommend against -using #public_key. Now that OpenSSL::PKey::PKey implements public_to_der -method, there is no real use case for #public_key in newly written Ruby -programs. ---- - ext/openssl/lib/openssl/pkey.rb | 55 ++++++++++++++++++++++++++++ - ext/openssl/ossl_pkey_dh.c | 63 +++++++-------------------------- - ext/openssl/ossl_pkey_dsa.c | 42 ---------------------- - ext/openssl/ossl_pkey_rsa.c | 58 +----------------------------- - test/openssl/test_pkey_rsa.rb | 37 ++++++++++--------- - 5 files changed, 87 insertions(+), 168 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index 53ee52f98b..569559e1ce 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -10,6 +10,30 @@ module OpenSSL::PKey - class DH - include OpenSSL::Marshal - -+ # :call-seq: -+ # dh.public_key -> dhnew -+ # -+ # Returns a new DH instance that carries just the \DH parameters. -+ # -+ # Contrary to the method name, the returned DH object contains only -+ # parameters and not the public key. -+ # -+ # This method is provided for backwards compatibility. In most cases, there -+ # is no need to call this method. -+ # -+ # For the purpose of re-generating the key pair while keeping the -+ # parameters, check OpenSSL::PKey.generate_key. -+ # -+ # Example: -+ # # OpenSSL::PKey::DH.generate by default generates a random key pair -+ # dh1 = OpenSSL::PKey::DH.generate(2048) -+ # p dh1.priv_key #=> # -+ # dhcopy = dh1.public_key -+ # p dhcopy.priv_key #=> nil -+ def public_key -+ DH.new(to_der) -+ end -+ - # :call-seq: - # dh.compute_key(pub_bn) -> string - # -@@ -89,6 +113,22 @@ def new(*args, &blk) # :nodoc: - class DSA - include OpenSSL::Marshal - -+ # :call-seq: -+ # dsa.public_key -> dsanew -+ # -+ # Returns a new DSA instance that carries just the \DSA parameters and the -+ # public key. -+ # -+ # This method is provided for backwards compatibility. In most cases, there -+ # is no need to call this method. -+ # -+ # For the purpose of serializing the public key, to PEM or DER encoding of -+ # X.509 SubjectPublicKeyInfo format, check PKey#public_to_pem and -+ # PKey#public_to_der. -+ def public_key -+ OpenSSL::PKey.read(public_to_der) -+ end -+ - class << self - # :call-seq: - # DSA.generate(size) -> dsa -@@ -159,6 +199,21 @@ def to_bn(conversion_form = group.point_conversion_form) - class RSA - include OpenSSL::Marshal - -+ # :call-seq: -+ # rsa.public_key -> rsanew -+ # -+ # Returns a new RSA instance that carries just the public key components. -+ # -+ # This method is provided for backwards compatibility. In most cases, there -+ # is no need to call this method. -+ # -+ # For the purpose of serializing the public key, to PEM or DER encoding of -+ # X.509 SubjectPublicKeyInfo format, check PKey#public_to_pem and -+ # PKey#public_to_der. -+ def public_key -+ OpenSSL::PKey.read(public_to_der) -+ end -+ - class << self - # :call-seq: - # RSA.generate(size, exponent = 65537) -> RSA -diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c -index acd3bf474e..a512b209d3 100644 ---- a/ext/openssl/ossl_pkey_dh.c -+++ b/ext/openssl/ossl_pkey_dh.c -@@ -266,48 +266,6 @@ ossl_dh_get_params(VALUE self) - return hash; - } - --/* -- * call-seq: -- * dh.public_key -> aDH -- * -- * Returns a new DH instance that carries just the public information, i.e. -- * the prime _p_ and the generator _g_, but no public/private key yet. Such -- * a pair may be generated using DH#generate_key!. The "public key" needed -- * for a key exchange with DH#compute_key is considered as per-session -- * information and may be retrieved with DH#pub_key once a key pair has -- * been generated. -- * If the current instance already contains private information (and thus a -- * valid public/private key pair), this information will no longer be present -- * in the new instance generated by DH#public_key. This feature is helpful for -- * publishing the Diffie-Hellman parameters without leaking any of the private -- * per-session information. -- * -- * === Example -- * dh = OpenSSL::PKey::DH.new(2048) # has public and private key set -- * public_key = dh.public_key # contains only prime and generator -- * parameters = public_key.to_der # it's safe to publish this -- */ --static VALUE --ossl_dh_to_public_key(VALUE self) --{ -- EVP_PKEY *pkey; -- DH *orig_dh, *dh; -- VALUE obj; -- -- obj = rb_obj_alloc(rb_obj_class(self)); -- GetPKey(obj, pkey); -- -- GetDH(self, orig_dh); -- dh = DHparams_dup(orig_dh); -- if (!dh) -- ossl_raise(eDHError, "DHparams_dup"); -- if (!EVP_PKEY_assign_DH(pkey, dh)) { -- DH_free(dh); -- ossl_raise(eDHError, "EVP_PKEY_assign_DH"); -- } -- return obj; --} -- - /* - * call-seq: - * dh.params_ok? -> true | false -@@ -384,14 +342,20 @@ Init_ossl_dh(void) - * The per-session private key, an OpenSSL::BN. - * - * === Example of a key exchange -- * dh1 = OpenSSL::PKey::DH.new(2048) -- * der = dh1.public_key.to_der #you may send this publicly to the participating party -- * dh2 = OpenSSL::PKey::DH.new(der) -- * dh2.generate_key! #generate the per-session key pair -- * symm_key1 = dh1.compute_key(dh2.pub_key) -- * symm_key2 = dh2.compute_key(dh1.pub_key) -+ * # you may send the parameters (der) and own public key (pub1) publicly -+ * # to the participating party -+ * dh1 = OpenSSL::PKey::DH.new(2048) -+ * der = dh1.to_der -+ * pub1 = dh1.pub_key -+ * -+ * # the other party generates its per-session key pair -+ * dhparams = OpenSSL::PKey::DH.new(der) -+ * dh2 = OpenSSL::PKey.generate_key(dhparams) -+ * pub2 = dh2.pub_key - * -- * puts symm_key1 == symm_key2 # => true -+ * symm_key1 = dh1.compute_key(pub2) -+ * symm_key2 = dh2.compute_key(pub1) -+ * puts symm_key1 == symm_key2 # => true - */ - cDH = rb_define_class_under(mPKey, "DH", cPKey); - rb_define_method(cDH, "initialize", ossl_dh_initialize, -1); -@@ -402,7 +366,6 @@ Init_ossl_dh(void) - rb_define_alias(cDH, "to_pem", "export"); - rb_define_alias(cDH, "to_s", "export"); - rb_define_method(cDH, "to_der", ossl_dh_to_der, 0); -- rb_define_method(cDH, "public_key", ossl_dh_to_public_key, 0); - rb_define_method(cDH, "params_ok?", ossl_dh_check_params, 0); - - DEF_OSSL_PKEY_BN(cDH, dh, p); -diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c -index f017cceb4a..ab9ac781e8 100644 ---- a/ext/openssl/ossl_pkey_dsa.c -+++ b/ext/openssl/ossl_pkey_dsa.c -@@ -264,47 +264,6 @@ ossl_dsa_get_params(VALUE self) - return hash; - } - --/* -- * call-seq: -- * dsa.public_key -> aDSA -- * -- * Returns a new DSA instance that carries just the public key information. -- * If the current instance has also private key information, this will no -- * longer be present in the new instance. This feature is helpful for -- * publishing the public key information without leaking any of the private -- * information. -- * -- * === Example -- * dsa = OpenSSL::PKey::DSA.new(2048) # has public and private information -- * pub_key = dsa.public_key # has only the public part available -- * pub_key_der = pub_key.to_der # it's safe to publish this -- * -- * -- */ --static VALUE --ossl_dsa_to_public_key(VALUE self) --{ -- EVP_PKEY *pkey, *pkey_new; -- DSA *dsa; -- VALUE obj; -- -- GetPKeyDSA(self, pkey); -- obj = rb_obj_alloc(rb_obj_class(self)); -- GetPKey(obj, pkey_new); -- --#define DSAPublicKey_dup(dsa) (DSA *)ASN1_dup( \ -- (i2d_of_void *)i2d_DSAPublicKey, (d2i_of_void *)d2i_DSAPublicKey, (char *)(dsa)) -- dsa = DSAPublicKey_dup(EVP_PKEY_get0_DSA(pkey)); --#undef DSAPublicKey_dup -- if (!dsa) -- ossl_raise(eDSAError, "DSAPublicKey_dup"); -- if (!EVP_PKEY_assign_DSA(pkey_new, dsa)) { -- DSA_free(dsa); -- ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); -- } -- return obj; --} -- - /* - * call-seq: - * dsa.syssign(string) -> aString -@@ -445,7 +404,6 @@ Init_ossl_dsa(void) - rb_define_alias(cDSA, "to_pem", "export"); - rb_define_alias(cDSA, "to_s", "export"); - rb_define_method(cDSA, "to_der", ossl_dsa_to_der, 0); -- rb_define_method(cDSA, "public_key", ossl_dsa_to_public_key, 0); - rb_define_method(cDSA, "syssign", ossl_dsa_sign, 1); - rb_define_method(cDSA, "sysverify", ossl_dsa_verify, 2); - -diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c -index 7a7e66dbda..1c5476cdcd 100644 ---- a/ext/openssl/ossl_pkey_rsa.c -+++ b/ext/openssl/ossl_pkey_rsa.c -@@ -390,7 +390,7 @@ ossl_rsa_private_decrypt(int argc, VALUE *argv, VALUE self) - * data = "Sign me!" - * pkey = OpenSSL::PKey::RSA.new(2048) - * signature = pkey.sign_pss("SHA256", data, salt_length: :max, mgf1_hash: "SHA256") -- * pub_key = pkey.public_key -+ * pub_key = OpenSSL::PKey.read(pkey.public_to_der) - * puts pub_key.verify_pss("SHA256", signature, data, - * salt_length: :auto, mgf1_hash: "SHA256") # => true - */ -@@ -587,61 +587,6 @@ ossl_rsa_get_params(VALUE self) - return hash; - } - --/* -- * call-seq: -- * rsa.public_key -> RSA -- * -- * Makes new RSA instance containing the public key from the private key. -- */ --static VALUE --ossl_rsa_to_public_key(VALUE self) --{ -- EVP_PKEY *pkey, *pkey_new; -- RSA *rsa; -- VALUE obj; -- -- GetPKeyRSA(self, pkey); -- obj = rb_obj_alloc(rb_obj_class(self)); -- GetPKey(obj, pkey_new); -- -- rsa = RSAPublicKey_dup(EVP_PKEY_get0_RSA(pkey)); -- if (!rsa) -- ossl_raise(eRSAError, "RSAPublicKey_dup"); -- if (!EVP_PKEY_assign_RSA(pkey_new, rsa)) { -- RSA_free(rsa); -- ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); -- } -- return obj; --} -- --/* -- * TODO: Test me -- --static VALUE --ossl_rsa_blinding_on(VALUE self) --{ -- RSA *rsa; -- -- GetRSA(self, rsa); -- -- if (RSA_blinding_on(rsa, ossl_bn_ctx) != 1) { -- ossl_raise(eRSAError, NULL); -- } -- return self; --} -- --static VALUE --ossl_rsa_blinding_off(VALUE self) --{ -- RSA *rsa; -- -- GetRSA(self, rsa); -- RSA_blinding_off(rsa); -- -- return self; --} -- */ -- - /* - * Document-method: OpenSSL::PKey::RSA#set_key - * call-seq: -@@ -712,7 +657,6 @@ Init_ossl_rsa(void) - rb_define_alias(cRSA, "to_pem", "export"); - rb_define_alias(cRSA, "to_s", "export"); - rb_define_method(cRSA, "to_der", ossl_rsa_to_der, 0); -- rb_define_method(cRSA, "public_key", ossl_rsa_to_public_key, 0); - rb_define_method(cRSA, "public_encrypt", ossl_rsa_public_encrypt, -1); - rb_define_method(cRSA, "public_decrypt", ossl_rsa_public_decrypt, -1); - rb_define_method(cRSA, "private_encrypt", ossl_rsa_private_encrypt, -1); -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index d1e68dbc9f..5f8d04e754 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -69,29 +69,28 @@ def test_private - end - - def test_new -- key = OpenSSL::PKey::RSA.new 512 -- pem = key.public_key.to_pem -- OpenSSL::PKey::RSA.new pem -- assert_equal([], OpenSSL.errors) -- end -+ key = OpenSSL::PKey::RSA.new(512) -+ assert_equal 512, key.n.num_bits -+ assert_equal 65537, key.e -+ assert_not_nil key.d - -- def test_new_exponent_default -- assert_equal(65537, OpenSSL::PKey::RSA.new(512).e) -+ # Specify public exponent -+ key2 = OpenSSL::PKey::RSA.new(512, 3) -+ assert_equal 512, key2.n.num_bits -+ assert_equal 3, key2.e -+ assert_not_nil key2.d - end - -- def test_new_with_exponent -- 1.upto(30) do |idx| -- e = (2 ** idx) + 1 -- key = OpenSSL::PKey::RSA.new(512, e) -- assert_equal(e, key.e) -- end -- end -+ def test_s_generate -+ key1 = OpenSSL::PKey::RSA.generate(512) -+ assert_equal 512, key1.n.num_bits -+ assert_equal 65537, key1.e - -- def test_generate -- key = OpenSSL::PKey::RSA.generate(512, 17) -- assert_equal 512, key.n.num_bits -- assert_equal 17, key.e -- assert_not_nil key.d -+ # Specify public exponent -+ key2 = OpenSSL::PKey::RSA.generate(512, 3) -+ assert_equal 512, key2.n.num_bits -+ assert_equal 3, key2.e -+ assert_not_nil key2.d - end - - def test_new_break --- -2.32.0 - - -From 2150af0e55b2a25c24f62006e27e0aec3dc81b57 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 10 Jul 2020 14:34:51 +0900 -Subject: [PATCH 3/3] pkey/dh, pkey/ec: use EVP_PKEY_check() family - -Use EVP_PKEY_param_check() instead of DH_check() if available. Also, -use EVP_PKEY_public_check() instead of EC_KEY_check_key(). - -EVP_PKEY_*check() is part of the EVP API and is meant to replace those -low-level functions. They were added by OpenSSL 1.1.1. It is currently -not provided by LibreSSL. ---- - ext/openssl/extconf.rb | 3 +++ - ext/openssl/ossl_pkey_dh.c | 27 +++++++++++++++++++++++---- - ext/openssl/ossl_pkey_ec.c | 23 +++++++++++++++++++---- - test/openssl/test_pkey_dh.rb | 16 ++++++++++++++++ - 4 files changed, 61 insertions(+), 8 deletions(-) - -diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb -index b3c6647faf..17d93443fc 100644 ---- a/ext/openssl/extconf.rb -+++ b/ext/openssl/extconf.rb -@@ -172,6 +172,9 @@ def find_openssl_library - have_func("EVP_PBE_scrypt") - have_func("SSL_CTX_set_post_handshake_auth") - -+# added in 1.1.1 -+have_func("EVP_PKEY_check") -+ - Logging::message "=== Checking done. ===\n" - - create_header -diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c -index a512b209d3..ca782bbe59 100644 ---- a/ext/openssl/ossl_pkey_dh.c -+++ b/ext/openssl/ossl_pkey_dh.c -@@ -273,19 +273,38 @@ ossl_dh_get_params(VALUE self) - * Validates the Diffie-Hellman parameters associated with this instance. - * It checks whether a safe prime and a suitable generator are used. If this - * is not the case, +false+ is returned. -+ * -+ * See also the man page EVP_PKEY_param_check(3). - */ - static VALUE - ossl_dh_check_params(VALUE self) - { -+ int ret; -+#ifdef HAVE_EVP_PKEY_CHECK -+ EVP_PKEY *pkey; -+ EVP_PKEY_CTX *pctx; -+ -+ GetPKey(self, pkey); -+ pctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); -+ if (!pctx) -+ ossl_raise(eDHError, "EVP_PKEY_CTX_new"); -+ ret = EVP_PKEY_param_check(pctx); -+ EVP_PKEY_CTX_free(pctx); -+#else - DH *dh; - int codes; - - GetDH(self, dh); -- if (!DH_check(dh, &codes)) { -- return Qfalse; -- } -+ ret = DH_check(dh, &codes) == 1 && codes == 0; -+#endif - -- return codes == 0 ? Qtrue : Qfalse; -+ if (ret == 1) -+ return Qtrue; -+ else { -+ /* DH_check_ex() will put error entry on failure */ -+ ossl_clear_error(); -+ return Qfalse; -+ } - } - - /* -diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c -index ecb8305184..829529d4b9 100644 ---- a/ext/openssl/ossl_pkey_ec.c -+++ b/ext/openssl/ossl_pkey_ec.c -@@ -443,20 +443,35 @@ static VALUE ossl_ec_key_generate_key(VALUE self) - } - - /* -- * call-seq: -- * key.check_key => true -+ * call-seq: -+ * key.check_key => true - * -- * Raises an exception if the key is invalid. -+ * Raises an exception if the key is invalid. - * -- * See the OpenSSL documentation for EC_KEY_check_key() -+ * See also the man page EVP_PKEY_public_check(3). - */ - static VALUE ossl_ec_key_check_key(VALUE self) - { -+#ifdef HAVE_EVP_PKEY_CHECK -+ EVP_PKEY *pkey; -+ EVP_PKEY_CTX *pctx; -+ int ret; -+ -+ GetPKey(self, pkey); -+ pctx = EVP_PKEY_CTX_new(pkey, /* engine */NULL); -+ if (!pctx) -+ ossl_raise(eDHError, "EVP_PKEY_CTX_new"); -+ ret = EVP_PKEY_public_check(pctx); -+ EVP_PKEY_CTX_free(pctx); -+ if (ret != 1) -+ ossl_raise(eECError, "EVP_PKEY_public_check"); -+#else - EC_KEY *ec; - - GetEC(self, ec); - if (EC_KEY_check_key(ec) != 1) - ossl_raise(eECError, "EC_KEY_check_key"); -+#endif - - return Qtrue; - } -diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb -index 279ce1984c..f80af8f841 100644 ---- a/test/openssl/test_pkey_dh.rb -+++ b/test/openssl/test_pkey_dh.rb -@@ -86,6 +86,22 @@ def test_key_exchange - assert_equal(dh.compute_key(dh2.pub_key), dh2.compute_key(dh.pub_key)) - end - -+ def test_params_ok? -+ dh0 = Fixtures.pkey("dh1024") -+ -+ dh1 = OpenSSL::PKey::DH.new(OpenSSL::ASN1::Sequence([ -+ OpenSSL::ASN1::Integer(dh0.p), -+ OpenSSL::ASN1::Integer(dh0.g) -+ ])) -+ assert_equal(true, dh1.params_ok?) -+ -+ dh2 = OpenSSL::PKey::DH.new(OpenSSL::ASN1::Sequence([ -+ OpenSSL::ASN1::Integer(dh0.p + 1), -+ OpenSSL::ASN1::Integer(dh0.g) -+ ])) -+ assert_equal(false, dh2.params_ok?) -+ end -+ - def test_dup - dh = Fixtures.pkey("dh1024") - dh2 = dh.dup --- -2.32.0 - diff --git a/ruby-3.1.0-Use-OSSL_DECODER-to-load-encrypted-PEM-on-OpenSSL-3.0.patch b/ruby-3.1.0-Use-OSSL_DECODER-to-load-encrypted-PEM-on-OpenSSL-3.0.patch deleted file mode 100644 index dfdd690..0000000 --- a/ruby-3.1.0-Use-OSSL_DECODER-to-load-encrypted-PEM-on-OpenSSL-3.0.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 8c185e0ae5e42bf5f3d76a1a0898946671116fa3 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Wed, 3 Nov 2021 23:31:29 +0900 -Subject: [PATCH 1/2] pkey: test parsing concatenated PEM string - -PEM-encoded private keys are sometimes stored together with irrelevant -PEM blocks, such as the corresponding X.509 certificate. - -PEM_read_bio_*() family automatically skips unknown PEM blocks, but on -OpenSSL 3.0 we will be using the new OSSL_DECODER API instead due to -some breaking changes around the password callback. - -Let's add a test case so that we won't break the current behavior. ---- - test/openssl/test_pkey_rsa.rb | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index dbe87ba4..7510658d 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -306,6 +306,12 @@ def test_RSAPrivateKey - - assert_equal asn1.to_der, rsa1024.to_der - assert_equal pem, rsa1024.export -+ -+ # Unknown PEM prepended -+ cert = issue_cert(OpenSSL::X509::Name.new([["CN", "nobody"]]), rsa1024, 1, [], nil, nil) -+ str = cert.to_text + cert.to_pem + rsa1024.to_pem -+ key = OpenSSL::PKey::RSA.new(str) -+ assert_same_rsa rsa1024, key - end - - def test_RSAPrivateKey_encrypted - -From a84ea531bbd080c3f58fe8d3dc9ffb1af2251f35 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sat, 20 Mar 2021 23:16:16 +0900 -Subject: [PATCH 2/2] pkey: use OSSL_DECODER to load encrypted PEM on OpenSSL - 3.0 - -OpenSSL 3.0 has rewritten routines to load pkeys (PEM_read_bio_* and -d2i_* functions) around the newly introduced OSSL_DECODER API. - -This comes with a slight behavior change. They now decrypt and parse -each encountered PEM block, then check the kind of the block. This used -to be the reverse: they checked the PEM header to see the kind, and then -decrypted the content. This means that the password callback may now be -called repeatedly. - -Let's use the OSSL_DECODER API directly on OpenSSL 3.0 so that the -return value from the password callback will be reused automatically. ---- - ext/openssl/ossl_pkey.c | 40 ++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 40 insertions(+) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index f9f5162e..b08168a5 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -78,6 +78,45 @@ ossl_pkey_new(EVP_PKEY *pkey) - return obj; - } - -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+# include -+ -+EVP_PKEY * -+ossl_pkey_read_generic(BIO *bio, VALUE pass) -+{ -+ void *ppass = (void *)pass; -+ OSSL_DECODER_CTX *dctx; -+ EVP_PKEY *pkey = NULL; -+ int pos = 0, pos2; -+ -+ dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, NULL, 0, NULL, NULL); -+ if (!dctx) -+ goto out; -+ if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb, ppass) != 1) -+ goto out; -+ -+ /* First check DER */ -+ if (OSSL_DECODER_from_bio(dctx, bio) == 1) -+ goto out; -+ -+ /* Then check PEM; multiple OSSL_DECODER_from_bio() calls may be needed */ -+ OSSL_BIO_reset(bio); -+ if (OSSL_DECODER_CTX_set_input_type(dctx, "PEM") != 1) -+ goto out; -+ while (OSSL_DECODER_from_bio(dctx, bio) != 1) { -+ if (BIO_eof(bio)) -+ goto out; -+ pos2 = BIO_tell(bio); -+ if (pos2 < 0 || pos2 <= pos) -+ goto out; -+ pos = pos2; -+ } -+ -+ out: -+ OSSL_DECODER_CTX_free(dctx); -+ return pkey; -+} -+#else - EVP_PKEY * - ossl_pkey_read_generic(BIO *bio, VALUE pass) - { -@@ -106,6 +145,7 @@ ossl_pkey_read_generic(BIO *bio, VALUE pass) - out: - return pkey; - } -+#endif - - /* - * call-seq: diff --git a/ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch b/ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch deleted file mode 100644 index d02ce45..0000000 --- a/ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch +++ /dev/null @@ -1,1113 +0,0 @@ -From e8504c6248c4b0e5e961f57f004e1133c20c88a5 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 5 Apr 2021 00:30:01 +0900 -Subject: [PATCH 1/5] pkey: fix interrupt handling in - OpenSSL::PKey.generate_key - -rb_thread_call_without_gvl() can be interrupted, but it may be able to -resume the operation. Call rb_thread_check_ints() to see if it raises -an exception or not. ---- - ext/openssl/ossl_pkey.c | 18 +++++++++++++----- - 1 file changed, 13 insertions(+), 5 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 22e9f19982..d76f0600d1 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -239,7 +239,7 @@ struct pkey_blocking_generate_arg { - int state; - int yield: 1; - int genparam: 1; -- int stop: 1; -+ int interrupted: 1; - }; - - static VALUE -@@ -261,23 +261,31 @@ static int - pkey_gen_cb(EVP_PKEY_CTX *ctx) - { - struct pkey_blocking_generate_arg *arg = EVP_PKEY_CTX_get_app_data(ctx); -+ int state; - - if (arg->yield) { -- int state; - rb_protect(pkey_gen_cb_yield, (VALUE)ctx, &state); - if (state) { -- arg->stop = 1; - arg->state = state; -+ return 0; -+ } -+ } -+ if (arg->interrupted) { -+ arg->interrupted = 0; -+ state = (int)(VALUE)rb_thread_call_with_gvl(call_check_ints, NULL); -+ if (state) { -+ arg->state = state; -+ return 0; - } - } -- return !arg->stop; -+ return 1; - } - - static void - pkey_blocking_gen_stop(void *ptr) - { - struct pkey_blocking_generate_arg *arg = ptr; -- arg->stop = 1; -+ arg->interrupted = 1; - } - - static void * --- -2.32.0 - - -From f433d1b680e7ac5ef13fc15b0844267222438cf3 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sun, 17 May 2020 20:48:23 +0900 -Subject: [PATCH 2/5] pkey/dh: use high level EVP interface to generate - parameters and keys - -Implement PKey::DH.new(size, gen), PKey::DH.generate(size, gen), and -PKey::DH#generate_key! using PKey.generate_parameters and .generate_key -instead of the low level DH functions. - -Note that the EVP interface can enforce additional restrictions - for -example, DH key shorter than 2048 bits is no longer accepted by default -in OpenSSL 3.0. The test code is updated accordingly. ---- - ext/openssl/lib/openssl/pkey.rb | 57 ++++++++++ - ext/openssl/ossl_pkey_dh.c | 186 ++++++-------------------------- - test/openssl/test_pkey_dh.rb | 15 ++- - 3 files changed, 101 insertions(+), 157 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index be60ac2beb..5a3d0ed1ef 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -27,6 +27,63 @@ def compute_key(pub_bn) - peer.set_key(pub_bn, nil) - derive(peer) - end -+ -+ # :call-seq: -+ # dh.generate_key! -> self -+ # -+ # Generates a private and public key unless a private key already exists. -+ # If this DH instance was generated from public \DH parameters (e.g. by -+ # encoding the result of DH#public_key), then this method needs to be -+ # called first in order to generate the per-session keys before performing -+ # the actual key exchange. -+ # -+ # See also OpenSSL::PKey.generate_key. -+ # -+ # Example: -+ # dh = OpenSSL::PKey::DH.new(2048) -+ # public_key = dh.public_key #contains no private/public key yet -+ # public_key.generate_key! -+ # puts public_key.private? # => true -+ def generate_key! -+ unless priv_key -+ tmp = OpenSSL::PKey.generate_key(self) -+ set_key(tmp.pub_key, tmp.priv_key) -+ end -+ self -+ end -+ -+ class << self -+ # :call-seq: -+ # DH.generate(size, generator = 2) -> dh -+ # -+ # Creates a new DH instance from scratch by generating random parameters -+ # and a key pair. -+ # -+ # See also OpenSSL::PKey.generate_parameters and -+ # OpenSSL::PKey.generate_key. -+ # -+ # +size+:: -+ # The desired key size in bits. -+ # +generator+:: -+ # The generator. -+ def generate(size, generator = 2, &blk) -+ dhparams = OpenSSL::PKey.generate_parameters("DH", { -+ "dh_paramgen_prime_len" => size, -+ "dh_paramgen_generator" => generator, -+ }, &blk) -+ OpenSSL::PKey.generate_key(dhparams) -+ end -+ -+ # Handle DH.new(size, generator) form here; new(str) and new() forms -+ # are handled by #initialize -+ def new(*args, &blk) # :nodoc: -+ if args[0].is_a?(Integer) -+ generate(*args, &blk) -+ else -+ super -+ end -+ end -+ end - end - - class DSA -diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c -index 5bc1c49ca1..6b477b077c 100644 ---- a/ext/openssl/ossl_pkey_dh.c -+++ b/ext/openssl/ossl_pkey_dh.c -@@ -32,147 +32,56 @@ VALUE eDHError; - /* - * Private - */ --struct dh_blocking_gen_arg { -- DH *dh; -- int size; -- int gen; -- BN_GENCB *cb; -- int result; --}; -- --static void * --dh_blocking_gen(void *arg) --{ -- struct dh_blocking_gen_arg *gen = (struct dh_blocking_gen_arg *)arg; -- gen->result = DH_generate_parameters_ex(gen->dh, gen->size, gen->gen, gen->cb); -- return 0; --} -- --static DH * --dh_generate(int size, int gen) --{ -- struct ossl_generate_cb_arg cb_arg = { 0 }; -- struct dh_blocking_gen_arg gen_arg; -- DH *dh = DH_new(); -- BN_GENCB *cb = BN_GENCB_new(); -- -- if (!dh || !cb) { -- DH_free(dh); -- BN_GENCB_free(cb); -- ossl_raise(eDHError, "malloc failure"); -- } -- -- if (rb_block_given_p()) -- cb_arg.yield = 1; -- BN_GENCB_set(cb, ossl_generate_cb_2, &cb_arg); -- gen_arg.dh = dh; -- gen_arg.size = size; -- gen_arg.gen = gen; -- gen_arg.cb = cb; -- if (cb_arg.yield == 1) { -- /* we cannot release GVL when callback proc is supplied */ -- dh_blocking_gen(&gen_arg); -- } else { -- /* there's a chance to unblock */ -- rb_thread_call_without_gvl(dh_blocking_gen, &gen_arg, ossl_generate_cb_stop, &cb_arg); -- } -- -- BN_GENCB_free(cb); -- if (!gen_arg.result) { -- DH_free(dh); -- if (cb_arg.state) { -- /* Clear OpenSSL error queue before re-raising. */ -- ossl_clear_error(); -- rb_jump_tag(cb_arg.state); -- } -- ossl_raise(eDHError, "DH_generate_parameters_ex"); -- } -- -- if (!DH_generate_key(dh)) { -- DH_free(dh); -- ossl_raise(eDHError, "DH_generate_key"); -- } -- -- return dh; --} -- --/* -- * call-seq: -- * DH.generate(size [, generator]) -> dh -- * -- * Creates a new DH instance from scratch by generating the private and public -- * components alike. -- * -- * === Parameters -- * * _size_ is an integer representing the desired key size. Keys smaller than 1024 bits should be considered insecure. -- * * _generator_ is a small number > 1, typically 2 or 5. -- * -- */ --static VALUE --ossl_dh_s_generate(int argc, VALUE *argv, VALUE klass) --{ -- EVP_PKEY *pkey; -- DH *dh ; -- int g = 2; -- VALUE size, gen, obj; -- -- if (rb_scan_args(argc, argv, "11", &size, &gen) == 2) { -- g = NUM2INT(gen); -- } -- obj = rb_obj_alloc(klass); -- GetPKey(obj, pkey); -- -- dh = dh_generate(NUM2INT(size), g); -- if (!EVP_PKEY_assign_DH(pkey, dh)) { -- DH_free(dh); -- ossl_raise(eDHError, "EVP_PKEY_assign_DH"); -- } -- return obj; --} -- - /* - * call-seq: - * DH.new -> dh - * DH.new(string) -> dh - * DH.new(size [, generator]) -> dh - * -- * Either generates a DH instance from scratch or by reading already existing -- * DH parameters from _string_. Note that when reading a DH instance from -- * data that was encoded from a DH instance by using DH#to_pem or DH#to_der -- * the result will *not* contain a public/private key pair yet. This needs to -- * be generated using DH#generate_key! first. -+ * Creates a new instance of OpenSSL::PKey::DH. -+ * -+ * If called without arguments, an empty instance without any parameter or key -+ * components is created. Use #set_pqg to manually set the parameters afterwards -+ * (and optionally #set_key to set private and public key components). -+ * -+ * If a String is given, tries to parse it as a DER- or PEM- encoded parameters. -+ * See also OpenSSL::PKey.read which can parse keys of any kinds. -+ * -+ * The DH.new(size [, generator]) form is an alias of DH.generate. - * -- * === Parameters -- * * _size_ is an integer representing the desired key size. Keys smaller than 1024 bits should be considered insecure. -- * * _generator_ is a small number > 1, typically 2 or 5. -- * * _string_ contains the DER or PEM encoded key. -+ * +string+:: -+ * A String that contains the DER or PEM encoded key. -+ * +size+:: -+ * See DH.generate. -+ * +generator+:: -+ * See DH.generate. - * -- * === Examples -- * DH.new # -> dh -- * DH.new(1024) # -> dh -- * DH.new(1024, 5) # -> dh -- * #Reading DH parameters -- * dh = DH.new(File.read('parameters.pem')) # -> dh, but no public/private key yet -- * dh.generate_key! # -> dh with public and private key -+ * Examples: -+ * # Creating an instance from scratch -+ * dh = DH.new -+ * dh.set_pqg(bn_p, nil, bn_g) -+ * -+ * # Generating a parameters and a key pair -+ * dh = DH.new(2048) # An alias of DH.generate(2048) -+ * -+ * # Reading DH parameters -+ * dh = DH.new(File.read('parameters.pem')) # -> dh, but no public/private key yet -+ * dh.generate_key! # -> dh with public and private key - */ - static VALUE - ossl_dh_initialize(int argc, VALUE *argv, VALUE self) - { - EVP_PKEY *pkey; - DH *dh; -- int g = 2; - BIO *in; -- VALUE arg, gen; -+ VALUE arg; - - GetPKey(self, pkey); -- if(rb_scan_args(argc, argv, "02", &arg, &gen) == 0) { -- dh = DH_new(); -- } -- else if (RB_INTEGER_TYPE_P(arg)) { -- if (!NIL_P(gen)) { -- g = NUM2INT(gen); -- } -- dh = dh_generate(NUM2INT(arg), g); -+ /* The DH.new(size, generator) form is handled by lib/openssl/pkey.rb */ -+ if (rb_scan_args(argc, argv, "01", &arg) == 0) { -+ dh = DH_new(); -+ if (!dh) -+ ossl_raise(eDHError, "DH_new"); - } - else { - arg = ossl_to_der_if_possible(arg); -@@ -449,33 +358,6 @@ ossl_dh_check_params(VALUE self) - return codes == 0 ? Qtrue : Qfalse; - } - --/* -- * call-seq: -- * dh.generate_key! -> self -- * -- * Generates a private and public key unless a private key already exists. -- * If this DH instance was generated from public DH parameters (e.g. by -- * encoding the result of DH#public_key), then this method needs to be -- * called first in order to generate the per-session keys before performing -- * the actual key exchange. -- * -- * === Example -- * dh = OpenSSL::PKey::DH.new(2048) -- * public_key = dh.public_key #contains no private/public key yet -- * public_key.generate_key! -- * puts public_key.private? # => true -- */ --static VALUE --ossl_dh_generate_key(VALUE self) --{ -- DH *dh; -- -- GetDH(self, dh); -- if (!DH_generate_key(dh)) -- ossl_raise(eDHError, "Failed to generate key"); -- return self; --} -- - /* - * Document-method: OpenSSL::PKey::DH#set_pqg - * call-seq: -@@ -540,7 +422,6 @@ Init_ossl_dh(void) - * puts symm_key1 == symm_key2 # => true - */ - cDH = rb_define_class_under(mPKey, "DH", cPKey); -- rb_define_singleton_method(cDH, "generate", ossl_dh_s_generate, -1); - rb_define_method(cDH, "initialize", ossl_dh_initialize, -1); - rb_define_method(cDH, "initialize_copy", ossl_dh_initialize_copy, 1); - rb_define_method(cDH, "public?", ossl_dh_is_public, 0); -@@ -552,7 +433,6 @@ Init_ossl_dh(void) - rb_define_method(cDH, "to_der", ossl_dh_to_der, 0); - rb_define_method(cDH, "public_key", ossl_dh_to_public_key, 0); - rb_define_method(cDH, "params_ok?", ossl_dh_check_params, 0); -- rb_define_method(cDH, "generate_key!", ossl_dh_generate_key, 0); - - DEF_OSSL_PKEY_BN(cDH, dh, p); - DEF_OSSL_PKEY_BN(cDH, dh, q); -diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb -index 9efc3ba68d..279ce1984c 100644 ---- a/test/openssl/test_pkey_dh.rb -+++ b/test/openssl/test_pkey_dh.rb -@@ -4,12 +4,19 @@ - if defined?(OpenSSL) && defined?(OpenSSL::PKey::DH) - - class OpenSSL::TestPKeyDH < OpenSSL::PKeyTestCase -- NEW_KEYLEN = 256 -+ NEW_KEYLEN = 2048 - -- def test_new -+ def test_new_empty -+ dh = OpenSSL::PKey::DH.new -+ assert_equal nil, dh.p -+ assert_equal nil, dh.priv_key -+ end -+ -+ def test_new_generate -+ # This test is slow - dh = OpenSSL::PKey::DH.new(NEW_KEYLEN) - assert_key(dh) -- end -+ end if ENV["OSSL_TEST_ALL"] - - def test_new_break - assert_nil(OpenSSL::PKey::DH.new(NEW_KEYLEN) { break }) -@@ -80,7 +87,7 @@ def test_key_exchange - end - - def test_dup -- dh = OpenSSL::PKey::DH.new(NEW_KEYLEN) -+ dh = Fixtures.pkey("dh1024") - dh2 = dh.dup - assert_equal dh.to_der, dh2.to_der # params - assert_equal_params dh, dh2 # keys --- -2.32.0 - - -From ba1d1d68ac2b489691eb3fe2052e77b3e57a372b Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sun, 17 May 2020 20:48:23 +0900 -Subject: [PATCH 3/5] pkey/rsa: use high level EVP interface to generate - parameters and keys - -Implement PKey::RSA.new(size, exponent) and PKey::RSA.generate using -OpenSSL::PKey.generate_key instead of the low level RSA functions. ---- - ext/openssl/lib/openssl/pkey.rb | 30 ++++++++ - ext/openssl/ossl_pkey_rsa.c | 132 ++++---------------------------- - 2 files changed, 46 insertions(+), 116 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index 5a3d0ed1ef..3bef06e3b3 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -128,5 +128,35 @@ def to_bn(conversion_form = group.point_conversion_form) - - class RSA - include OpenSSL::Marshal -+ -+ class << self -+ # :call-seq: -+ # RSA.generate(size, exponent = 65537) -> RSA -+ # -+ # Generates an \RSA keypair. -+ # -+ # See also OpenSSL::PKey.generate_key. -+ # -+ # +size+:: -+ # The desired key size in bits. -+ # +exponent+:: -+ # An odd Integer, normally 3, 17, or 65537. -+ def generate(size, exp = 0x10001, &blk) -+ OpenSSL::PKey.generate_key("RSA", { -+ "rsa_keygen_bits" => size, -+ "rsa_keygen_pubexp" => exp, -+ }, &blk) -+ end -+ -+ # Handle RSA.new(size, exponent) form here; new(str) and new() forms -+ # are handled by #initialize -+ def new(*args, &blk) # :nodoc: -+ if args[0].is_a?(Integer) -+ generate(*args, &blk) -+ else -+ super -+ end -+ end -+ end - end - end -diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c -index 3c298a2aea..43f82cb29e 100644 ---- a/ext/openssl/ossl_pkey_rsa.c -+++ b/ext/openssl/ossl_pkey_rsa.c -@@ -47,125 +47,28 @@ VALUE eRSAError; - /* - * Private - */ --struct rsa_blocking_gen_arg { -- RSA *rsa; -- BIGNUM *e; -- int size; -- BN_GENCB *cb; -- int result; --}; -- --static void * --rsa_blocking_gen(void *arg) --{ -- struct rsa_blocking_gen_arg *gen = (struct rsa_blocking_gen_arg *)arg; -- gen->result = RSA_generate_key_ex(gen->rsa, gen->size, gen->e, gen->cb); -- return 0; --} -- --static RSA * --rsa_generate(int size, unsigned long exp) --{ -- int i; -- struct ossl_generate_cb_arg cb_arg = { 0 }; -- struct rsa_blocking_gen_arg gen_arg; -- RSA *rsa = RSA_new(); -- BIGNUM *e = BN_new(); -- BN_GENCB *cb = BN_GENCB_new(); -- -- if (!rsa || !e || !cb) { -- RSA_free(rsa); -- BN_free(e); -- BN_GENCB_free(cb); -- ossl_raise(eRSAError, "malloc failure"); -- } -- for (i = 0; i < (int)sizeof(exp) * 8; ++i) { -- if (exp & (1UL << i)) { -- if (BN_set_bit(e, i) == 0) { -- BN_free(e); -- RSA_free(rsa); -- BN_GENCB_free(cb); -- ossl_raise(eRSAError, "BN_set_bit"); -- } -- } -- } -- -- if (rb_block_given_p()) -- cb_arg.yield = 1; -- BN_GENCB_set(cb, ossl_generate_cb_2, &cb_arg); -- gen_arg.rsa = rsa; -- gen_arg.e = e; -- gen_arg.size = size; -- gen_arg.cb = cb; -- if (cb_arg.yield == 1) { -- /* we cannot release GVL when callback proc is supplied */ -- rsa_blocking_gen(&gen_arg); -- } else { -- /* there's a chance to unblock */ -- rb_thread_call_without_gvl(rsa_blocking_gen, &gen_arg, ossl_generate_cb_stop, &cb_arg); -- } -- -- BN_GENCB_free(cb); -- BN_free(e); -- if (!gen_arg.result) { -- RSA_free(rsa); -- if (cb_arg.state) { -- /* must clear OpenSSL error stack */ -- ossl_clear_error(); -- rb_jump_tag(cb_arg.state); -- } -- ossl_raise(eRSAError, "RSA_generate_key_ex"); -- } -- -- return rsa; --} -- - /* - * call-seq: -- * RSA.generate(size) => RSA instance -- * RSA.generate(size, exponent) => RSA instance -+ * RSA.new -> rsa -+ * RSA.new(encoded_key [, passphrase]) -> rsa -+ * RSA.new(encoded_key) { passphrase } -> rsa -+ * RSA.new(size [, exponent]) -> rsa - * -- * Generates an RSA keypair. _size_ is an integer representing the desired key -- * size. Keys smaller than 1024 should be considered insecure. _exponent_ is -- * an odd number normally 3, 17, or 65537. -- */ --static VALUE --ossl_rsa_s_generate(int argc, VALUE *argv, VALUE klass) --{ --/* why does this method exist? why can't initialize take an optional exponent? */ -- EVP_PKEY *pkey; -- RSA *rsa; -- VALUE size, exp; -- VALUE obj; -- -- rb_scan_args(argc, argv, "11", &size, &exp); -- obj = rb_obj_alloc(klass); -- GetPKey(obj, pkey); -- -- rsa = rsa_generate(NUM2INT(size), NIL_P(exp) ? RSA_F4 : NUM2ULONG(exp)); -- if (!EVP_PKEY_assign_RSA(pkey, rsa)) { -- RSA_free(rsa); -- ossl_raise(eRSAError, "EVP_PKEY_assign_RSA"); -- } -- return obj; --} -- --/* -- * call-seq: -- * RSA.new(size [, exponent]) => RSA instance -- * RSA.new(encoded_key) => RSA instance -- * RSA.new(encoded_key, pass_phrase) => RSA instance -+ * Generates or loads an \RSA keypair. - * -- * Generates or loads an RSA keypair. If an integer _key_size_ is given it -- * represents the desired key size. Keys less than 1024 bits should be -- * considered insecure. -+ * If called without arguments, creates a new instance with no key components -+ * set. They can be set individually by #set_key, #set_factors, and -+ * #set_crt_params. - * -- * A key can instead be loaded from an _encoded_key_ which must be PEM or DER -- * encoded. A _pass_phrase_ can be used to decrypt the key. If none is given -- * OpenSSL will prompt for the pass phrase. -+ * If called with a String, tries to parse as DER or PEM encoding of an \RSA key. -+ * Note that, if _passphrase_ is not specified but the key is encrypted with a -+ * passphrase, \OpenSSL will prompt for it. -+ * See also OpenSSL::PKey.read which can parse keys of any kinds. - * -- * = Examples -+ * If called with a number, generates a new key pair. This form works as an -+ * alias of RSA.generate. - * -+ * Examples: - * OpenSSL::PKey::RSA.new 2048 - * OpenSSL::PKey::RSA.new File.read 'rsa.pem' - * OpenSSL::PKey::RSA.new File.read('rsa.pem'), 'my pass phrase' -@@ -179,15 +82,13 @@ ossl_rsa_initialize(int argc, VALUE *argv, VALUE self) - VALUE arg, pass; - - GetPKey(self, pkey); -+ /* The RSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ - rb_scan_args(argc, argv, "02", &arg, &pass); - if (argc == 0) { - rsa = RSA_new(); - if (!rsa) - ossl_raise(eRSAError, "RSA_new"); - } -- else if (RB_INTEGER_TYPE_P(arg)) { -- rsa = rsa_generate(NUM2INT(arg), NIL_P(pass) ? RSA_F4 : NUM2ULONG(pass)); -- } - else { - pass = ossl_pem_passwd_value(pass); - arg = ossl_to_der_if_possible(arg); -@@ -832,7 +733,6 @@ Init_ossl_rsa(void) - */ - cRSA = rb_define_class_under(mPKey, "RSA", cPKey); - -- rb_define_singleton_method(cRSA, "generate", ossl_rsa_s_generate, -1); - rb_define_method(cRSA, "initialize", ossl_rsa_initialize, -1); - rb_define_method(cRSA, "initialize_copy", ossl_rsa_initialize_copy, 1); - --- -2.32.0 - - -From a6c4a8116c09243c39cc8d1e7ececcd8be0cfaf2 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Sun, 17 May 2020 22:14:03 +0900 -Subject: [PATCH 4/5] pkey/dsa: use high level EVP interface to generate - parameters and keys - -Implement PKey::DSA.new(size) and PKey::DSA.generate using -OpenSSL::PKey.generate_parameters and .generate_key instead of the low -level DSA functions. ---- - ext/openssl/lib/openssl/pkey.rb | 30 +++++++ - ext/openssl/ossl_pkey_dsa.c | 140 ++++++-------------------------- - test/openssl/test_pkey_dsa.rb | 23 ++---- - 3 files changed, 64 insertions(+), 129 deletions(-) - -diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb -index 3bef06e3b3..53ee52f98b 100644 ---- a/ext/openssl/lib/openssl/pkey.rb -+++ b/ext/openssl/lib/openssl/pkey.rb -@@ -88,6 +88,36 @@ def new(*args, &blk) # :nodoc: - - class DSA - include OpenSSL::Marshal -+ -+ class << self -+ # :call-seq: -+ # DSA.generate(size) -> dsa -+ # -+ # Creates a new DSA instance by generating a private/public key pair -+ # from scratch. -+ # -+ # See also OpenSSL::PKey.generate_parameters and -+ # OpenSSL::PKey.generate_key. -+ # -+ # +size+:: -+ # The desired key size in bits. -+ def generate(size, &blk) -+ dsaparams = OpenSSL::PKey.generate_parameters("DSA", { -+ "dsa_paramgen_bits" => size, -+ }, &blk) -+ OpenSSL::PKey.generate_key(dsaparams) -+ end -+ -+ # Handle DSA.new(size) form here; new(str) and new() forms -+ # are handled by #initialize -+ def new(*args, &blk) # :nodoc: -+ if args[0].is_a?(Integer) -+ generate(*args, &blk) -+ else -+ super -+ end -+ end -+ end - end - - if defined?(EC) -diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c -index 0e68f7f27f..1c5a8a737e 100644 ---- a/ext/openssl/ossl_pkey_dsa.c -+++ b/ext/openssl/ossl_pkey_dsa.c -@@ -46,126 +46,39 @@ VALUE eDSAError; - /* - * Private - */ --struct dsa_blocking_gen_arg { -- DSA *dsa; -- int size; -- int *counter; -- unsigned long *h; -- BN_GENCB *cb; -- int result; --}; -- --static void * --dsa_blocking_gen(void *arg) --{ -- struct dsa_blocking_gen_arg *gen = (struct dsa_blocking_gen_arg *)arg; -- gen->result = DSA_generate_parameters_ex(gen->dsa, gen->size, NULL, 0, -- gen->counter, gen->h, gen->cb); -- return 0; --} -- --static DSA * --dsa_generate(int size) --{ -- struct ossl_generate_cb_arg cb_arg = { 0 }; -- struct dsa_blocking_gen_arg gen_arg; -- DSA *dsa = DSA_new(); -- BN_GENCB *cb = BN_GENCB_new(); -- int counter; -- unsigned long h; -- -- if (!dsa || !cb) { -- DSA_free(dsa); -- BN_GENCB_free(cb); -- ossl_raise(eDSAError, "malloc failure"); -- } -- -- if (rb_block_given_p()) -- cb_arg.yield = 1; -- BN_GENCB_set(cb, ossl_generate_cb_2, &cb_arg); -- gen_arg.dsa = dsa; -- gen_arg.size = size; -- gen_arg.counter = &counter; -- gen_arg.h = &h; -- gen_arg.cb = cb; -- if (cb_arg.yield == 1) { -- /* we cannot release GVL when callback proc is supplied */ -- dsa_blocking_gen(&gen_arg); -- } else { -- /* there's a chance to unblock */ -- rb_thread_call_without_gvl(dsa_blocking_gen, &gen_arg, ossl_generate_cb_stop, &cb_arg); -- } -- -- BN_GENCB_free(cb); -- if (!gen_arg.result) { -- DSA_free(dsa); -- if (cb_arg.state) { -- /* Clear OpenSSL error queue before re-raising. By the way, the -- * documentation of DSA_generate_parameters_ex() says the error code -- * can be obtained by ERR_get_error(), but the default -- * implementation, dsa_builtin_paramgen() doesn't put any error... */ -- ossl_clear_error(); -- rb_jump_tag(cb_arg.state); -- } -- ossl_raise(eDSAError, "DSA_generate_parameters_ex"); -- } -- -- if (!DSA_generate_key(dsa)) { -- DSA_free(dsa); -- ossl_raise(eDSAError, "DSA_generate_key"); -- } -- -- return dsa; --} -- --/* -- * call-seq: -- * DSA.generate(size) -> dsa -- * -- * Creates a new DSA instance by generating a private/public key pair -- * from scratch. -- * -- * === Parameters -- * * _size_ is an integer representing the desired key size. -- * -- */ --static VALUE --ossl_dsa_s_generate(VALUE klass, VALUE size) --{ -- EVP_PKEY *pkey; -- DSA *dsa; -- VALUE obj; -- -- obj = rb_obj_alloc(klass); -- GetPKey(obj, pkey); -- -- dsa = dsa_generate(NUM2INT(size)); -- if (!EVP_PKEY_assign_DSA(pkey, dsa)) { -- DSA_free(dsa); -- ossl_raise(eDSAError, "EVP_PKEY_assign_DSA"); -- } -- return obj; --} -- - /* - * call-seq: - * DSA.new -> dsa -- * DSA.new(size) -> dsa - * DSA.new(string [, pass]) -> dsa -+ * DSA.new(size) -> dsa - * - * Creates a new DSA instance by reading an existing key from _string_. - * -- * === Parameters -- * * _size_ is an integer representing the desired key size. -- * * _string_ contains a DER or PEM encoded key. -- * * _pass_ is a string that contains an optional password. -+ * If called without arguments, creates a new instance with no key components -+ * set. They can be set individually by #set_pqg and #set_key. - * -- * === Examples -- * DSA.new -> dsa -- * DSA.new(1024) -> dsa -- * DSA.new(File.read('dsa.pem')) -> dsa -- * DSA.new(File.read('dsa.pem'), 'mypassword') -> dsa -+ * If called with a String, tries to parse as DER or PEM encoding of a \DSA key. -+ * See also OpenSSL::PKey.read which can parse keys of any kinds. -+ * -+ * If called with a number, generates random parameters and a key pair. This -+ * form works as an alias of DSA.generate. -+ * -+ * +string+:: -+ * A String that contains a DER or PEM encoded key. -+ * +pass+:: -+ * A String that contains an optional password. -+ * +size+:: -+ * See DSA.generate. - * -+ * Examples: -+ * p OpenSSL::PKey::DSA.new(1024) -+ * #=> # -+ * -+ * p OpenSSL::PKey::DSA.new(File.read('dsa.pem')) -+ * #=> # -+ * -+ * p OpenSSL::PKey::DSA.new(File.read('dsa.pem'), 'mypassword') -+ * #=> # - */ - static VALUE - ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) -@@ -176,15 +89,13 @@ ossl_dsa_initialize(int argc, VALUE *argv, VALUE self) - VALUE arg, pass; - - GetPKey(self, pkey); -+ /* The DSA.new(size, generator) form is handled by lib/openssl/pkey.rb */ - rb_scan_args(argc, argv, "02", &arg, &pass); - if (argc == 0) { - dsa = DSA_new(); - if (!dsa) - ossl_raise(eDSAError, "DSA_new"); - } -- else if (argc == 1 && RB_INTEGER_TYPE_P(arg)) { -- dsa = dsa_generate(NUM2INT(arg)); -- } - else { - pass = ossl_pem_passwd_value(pass); - arg = ossl_to_der_if_possible(arg); -@@ -553,7 +464,6 @@ Init_ossl_dsa(void) - */ - cDSA = rb_define_class_under(mPKey, "DSA", cPKey); - -- rb_define_singleton_method(cDSA, "generate", ossl_dsa_s_generate, 1); - rb_define_method(cDSA, "initialize", ossl_dsa_initialize, -1); - rb_define_method(cDSA, "initialize_copy", ossl_dsa_initialize_copy, 1); - -diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb -index 4bf8a7b374..85bb6ec0ae 100644 ---- a/test/openssl/test_pkey_dsa.rb -+++ b/test/openssl/test_pkey_dsa.rb -@@ -5,31 +5,26 @@ - - class OpenSSL::TestPKeyDSA < OpenSSL::PKeyTestCase - def test_private -- key = OpenSSL::PKey::DSA.new(256) -- assert(key.private?) -+ key = Fixtures.pkey("dsa1024") -+ assert_equal true, key.private? - key2 = OpenSSL::PKey::DSA.new(key.to_der) -- assert(key2.private?) -+ assert_equal true, key2.private? - key3 = key.public_key -- assert(!key3.private?) -+ assert_equal false, key3.private? - key4 = OpenSSL::PKey::DSA.new(key3.to_der) -- assert(!key4.private?) -+ assert_equal false, key4.private? - end - - def test_new -- key = OpenSSL::PKey::DSA.new 256 -+ key = OpenSSL::PKey::DSA.new(2048) - pem = key.public_key.to_pem - OpenSSL::PKey::DSA.new pem -- if $0 == __FILE__ -- assert_nothing_raised { -- key = OpenSSL::PKey::DSA.new 2048 -- } -- end - end - - def test_new_break -- assert_nil(OpenSSL::PKey::DSA.new(512) { break }) -+ assert_nil(OpenSSL::PKey::DSA.new(2048) { break }) - assert_raise(RuntimeError) do -- OpenSSL::PKey::DSA.new(512) { raise } -+ OpenSSL::PKey::DSA.new(2048) { raise } - end - end - -@@ -184,7 +179,7 @@ def test_read_DSAPublicKey_pem - end - - def test_dup -- key = OpenSSL::PKey::DSA.new(256) -+ key = Fixtures.pkey("dsa1024") - key2 = key.dup - assert_equal key.params, key2.params - key2.set_pqg(key2.p + 1, key2.q, key2.g) --- -2.32.0 - - -From ba5a3a5c3eabf969f5cd2232b022e440af803b5b Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 5 Apr 2021 00:39:04 +0900 -Subject: [PATCH 5/5] pkey: remove unused ossl_generate_cb_2() helper function - -The previous series of commits re-implemented key generation with the -low level API with the EVP API. The BN_GENCB-based callback function is -no longer used. ---- - ext/openssl/extconf.rb | 3 -- - ext/openssl/openssl_missing.h | 12 ------ - ext/openssl/ossl_pkey.c | 73 +++++++---------------------------- - ext/openssl/ossl_pkey.h | 8 ---- - 4 files changed, 15 insertions(+), 81 deletions(-) - -diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb -index 693e55cd97..b3c6647faf 100644 ---- a/ext/openssl/extconf.rb -+++ b/ext/openssl/extconf.rb -@@ -136,9 +136,6 @@ def find_openssl_library - $defs.push("-DHAVE_OPAQUE_OPENSSL") - end - have_func("CRYPTO_lock") || $defs.push("-DHAVE_OPENSSL_110_THREADING_API") --have_func("BN_GENCB_new") --have_func("BN_GENCB_free") --have_func("BN_GENCB_get_arg") - have_func("EVP_MD_CTX_new") - have_func("EVP_MD_CTX_free") - have_func("EVP_MD_CTX_pkey_ctx") -diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h -index 7d218f86f5..e575415f49 100644 ---- a/ext/openssl/openssl_missing.h -+++ b/ext/openssl/openssl_missing.h -@@ -34,18 +34,6 @@ int ossl_EC_curve_nist2nid(const char *); - #endif - - /* added in 1.1.0 */ --#if !defined(HAVE_BN_GENCB_NEW) --# define BN_GENCB_new() ((BN_GENCB *)OPENSSL_malloc(sizeof(BN_GENCB))) --#endif -- --#if !defined(HAVE_BN_GENCB_FREE) --# define BN_GENCB_free(cb) OPENSSL_free(cb) --#endif -- --#if !defined(HAVE_BN_GENCB_GET_ARG) --# define BN_GENCB_get_arg(cb) (cb)->arg --#endif -- - #if !defined(HAVE_EVP_MD_CTX_NEW) - # define EVP_MD_CTX_new EVP_MD_CTX_create - #endif -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index d76f0600d1..f9282b9417 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -17,64 +17,6 @@ VALUE cPKey; - VALUE ePKeyError; - static ID id_private_q; - --/* -- * callback for generating keys -- */ --static VALUE --call_check_ints0(VALUE arg) --{ -- rb_thread_check_ints(); -- return Qnil; --} -- --static void * --call_check_ints(void *arg) --{ -- int state; -- rb_protect(call_check_ints0, Qnil, &state); -- return (void *)(VALUE)state; --} -- --int --ossl_generate_cb_2(int p, int n, BN_GENCB *cb) --{ -- VALUE ary; -- struct ossl_generate_cb_arg *arg; -- int state; -- -- arg = (struct ossl_generate_cb_arg *)BN_GENCB_get_arg(cb); -- if (arg->yield) { -- ary = rb_ary_new2(2); -- rb_ary_store(ary, 0, INT2NUM(p)); -- rb_ary_store(ary, 1, INT2NUM(n)); -- -- /* -- * can be break by raising exception or 'break' -- */ -- rb_protect(rb_yield, ary, &state); -- if (state) { -- arg->state = state; -- return 0; -- } -- } -- if (arg->interrupted) { -- arg->interrupted = 0; -- state = (int)(VALUE)rb_thread_call_with_gvl(call_check_ints, NULL); -- if (state) { -- arg->state = state; -- return 0; -- } -- } -- return 1; --} -- --void --ossl_generate_cb_stop(void *ptr) --{ -- struct ossl_generate_cb_arg *arg = (struct ossl_generate_cb_arg *)ptr; -- arg->interrupted = 1; --} -- - static void - ossl_evp_pkey_free(void *ptr) - { -@@ -257,6 +199,21 @@ pkey_gen_cb_yield(VALUE ctx_v) - return rb_yield_values2(info_num, argv); - } - -+static VALUE -+call_check_ints0(VALUE arg) -+{ -+ rb_thread_check_ints(); -+ return Qnil; -+} -+ -+static void * -+call_check_ints(void *arg) -+{ -+ int state; -+ rb_protect(call_check_ints0, Qnil, &state); -+ return (void *)(VALUE)state; -+} -+ - static int - pkey_gen_cb(EVP_PKEY_CTX *ctx) - { -diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h -index 7dbaed47bc..629c16ae1f 100644 ---- a/ext/openssl/ossl_pkey.h -+++ b/ext/openssl/ossl_pkey.h -@@ -35,14 +35,6 @@ extern const rb_data_type_t ossl_evp_pkey_type; - } \ - } while (0) - --struct ossl_generate_cb_arg { -- int yield; -- int interrupted; -- int state; --}; --int ossl_generate_cb_2(int p, int n, BN_GENCB *cb); --void ossl_generate_cb_stop(void *ptr); -- - VALUE ossl_pkey_new(EVP_PKEY *); - void ossl_pkey_check_public_key(const EVP_PKEY *); - EVP_PKEY *ossl_pkey_read_generic(BIO *, VALUE); --- -2.32.0 - diff --git a/ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch b/ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch deleted file mode 100644 index b8f727d..0000000 --- a/ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch +++ /dev/null @@ -1,29 +0,0 @@ -From a9977ba2f9863e3fb1b2346589ebbca67d80536c Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Sat, 14 Aug 2021 10:08:19 +0900 -Subject: [PATCH] Constified addr2line.c - ---- - addr2line.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/addr2line.c b/addr2line.c -index 8ee4416650d3..fed1a8da84e5 100644 ---- a/addr2line.c -+++ b/addr2line.c -@@ -1138,12 +1138,12 @@ debug_info_reader_read_value(DebugInfoReader *reader, uint64_t form, DebugInfoVa - set_uint_value(v, read_uleb128(reader)); - break; - case DW_FORM_ref_addr: -- if (reader->address_size == 4) { -+ if (reader->format == 4) { - set_uint_value(v, read_uint32(&reader->p)); -- } else if (reader->address_size == 8) { -+ } else if (reader->format == 8) { - set_uint_value(v, read_uint64(&reader->p)); - } else { -- fprintf(stderr,"unknown address_size:%d", reader->address_size); -+ fprintf(stderr,"unknown format:%d", reader->format); - abort(); - } - break; diff --git a/ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch b/ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch deleted file mode 100644 index 1bd20bd..0000000 --- a/ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 912a8dcfc5369d840dcd6bf0f88ee0bac7d902d6 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Thu, 30 Sep 2021 18:24:37 +0900 -Subject: [PATCH] Needs `AC_PROG_CC` - -Although `AC_PROG_CC_C99` has been obsolete, `AC_PROG_CC` is not -and the latter is necessary not to make C++ compiler mandatory. ---- - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index b24a8f59b0..c7059ee1ec 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -203,7 +203,7 @@ rb_test_CXXFLAGS=${CXXFLAGS+yes} - # BSD's ports and MacPorts prefix GNU binutils with 'g' - - dnl Seems necessarily in order to add -std=gnu99 option for gcc 4.9. --m4_version_prereq([2.70], [], [AC_PROG_CC_C99]) -+m4_version_prereq([2.70], [AC_PROG_CC], [AC_PROG_CC_C99]) - - AC_PROG_CXX - AC_PROG_CPP --- -2.31.1 - diff --git a/ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch b/ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch deleted file mode 100644 index 5f3445e..0000000 --- a/ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch +++ /dev/null @@ -1,29 +0,0 @@ -From b4b5eab2a5fd0e9ac62c01102dd26d0a433c5683 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 18 May 2020 02:17:28 +0900 -Subject: [PATCH] test/openssl/test_digest: do not test constants for legacy - algorithms - -Remove availability test for MD4 and RIPEMD160 as they are considered -legacy and may be missing depending on the compile-time options of -OpenSSL. OpenSSL 3.0 by default disables them. ---- - test/openssl/test_digest.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/test/openssl/test_digest.rb b/test/openssl/test_digest.rb -index 8d7046e831..84c128c12f 100644 ---- a/test/openssl/test_digest.rb -+++ b/test/openssl/test_digest.rb -@@ -54,7 +54,7 @@ def test_reset - end - - def test_digest_constants -- %w{MD4 MD5 RIPEMD160 SHA1 SHA224 SHA256 SHA384 SHA512}.each do |name| -+ %w{MD5 SHA1 SHA224 SHA256 SHA384 SHA512}.each do |name| - assert_not_nil(OpenSSL::Digest.new(name)) - klass = OpenSSL::Digest.const_get(name.tr('-', '_')) - assert_not_nil(klass.new) --- -2.32.0 - diff --git a/ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch b/ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch deleted file mode 100644 index 80b73d2..0000000 --- a/ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch +++ /dev/null @@ -1,439 +0,0 @@ -From 9596788bdd2d061bef042485af14262e9fc4020c Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Thu, 13 Aug 2020 23:20:55 +0900 -Subject: [PATCH] test/openssl/test_pkcs12: fix test failures with OpenSSL 3.0 - -OpenSSL's PKCS12_create() by default uses pbewithSHAAnd40BitRC2-CBC for -encryption of the certificates. However, in OpenSSL 3.0, the algorithm -is part of the legacy provider and is not enabled by default. - -Specify another algorithm that is still in the default provider for -these test cases. ---- - test/openssl/test_pkcs12.rb | 297 ++++++++++++++++++------------------ - 1 file changed, 149 insertions(+), 148 deletions(-) - -diff --git a/test/openssl/test_pkcs12.rb b/test/openssl/test_pkcs12.rb -index fdbe753b17..ec676743bc 100644 ---- a/test/openssl/test_pkcs12.rb -+++ b/test/openssl/test_pkcs12.rb -@@ -5,6 +5,9 @@ - - module OpenSSL - class TestPKCS12 < OpenSSL::TestCase -+ DEFAULT_PBE_PKEYS = "PBE-SHA1-3DES" -+ DEFAULT_PBE_CERTS = "PBE-SHA1-3DES" -+ - def setup - super - ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA") -@@ -14,47 +17,41 @@ def setup - ["subjectKeyIdentifier","hash",false], - ["authorityKeyIdentifier","keyid:always",false], - ] -- @cacert = issue_cert(ca, Fixtures.pkey("rsa2048"), 1, ca_exts, nil, nil) -+ ca_key = Fixtures.pkey("rsa-1") -+ @cacert = issue_cert(ca, ca_key, 1, ca_exts, nil, nil) - - inter_ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=Intermediate CA") -- inter_ca_key = OpenSSL::PKey.read <<-_EOS_ -------BEGIN RSA PRIVATE KEY----- --MIICXAIBAAKBgQDp7hIG0SFMG/VWv1dBUWziAPrNmkMXJgTCAoB7jffzRtyyN04K --oq/89HAszTMStZoMigQURfokzKsjpUp8OYCAEsBtt9d5zPndWMz/gHN73GrXk3LT --ZsxEn7Xv5Da+Y9F/Hx2QZUHarV5cdZixq2NbzWGwrToogOQMh2pxN3Z/0wIDAQAB --AoGBAJysUyx3olpsGzv3OMRJeahASbmsSKTXVLZvoIefxOINosBFpCIhZccAG6UV --5c/xCvS89xBw8aD15uUfziw3AuT8QPEtHCgfSjeT7aWzBfYswEgOW4XPuWr7EeI9 --iNHGD6z+hCN/IQr7FiEBgTp6A+i/hffcSdR83fHWKyb4M7TRAkEA+y4BNd668HmC --G5MPRx25n6LixuBxrNp1umfjEI6UZgEFVpYOg4agNuimN6NqM253kcTR94QNTUs5 --Kj3EhG1YWwJBAO5rUjiOyCNVX2WUQrOMYK/c1lU7fvrkdygXkvIGkhsPoNRzLPeA --HGJszKtrKD8bNihWpWNIyqKRHfKVD7yXT+kCQGCAhVCIGTRoypcDghwljHqLnysf --ci0h5ZdPcIqc7ODfxYhFsJ/Rql5ONgYsT5Ig/+lOQAkjf+TRYM4c2xKx2/8CQBvG --jv6dy70qDgIUgqzONtlmHeYyFzn9cdBO5sShdVYHvRHjFSMEXsosqK9zvW2UqvuK --FJx7d3f29gkzynCLJDkCQGQZlEZJC4vWmWJGRKJ24P6MyQn3VsPfErSKOg4lvyM3 --Li8JsX5yIiuVYaBg/6ha3tOg4TCa5K/3r3tVliRZ2Es= -------END RSA PRIVATE KEY----- -- _EOS_ -- @inter_cacert = issue_cert(inter_ca, inter_ca_key, 2, ca_exts, @cacert, Fixtures.pkey("rsa2048")) -+ inter_ca_key = Fixtures.pkey("rsa-2") -+ @inter_cacert = issue_cert(inter_ca, inter_ca_key, 2, ca_exts, @cacert, ca_key) - - exts = [ - ["keyUsage","digitalSignature",true], - ["subjectKeyIdentifier","hash",false], - ] - ee = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=Ruby PKCS12 Test Certificate") -- @mykey = Fixtures.pkey("rsa1024") -+ @mykey = Fixtures.pkey("rsa-3") - @mycert = issue_cert(ee, @mykey, 3, exts, @inter_cacert, inter_ca_key) - end - -- def test_create -+ def test_create_single_key_single_cert - pkcs12 = OpenSSL::PKCS12.create( - "omg", - "hello", - @mykey, -- @mycert -+ @mycert, -+ nil, -+ DEFAULT_PBE_PKEYS, -+ DEFAULT_PBE_CERTS, - ) -- assert_equal @mycert.to_der, pkcs12.certificate.to_der -+ assert_equal @mycert, pkcs12.certificate - assert_equal @mykey.to_der, pkcs12.key.to_der - assert_nil pkcs12.ca_certs -+ -+ der = pkcs12.to_der -+ decoded = OpenSSL::PKCS12.new(der, "omg") -+ assert_equal @mykey.to_der, decoded.key.to_der -+ assert_equal @mycert, decoded.certificate -+ assert_equal [], Array(decoded.ca_certs) - end - - def test_create_no_pass -@@ -62,14 +59,17 @@ def test_create_no_pass - nil, - "hello", - @mykey, -- @mycert -+ @mycert, -+ nil, -+ DEFAULT_PBE_PKEYS, -+ DEFAULT_PBE_CERTS, - ) -- assert_equal @mycert.to_der, pkcs12.certificate.to_der -+ assert_equal @mycert, pkcs12.certificate - assert_equal @mykey.to_der, pkcs12.key.to_der - assert_nil pkcs12.ca_certs - - decoded = OpenSSL::PKCS12.new(pkcs12.to_der) -- assert_cert @mycert, decoded.certificate -+ assert_equal @mycert, decoded.certificate - end - - def test_create_with_chain -@@ -80,7 +80,9 @@ def test_create_with_chain - "hello", - @mykey, - @mycert, -- chain -+ chain, -+ DEFAULT_PBE_PKEYS, -+ DEFAULT_PBE_CERTS, - ) - assert_equal chain, pkcs12.ca_certs - end -@@ -95,14 +97,16 @@ def test_create_with_chain_decode - "hello", - @mykey, - @mycert, -- chain -+ chain, -+ DEFAULT_PBE_PKEYS, -+ DEFAULT_PBE_CERTS, - ) - - decoded = OpenSSL::PKCS12.new(pkcs12.to_der, passwd) - assert_equal chain.size, decoded.ca_certs.size -- assert_include_cert @cacert, decoded.ca_certs -- assert_include_cert @inter_cacert, decoded.ca_certs -- assert_cert @mycert, decoded.certificate -+ assert_include decoded.ca_certs, @cacert -+ assert_include decoded.ca_certs, @inter_cacert -+ assert_equal @mycert, decoded.certificate - assert_equal @mykey.to_der, decoded.key.to_der - end - -@@ -126,8 +130,8 @@ def test_create_with_itr - @mykey, - @mycert, - [], -- nil, -- nil, -+ DEFAULT_PBE_PKEYS, -+ DEFAULT_PBE_CERTS, - 2048 - ) - -@@ -138,8 +142,8 @@ def test_create_with_itr - @mykey, - @mycert, - [], -- nil, -- nil, -+ DEFAULT_PBE_PKEYS, -+ DEFAULT_PBE_CERTS, - "omg" - ) - end -@@ -152,7 +156,8 @@ def test_create_with_mac_itr - @mykey, - @mycert, - [], -- nil, -+ DEFAULT_PBE_PKEYS, -+ DEFAULT_PBE_CERTS, - nil, - nil, - 2048 -@@ -165,148 +170,144 @@ def test_create_with_mac_itr - @mykey, - @mycert, - [], -- nil, -- nil, -+ DEFAULT_PBE_PKEYS, -+ DEFAULT_PBE_CERTS, - nil, - "omg" - ) - end - end - -- def test_new_with_one_key_and_one_cert -- # generated with: -- # openssl version #=> OpenSSL 1.0.2h 3 May 2016 -- # openssl pkcs12 -in <@mycert> -inkey -export -out -- str = <<~EOF.unpack("m").first --MIIGQQIBAzCCBgcGCSqGSIb3DQEHAaCCBfgEggX0MIIF8DCCAu8GCSqGSIb3DQEH --BqCCAuAwggLcAgEAMIIC1QYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIeZPM --Rh6KiXgCAggAgIICqL6O+LCZmBzdIg6mozPF3FpY0hVbWHvTNMiDHieW3CrAanhN --YCH2/wHqH8WpFpEWwF0qEEXAWjHsIlYB4Cfqo6b7XpuZe5eVESsjNTOTMF1JCUJj --A6iNefXmCFLync1JK5LUodRDhTlKLU1WPK20X9X4vuEwHn8wt5RUb8P0E+Xh6rpS --XC4LkZKT45zF3cJa/n5+dW65ohVGNVnF9D1bCNEKHMOllK1V9omutQ9slW88hpga --LGiFsJoFOb/ESGb78KO+bd6zbX1MdKdBV+WD6t1uF/cgU65y+2A4nXs1urda+MJ7 --7iVqiB7Vnc9cANTbAkTSGNyoUDVM/NZde782/8IvddLAzUZ2EftoRDke6PvuBOVL --ljBhNWmdamrtBqzuzVZCRdWq44KZkF2Xoc9asepwIkdVmntzQF7f1Z+Ta5yg6HFp --xnr7CuM+MlHEShXkMgYtHnwAq10fDMSXIvjhi/AA5XUAusDO3D+hbtcRDcJ4uUes --dm5dhQE2qJ02Ysn4aH3o1F3RYNOzrxejHJwl0D2TCE8Ww2X342xib57+z9u03ufj --jswhiMKxy67f1LhUMq3XrT3uV6kCVXk/KUOUPcXPlPVNA5JmZeFhMp6GrtB5xJJ9 --wwBZD8UL5A2U2Mxi2OZsdUBv8eo3jnjZ284aFpt+mCjIHrLW5O0jwY8OCwSlYUoY --IY00wlabX0s82kBcIQNZbC1RSV2267ro/7A0MClc8YQ/zWN0FKY6apgtUkHJI1cL --1dc77mhnjETjwW94iLMDFy4zQfVu7IfCBqOBzygRNnqqUG66UhTs1xFnWM0mWXl/ --Zh9+AMpbRLIPaKCktIjl5juzzm+KEgkhD+707XRCFIGUYGP5bSHzGaz8PK9hj0u1 --E2SpZHUvYOcawmxtA7pmpSxl5uQjMIIC+QYJKoZIhvcNAQcBoIIC6gSCAuYwggLi --MIIC3gYLKoZIhvcNAQwKAQKgggKmMIICojAcBgoqhkiG9w0BDAEDMA4ECKB338m8 --qSzHAgIIAASCAoACFhJeqA3xx+s1qIH6udNQYY5hAL6oz7SXoGwFhDiceSyJjmAD --Dby9XWM0bPl1Gj5nqdsuI/lAM++fJeoETk+rxw8q6Ofk2zUaRRE39qgpwBwSk44o --0SAFJ6bzHpc5CFh6sZmDaUX5Lm9GtjnGFmmsPTSJT5an5JuJ9WczGBEd0nSBQhJq --xHbTGZiN8i3SXcIH531Sub+CBIFWy5lyCKgDYh/kgJFGQAaWUOjLI+7dCEESonXn --F3Jh2uPbnDF9MGJyAFoNgWFhgSpi1cf6AUi87GY4Oyur88ddJ1o0D0Kz2uw8/bpG --s3O4PYnIW5naZ8mozzbnYByEFk7PoTwM7VhoFBfYNtBoAI8+hBnPY/Y71YUojEXf --SeX6QbtkIANfzS1XuFNKElShC3DPQIHpKzaatEsfxHfP+8VOav6zcn4mioao7NHA --x7Dp6R1enFGoQOq4UNjBT8YjnkG5vW8zQHW2dAHLTJBq6x2Fzm/4Pjo/8vM1FiGl --BQdW5vfDeJ/l6NgQm3xR9ka2E2HaDqIcj1zWbN8jy/bHPFJYuF/HH8MBV/ngMIXE --vFEW/ToYv8eif0+EpUtzBsCKD4a7qYYYh87RmEVoQU96q6m+UbhpD2WztYfAPkfo --OSL9j2QHhVczhL7OAgqNeM95pOsjA9YMe7exTeqK31LYnTX8oH8WJD1xGbRSJYgu --SY6PQbumcJkc/TFPn0GeVUpiDdf83SeG50lo/i7UKQi2l1hi5Y51fQhnBnyMr68D --llSZEvSWqfDxBJkBpeg6PIYvkTpEwKRJpVQoM3uYvdqVSSnW6rydqIb+snfOrlhd --f+xCtq9xr+kHeTSqLIDRRAnMfgFRhY3IBlj6MSUwIwYJKoZIhvcNAQkVMRYEFBdb --8XGWehZ6oPj56Pf/uId46M9AMDEwITAJBgUrDgMCGgUABBRvSCB04/f8f13pp2PF --vyl2WuMdEwQIMWFFphPkIUICAggA -- EOF -- p12 = OpenSSL::PKCS12.new(str, "abc123") -- -- assert_equal @mykey.to_der, p12.key.to_der -- assert_equal @mycert.subject.to_der, p12.certificate.subject.to_der -- assert_equal [], Array(p12.ca_certs) -- end -- - def test_new_with_no_keys - # generated with: -- # openssl pkcs12 -in <@mycert> -nokeys -export -out -+ # openssl pkcs12 -certpbe PBE-SHA1-3DES -in <@mycert> -nokeys -export - str = <<~EOF.unpack("m").first --MIIDHAIBAzCCAuIGCSqGSIb3DQEHAaCCAtMEggLPMIICyzCCAscGCSqGSIb3DQEH --BqCCArgwggK0AgEAMIICrQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIX4+W --irqwH40CAggAgIICgOaCyo+5+6IOVoGCCL80c50bkkzAwqdXxvkKExJSdcJz2uMU --0gRrKnZEjL5wrUsN8RwZu8DvgQTEhNEkKsUgM7AWainmN/EnwohIdHZAHpm6WD67 --I9kLGp0/DHrqZrV9P2dLfhXLUSQE8PI0tqZPZ8UEABhizkViw4eISTkrOUN7pGbN --Qtx/oqgitXDuX2polbxYYDwt9vfHZhykHoKgew26SeJyZfeMs/WZ6olEI4cQUAFr --mvYGuC1AxEGTo9ERmU8Pm16j9Hr9PFk50WYe+rnk9oX3wJogQ7XUWS5kYf7XRycd --NDkNiwV/ts94bbuaGZp1YA6I48FXpIc8b5fX7t9tY0umGaWy0bARe1L7o0Y89EPe --lMg25rOM7j3uPtFG8whbSfdETSy57UxzzTcJ6UwexeaK6wb2jqEmj5AOoPLWeaX0 --LyOAszR3v7OPAcjIDYZGdrbb3MZ2f2vo2pdQfu9698BrWhXuM7Odh73RLhJVreNI --aezNOAtPyBlvGiBQBGTzRIYHSLL5Y5aVj2vWLAa7hjm5qTL5C5mFdDIo6TkEMr6I --OsexNQofEGs19kr8nARXDlcbEimk2VsPj4efQC2CEXZNzURsKca82pa62MJ8WosB --DTFd8X06zZZ4nED50vLopZvyW4fyW60lELwOyThAdG8UchoAaz2baqP0K4de44yM --Y5/yPFDu4+GoimipJfbiYviRwbzkBxYW8+958ILh0RtagLbvIGxbpaym9PqGjOzx --ShNXjLK2aAFZsEizQ8kd09quJHU/ogq2cUXdqqhmOqPnUWrJVi/VCoRB3Pv1/lE4 --mrUgr2YZ11rYvBw6g5XvNvFcSc53OKyV7SLn0dwwMTAhMAkGBSsOAwIaBQAEFEWP --1WRQykaoD4uJCpTx/wv0SLLBBAiDKI26LJK7xgICCAA= -+MIIGJAIBAzCCBeoGCSqGSIb3DQEHAaCCBdsEggXXMIIF0zCCBc8GCSqGSIb3 -+DQEHBqCCBcAwggW8AgEAMIIFtQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQMw -+DgQIjv5c3OHvnBgCAggAgIIFiMJa8Z/w7errRvCQPXh9dGQz3eJaFq3S2gXD -+rh6oiwsgIRJZvYAWgU6ll9NV7N5SgvS2DDNVuc3tsP8TPWjp+bIxzS9qmGUV -+kYWuURWLMKhpF12ZRDab8jcIwBgKoSGiDJk8xHjx6L613/XcRM6ln3VeQK+C -+hlW5kXniNAUAgTft25Fn61Xa8xnhmsz/fk1ycGnyGjKCnr7Mgy7KV0C1vs23 -+18n8+b1ktDWLZPYgpmXuMFVh0o+HJTV3O86mkIhJonMcnOMgKZ+i8KeXaocN -+JQlAPBG4+HOip7FbQT/h6reXv8/J+hgjLfqAb5aV3m03rUX9mXx66nR1tQU0 -+Jq+XPfDh5+V4akIczLlMyyo/xZjI1/qupcMjr+giOGnGd8BA3cuXW+ueLQiA -+PpTp+DQLVHRfz9XTZbyqOReNEtEXvO9gOlKSEY5lp65ItXVEs2Oqyf9PfU9y -+DUltN6fCMilwPyyrsIBKXCu2ZLM5h65KVCXAYEX9lNqj9zrQ7vTqvCNN8RhS -+ScYouTX2Eqa4Z+gTZWLHa8RCQFoyP6hd+97/Tg2Gv2UTH0myQxIVcnpdi1wy -+cqb+er7tyKbcO96uSlUjpj/JvjlodtjJcX+oinEqGb/caj4UepbBwiG3vv70 -+63bS3jTsOLNjDRsR9if3LxIhLa6DW8zOJiGC+EvMD1o4dzHcGVpQ/pZWCHZC -++YiNJpQOBApiZluE+UZ0m3XrtHFQYk7xblTrh+FJF91wBsok0rZXLAKd8m4p -+OJsc7quCq3cuHRRTzJQ4nSe01uqbwGDAYwLvi6VWy3svU5qa05eDRmgzEFTG -+e84Gp/1LQCtpQFr4txkjFchO2whWS80KoQKqmLPyGm1D9Lv53Q4ZsKMgNihs -+rEepuaOZMKHl4yMAYFoOXZCAYzfbhN6b2phcFAHjMUHUw9e3F0QuDk9D0tsr -+riYTrkocqlOKfK4QTomx27O0ON2J6f1rtEojGgfl9RNykN7iKGzjS3914QjW -+W6gGiZejxHsDPEAa4gUp0WiSUSXtD5WJgoyAzLydR2dKWsQ4WlaUXi01CuGy -++xvncSn2nO3bbot8VD5H6XU1CjREVtnIfbeRYO/uofyLUP3olK5RqN6ne6Xo -+eXnJ/bjYphA8NGuuuvuW1SCITmINkZDLC9cGlER9+K65RR/DR3TigkexXMeN -+aJ70ivZYAl0OuhZt3TGIlAzS64TIoyORe3z7Ta1Pp9PZQarYJpF9BBIZIFor -+757PHHuQKRuugiRkp8B7v4eq1BQ+VeAxCKpyZ7XrgEtbY/AWDiaKcGPKPjc3 -+AqQraVeQm7kMBT163wFmZArCphzkDOI3bz2oEO8YArMgLq2Vto9jAZlqKyWr -+pi2bSJxuoP1aoD58CHcWMrf8/j1LVdQhKgHQXSik2ID0H2Wc/XnglhzlVFuJ -+JsNIW/EGJlZh/5WDez9U0bXqnBlu3uasPEOezdoKlcCmQlmTO5+uLHYLEtNA -+EH9MtnGZebi9XS5meTuS6z5LILt8O9IHZxmT3JRPHYj287FEzotlLdcJ4Ee5 -+enW41UHjLrfv4OaITO1hVuoLRGdzjESx/fHMWmxroZ1nVClxECOdT42zvIYJ -+J3xBZ0gppzQ5fjoYiKjJpxTflRxUuxshk3ih6VUoKtqj/W18tBQ3g5SOlkgT -+yCW8r74yZlfYmNrPyDMUQYpLUPWj2n71GF0KyPfTU5yOatRgvheh262w5BG3 -+omFY7mb3tCv8/U2jdMIoukRKacpZiagofz3SxojOJq52cHnCri+gTHBMX0cO -+j58ygfntHWRzst0pV7Ze2X3fdCAJ4DokH6bNJNthcgmolFJ/y3V1tJjgsdtQ -+7Pjn/vE6xUV0HXE2x4yoVYNirbAMIvkN/X+atxrN0dA4AchN+zGp8TAxMCEw -+CQYFKw4DAhoFAAQUQ+6XXkyhf6uYgtbibILN2IjKnOAECLiqoY45MPCrAgII -+AA== - EOF - p12 = OpenSSL::PKCS12.new(str, "abc123") - - assert_equal nil, p12.key - assert_equal nil, p12.certificate - assert_equal 1, p12.ca_certs.size -- assert_equal @mycert.subject.to_der, p12.ca_certs[0].subject.to_der -+ assert_equal @mycert.subject, p12.ca_certs[0].subject - end - - def test_new_with_no_certs - # generated with: -- # openssl pkcs12 -inkey -nocerts -export -out -+ # openssl pkcs12 -inkey fixtures/openssl/pkey/rsa-1.pem -nocerts -export - str = <<~EOF.unpack("m").first --MIIDJwIBAzCCAu0GCSqGSIb3DQEHAaCCAt4EggLaMIIC1jCCAtIGCSqGSIb3DQEH --AaCCAsMEggK/MIICuzCCArcGCyqGSIb3DQEMCgECoIICpjCCAqIwHAYKKoZIhvcN --AQwBAzAOBAg6AaYnJs84SwICCAAEggKAQzZH+fWSpcQYD1J7PsGSune85A++fLCQ --V7tacp2iv95GJkxwYmfTP176pJdgs00mceB9UJ/u9EX5nD0djdjjQjwo6sgKjY0q --cpVhZw8CMxw7kBD2dhtui0zT8z5hy03LePxsjEKsGiSbeVeeGbSfw/I6AAYbv+Uh --O/YPBGumeHj/D2WKnfsHJLQ9GAV3H6dv5VKYNxjciK7f/JEyZCuUQGIN64QFHDhJ --7fzLqd/ul3FZzJZO6a+dwvcgux09SKVXDRSeFmRCEX4b486iWhJJVspCo9P2KNne --ORrpybr3ZSwxyoICmjyo8gj0OSnEfdx9790Ej1takPqSA1wIdSdBLekbZqB0RBQg --DEuPOsXNo3QFi8ji1vu0WBRJZZSNC2hr5NL6lNR+DKxG8yzDll2j4W4BBIp22mAE --7QRX7kVxu17QJXQhOUac4Dd1qXmzebP8t6xkAxD9L7BWEN5OdiXWwSWGjVjMBneX --nYObi/3UT/aVc5WHMHK2BhCI1bwH51E6yZh06d5m0TQpYGUTWDJdWGBSrp3A+8jN --N2PMQkWBFrXP3smHoTEN4oZC4FWiPsIEyAkQsfKRhcV9lGKl2Xgq54ROTFLnwKoj --Z3zJScnq9qmNzvVZSMmDLkjLyDq0pxRxGKBvgouKkWY7VFFIwwBIJM39iDJ5NbBY --i1AQFTRsRSsZrNVPasCXrIq7bhMoJZb/YZOGBLNyJVqKUoYXhtwsajzSq54VlWft --JxsPayEd4Vi6O9EU1ahnj6qFEZiKFzsicgK2J1Rb8cYagrp0XWjHW0SBn5GVUWCg --GUokSFG/0JTdeYTo/sQuG4qNgJkOolRjpeI48Fciq5VUWLvVdKioXzAxMCEwCQYF --Kw4DAhoFAAQUYAuwVtGD1TdgbFK4Yal2XBgwUR4ECEawsN3rNaa6AgIIAA== -+MIIJ7wIBAzCCCbUGCSqGSIb3DQEHAaCCCaYEggmiMIIJnjCCCZoGCSqGSIb3 -+DQEHAaCCCYsEggmHMIIJgzCCCX8GCyqGSIb3DQEMCgECoIIJbjCCCWowHAYK -+KoZIhvcNAQwBAzAOBAjX5nN8jyRKwQICCAAEgglIBIRLHfiY1mNHpl3FdX6+ -+72L+ZOVXnlZ1MY9HSeg0RMkCJcm0mJ2UD7INUOGXvwpK9fr6WJUZM1IqTihQ -+1dM0crRC2m23aP7KtAlXh2DYD3otseDtwoN/NE19RsiJzeIiy5TSW1d47weU -++D4Ig/9FYVFPTDgMzdCxXujhvO/MTbZIjqtcS+IOyF+91KkXrHkfkGjZC7KS -+WRmYw9BBuIPQEewdTI35sAJcxT8rK7JIiL/9mewbSE+Z28Wq1WXwmjL3oZm9 -+lw6+f515b197GYEGomr6LQqJJamSYpwQbTGHonku6Tf3ylB4NLFqOnRCKE4K -+zRSSYIqJBlKHmQ4pDm5awoupHYxMZLZKZvXNYyYN3kV8r1iiNVlY7KBR4CsX -+rqUkXehRmcPnuqEMW8aOpuYe/HWf8PYI93oiDZjcEZMwW2IZFFrgBbqUeNCM -+CQTkjAYxi5FyoaoTnHrj/aRtdLOg1xIJe4KKcmOXAVMmVM9QEPNfUwiXJrE7 -+n42gl4NyzcZpxqwWBT++9TnQGZ/lEpwR6dzkZwICNQLdQ+elsdT7mumywP+1 -+WaFqg9kpurimaiBu515vJNp9Iqv1Nmke6R8Lk6WVRKPg4Akw0fkuy6HS+LyN -+ofdCfVUkPGN6zkjAxGZP9ZBwvXUbLRC5W3N5qZuAy5WcsS75z+oVeX9ePV63 -+cue23sClu8JSJcw3HFgPaAE4sfkQ4MoihPY5kezgT7F7Lw/j86S0ebrDNp4N -+Y685ec81NRHJ80CAM55f3kGCOEhoifD4VZrvr1TdHZY9Gm3b1RYaJCit2huF -+nlOfzeimdcv/tkjb6UsbpXx3JKkF2NFFip0yEBERRCdWRYMUpBRcl3ad6XHy -+w0pVTgIjTxGlbbtOCi3siqMOK0GNt6UgjoEFc1xqjsgLwU0Ta2quRu7RFPGM -+GoEwoC6VH23p9Hr4uTFOL0uHfkKWKunNN+7YPi6LT6IKmTQwrp+fTO61N6Xh -+KlqTpwESKsIJB2iMnc8wBkjXJtmG/e2n5oTqfhICIrxYmEb7zKDyK3eqeTj3 -+FhQh2t7cUIiqcT52AckUqniPmlE6hf82yBjhaQUPfi/ExTBtTDSmFfRPUzq+ -+Rlla4OHllPRzUXJExyansgCxZbPqlw46AtygSWRGcWoYAKUKwwoYjerqIV5g -+JoZICV9BOU9TXco1dHXZQTs/nnTwoRmYiL/Ly5XpvUAnQOhYeCPjBeFnPSBR -+R/hRNqrDH2MOV57v5KQIH2+mvy26tRG+tVGHmLMaOJeQkjLdxx+az8RfXIrH -+7hpAsoBb+g9jUDY1mUVavPk1T45GMpQH8u3kkzRvChfOst6533GyIZhE7FhN -+KanC6ACabVFDUs6P9pK9RPQMp1qJfpA0XJFx5TCbVbPkvnkZd8K5Tl/tzNM1 -+n32eRao4MKr9KDwoDL93S1yJgYTlYjy1XW/ewdedtX+B4koAoz/wSXDYO+GQ -+Zu6ZSpKSEHTRPhchsJ4oICvpriVaJkn0/Z7H3YjNMB9U5RR9+GiIg1wY1Oa1 -+S3WfuwrrI6eqfbQwj6PDNu3IKy6srEgvJwaofQALNBPSYWbauM2brc8qsD+t -+n8jC/aD1aMcy00+9t3H/RVCjEOb3yKfUpAldIkEA2NTTnZpoDQDXeNYU2F/W -+yhmFjJy8A0O4QOk2xnZK9kcxSRs0v8vI8HivvgWENoVPscsDC4742SSIe6SL -+f/T08reIX11f0K70rMtLhtFMQdHdYOTNl6JzhkHPLr/f9MEZsBEQx52depnF -+ARb3gXGbCt7BAi0OeCEBSbLr2yWuW4r55N0wRZSOBtgqgjsiHP7CDQSkbL6p -+FPlQS1do9gBSHiNYvsmN1LN5bG+mhcVb0UjZub4mL0EqGadjDfDdRJmWqlX0 -+r5dyMcOWQVy4O2cPqYFlcP9lk8buc5otcyVI2isrAFdlvBK29oK6jc52Aq5Q -+0b2ESDlgX8WRgiOPPxK8dySKEeuIwngCtJyNTecP9Ug06TDsu0znZGCXJ+3P -+8JOpykgA8EQdOZOYHbo76ZfB2SkklI5KeRA5IBjGs9G3TZ4PHLy2DIwsbWzS -+H1g01o1x264nx1cJ+eEgUN/KIiGFIib42RS8Af4D5e+Vj54Rt3axq+ag3kI+ -+53p8uotyu+SpvvXUP7Kv4xpQ/L6k41VM0rfrd9+DrlDVvSfxP2uh6I1TKF7A -+CT5n8zguMbng4PGjxvyPBM5k62t6hN5fuw6Af0aZFexh+IjB/5wFQ6onSz23 -+fBzMW4St7RgSs8fDg3lrM+5rwXiey1jxY1ddaxOoUsWRMvvdd7rZxRZQoN5v -+AcI5iMkK/vvpQgC/sfzhtXtrJ2XOPZ+GVgi7VcuDLKSkdFMcPbGzO8SdxUnS -+SLV5XTKqKND+Lrfx7DAoKi5wbDFHu5496/MHK5qP4tBe6sJ5bZc+KDJIH46e -+wTV1oWtB5tV4q46hOb5WRcn/Wjz3HSKaGZgx5QbK1MfKTzD5CTUn+ArMockX -+2wJhPnFK85U4rgv8iBuh9bRjyw+YaKf7Z3loXRiE1eRG6RzuPF0ZecFiDumk -+AC/VUXynJhzePBLqzrQj0exanACdullN+pSfHiRWBxR2VFUkjoFP5X45GK3z -+OstSH6FOkMVU4afqEmjsIwozDFIyin5EyWTtdhJe3szdJSGY23Tut+9hUatx -+9FDFLESOd8z3tyQSNiLk/Hib+e/lbjxqbXBG/p/oyvP3N999PLUPtpKqtYkV -+H0+18sNh9CVfojiJl44fzxe8yCnuefBjut2PxEN0EFRBPv9P2wWlmOxkPKUq -+NrCJP0rDj5aONLrNZPrR8bZNdIShkZ/rKkoTuA0WMZ+xUlDRxAupdMkWAlrz -+8IcwNcdDjPnkGObpN5Ctm3vK7UGSBmPeNqkXOYf3QTJ9gStJEd0F6+DzTN5C -+KGt1IyuGwZqL2Yk51FDIIkr9ykEnBMaA39LS7GFHEDNGlW+fKC7AzA0zfoOr -+fXZlHMBuqHtXqk3zrsHRqGGoocigg4ctrhD1UREYKj+eIj1TBiRdf7c6+COf -+NIOmej8pX3FmZ4ui+dDA8r2ctgsWHrb4A6iiH+v1DRA61GtoaA/tNRggewXW -+VXCZCGWyyTuyHGOqq5ozrv5MlzZLWD/KV/uDsAWmy20RAed1C4AzcXlpX25O -+M4SNl47g5VRNJRtMqokc8j6TjZrzMDEwITAJBgUrDgMCGgUABBRrkIRuS5qg -+BC8fv38mue8LZVcbHQQIUNrWKEnskCoCAggA - EOF - p12 = OpenSSL::PKCS12.new(str, "abc123") - -- assert_equal @mykey.to_der, p12.key.to_der -+ assert_equal Fixtures.pkey("rsa-1").to_der, p12.key.to_der - assert_equal nil, p12.certificate - assert_equal [], Array(p12.ca_certs) - end - - def test_dup -- p12 = OpenSSL::PKCS12.create("pass", "name", @mykey, @mycert) -+ p12 = OpenSSL::PKCS12.create( -+ "pass", -+ "name", -+ @mykey, -+ @mycert, -+ nil, -+ DEFAULT_PBE_PKEYS, -+ DEFAULT_PBE_CERTS, -+ ) - assert_equal p12.to_der, p12.dup.to_der - end -- -- private -- def assert_cert expected, actual -- [ -- :subject, -- :issuer, -- :serial, -- :not_before, -- :not_after, -- ].each do |attribute| -- assert_equal expected.send(attribute), actual.send(attribute) -- end -- assert_equal expected.to_der, actual.to_der -- end -- -- def assert_include_cert cert, ary -- der = cert.to_der -- ary.each do |candidate| -- if candidate.to_der == der -- return true -- end -- end -- false -- end - end - end - --- -2.32.0 - diff --git a/ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch b/ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch deleted file mode 100644 index ac45842..0000000 --- a/ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 10d2216b2f35a31777a099d9f765b0b6ea34a63e Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 18 May 2020 02:35:35 +0900 -Subject: [PATCH] test/openssl/test_pkey: use EC keys for - PKey.generate_parameters tests - -OpenSSL 3.0 refuses to generate DSA parameters shorter than 2048 bits, -but generating 2048 bits parameters takes very long time. Let's use EC -in these test cases instead. ---- - test/openssl/test_pkey.rb | 27 +++++++++++---------------- - 1 file changed, 11 insertions(+), 16 deletions(-) - -diff --git a/test/openssl/test_pkey.rb b/test/openssl/test_pkey.rb -index 3630458b3c..88a6e04581 100644 ---- a/test/openssl/test_pkey.rb -+++ b/test/openssl/test_pkey.rb -@@ -27,20 +27,16 @@ def test_generic_oid_inspect - end - - def test_s_generate_parameters -- # 512 is non-default; 1024 is used if 'dsa_paramgen_bits' is not specified -- # with OpenSSL 1.1.0. -- pkey = OpenSSL::PKey.generate_parameters("DSA", { -- "dsa_paramgen_bits" => 512, -- "dsa_paramgen_q_bits" => 256, -+ pkey = OpenSSL::PKey.generate_parameters("EC", { -+ "ec_paramgen_curve" => "secp384r1", - }) -- assert_instance_of OpenSSL::PKey::DSA, pkey -- assert_equal 512, pkey.p.num_bits -- assert_equal 256, pkey.q.num_bits -- assert_equal nil, pkey.priv_key -+ assert_instance_of OpenSSL::PKey::EC, pkey -+ assert_equal "secp384r1", pkey.group.curve_name -+ assert_equal nil, pkey.private_key - - # Invalid options are checked - assert_raise(OpenSSL::PKey::PKeyError) { -- OpenSSL::PKey.generate_parameters("DSA", "invalid" => "option") -+ OpenSSL::PKey.generate_parameters("EC", "invalid" => "option") - } - - # Parameter generation callback is called -@@ -59,14 +55,13 @@ def test_s_generate_key - # DSA key pair cannot be generated without parameters - OpenSSL::PKey.generate_key("DSA") - } -- pkey_params = OpenSSL::PKey.generate_parameters("DSA", { -- "dsa_paramgen_bits" => 512, -- "dsa_paramgen_q_bits" => 256, -+ pkey_params = OpenSSL::PKey.generate_parameters("EC", { -+ "ec_paramgen_curve" => "secp384r1", - }) - pkey = OpenSSL::PKey.generate_key(pkey_params) -- assert_instance_of OpenSSL::PKey::DSA, pkey -- assert_equal 512, pkey.p.num_bits -- assert_not_equal nil, pkey.priv_key -+ assert_instance_of OpenSSL::PKey::EC, pkey -+ assert_equal "secp384r1", pkey.group.curve_name -+ assert_not_equal nil, pkey.private_key - end - - def test_hmac_sign_verify --- -2.32.0 - diff --git a/ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch b/ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch deleted file mode 100644 index c9421bc..0000000 --- a/ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 05fd14aea7eff2a6911a6f529f1237276482c6e7 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Fri, 10 Jul 2020 13:56:38 +0900 -Subject: [PATCH] test/openssl/test_ssl: relax regex to match OpenSSL's error - message - -OpenSSL 3.0 slightly changed the error message for a certificate -verification failure when an untrusted self-signed certificate is found -in the chain. ---- - test/openssl/test_ssl.rb | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb -index 6095d545b5..9e9b8b9b69 100644 ---- a/test/openssl/test_ssl.rb -+++ b/test/openssl/test_ssl.rb -@@ -964,7 +964,9 @@ def test_connect_certificate_verify_failed_exception_message - start_server(ignore_listener_error: true) { |port| - ctx = OpenSSL::SSL::SSLContext.new - ctx.set_params -- assert_raise_with_message(OpenSSL::SSL::SSLError, /self signed/) { -+ # OpenSSL <= 1.1.0: "self signed certificate in certificate chain" -+ # OpenSSL >= 3.0.0: "self-signed certificate in certificate chain" -+ assert_raise_with_message(OpenSSL::SSL::SSLError, /self.signed/) { - server_connect(port, ctx) - } - } --- -2.32.0 - diff --git a/ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch b/ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch deleted file mode 100644 index 2019380..0000000 --- a/ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch +++ /dev/null @@ -1,265 +0,0 @@ -From 2c6797bc97d7c92284dc3c0ed27f97ace4e5cfb9 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Mon, 31 May 2021 11:44:05 +0900 -Subject: [PATCH] test/openssl/utils: remove dup_public helper method - -It uses deprecated PKey::{RSA,DSA,DH}#set_* methods, which will not -work with OpenSSL 3.0. The same can easily be achieved using -PKey#public_to_der regardless of the key kind. ---- - test/openssl/test_pkey_dh.rb | 8 +++++--- - test/openssl/test_pkey_dsa.rb | 15 +++++++++++---- - test/openssl/test_pkey_ec.rb | 15 +++++++++++---- - test/openssl/test_pkey_rsa.rb | 31 +++++++++++++++++-------------- - test/openssl/utils.rb | 26 -------------------------- - 5 files changed, 44 insertions(+), 51 deletions(-) - -diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb -index f80af8f841..757704caf6 100644 ---- a/test/openssl/test_pkey_dh.rb -+++ b/test/openssl/test_pkey_dh.rb -@@ -40,12 +40,14 @@ def test_derive_key - - def test_DHparams - dh1024 = Fixtures.pkey("dh1024") -+ dh1024params = dh1024.public_key -+ - asn1 = OpenSSL::ASN1::Sequence([ - OpenSSL::ASN1::Integer(dh1024.p), - OpenSSL::ASN1::Integer(dh1024.g) - ]) - key = OpenSSL::PKey::DH.new(asn1.to_der) -- assert_same_dh dup_public(dh1024), key -+ assert_same_dh dh1024params, key - - pem = <<~EOF - -----BEGIN DH PARAMETERS----- -@@ -55,9 +57,9 @@ def test_DHparams - -----END DH PARAMETERS----- - EOF - key = OpenSSL::PKey::DH.new(pem) -- assert_same_dh dup_public(dh1024), key -+ assert_same_dh dh1024params, key - key = OpenSSL::PKey.read(pem) -- assert_same_dh dup_public(dh1024), key -+ assert_same_dh dh1024params, key - - assert_equal asn1.to_der, dh1024.to_der - assert_equal pem, dh1024.export -diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb -index 147e50176b..0994607f21 100644 ---- a/test/openssl/test_pkey_dsa.rb -+++ b/test/openssl/test_pkey_dsa.rb -@@ -138,6 +138,8 @@ def test_DSAPrivateKey_encrypted - - def test_PUBKEY - dsa512 = Fixtures.pkey("dsa512") -+ dsa512pub = OpenSSL::PKey::DSA.new(dsa512.public_to_der) -+ - asn1 = OpenSSL::ASN1::Sequence([ - OpenSSL::ASN1::Sequence([ - OpenSSL::ASN1::ObjectId("DSA"), -@@ -153,7 +155,7 @@ def test_PUBKEY - ]) - key = OpenSSL::PKey::DSA.new(asn1.to_der) - assert_not_predicate key, :private? -- assert_same_dsa dup_public(dsa512), key -+ assert_same_dsa dsa512pub, key - - pem = <<~EOF - -----BEGIN PUBLIC KEY----- -@@ -166,10 +168,15 @@ def test_PUBKEY - -----END PUBLIC KEY----- - EOF - key = OpenSSL::PKey::DSA.new(pem) -- assert_same_dsa dup_public(dsa512), key -+ assert_same_dsa dsa512pub, key -+ -+ assert_equal asn1.to_der, key.to_der -+ assert_equal pem, key.export - -- assert_equal asn1.to_der, dup_public(dsa512).to_der -- assert_equal pem, dup_public(dsa512).export -+ assert_equal asn1.to_der, dsa512.public_to_der -+ assert_equal asn1.to_der, key.public_to_der -+ assert_equal pem, dsa512.public_to_pem -+ assert_equal pem, key.public_to_pem - end - - def test_read_DSAPublicKey_pem -diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb -index 4b6df0290f..d62f1b5eb8 100644 ---- a/test/openssl/test_pkey_ec.rb -+++ b/test/openssl/test_pkey_ec.rb -@@ -210,6 +210,8 @@ def test_ECPrivateKey_encrypted - - def test_PUBKEY - p256 = Fixtures.pkey("p256") -+ p256pub = OpenSSL::PKey::EC.new(p256.public_to_der) -+ - asn1 = OpenSSL::ASN1::Sequence([ - OpenSSL::ASN1::Sequence([ - OpenSSL::ASN1::ObjectId("id-ecPublicKey"), -@@ -221,7 +223,7 @@ def test_PUBKEY - ]) - key = OpenSSL::PKey::EC.new(asn1.to_der) - assert_not_predicate key, :private? -- assert_same_ec dup_public(p256), key -+ assert_same_ec p256pub, key - - pem = <<~EOF - -----BEGIN PUBLIC KEY----- -@@ -230,10 +232,15 @@ def test_PUBKEY - -----END PUBLIC KEY----- - EOF - key = OpenSSL::PKey::EC.new(pem) -- assert_same_ec dup_public(p256), key -+ assert_same_ec p256pub, key -+ -+ assert_equal asn1.to_der, key.to_der -+ assert_equal pem, key.export - -- assert_equal asn1.to_der, dup_public(p256).to_der -- assert_equal pem, dup_public(p256).export -+ assert_equal asn1.to_der, p256.public_to_der -+ assert_equal asn1.to_der, key.public_to_der -+ assert_equal pem, p256.public_to_pem -+ assert_equal pem, key.public_to_pem - end - - def test_ec_group -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index 5e127f5407..4548bdb2cf 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -201,7 +201,7 @@ def test_sign_verify_pss - - def test_encrypt_decrypt - rsapriv = Fixtures.pkey("rsa-1") -- rsapub = dup_public(rsapriv) -+ rsapub = OpenSSL::PKey.read(rsapriv.public_to_der) - - # Defaults to PKCS #1 v1.5 - raw = "data" -@@ -216,7 +216,7 @@ def test_encrypt_decrypt - - def test_encrypt_decrypt_legacy - rsapriv = Fixtures.pkey("rsa-1") -- rsapub = dup_public(rsapriv) -+ rsapub = OpenSSL::PKey.read(rsapriv.public_to_der) - - # Defaults to PKCS #1 v1.5 - raw = "data" -@@ -346,13 +346,15 @@ def test_RSAPrivateKey_encrypted - - def test_RSAPublicKey - rsa1024 = Fixtures.pkey("rsa1024") -+ rsa1024pub = OpenSSL::PKey::RSA.new(rsa1024.public_to_der) -+ - asn1 = OpenSSL::ASN1::Sequence([ - OpenSSL::ASN1::Integer(rsa1024.n), - OpenSSL::ASN1::Integer(rsa1024.e) - ]) - key = OpenSSL::PKey::RSA.new(asn1.to_der) - assert_not_predicate key, :private? -- assert_same_rsa dup_public(rsa1024), key -+ assert_same_rsa rsa1024pub, key - - pem = <<~EOF - -----BEGIN RSA PUBLIC KEY----- -@@ -362,11 +364,13 @@ def test_RSAPublicKey - -----END RSA PUBLIC KEY----- - EOF - key = OpenSSL::PKey::RSA.new(pem) -- assert_same_rsa dup_public(rsa1024), key -+ assert_same_rsa rsa1024pub, key - end - - def test_PUBKEY - rsa1024 = Fixtures.pkey("rsa1024") -+ rsa1024pub = OpenSSL::PKey::RSA.new(rsa1024.public_to_der) -+ - asn1 = OpenSSL::ASN1::Sequence([ - OpenSSL::ASN1::Sequence([ - OpenSSL::ASN1::ObjectId("rsaEncryption"), -@@ -381,7 +385,7 @@ def test_PUBKEY - ]) - key = OpenSSL::PKey::RSA.new(asn1.to_der) - assert_not_predicate key, :private? -- assert_same_rsa dup_public(rsa1024), key -+ assert_same_rsa rsa1024pub, key - - pem = <<~EOF - -----BEGIN PUBLIC KEY----- -@@ -392,10 +396,15 @@ def test_PUBKEY - -----END PUBLIC KEY----- - EOF - key = OpenSSL::PKey::RSA.new(pem) -- assert_same_rsa dup_public(rsa1024), key -+ assert_same_rsa rsa1024pub, key -+ -+ assert_equal asn1.to_der, key.to_der -+ assert_equal pem, key.export - -- assert_equal asn1.to_der, dup_public(rsa1024).to_der -- assert_equal pem, dup_public(rsa1024).export -+ assert_equal asn1.to_der, rsa1024.public_to_der -+ assert_equal asn1.to_der, key.public_to_der -+ assert_equal pem, rsa1024.public_to_pem -+ assert_equal pem, key.public_to_pem - end - - def test_pem_passwd -@@ -482,12 +491,6 @@ def test_private_encoding_encrypted - assert_same_rsa rsa1024, OpenSSL::PKey.read(pem, "abcdef") - end - -- def test_public_encoding -- rsa1024 = Fixtures.pkey("rsa1024") -- assert_equal dup_public(rsa1024).to_der, rsa1024.public_to_der -- assert_equal dup_public(rsa1024).to_pem, rsa1024.public_to_pem -- end -- - def test_dup - key = Fixtures.pkey("rsa1024") - key2 = key.dup -diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb -index c1d737b2ab..f664bd3074 100644 ---- a/test/openssl/utils.rb -+++ b/test/openssl/utils.rb -@@ -313,32 +313,6 @@ def check_component(base, test, keys) - assert_equal base.send(comp), test.send(comp) - } - end -- -- def dup_public(key) -- case key -- when OpenSSL::PKey::RSA -- rsa = OpenSSL::PKey::RSA.new -- rsa.set_key(key.n, key.e, nil) -- rsa -- when OpenSSL::PKey::DSA -- dsa = OpenSSL::PKey::DSA.new -- dsa.set_pqg(key.p, key.q, key.g) -- dsa.set_key(key.pub_key, nil) -- dsa -- when OpenSSL::PKey::DH -- dh = OpenSSL::PKey::DH.new -- dh.set_pqg(key.p, nil, key.g) -- dh -- else -- if defined?(OpenSSL::PKey::EC) && OpenSSL::PKey::EC === key -- ec = OpenSSL::PKey::EC.new(key.group) -- ec.public_key = key.public_key -- ec -- else -- raise "unknown key type" -- end -- end -- end - end - - module OpenSSL::Certs --- -2.32.0 - diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index bc72c06..8a4dde6 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -15,42 +15,38 @@ addFilter(r'^rubygem-bundler\.noarch: E: non-executable-script /usr/share/gems/g # The bundled gem files permissions are overridden as 644 by `make install`. # https://bugs.ruby-lang.org/issues/17840 -# power_assert -# https://github.com/ruby/power_assert/issues/35 -addFilter(r'^rubygem-power_assert\.noarch: E: non-executable-script /usr/share/gems/gems/power_assert-[\d\.]+/bin/console 644 ') -addFilter(r'^rubygem-power_assert\.noarch: E: non-executable-script /usr/share/gems/gems/power_assert-[\d\.]+/bin/setup 644 ') -# rake -# https://github.com/ruby/rake/issues/385 -addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/bundle 644 ') -addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/console 644 ') -addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/rake 644 ') -addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/rdoc 644 ') -addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/rubocop 644 ') -addFilter(r'^rubygem-rake\.noarch: E: non-executable-script /usr/share/gems/gems/rake-[\d\.]+/bin/setup 644 ') -# rbs -# https://github.com/ruby/rbs/issues/673 -addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/annotate-with-rdoc 644 ') -addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/console 644 ') -addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/query-rdoc 644 ') -addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/rbs-prof 644 ') -addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/setup 644 ') -addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/sort 644 ') -addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/steep 644 ') -addFilter(r'^rubygem-rbs\.noarch: E: non-executable-script /usr/share/gems/gems/rbs-[\d\.]+/bin/test_runner.rb 644 ') -# test-unit -addFilter(r'^rubygem-test-unit\.noarch: E: non-executable-script /usr/share/gems/gems/test-unit-[\d\.]+/test/run-test.rb 644 ') +# https://github.com/rubygems/rubygems/issues/5255 +# https://github.com/ruby/debug/pull/481 +# https://github.com/ruby/net-ftp/pull/12 +# https://github.com/ruby/net-imap/pull/53 +# https://github.com/ruby/net-pop/pull/7 +# https://github.com/ruby/prime/pull/16 +addFilter(r'^.*: E: non-executable-script /usr/share/gems/gems/(debug|net-(ftp|imap|pop)|prime)-[\d\.]+/bin/\w+ 644 ') -# The function `chroot` without using `chdir` is detected by rpmlint with the -# following message. However it looks a false positive as the `chroot` in the -# `dir.c` is just used as a Ruby binding `Dir.chroot` for the function. -# -# ruby-libs.x86_64: E: missing-call-to-chdir-with-chroot /usr/lib64/libruby.so.3.0.1 -# This executable appears to call chroot without using chdir to change the -# current directory. This is likely an error and permits an attacker to break -# out of the chroot by using fchdir. While that's not always a security issue, -# this has to be checked. -addFilter(r'^ruby-libs\.\w+: E: missing-call-to-chdir-with-chroot /usr/lib(64)?/libruby.so.[\d/.]+$') +# Ruby provides API to set the cipher list. +addFilter(r'^ruby-libs\.\w+: W: crypto-policy-non-compliance-openssl /usr/lib(64)?/ruby/openssl.so SSL_CTX_set_cipher_list$') + +# `gethostbyname` is part of deprecated Ruby API. There is also request to drop the API altogether: +# https://bugs.ruby-lang.org/issues/13097 +# https://bugs.ruby-lang.org/issues/17944 +addFilter(r'^ruby-libs\.\w+: W: binary-or-shlib-calls-gethostbyname /usr/lib(64)?/ruby/socket.so$') # Nothing referred and no dependency information should be no problem. # https://bugs.ruby-lang.org/issues/16558#note-2 -addFilter(r'^ruby-libs\.\w+: E: shared-lib-without-dependency-information /usr/lib(64)?/ruby/enc/gb2312.so$') +addFilter(r'^ruby-libs\.\w+: E: shared-library-without-dependency-information /usr/lib(64)?/ruby/enc/gb2312.so$') + +# These are Ruby plugins, where Ruby always load glibc prior the library. +addFilter(r'^ruby-libs\.\w+: W: library-not-linked-against-libc /usr/lib(64)?/ruby/.*.so$') + +# Rake ships some examples. +addFilter(r'^rubygem-rake.noarch: W: devel-file-in-non-devel-package /usr/share/gems/gems/rake-[\d\.]+/doc/example/\w+.c$') + +# Some executables don't have their manual pages. Is it worth of use help2man? +addFilter(r'^.+: W: no-manual-page-for-binary (bundler|gem|rbs|rdbg|rdoc|ruby-mri|typeprof)$') + +# Default gems does not come with any documentation. +addFilter(r'^rubygem-(bigdecimal|io-console|json|psych)\.\w+: W: no-documentation$') + +# rubygems-devel ships only RPM macros and generators. Their placement is given +# by RPM and can't be modified. +addFilter(r'rubygems-devel.noarch: W: only-non-binary-in-usr-lib$') diff --git a/ruby.spec b/ruby.spec index f92b10d..01cb7bb 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 -%global minor_version 0 -%global teeny_version 3 +%global minor_version 1 +%global teeny_version 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -10,7 +10,7 @@ #%%global milestone rc1 # Keep the revision enabled for pre-releases from GIT. -#%%global revision 684649ea05 +#%%global revision fb4df44d16 %global ruby_archive %{name}-%{ruby_version} @@ -22,7 +22,7 @@ %endif -%global release 159 +%global release 160 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -30,39 +30,49 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.2.32 +%global rubygems_version 3.3.3 %global rubygems_molinillo_version 0.7.0 # Default gems. -%global bundler_version 2.2.32 +%global bundler_version 2.3.3 %global bundler_connection_pool_version 2.3.0 %global bundler_fileutils_version 1.4.1 %global bundler_molinillo_version 0.7.0 %global bundler_net_http_persistent_version 4.0.0 %global bundler_thor_version 1.1.0 %global bundler_tmpdir_version 0.1.0 -%global bundler_uri_version 0.10.0 +# TODO: Check the version if/when available in library. +%global bundler_tsort_version 0.1.1 +%global bundler_uri_version 0.10.1 -%global bigdecimal_version 3.0.0 -%global did_you_mean_version 1.5.0 -%global erb_version 2.2.0 -%global io_console_version 0.5.7 -%global irb_version 1.3.5 -%global json_version 2.5.1 -%global openssl_version 2.2.1 -%global psych_version 3.3.2 -%global racc_version 1.5.2 -%global rdoc_version 6.3.3 +%global bigdecimal_version 3.1.1 +%global did_you_mean_version 1.6.1 +%global erb_version 2.2.3 +%global io_console_version 0.5.10 +%global irb_version 1.4.1 +%global json_version 2.6.1 +%global openssl_version 3.0.0 +%global psych_version 4.0.3 +%global racc_version 1.6.0 +%global rdoc_version 6.4.0 +%global stringio_version 3.0.1 # Bundled gems. -%global minitest_version 5.14.2 -%global power_assert_version 1.2.0 -%global rake_version 13.0.3 -%global rbs_version 1.4.0 -%global test_unit_version 3.3.7 +%global minitest_version 5.15.0 +%global power_assert_version 2.0.1 +%global rake_version 13.0.6 +%global test_unit_version 3.5.3 %global rexml_version 3.2.5 %global rss_version 0.2.9 -%global typeprof_version 0.15.2 +%global net_ftp_version 0.1.3 +%global net_imap_version 0.2.2 +%global net_pop_version 0.1.1 +%global net_smtp_version 0.3.1 +%global matrix_version 0.4.2 +%global prime_version 0.1.2 +%global rbs_version 2.0.0 +%global typeprof_version 0.21.1 +%global debug_version 1.4.0 %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* @@ -142,114 +152,9 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ # For now, load the ABRT hook via this simple patch: Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch -# Fix DWARF5 support. -# https://bugzilla.redhat.com/show_bug.cgi?id=1920533 -# https://bugs.ruby-lang.org/issues/17585 -# https://github.com/ruby/ruby/pull/4240 -Patch15: ruby-3.1.0-Support-GCCs-DWARF-5.patch -# Fix segfaults with enabled LTO. -# https://bugs.ruby-lang.org/issues/18062 -# https://github.com/ruby/ruby/pull/4716 -Patch16: ruby-3.1.0-Get-rid-of-type-punning-pointer-casts.patch -# DWARF5/LTO fixes for SIGSEV handler. -# https://bugs.ruby-lang.org/issues/17052 -# https://github.com/ruby/ruby/commit/72317b333b85eed483ad00bcd4f40944019a7c13 -Patch17: ruby-3.1.0-Ignore-DW_FORM_ref_addr.patch -# https://bugs.ruby-lang.org/issues/17052#note-9 -# https://bugs.ruby-lang.org/attachments/download/8974/ruby-addr2line-DW_FORM_ref_addr.patch -# https://github.com/ruby/ruby/commit/a9977ba2f9863e3fb1b2346589ebbca67d80536c -Patch18: ruby-3.1.0-addr2line-DW_FORM_ref_addr.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch -# Add AC_PROG_CC to make C++ compiler dependency optional on autoconf >= 2.70. -# https://github.com/ruby/ruby/commit/912a8dcfc5369d840dcd6bf0f88ee0bac7d902d6 -Patch20: ruby-3.1.0-autoconf-2.70-add-ac-prog-cc.patch -# Allow to exclude test with fully qualified name. -# https://bugs.ruby-lang.org/issues/16936 -# https://github.com/ruby/ruby/pull/5026 -Patch21: ruby-3.1.0-Properly-exclude-test-cases.patch -# Fix loading of default gems. -# https://bugzilla.redhat.com/show_bug.cgi?id=2027099 -# https://github.com/rubygems/rubygems/pull/5154 -Patch22: rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch -# Fix segfault in `TestArray#test_sample` on s390x. -# https://github.com/ruby/ruby/pull/5239 -Patch23: ruby-3.1.0-Fix-stack-buffer-overflow.patch - - -# OpenSSL 3.0 compatibility patches - -# Revert OpenSSL < 3.x enforcement. -# https://github.com/ruby/openssl/commit/202ff1372a40a8adf9aac74bfe8a39141b0c57e5 -Patch30: ruby-3.0.3-ext-openssl-extconf.rb-require-OpenSSL-version-1.0.1.patch - -# Fix test broken by wrongly formatted distinguished name submitted to -# `OpenSSL::X509::Name.parse`. -# https://github.com/ruby/openssl/issues/470 -# https://github.com/rubygems/rubygems/pull/5030 -Patch31: rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch - -# Refactor PEM/DER serialization code. -# https://github.com/ruby/openssl/pull/328 -Patch40: ruby-3.1.0-Refactor-PEM-DER-serialization-code.patch -# Implement more 'generic' operations using the EVP API. -# https://github.com/ruby/openssl/pull/329 -Patch41: ruby-3.1.0-Add-more-support-for-generic-pkey-types.patch -# Migrate from the low-level HMAC API to the EVP API. -# https://github.com/ruby/openssl/pull/371 -Patch42: ruby-3.1.0-Migrate-from-the-low-level-HMAC-API-to-the-EVP-API.patch -# Allow setting algorithm-specific options in #sign and #verify. -# https://github.com/ruby/openssl/pull/374 -Patch43: ruby-3.1.0-Allow-setting-algorithm-specific-options-in-sign-and-verify.patch -# Use high level EVP interface to generate parameters and keys. -# https://github.com/ruby/openssl/pull/397 -Patch44: ruby-3.1.0-Use-high-level-EVP-interface-to-generate-parameters-and-keys.patch -# Use EVP API in more places. -# https://github.com/ruby/openssl/pull/436 -Patch45: ruby-3.1.0-Use-EVP-API-in-more-places.patch -# Implement PKey#{encrypt,decrypt,sign_raw,verify_{raw,verify_recover}}. -# https://github.com/ruby/openssl/pull/382 -Patch46: ruby-3.1.0-Implement-PKey-encrypt-decrypt-sign_raw-verify_raw-and-verify_recover.patch -# Fix `OpenSSL::TestSSL#test_dup` test failure. -# https://github.com/ruby/openssl/commit/7b66eaa2dbabb6570dbbbdfac24c4dcdcc6793d7 -Patch47: ruby-3.1.0-test-openssl-utils-remove-dup_public-helper-method.patch -# Fix `OpenSSL::TestDigest#test_digest_constants` test case. -# https://github.com/ruby/openssl/commit/a3e59f4c2e200c76ef1d93945ff8737a05715e17 -Patch48: ruby-3.1.0-test-openssl-test_digest-do-not-test-constants-for-l.patch -# Fix `OpenSSL::TestSSL#test_connect_certificate_verify_failed_exception_message` -# test case. -# https://github.com/ruby/openssl/commit/b5a0a198505452c7457b192da2e5cd5dda04f23d -Patch49: ruby-3.1.0-test-openssl-test_ssl-relax-regex-to-match-OpenSSL-s.patch -# Fix `OpenSSL::TestPKCS12#test_{new_with_no_keys,new_with_one_key_and_one_cert}` -# test failures. -# https://github.com/ruby/openssl/commit/998406d18f2acf73090e9fd9d92a7b4227ac593b -Patch50: ruby-3.1.0-test-openssl-test_pkcs12-fix-test-failures-with-Open.patch -# Fix `OpenSSL::TestPKey#test_s_generate_key` test case. -# https://github.com/ruby/openssl/commit/c732387ee5aaa8c5a9717e8b3ffebb3d7430e99a -Patch51: ruby-3.1.0-test-openssl-test_pkey-use-EC-keys-for-PKey.generate.patch -# Miscellaneous changes for OpenSSL 3.0 support. -# https://github.com/ruby/openssl/pull/468 -Patch52: ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support.patch -# Use OSSL_DECODER to load encrypted PEM. -# https://github.com/ruby/openssl/pull/479 -Patch53: ruby-3.1.0-Use-OSSL_DECODER-to-load-encrypted-PEM-on-OpenSSL-3.0.patch -# Allocate EVP_PKEY on #initialize. -# https://github.com/ruby/openssl/pull/478 -Patch54: ruby-3.1.0-Allocate-EVP_PKEY-on-initialize.patch -# Disable `OpenSSL::TestPKeyRSA#test_no_private_exp` test case which is not -# compatible with OpenSSL 3.0. -# https://github.com/ruby/ruby/commit/47975ece4096cdab16b3f200f93ea2377dfb41ac -Patch55: ruby-3.1.0-Disable-test_no_private_exp-on-OpenSSL-3.0.patch -# Deprecate PKey::*#set_* and PKey::{DH,EC}#generate_key! -# https://github.com/ruby/openssl/pull/480 -Patch56: ruby-3.1.0-Deprecate-PKey-set_-and-PKey-DH-EC-generate_key.patch -# Fix `OpenSSL::PKey::PKeyError: pkeys are immutable on OpenSSL 3.0` errors. -# https://github.com/rubygems/rubygems/pull/5196 -Patch57: rubygems-3.3.1-Fix-compatibility-with-OpenSSL3.0.patch -# Miscellaneous changes for OpenSSL 3.0 support. -# https://github.com/ruby/openssl/pull/481 -Patch58: ruby-3.1.0-Miscellaneous-changes-for-OpenSSL-3.0-support-part-2.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -257,7 +162,6 @@ Recommends: ruby(rubygems) >= %{rubygems_version} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} BuildRequires: autoconf -BuildRequires: gdbm-devel %{?with_gmp:BuildRequires: gmp-devel} BuildRequires: libffi-devel BuildRequires: openssl-devel @@ -385,6 +289,7 @@ Obsoletes: rubygem-racc < 1.4.16-130 # Obsoleted by Ruby 3.0 in F34 timeframe. Obsoletes: rubygem-openssl < 2.2.0-145 Provides: rubygem(openssl) = %{openssl_version}-%{release} +Provides: rubygem(stringio) = %{stringio_version} BuildArch: noarch %description default-gems @@ -422,6 +327,7 @@ Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Requires: rubygem(io-console) >= %{io_console_version} Requires: rubygem(json) >= %{json_version} +Requires: rubygem(psych) >= %{psych_version} Provides: rdoc = %{version}-%{release} Provides: ri = %{version}-%{release} Provides: rubygem(rdoc) = %{version}-%{release} @@ -497,6 +403,7 @@ Version: %{psych_version} License: MIT Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} +Requires: rubygem(stringio) >= %{stringio_version} Provides: rubygem(psych) = %{version}-%{release} %description -n rubygem-psych @@ -534,6 +441,22 @@ many machines, systematically and repeatably. # These are regular packages, which might be installed just optionally. Users # should list them among their dependencies (in Gemfile). +%package bundled-gems +Summary: Bundled gems which are part of Ruby StdLib +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(net-ftp) = %{net_ftp_version} +Provides: rubygem(net-imap) = %{net_imap_version} +Provides: rubygem(net-pop) = %{net_pop_version} +Provides: rubygem(net-smtp) = %{net_smtp_version} +Provides: rubygem(matrix) = %{matrix_version} +Provides: rubygem(prime) = %{prime_version} +Provides: rubygem(debug) = %{debug_version} + +%description bundled-gems +Bundled gems which are part of Ruby StdLib. While being part of Ruby, these +needs to be listed in Gemfile to be used by Bundler. + + %package -n rubygem-minitest Summary: Minitest provides a complete suite of testing facilities Version: %{minitest_version} @@ -595,7 +518,6 @@ License: Ruby or BSD Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} Provides: rubygem(rbs) = %{version}-%{release} -BuildArch: noarch %description -n rubygem-rbs RBS is the language for type signatures for Ruby and standard library @@ -693,36 +615,7 @@ rm -rf ext/fiddle/libffi* %patch4 -p1 %patch5 -p1 %patch6 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 %patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch30 -p1 -R -%patch31 -p1 -%patch40 -p1 -%patch41 -p1 -%patch42 -p1 -%patch43 -p1 -%patch44 -p1 -%patch45 -p1 -%patch46 -p1 -%patch47 -p1 -%patch48 -p1 -%patch49 -p1 -%patch50 -p1 -%patch51 -p1 -%patch52 -p1 -%patch53 -p1 -%patch54 -p1 -%patch55 -p1 -%patch56 -p1 -%patch57 -p1 -%patch58 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -756,6 +649,14 @@ autoconf %install rm -rf %{buildroot} + +# Workaround binary extensions installation issues. +# https://bugs.ruby-lang.org/issues/18373 +find .bundle -name extconf.rb -exec \ + sed -i \ + -e '/create_makefile/i \$arch_hdrdir = "$(hdrdir)/../.ext/include/$(arch)"' \ + -e '/create_makefile/i \$DLDFLAGS << " -L#{$top_srcdir}"' {} \; + %make_install # TODO: Regenerate RBS parser in lib/rbs/parser.rb @@ -878,10 +779,16 @@ ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby # Move the binary extensions into proper place (if no gem has binary extension, # the extensions directory might be empty). +# TODO: Get information about extension form .gemspec files. find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{ruby_version}/* -maxdepth 0 \ + -exec rm '{}/gem_make.out' \; \ -exec mv '{}' %{buildroot}%{_libdir}/gems/%{name}/ \; \ || echo "No gem binary extensions to move." +# Remove the extension sources and library copies from `lib` dir. +find %{buildroot}%{gem_dir}/gems/*/ext -maxdepth 0 -exec rm -rf '{}' + +find %{buildroot}%{gem_dir}/gems/*/lib -name \*.so -delete + # Move man pages into proper location mkdir -p %{buildroot}%{_mandir}/man{1,5} mv %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/doc/rake.1 %{buildroot}%{_mandir}/man1 @@ -957,7 +864,10 @@ checksec --file=libruby.so.%{ruby_version} | \ == '%{bundler_molinillo_version}' ] # Net::HTTP::Persistent. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +# Require `rubygems` to workaround the `': uninitialized +# constant Gem (NameError) issue. +# https://github.com/rubygems/rubygems/issues/5119 +[ "`make runruby TESTRUN_SCRIPT=\"-rrubygems -e \\\" \ module Bundler; module Persistent; module Net; module HTTP; \ end; end; end; end; \ require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'; \ @@ -1001,6 +911,16 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} +# https://bugs.ruby-lang.org/issues/18380 +DISABLE_TESTS="$DISABLE_TESTS -n !/TestAddressResolve#test_socket_getnameinfo_domain_blocking/" + +%ifarch armv7hl +# TestReadline#test_interrupt_in_other_thread fails on 32 bit arches according +# to upstream, but the test is disabled just on Travis, not in test suite. +# https://bugs.ruby-lang.org/issues/18393 +DISABLE_TESTS="$DISABLE_TESTS -n !/TestReadline#test_interrupt_in_other_thread/" +%endif + # Several test broken by libffi-3.4.2. There should be fix in libffi, once # other components are fixed. # https://bugzilla.redhat.com/show_bug.cgi?id=2040380 @@ -1063,28 +983,26 @@ mv test/fiddle/test_import.rb{,.disable} %{ruby_libdir}/coverage.rb %{ruby_libdir}/csv* %{ruby_libdir}/date.rb -%{ruby_libdir}/debug.rb %{ruby_libdir}/delegate* %{ruby_libdir}/digest* %{ruby_libdir}/drb* %{ruby_libdir}/English.rb -%{ruby_libdir}/erb.rb +%{ruby_libdir}/erb* +%{ruby_libdir}/error_highlight* %{ruby_libdir}/expect.rb %{ruby_libdir}/fiddle* %{ruby_libdir}/fileutils.rb %{ruby_libdir}/find.rb %{ruby_libdir}/forwardable* %{ruby_libdir}/getoptlong* -%{ruby_libdir}/io %{ruby_libdir}/ipaddr.rb %{ruby_libdir}/kconv.rb %{ruby_libdir}/logger* -%{ruby_libdir}/matrix* %{ruby_libdir}/mkmf.rb %{ruby_libdir}/monitor.rb %{ruby_libdir}/mutex_m.rb %{ruby_libdir}/net -%{ruby_libdir}/objspace.rb +%{ruby_libdir}/objspace* %{ruby_libdir}/observer* %{ruby_libdir}/open-uri.rb %{ruby_libdir}/open3* @@ -1094,8 +1012,8 @@ mv test/fiddle/test_import.rb{,.disable} %{ruby_libdir}/pathname.rb %{ruby_libdir}/pp.rb %{ruby_libdir}/prettyprint.rb -%{ruby_libdir}/prime.rb %{ruby_libdir}/pstore* +%{ruby_libdir}/random %{ruby_libdir}/readline.rb %{ruby_libdir}/reline* %{ruby_libdir}/resolv.rb @@ -1112,7 +1030,6 @@ mv test/fiddle/test_import.rb{,.disable} %{ruby_libdir}/timeout* %{ruby_libdir}/time.rb %{ruby_libdir}/tmpdir.rb -%{ruby_libdir}/tracer* %{ruby_libdir}/tsort.rb %{ruby_libdir}/unicode_normalize %{ruby_libdir}/un.rb @@ -1121,14 +1038,13 @@ mv test/fiddle/test_import.rb{,.disable} %{ruby_libdir}/yaml* # Platform specific libraries. -%{_libdir}/libruby.so.* +%{_libdir}/libruby.so.{%{major_minor_version},%{ruby_version}} %dir %{ruby_libarchdir} %dir %{ruby_libarchdir}/cgi %{ruby_libarchdir}/cgi/escape.so %{ruby_libarchdir}/continuation.so %{ruby_libarchdir}/coverage.so %{ruby_libarchdir}/date_core.so -%{ruby_libarchdir}/dbm.so %dir %{ruby_libarchdir}/digest %{ruby_libarchdir}/digest.so %{ruby_libarchdir}/digest/bubblebabble.so @@ -1201,9 +1117,7 @@ mv test/fiddle/test_import.rb{,.disable} %{ruby_libarchdir}/enc/windows_31j.so %{ruby_libarchdir}/etc.so %{ruby_libarchdir}/fcntl.so -%{ruby_libarchdir}/fiber.so %{ruby_libarchdir}/fiddle.so -%{ruby_libarchdir}/gdbm.so %dir %{ruby_libarchdir}/io %{ruby_libarchdir}/io/nonblock.so %{ruby_libarchdir}/io/wait.so @@ -1264,77 +1178,69 @@ mv test/fiddle/test_import.rb{,.disable} %files default-gems %{gem_dir}/specifications/default/abbrev-0.1.0.gemspec -%{gem_dir}/specifications/default/base64-0.1.0.gemspec -%{gem_dir}/specifications/default/benchmark-0.1.1.gemspec -%{gem_dir}/specifications/default/cgi-0.2.1.gemspec -%{gem_dir}/specifications/default/csv-3.1.9.gemspec -%{gem_dir}/specifications/default/date-3.1.3.gemspec -%{gem_dir}/specifications/default/dbm-1.1.0.gemspec -%{gem_dir}/specifications/default/debug-0.2.1.gemspec +%{gem_dir}/specifications/default/base64-0.1.1.gemspec +%{gem_dir}/specifications/default/benchmark-0.2.0.gemspec +%{gem_dir}/specifications/default/cgi-0.3.1.gemspec +%{gem_dir}/specifications/default/csv-3.2.2.gemspec +%{gem_dir}/specifications/default/date-3.2.2.gemspec %{gem_dir}/specifications/default/delegate-0.2.0.gemspec %{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec -%{gem_dir}/specifications/default/digest-3.0.0.gemspec -%{gem_dir}/specifications/default/drb-2.0.5.gemspec +%{gem_dir}/specifications/default/digest-3.1.0.gemspec +%{gem_dir}/specifications/default/drb-2.1.0.gemspec %{gem_dir}/specifications/default/english-0.7.1.gemspec %{gem_dir}/specifications/default/erb-%{erb_version}.gemspec +%{gem_dir}/specifications/default/error_highlight-0.3.0.gemspec %{gem_dir}/specifications/default/etc-1.3.0.gemspec %{gem_dir}/specifications/default/fcntl-1.0.1.gemspec -%{gem_dir}/specifications/default/fiddle-1.0.8.gemspec -%{gem_dir}/specifications/default/fileutils-1.5.0.gemspec -%{gem_dir}/specifications/default/find-0.1.0.gemspec +%{gem_dir}/specifications/default/fiddle-1.1.0.gemspec +%{gem_dir}/specifications/default/fileutils-1.6.0.gemspec +%{gem_dir}/specifications/default/find-0.1.1.gemspec %{gem_dir}/specifications/default/forwardable-1.3.2.gemspec -%{gem_dir}/specifications/default/gdbm-2.1.0.gemspec %{gem_dir}/specifications/default/getoptlong-0.1.1.gemspec %{gem_dir}/specifications/default/io-nonblock-0.1.0.gemspec -%{gem_dir}/specifications/default/io-wait-0.2.0.gemspec -%{gem_dir}/specifications/default/ipaddr-1.2.2.gemspec -%{gem_dir}/specifications/default/logger-1.4.3.gemspec -%{gem_dir}/specifications/default/matrix-0.3.1.gemspec +%{gem_dir}/specifications/default/io-wait-0.2.1.gemspec +%{gem_dir}/specifications/default/ipaddr-1.2.3.gemspec +%{gem_dir}/specifications/default/logger-1.5.0.gemspec %{gem_dir}/specifications/default/mutex_m-0.1.1.gemspec -%{gem_dir}/specifications/default/net-ftp-0.1.2.gemspec -%{gem_dir}/specifications/default/net-http-0.1.1.gemspec -%{gem_dir}/specifications/default/net-imap-0.1.1.gemspec -%{gem_dir}/specifications/default/net-pop-0.1.1.gemspec -%{gem_dir}/specifications/default/net-protocol-0.1.1.gemspec -%{gem_dir}/specifications/default/net-smtp-0.2.1.gemspec -%{gem_dir}/specifications/default/nkf-0.1.0.gemspec +%{gem_dir}/specifications/default/net-http-0.2.0.gemspec +%{gem_dir}/specifications/default/net-protocol-0.1.2.gemspec +%{gem_dir}/specifications/default/nkf-0.1.1.gemspec %{gem_dir}/specifications/default/observer-0.1.1.gemspec %{gem_dir}/specifications/default/open3-0.1.1.gemspec -%{gem_dir}/specifications/default/open-uri-0.1.0.gemspec -%{gem_dir}/specifications/default/optparse-0.1.1.gemspec +%{gem_dir}/specifications/default/open-uri-0.2.0.gemspec +%{gem_dir}/specifications/default/optparse-0.2.0.gemspec %{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec -%{gem_dir}/specifications/default/ostruct-0.3.1.gemspec -%{gem_dir}/specifications/default/pathname-0.1.0.gemspec -%{gem_dir}/specifications/default/pp-0.2.1.gemspec +%{gem_dir}/specifications/default/ostruct-0.5.2.gemspec +%{gem_dir}/specifications/default/pathname-0.2.0.gemspec +%{gem_dir}/specifications/default/pp-0.3.0.gemspec %{gem_dir}/specifications/default/prettyprint-0.1.1.gemspec -%{gem_dir}/specifications/default/prime-0.1.2.gemspec %{gem_dir}/specifications/default/pstore-0.1.1.gemspec %{gem_dir}/specifications/default/racc-%{racc_version}.gemspec -%{gem_dir}/specifications/default/readline-0.0.2.gemspec -%{gem_dir}/specifications/default/readline-ext-0.1.1.gemspec -%{gem_dir}/specifications/default/reline-0.2.5.gemspec +%{gem_dir}/specifications/default/readline-0.0.3.gemspec +%{gem_dir}/specifications/default/readline-ext-0.1.4.gemspec +%{gem_dir}/specifications/default/reline-0.3.0.gemspec %{gem_dir}/specifications/default/resolv-0.2.1.gemspec %{gem_dir}/specifications/default/resolv-replace-0.1.0.gemspec %{gem_dir}/specifications/default/rinda-0.1.1.gemspec -%{gem_dir}/specifications/default/securerandom-0.1.0.gemspec -%{gem_dir}/specifications/default/set-1.0.1.gemspec +%{gem_dir}/specifications/default/ruby2_keywords-0.0.5.gemspec +%{gem_dir}/specifications/default/securerandom-0.1.1.gemspec +%{gem_dir}/specifications/default/set-1.0.2.gemspec %{gem_dir}/specifications/default/shellwords-0.1.0.gemspec %{gem_dir}/specifications/default/singleton-0.1.1.gemspec -%{gem_dir}/specifications/default/stringio-3.0.1.gemspec +%{gem_dir}/specifications/default/stringio-%{stringio_version}.gemspec %{gem_dir}/specifications/default/strscan-3.0.1.gemspec %{gem_dir}/specifications/default/syslog-0.1.0.gemspec -%{gem_dir}/specifications/default/tempfile-0.1.1.gemspec -%{gem_dir}/specifications/default/time-0.1.0.gemspec -%{gem_dir}/specifications/default/timeout-0.1.1.gemspec +%{gem_dir}/specifications/default/tempfile-0.1.2.gemspec +%{gem_dir}/specifications/default/time-0.2.0.gemspec +%{gem_dir}/specifications/default/timeout-0.2.0.gemspec %{gem_dir}/specifications/default/tmpdir-0.1.2.gemspec %{gem_dir}/specifications/default/tsort-0.1.0.gemspec -%{gem_dir}/specifications/default/tracer-0.1.1.gemspec -%{gem_dir}/specifications/default/un-0.1.0.gemspec -%{gem_dir}/specifications/default/uri-0.10.1.gemspec +%{gem_dir}/specifications/default/un-0.2.0.gemspec +%{gem_dir}/specifications/default/uri-0.11.0.gemspec %{gem_dir}/specifications/default/weakref-0.1.1.gemspec #%%{gem_dir}/specifications/default/win32ole-1.8.8.gemspec -%{gem_dir}/specifications/default/yaml-0.1.1.gemspec -%{gem_dir}/specifications/default/zlib-2.0.0.gemspec +%{gem_dir}/specifications/default/yaml-0.2.0.gemspec +%{gem_dir}/specifications/default/zlib-2.1.1.gemspec %{gem_dir}/gems/erb-%{erb_version} # Use standalone rubygem-racc if Racc binary is required. Shipping this @@ -1390,7 +1296,8 @@ mv test/fiddle/test_import.rb{,.disable} %{ruby_libdir}/psych.rb %{ruby_libarchdir}/psych.so %{_libdir}/gems/%{name}/psych-%{psych_version} -%{gem_dir}/gems/psych-%{psych_version} +%dir %{gem_dir}/gems/psych-%{psych_version} +%{gem_dir}/gems/psych-%{psych_version}/lib %{gem_dir}/specifications/psych-%{psych_version}.gemspec %files -n rubygem-bundler @@ -1401,15 +1308,95 @@ mv test/fiddle/test_import.rb{,.disable} %{_mandir}/man1/bundle*.1* %{_mandir}/man5/gemfile.5* +%files bundled-gems +%{_bindir}/rdbg +%dir %{_libdir}/gems/%{name}/debug-%{debug_version} +%{_libdir}/gems/%{name}/debug-%{debug_version}/gem.build_complete +%dir %{_libdir}/gems/%{name}/debug-%{debug_version}/debug +%{_libdir}/gems/%{name}/debug-%{debug_version}/debug/debug.so +%dir %{gem_dir}/gems/debug-%{debug_version} +%exclude %{gem_dir}/gems/debug-%{debug_version}/.* +%doc %{gem_dir}/gems/debug-%{debug_version}/CONTRIBUTING.md +%{gem_dir}/gems/debug-%{debug_version}/Gemfile +%license %{gem_dir}/gems/debug-%{debug_version}/LICENSE.txt +%doc %{gem_dir}/gems/debug-%{debug_version}/README.md +%{gem_dir}/gems/debug-%{debug_version}/Rakefile +%doc %{gem_dir}/gems/debug-%{debug_version}/TODO.md +%{gem_dir}/gems/debug-%{debug_version}/bin +%{gem_dir}/gems/debug-%{debug_version}/exe +%{gem_dir}/gems/debug-%{debug_version}/lib +%{gem_dir}/gems/debug-%{debug_version}/misc +%{gem_dir}/specifications/debug-%{debug_version}.gemspec + +%dir %{gem_dir}/gems/net-ftp-%{net_ftp_version} +%{gem_dir}/gems/net-ftp-%{net_ftp_version}/Gemfile +%license %{gem_dir}/gems/net-ftp-%{net_ftp_version}/LICENSE.txt +%doc %{gem_dir}/gems/net-ftp-%{net_ftp_version}/README.md +%{gem_dir}/gems/net-ftp-%{net_ftp_version}/Rakefile +%{gem_dir}/gems/net-ftp-%{net_ftp_version}/bin +%{gem_dir}/gems/net-ftp-%{net_ftp_version}/lib +%{gem_dir}/specifications/net-ftp-%{net_ftp_version}.gemspec + +%dir %{gem_dir}/gems/net-imap-%{net_imap_version} +%{gem_dir}/gems/net-imap-%{net_imap_version}/Gemfile +%license %{gem_dir}/gems/net-imap-%{net_imap_version}/LICENSE.txt +%doc %{gem_dir}/gems/net-imap-%{net_imap_version}/README.md +%{gem_dir}/gems/net-imap-%{net_imap_version}/Rakefile +%{gem_dir}/gems/net-imap-%{net_imap_version}/bin +%{gem_dir}/gems/net-imap-%{net_imap_version}/lib +%{gem_dir}/specifications/net-imap-%{net_imap_version}.gemspec + +%dir %{gem_dir}/gems/net-pop-%{net_pop_version} +%{gem_dir}/gems/net-pop-%{net_pop_version}/Gemfile +%license %{gem_dir}/gems/net-pop-%{net_pop_version}/LICENSE.txt +%doc %{gem_dir}/gems/net-pop-%{net_pop_version}/README.md +%{gem_dir}/gems/net-pop-%{net_pop_version}/Rakefile +%{gem_dir}/gems/net-pop-%{net_pop_version}/bin +%{gem_dir}/gems/net-pop-%{net_pop_version}/lib +%{gem_dir}/specifications/net-pop-%{net_pop_version}.gemspec + +%dir %{gem_dir}/gems/net-smtp-%{net_smtp_version} +%license %{gem_dir}/gems/net-smtp-%{net_smtp_version}/LICENSE.txt +%{gem_dir}/gems/net-smtp-%{net_smtp_version}/lib +%{gem_dir}/specifications/net-smtp-%{net_smtp_version}.gemspec + +%dir %{gem_dir}/gems/matrix-%{matrix_version} +%license %{gem_dir}/gems/matrix-%{matrix_version}/LICENSE.txt +%{gem_dir}/gems/matrix-%{matrix_version}/lib +%{gem_dir}/specifications/matrix-%{matrix_version}.gemspec + +%dir %{gem_dir}/gems/prime-%{prime_version} +%{gem_dir}/gems/prime-%{prime_version}/Gemfile +%license %{gem_dir}/gems/prime-%{prime_version}/LICENSE.txt +%doc %{gem_dir}/gems/prime-%{prime_version}/README.md +%{gem_dir}/gems/prime-%{prime_version}/Rakefile +%{gem_dir}/gems/prime-%{prime_version}/bin +%{gem_dir}/gems/prime-%{prime_version}/lib +%{gem_dir}/specifications/prime-%{prime_version}.gemspec + %files -n rubygem-minitest -%{gem_dir}/gems/minitest-%{minitest_version} +%dir %{gem_dir}/gems/minitest-%{minitest_version} %exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* +%{gem_dir}/gems/minitest-%{minitest_version}/Manifest.txt +%{gem_dir}/gems/minitest-%{minitest_version}/design_rationale.rb +%{gem_dir}/gems/minitest-%{minitest_version}/lib %{gem_dir}/specifications/minitest-%{minitest_version}.gemspec +%doc %{gem_dir}/gems/minitest-%{minitest_version}/History.rdoc +%doc %{gem_dir}/gems/minitest-%{minitest_version}/README.rdoc +%{gem_dir}/gems/minitest-%{minitest_version}/Rakefile +%{gem_dir}/gems/minitest-%{minitest_version}/test %files -n rubygem-power_assert -%{gem_dir}/gems/power_assert-%{power_assert_version} +%dir %{gem_dir}/gems/power_assert-%{power_assert_version} %exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* +%license %{gem_dir}/gems/power_assert-%{power_assert_version}/BSDL +%license %{gem_dir}/gems/power_assert-%{power_assert_version}/COPYING +%license %{gem_dir}/gems/power_assert-%{power_assert_version}/LEGAL +%{gem_dir}/gems/power_assert-%{power_assert_version}/lib %{gem_dir}/specifications/power_assert-%{power_assert_version}.gemspec +%{gem_dir}/gems/power_assert-%{power_assert_version}/Gemfile +%doc %{gem_dir}/gems/power_assert-%{power_assert_version}/README.md +%{gem_dir}/gems/power_assert-%{power_assert_version}/Rakefile %files -n rubygem-rake %{_bindir}/rake @@ -1419,6 +1406,9 @@ mv test/fiddle/test_import.rb{,.disable} %files -n rubygem-rbs %{_bindir}/rbs +%dir %{_libdir}/gems/%{name}/rbs-%{rbs_version} +%{_libdir}/gems/%{name}/rbs-%{rbs_version}/gem.build_complete +%{_libdir}/gems/%{name}/rbs-%{rbs_version}/rbs_extension.so %dir %{gem_dir}/gems/rbs-%{rbs_version} %exclude %{gem_dir}/gems/rbs-%{rbs_version}/.* %license %{gem_dir}/gems/rbs-%{rbs_version}/BSDL @@ -1440,8 +1430,16 @@ mv test/fiddle/test_import.rb{,.disable} %{gem_dir}/specifications/rbs-%{rbs_version}.gemspec %files -n rubygem-test-unit -%{gem_dir}/gems/test-unit-%{test_unit_version} +%dir %{gem_dir}/gems/test-unit-%{test_unit_version} +%license %{gem_dir}/gems/test-unit-%{test_unit_version}/BSDL +%license %{gem_dir}/gems/test-unit-%{test_unit_version}/COPYING +%license %{gem_dir}/gems/test-unit-%{test_unit_version}/PSFL +%{gem_dir}/gems/test-unit-%{test_unit_version}/lib +%{gem_dir}/gems/test-unit-%{test_unit_version}/sample %{gem_dir}/specifications/test-unit-%{test_unit_version}.gemspec +%doc %{gem_dir}/gems/test-unit-%{test_unit_version}/README.md +%{gem_dir}/gems/test-unit-%{test_unit_version}/Rakefile +%doc %{gem_dir}/gems/test-unit-%{test_unit_version}/doc %files -n rubygem-rexml %dir %{gem_dir}/gems/rexml-%{rexml_version} @@ -1471,19 +1469,20 @@ mv test/fiddle/test_import.rb{,.disable} %license %{gem_dir}/gems/typeprof-%{typeprof_version}/LICENSE %{gem_dir}/gems/typeprof-%{typeprof_version}/exe %{gem_dir}/gems/typeprof-%{typeprof_version}/lib -%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/smoke %doc %{gem_dir}/gems/typeprof-%{typeprof_version}/tools +%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/typeprof-lsp +%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/vscode %{gem_dir}/specifications/typeprof-%{typeprof_version}.gemspec %doc %{gem_dir}/gems/typeprof-%{typeprof_version}/Gemfile* %doc %{gem_dir}/gems/typeprof-%{typeprof_version}/README.md %doc %{gem_dir}/gems/typeprof-%{typeprof_version}/Rakefile -%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/doc -%lang(ja) %doc %{gem_dir}/gems/typeprof-%{typeprof_version}/doc/doc.ja.md -%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/testbed %changelog -* Tue Jan 25 2022 Vít Ondruch - 3.0.3-158 +* Wed Jan 26 2022 Vít Ondruch - 3.1.0-160 +- Upgrade to Ruby 3.1.0. + +* Tue Jan 25 2022 Vít Ondruch - 3.0.3-159 - Update OpenSSL 3 compatibility patches. * Thu Jan 20 2022 Vít Ondruch - 3.0.3-158 diff --git a/rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch b/rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch deleted file mode 100644 index 433d03e..0000000 --- a/rubygems-3.2.30-Provide-distinguished-name-which-will-be-correctly-p.patch +++ /dev/null @@ -1,44 +0,0 @@ -From bb0f57aeb4de36a3b2b8b8cb01d25b32af0357d3 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 27 Oct 2021 16:28:24 +0200 -Subject: [PATCH] Provide distinguished name which will be correctly parsed. - -It seems that since ruby openssl 2.1.0 [[1]], the distinguished name -submitted to `OpenSSL::X509::Name.parse` is not correctly parsed if it -does not contain the first slash: - -~~~ -$ ruby -v -ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux] - -$ gem list | grep openssl -openssl (default: 2.2.0) - -$ irb -r openssl -irb(main):001:0> OpenSSL::X509::Name.parse("CN=nobody/DC=example").to_s(OpenSSL::X509::Name::ONELINE) -=> "CN = nobody/DC=example" -irb(main):002:0> OpenSSL::X509::Name.parse("/CN=nobody/DC=example").to_s(OpenSSL::X509::Name::ONELINE) -=> "CN = nobody, DC = example" -~~~ - -[1]: https://github.com/ruby/openssl/commit/19c67cd10c57f3ab7b13966c36431ebc3fdd653b ---- - lib/rubygems/security.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb -index c80639af6d..12de141f36 100644 ---- a/lib/rubygems/security.rb -+++ b/lib/rubygems/security.rb -@@ -510,7 +510,7 @@ def self.email_to_name(email_address) - - dcs = dcs.split '.' - -- name = "CN=#{cn}/#{dcs.map {|dc| "DC=#{dc}" }.join '/'}" -+ name = "/CN=#{cn}/#{dcs.map {|dc| "DC=#{dc}" }.join '/'}" - - OpenSSL::X509::Name.parse name - end --- -2.32.0 - diff --git a/rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch b/rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch deleted file mode 100644 index d5a0673..0000000 --- a/rubygems-3.2.33-Fix-loading-operating_system-rb-customizations-too-late.patch +++ /dev/null @@ -1,261 +0,0 @@ -From e80e7a3d0b3d72f7af7286b935702b3fab117008 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Wed, 8 Dec 2021 21:12:24 +0100 -Subject: [PATCH 1/5] More explicit require - -This class does not use `rubygems/deprecate`. It uses -`rubygems/version`, which in turn uses `rubygems/deprecate`. Make this -explicit. ---- - lib/rubygems/requirement.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/rubygems/requirement.rb b/lib/rubygems/requirement.rb -index d2e28fab5b4..9edd6aa7d3c 100644 ---- a/lib/rubygems/requirement.rb -+++ b/lib/rubygems/requirement.rb -@@ -1,5 +1,5 @@ - # frozen_string_literal: true --require_relative "deprecate" -+require_relative "version" - - ## - # A Requirement is a set of one or more version restrictions. It supports a - -From 4e46dcc17ee5cabbde43b8a34063b8ab042536f9 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Wed, 8 Dec 2021 21:17:30 +0100 -Subject: [PATCH 2/5] Remove ineffective autoloads - -These files are loaded on startup unconditionally, so we can require -them relatively when needed. ---- - lib/rubygems.rb | 4 +--- - lib/rubygems/specification.rb | 2 ++ - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/lib/rubygems.rb b/lib/rubygems.rb -index f803e47628e..b8747409304 100644 ---- a/lib/rubygems.rb -+++ b/lib/rubygems.rb -@@ -1310,19 +1310,17 @@ def default_gem_load_paths - autoload :Licenses, File.expand_path('rubygems/util/licenses', __dir__) - autoload :NameTuple, File.expand_path('rubygems/name_tuple', __dir__) - autoload :PathSupport, File.expand_path('rubygems/path_support', __dir__) -- autoload :Platform, File.expand_path('rubygems/platform', __dir__) - autoload :RequestSet, File.expand_path('rubygems/request_set', __dir__) -- autoload :Requirement, File.expand_path('rubygems/requirement', __dir__) - autoload :Resolver, File.expand_path('rubygems/resolver', __dir__) - autoload :Source, File.expand_path('rubygems/source', __dir__) - autoload :SourceList, File.expand_path('rubygems/source_list', __dir__) - autoload :SpecFetcher, File.expand_path('rubygems/spec_fetcher', __dir__) -- autoload :Specification, File.expand_path('rubygems/specification', __dir__) - autoload :Util, File.expand_path('rubygems/util', __dir__) - autoload :Version, File.expand_path('rubygems/version', __dir__) - end - - require_relative 'rubygems/exceptions' -+require_relative 'rubygems/specification' - - # REFACTOR: This should be pulled out into some kind of hacks file. - begin -diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb -index d3b96491a28..dc5e5ba0138 100644 ---- a/lib/rubygems/specification.rb -+++ b/lib/rubygems/specification.rb -@@ -9,6 +9,8 @@ - require_relative 'deprecate' - require_relative 'basic_specification' - require_relative 'stub_specification' -+require_relative 'platform' -+require_relative 'requirement' - require_relative 'specification_policy' - require_relative 'util/list' - - -From 96b6b3e04e8e4fec17f63079a0caf999a2709d71 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Wed, 8 Dec 2021 21:45:16 +0100 -Subject: [PATCH 3/5] Load `operating_system.rb` customizations before setting - up default gems - -It's very common for packagers to configure gem paths in this file, for -example, `Gem.default_dir`. Also, setting up default gems requires these -paths to be set, so that we know which default gems need to be setup. - -If we setup default gems before loading `operatin_system.rb` -customizations, the wrong default gems will be setup. - -Unfortunately, default gems loaded by `operating_system.rb` can't be -upgraded if we do this, but it seems much of a smaller issue. I wasn't -even fully sure it was the right thing to do when I added that, and it -was not the culprit of the end user issue that led to making that -change. ---- - lib/rubygems.rb | 32 ++++++++++++++++---------------- - test/rubygems/test_rubygems.rb | 23 +++++++++++++++++++++++ - 2 files changed, 39 insertions(+), 16 deletions(-) - -diff --git a/lib/rubygems.rb b/lib/rubygems.rb -index b8747409304..11474b6554c 100644 ---- a/lib/rubygems.rb -+++ b/lib/rubygems.rb -@@ -1323,22 +1323,6 @@ def default_gem_load_paths - require_relative 'rubygems/specification' - - # REFACTOR: This should be pulled out into some kind of hacks file. --begin -- ## -- # Defaults the Ruby implementation wants to provide for RubyGems -- -- require "rubygems/defaults/#{RUBY_ENGINE}" --rescue LoadError --end -- --## --# Loads the default specs. --Gem::Specification.load_defaults -- --require_relative 'rubygems/core_ext/kernel_gem' --require_relative 'rubygems/core_ext/kernel_require' --require_relative 'rubygems/core_ext/kernel_warn' -- - begin - ## - # Defaults the operating system (or packager) wants to provide for RubyGems. -@@ -1354,3 +1338,19 @@ def default_gem_load_paths - "the problem and ask for help." - raise e.class, msg - end -+ -+begin -+ ## -+ # Defaults the Ruby implementation wants to provide for RubyGems -+ -+ require "rubygems/defaults/#{RUBY_ENGINE}" -+rescue LoadError -+end -+ -+## -+# Loads the default specs. -+Gem::Specification.load_defaults -+ -+require_relative 'rubygems/core_ext/kernel_gem' -+require_relative 'rubygems/core_ext/kernel_require' -+require_relative 'rubygems/core_ext/kernel_warn' -diff --git a/test/rubygems/test_rubygems.rb b/test/rubygems/test_rubygems.rb -index 493b9fdf4a3..fa77a299322 100644 ---- a/test/rubygems/test_rubygems.rb -+++ b/test/rubygems/test_rubygems.rb -@@ -22,6 +22,29 @@ def test_operating_system_other_exceptions - "the problem and ask for help." - end - -+ def test_operating_system_customizing_default_dir -+ pend "does not apply to truffleruby" if RUBY_ENGINE == 'truffleruby' -+ pend "loads a custom defaults/jruby file that gets in the middle" if RUBY_ENGINE == 'jruby' -+ -+ # On a non existing default dir, there should be no gems -+ -+ path = util_install_operating_system_rb <<-RUBY -+ module Gem -+ def self.default_dir -+ File.expand_path("foo") -+ end -+ end -+ RUBY -+ -+ output = Gem::Util.popen( -+ *ruby_with_rubygems_and_fake_operating_system_in_load_path(path), -+ '-e', -+ "require \"rubygems\"; puts Gem::Specification.stubs.map(&:full_name)", -+ {:err => [:child, :out]} -+ ).strip -+ assert_empty output -+ end -+ - private - - def util_install_operating_system_rb(content) - -From 52cfdd14fd1213a97aac12f01177e27779de9035 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Thu, 9 Dec 2021 06:08:31 +0100 -Subject: [PATCH 4/5] Install default fiddle on latest ruby on specs that need - it - -Otherwise first OS customizations load and activate that fiddle version, -but then when we change to `Gem.default_dir`, that fiddle version is no -longer there. ---- - spec/bundler/commands/clean_spec.rb | 2 +- - spec/bundler/install/gems/standalone_spec.rb | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/spec/bundler/commands/clean_spec.rb b/spec/bundler/commands/clean_spec.rb -index ffaf22dbb32..65231b35fac 100644 ---- a/spec/bundler/commands/clean_spec.rb -+++ b/spec/bundler/commands/clean_spec.rb -@@ -638,7 +638,7 @@ def should_not_have_gems(*gems) - s.executables = "irb" - end - -- realworld_system_gems "fiddle --version 1.0.6", "tsort --version 0.1.0", "pathname --version 0.1.0", "set --version 1.0.1" -+ realworld_system_gems "fiddle --version 1.0.8", "tsort --version 0.1.0", "pathname --version 0.1.0", "set --version 1.0.1" - - install_gemfile <<-G - source "#{file_uri_for(gem_repo2)}" -diff --git a/spec/bundler/install/gems/standalone_spec.rb b/spec/bundler/install/gems/standalone_spec.rb -index db16a1b0e13..faefda25f45 100644 ---- a/spec/bundler/install/gems/standalone_spec.rb -+++ b/spec/bundler/install/gems/standalone_spec.rb -@@ -113,7 +113,7 @@ - skip "does not work on rubygems versions where `--install_dir` doesn't respect --default" unless Gem::Installer.for_spec(loaded_gemspec, :install_dir => "/foo").default_spec_file == "/foo/specifications/default/bundler-#{Bundler::VERSION}.gemspec" # Since rubygems 3.2.0.rc.2 - skip "does not work on old rubies because the realworld gems that need to be installed don't support them" if RUBY_VERSION < "2.7.0" - -- realworld_system_gems "fiddle --version 1.0.6", "tsort --version 0.1.0" -+ realworld_system_gems "fiddle --version 1.0.8", "tsort --version 0.1.0" - - necessary_system_gems = ["optparse --version 0.1.1", "psych --version 3.3.2", "yaml --version 0.1.1", "logger --version 1.4.3", "etc --version 1.2.0", "stringio --version 3.0.0"] - necessary_system_gems += ["shellwords --version 0.1.0", "base64 --version 0.1.0", "resolv --version 0.2.1"] if Gem.rubygems_version < Gem::Version.new("3.3.3.a") - -From c6a9c81021092c9157f5616a2bbe1323411a5bf8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Thu, 9 Dec 2021 12:46:23 +0100 -Subject: [PATCH 5/5] Resolve symlinks in LOAD_PATH when activating - pre-required default gems - -Some double load issues were reported a while ago by OS packagers where -if a gem has been required before rubygems, and then after, rubygems -require would cause a double load. - -We avoid this issue by activating the corresponding gem if we detect -that a file in the default LOAD_PATH that belongs to a default gem has -already been required when rubygems registers default gems. - -However, the fix does not take into account that the default LOAD_PATH -could potentially include symlinks. This change fixes the same double -load issue described above but for situations where the default -LOAD_PATH includes symlinks. ---- - lib/rubygems.rb | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/lib/rubygems.rb b/lib/rubygems.rb -index 11474b6554c..b7dda38d522 100644 ---- a/lib/rubygems.rb -+++ b/lib/rubygems.rb -@@ -1293,7 +1293,12 @@ def already_loaded?(file) - end - - def default_gem_load_paths -- @default_gem_load_paths ||= $LOAD_PATH[load_path_insert_index..-1] -+ @default_gem_load_paths ||= $LOAD_PATH[load_path_insert_index..-1].map do |lp| -+ expanded = File.expand_path(lp) -+ next expanded unless File.exist?(expanded) -+ -+ File.realpath(expanded) -+ end - end - end - diff --git a/rubygems-3.3.1-Fix-compatibility-with-OpenSSL3.0.patch b/rubygems-3.3.1-Fix-compatibility-with-OpenSSL3.0.patch deleted file mode 100644 index b405b5f..0000000 --- a/rubygems-3.3.1-Fix-compatibility-with-OpenSSL3.0.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 558128594de16add5b453833fd5b043a24c1b7f5 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Wed, 22 Dec 2021 01:38:47 +0900 -Subject: [PATCH 1/3] Use OpenSSL::PKey::EC.generate to generate ECC key pairs - -When Ruby/OpenSSL is built against OpenSSL 3.0, OpenSSL::PKey::PKey -instances are immutable and OpenSSL::PKey::EC#generate_key cannot work -because it modifies the receiver. - -OpenSSL::PKey::EC.generate is available on Ruby 2.4 (Ruby/OpenSSL 2.0) -or later. ---- - lib/rubygems/security.rb | 10 +++++++--- - 1 file changed, 7 insertions(+), 3 deletions(-) - -diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb -index 22759972070..2aa07381d69 100644 ---- a/lib/rubygems/security.rb -+++ b/lib/rubygems/security.rb -@@ -490,9 +490,13 @@ def self.create_key(algorithm) - when 'rsa' - OpenSSL::PKey::RSA.new(RSA_DSA_KEY_LENGTH) - when 'ec' -- domain_key = OpenSSL::PKey::EC.new(EC_NAME) -- domain_key.generate_key -- domain_key -+ if RUBY_VERSION >= "2.4.0" -+ OpenSSL::PKey::EC.generate(EC_NAME) -+ else -+ domain_key = OpenSSL::PKey::EC.new(EC_NAME) -+ domain_key.generate_key -+ domain_key -+ end - else - raise Gem::Security::Exception, - "#{algorithm} algorithm not found. RSA, DSA, and EC algorithms are supported." - -From 60067d4f09b7fb9c23bed38e91acfde0293f29a0 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Wed, 22 Dec 2021 01:49:05 +0900 -Subject: [PATCH 2/3] Use OpenSSL::X509::Certificate#check_private_key - -The method is for the exact purpose: to check that an instance of -OpenSSL::PKey::PKey matches the public key in a certificate. ---- - lib/rubygems/security.rb | 2 +- - lib/rubygems/security/policy.rb | 4 +--- - 2 files changed, 2 insertions(+), 4 deletions(-) - -diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb -index 2aa07381d69..2906819bd34 100644 ---- a/lib/rubygems/security.rb -+++ b/lib/rubygems/security.rb -@@ -530,7 +530,7 @@ def self.re_sign(expired_certificate, private_key, age = ONE_YEAR, - raise Gem::Security::Exception, - "incorrect signing key for re-signing " + - "#{expired_certificate.subject}" unless -- expired_certificate.public_key.to_pem == get_public_key(private_key).to_pem -+ expired_certificate.check_private_key(private_key) - - unless expired_certificate.subject.to_s == - expired_certificate.issuer.to_s -diff --git a/lib/rubygems/security/policy.rb b/lib/rubygems/security/policy.rb -index 3c3cb647ee3..06eae073f4a 100644 ---- a/lib/rubygems/security/policy.rb -+++ b/lib/rubygems/security/policy.rb -@@ -115,11 +115,9 @@ def check_key(signer, key) - raise Gem::Security::Exception, 'missing key or signature' - end - -- public_key = Gem::Security.get_public_key(key) -- - raise Gem::Security::Exception, - "certificate #{signer.subject} does not match the signing key" unless -- signer.public_key.to_pem == public_key.to_pem -+ signer.check_private_key(key) - - true - end - -From 6819e3d0fadc10ce8d10919402eedb730cf0e43f Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Wed, 22 Dec 2021 01:54:10 +0900 -Subject: [PATCH 3/3] Fix Gem::Security.get_public_key on OpenSSL 3.0 - -Ruby/OpenSSL 2.2 added OpenSSL::PKey::PKey#public_to_der for serializing -only the public key components contained in the instance. This works -for all possible key types. ---- - lib/rubygems/security.rb | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/lib/rubygems/security.rb b/lib/rubygems/security.rb -index 2906819bd34..f21c1756422 100644 ---- a/lib/rubygems/security.rb -+++ b/lib/rubygems/security.rb -@@ -424,6 +424,8 @@ def self.create_cert(subject, key, age = ONE_YEAR, extensions = EXTENSIONS, - # Gets the right public key from a PKey instance - - def self.get_public_key(key) -+ # Ruby 3.0 (Ruby/OpenSSL 2.2) or later -+ return OpenSSL::PKey.read(key.public_to_der) if key.respond_to?(:public_to_der) - return key.public_key unless key.is_a?(OpenSSL::PKey::EC) - - ec_key = OpenSSL::PKey::EC.new(key.group.curve_name) diff --git a/sources b/sources index 2b40f22..31675a3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.0.3.tar.xz) = bb9ea426278d5a7ac46595296f03b82d43df8b7db41045cdf85611e05e26c703c53f700494cd7cf5d4c27fa953bdc5c144317d7720812db0a6e3b6f4bc4d2e00 +SHA512 (ruby-3.1.0.tar.xz) = a2bb6b5e62d5fa06dd9c30cf84ddcb2c27cb87fbaaffd2309a44391a6b110e1dde6b7b0d8c659b56387ee3c9b4264003f3532d5a374123a7c187ebba9293f320 From 1ff09bed2b1d1ea893d595ad1689f8b1132a0321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 18 Jan 2022 12:55:59 +0100 Subject: [PATCH 416/530] Temporary bump rubygem-json release. This allow to rebuild independent rubygem-json package, which would have otherwise higher release and caused issues with build of other packages. --- ruby.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/ruby.spec b/ruby.spec index 01cb7bb..5cfbca6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -384,6 +384,7 @@ provide higher layer features, such like curses and readline. %package -n rubygem-json Summary: This is a JSON implementation as a Ruby extension in C Version: %{json_version} +Release: 201~1%{dist} # UCD: ext/json/generator/generator.c License: (Ruby or GPLv2) and UCD Requires: ruby(release) From 8157cd4820ed4e2775fbd1f1a2a5d67a3becdfbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 26 Jan 2022 15:33:43 +0100 Subject: [PATCH 417/530] Revert "Temporary bump rubygem-json release." This reverts commit 1ff09bed2b1d1ea893d595ad1689f8b1132a0321. --- ruby.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 5cfbca6..01cb7bb 100644 --- a/ruby.spec +++ b/ruby.spec @@ -384,7 +384,6 @@ provide higher layer features, such like curses and readline. %package -n rubygem-json Summary: This is a JSON implementation as a Ruby extension in C Version: %{json_version} -Release: 201~1%{dist} # UCD: ext/json/generator/generator.c License: (Ruby or GPLv2) and UCD Requires: ruby(release) From 204bab4f7f31ad5cdc8f6b5d747be6eb06a85123 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 10 Feb 2022 14:12:41 +0100 Subject: [PATCH 418/530] Prevent segfaults running with SystemTap. --- ...ery-RubyVM-FrozenCore-for-class-path.patch | 43 +++++++++++++++++++ ruby.spec | 12 +++++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch diff --git a/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch b/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch new file mode 100644 index 0000000..973fe72 --- /dev/null +++ b/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch @@ -0,0 +1,43 @@ +From 0ade5611df9f981005eed32b369d1e699e520221 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 10 Feb 2022 13:26:44 +0100 +Subject: [PATCH] Don't query `RubyVM::FrozenCore` for class path. + +The `RubyVM::FrozenCore` class path is corrupted during GC cycle and +returns random garbage, which might result in segfault. + +But since it is easy to detect the `RubyVM::FrozenCore`, just provide +the class path explicitly as a workaround. + +Other possibility would be to ignore `RubyVM::FrozenCore` simlarly as +TracePoint API does: + +https://github.com/ruby/ruby/blob/46f6575157d4c2f6bbd5693896e26a65037e5552/vm_trace.c#L411 +--- + vm.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/vm.c b/vm.c +index 8ce8b279d4..3d189fa63a 100644 +--- a/vm.c ++++ b/vm.c +@@ -479,7 +479,15 @@ rb_dtrace_setup(rb_execution_context_t *ec, VALUE klass, ID id, + } + type = BUILTIN_TYPE(klass); + if (type == T_CLASS || type == T_ICLASS || type == T_MODULE) { +- VALUE name = rb_class_path(klass); ++ VALUE name = Qnil; ++ /* ++ * Special treatment for rb_mRubyVMFrozenCore wchi is broken by GC. ++ * https://bugs.ruby-lang.org/issues/18257 ++ */ ++ if (klass == rb_mRubyVMFrozenCore) ++ name = rb_str_new_cstr("RubyVM::FrozenCore"); ++ else ++ name = rb_class_path(klass); + const char *classname, *filename; + const char *methodname = rb_id2name(id); + if (methodname && (filename = rb_source_location_cstr(&args->line_no)) != 0) { +-- +2.34.1 + diff --git a/ruby.spec b/ruby.spec index 01cb7bb..c831fa5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 160 +%global release 161 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -152,6 +152,12 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ # For now, load the ABRT hook via this simple patch: Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch +# Prevent segfaults running with SystemTap due to `RubyVM::FrozenCore` being +# corrupted by GC. +# https://bugzilla.redhat.com/show_bug.cgi?id=2015441 +# https://bugzilla.redhat.com/show_bug.cgi?id=1986206 +# https://bugs.ruby-lang.org/issues/18257 +Patch7: ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -615,6 +621,7 @@ rm -rf ext/fiddle/libffi* %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 %patch19 -p1 # Provide an example of usage of the tapset: @@ -1479,6 +1486,9 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Thu Feb 10 2022 Vít Ondruch - 3.1.0-161 +- Prevent segfaults running with SystemTap. + * Wed Jan 26 2022 Vít Ondruch - 3.1.0-160 - Upgrade to Ruby 3.1.0. From 67d5a7b3c6d1146bcb1a1e8cb5a6e5b2f35be339 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Mon, 14 Mar 2022 11:27:34 +0100 Subject: [PATCH 419/530] Revert "Remove colon from `load` call." This is for a compatibility of Zuul CI still using RPM 4.16 on F34. This reverts commit 46ee70614f22238e1ccb177e379fbcf53bdb36b6. --- ruby.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index c831fa5..fd9899e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -123,8 +123,8 @@ Source14: test_systemtap.rb # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. -%{load %{SOURCE4}} -%{load %{SOURCE5}} +%{load:%{SOURCE4}} +%{load:%{SOURCE5}} # Fix ruby_version abuse. # https://bugs.ruby-lang.org/issues/11002 From 74983bcd567f31b3ae1774b08f9f2094fdd2640b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 15 Mar 2022 13:25:19 +0100 Subject: [PATCH 420/530] Upgrade to Ruby 3.1.1. --- ruby.spec | 26 ++++++++++++++------------ sources | 2 +- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/ruby.spec b/ruby.spec index fd9899e..b44669b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 1 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -22,7 +22,7 @@ %endif -%global release 161 +%global release 162 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -30,16 +30,16 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.3.3 +%global rubygems_version 3.3.7 %global rubygems_molinillo_version 0.7.0 # Default gems. -%global bundler_version 2.3.3 +%global bundler_version 2.3.7 %global bundler_connection_pool_version 2.3.0 %global bundler_fileutils_version 1.4.1 %global bundler_molinillo_version 0.7.0 %global bundler_net_http_persistent_version 4.0.0 -%global bundler_thor_version 1.1.0 +%global bundler_thor_version 1.2.1 %global bundler_tmpdir_version 0.1.0 # TODO: Check the version if/when available in library. %global bundler_tsort_version 0.1.1 @@ -48,7 +48,7 @@ %global bigdecimal_version 3.1.1 %global did_you_mean_version 1.6.1 %global erb_version 2.2.3 -%global io_console_version 0.5.10 +%global io_console_version 0.5.11 %global irb_version 1.4.1 %global json_version 2.6.1 %global openssl_version 3.0.0 @@ -65,13 +65,13 @@ %global rexml_version 3.2.5 %global rss_version 0.2.9 %global net_ftp_version 0.1.3 -%global net_imap_version 0.2.2 +%global net_imap_version 0.2.3 %global net_pop_version 0.1.1 %global net_smtp_version 0.3.1 %global matrix_version 0.4.2 %global prime_version 0.1.2 -%global rbs_version 2.0.0 -%global typeprof_version 0.21.1 +%global rbs_version 2.1.0 +%global typeprof_version 0.21.2 %global debug_version 1.4.0 %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* @@ -787,7 +787,7 @@ ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby # Move the binary extensions into proper place (if no gem has binary extension, # the extensions directory might be empty). # TODO: Get information about extension form .gemspec files. -find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{ruby_version}/* -maxdepth 0 \ +find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{major_minor_version}.*/* -maxdepth 0 \ -exec rm '{}/gem_make.out' \; \ -exec mv '{}' %{buildroot}%{_libdir}/gems/%{name}/ \; \ || echo "No gem binary extensions to move." @@ -1206,7 +1206,7 @@ mv test/fiddle/test_import.rb{,.disable} %{gem_dir}/specifications/default/getoptlong-0.1.1.gemspec %{gem_dir}/specifications/default/io-nonblock-0.1.0.gemspec %{gem_dir}/specifications/default/io-wait-0.2.1.gemspec -%{gem_dir}/specifications/default/ipaddr-1.2.3.gemspec +%{gem_dir}/specifications/default/ipaddr-1.2.4.gemspec %{gem_dir}/specifications/default/logger-1.5.0.gemspec %{gem_dir}/specifications/default/mutex_m-0.1.1.gemspec %{gem_dir}/specifications/default/net-http-0.2.0.gemspec @@ -1349,7 +1349,6 @@ mv test/fiddle/test_import.rb{,.disable} %license %{gem_dir}/gems/net-imap-%{net_imap_version}/LICENSE.txt %doc %{gem_dir}/gems/net-imap-%{net_imap_version}/README.md %{gem_dir}/gems/net-imap-%{net_imap_version}/Rakefile -%{gem_dir}/gems/net-imap-%{net_imap_version}/bin %{gem_dir}/gems/net-imap-%{net_imap_version}/lib %{gem_dir}/specifications/net-imap-%{net_imap_version}.gemspec @@ -1486,6 +1485,9 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Mon Mar 14 2022 Vít Ondruch - 3.1.1-162 +- Upgrade to Ruby 3.1.1. + * Thu Feb 10 2022 Vít Ondruch - 3.1.0-161 - Prevent segfaults running with SystemTap. diff --git a/sources b/sources index 31675a3..b5357ad 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.1.0.tar.xz) = a2bb6b5e62d5fa06dd9c30cf84ddcb2c27cb87fbaaffd2309a44391a6b110e1dde6b7b0d8c659b56387ee3c9b4264003f3532d5a374123a7c187ebba9293f320 +SHA512 (ruby-3.1.1.tar.xz) = 8877fa9a458964a59a11529cd10b3d25b5f6238cd4678b6dcea0bd4b750499cf8ff39d8824053b4ab26c5cd0cfb604a57807ce61580175857fcf00b2cff3e55f From 9e774fba706a3a1031ca95840e254a64a9eeebbb Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Mon, 14 Mar 2022 18:06:54 +0100 Subject: [PATCH 421/530] ruby.rpmlintrc: Ignore zero-length error for gem.build_complete file. This error is gone as false positive in rpmlint 2.0+. However the rpmlint version on Zuul CI running on the Fedora 34 container is still 1.11. After Zuul CI is upgraded to Fedora 35+ container, and uses the rpmlint 2, we can notice this filter is not used by "E: unused-rpmlintrc-filter" error, and remove it. --- ruby.rpmlintrc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index 8a4dde6..d59d364 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -50,3 +50,7 @@ addFilter(r'^rubygem-(bigdecimal|io-console|json|psych)\.\w+: W: no-documentatio # rubygems-devel ships only RPM macros and generators. Their placement is given # by RPM and can't be modified. addFilter(r'rubygems-devel.noarch: W: only-non-binary-in-usr-lib$') + +# The empty gem.build_complete file is false positive. This error is gone in rpmlint 2.0+. +# https://github.com/rpm-software-management/rpmlint/commit/e34ce874f27d733628f51c9884ac951af072bed2 +addFilter(r'^ruby(gem)?-(bigdecimal|bundled-gems|io-console|json|psych|rbs)\.\w+: E: zero-length /usr/lib(64)?/gems/ruby/.*/gem.build_complete') From df8cc89df48ecabd4af7cf490301d0795fa3708c Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Mon, 14 Mar 2022 19:47:41 +0100 Subject: [PATCH 422/530] ruby.rpmlintrc: Recover the filter to ignore a false positive missing-call-to-chdir-with-chroot error. The filter was deleted at the b0ce095f6d6e74a40b571143eba52c14ce04c074 . But it is still needed to pass Zuul CI. --- ruby.rpmlintrc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index d59d364..85d91b9 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -38,6 +38,17 @@ addFilter(r'^ruby-libs\.\w+: E: shared-library-without-dependency-information /u # These are Ruby plugins, where Ruby always load glibc prior the library. addFilter(r'^ruby-libs\.\w+: W: library-not-linked-against-libc /usr/lib(64)?/ruby/.*.so$') +# The function `chroot` without using `chdir` is detected by rpmlint with the +# following message. However it looks a false positive as the `chroot` in the +# `dir.c` is just used as a Ruby binding `Dir.chroot` for the function. +# +# ruby-libs.x86_64: E: missing-call-to-chdir-with-chroot /usr/lib64/libruby.so.N.N.N +# This executable appears to call chroot without using chdir to change the +# current directory. This is likely an error and permits an attacker to break +# out of the chroot by using fchdir. While that's not always a security issue, +# this has to be checked. +addFilter(r'^ruby-libs\.\w+: E: missing-call-to-chdir-with-chroot /usr/lib(64)?/libruby.so.[\d/.]+$') + # Rake ships some examples. addFilter(r'^rubygem-rake.noarch: W: devel-file-in-non-devel-package /usr/share/gems/gems/rake-[\d\.]+/doc/example/\w+.c$') From aee17a21802d113ed3c065540ddd1eab7592a42b Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Mon, 14 Mar 2022 19:55:01 +0100 Subject: [PATCH 423/530] ruby.rpmlintrc: Add a filter for "E: shared-lib-without-dependency-information". Add a filter for "E: shared-lib-without-dependency-information" for rpmlint 1.11 compatibility in Zuul CI. --- ruby.rpmlintrc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index 85d91b9..0c2b585 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -34,6 +34,8 @@ addFilter(r'^ruby-libs\.\w+: W: binary-or-shlib-calls-gethostbyname /usr/lib(64) # Nothing referred and no dependency information should be no problem. # https://bugs.ruby-lang.org/issues/16558#note-2 addFilter(r'^ruby-libs\.\w+: E: shared-library-without-dependency-information /usr/lib(64)?/ruby/enc/gb2312.so$') +# Compatibility for rpmlint 1.11. +addFilter(r'^ruby-libs\.\w+: E: shared-lib-without-dependency-information /usr/lib(64)?/ruby/enc/gb2312.so$') # These are Ruby plugins, where Ruby always load glibc prior the library. addFilter(r'^ruby-libs\.\w+: W: library-not-linked-against-libc /usr/lib(64)?/ruby/.*.so$') From 796a198176b693f1cd3245546b3aa8f984daf639 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 4 Mar 2022 13:50:28 +0100 Subject: [PATCH 424/530] Add Bundler tests. * Add `make test-bundler-parallel` executed on the upstream CI. See . * The tests are disabled as a default, as it requires the internet. Run the Bundler tests as follows. ``` $ mock --with bundler_tests ruby-3.1.0-161.fc37.src.rpm ``` * Fix a test for `bin/bundle update --bundler` in `make test-bundler`. --- ...0-bundle-update-bundler-test-in-ruby.patch | 31 +++++++++++++++++++ ruby.spec | 11 +++++++ 2 files changed, 42 insertions(+) create mode 100644 ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch diff --git a/ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch b/ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch new file mode 100644 index 0000000..b208537 --- /dev/null +++ b/ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch @@ -0,0 +1,31 @@ +From bfa2f72cfa3bfde34049d26dcb24976316074ad7 Mon Sep 17 00:00:00 2001 +From: Jun Aruga +Date: Mon, 21 Mar 2022 15:36:51 +0100 +Subject: [PATCH] Fix a test for `bin/bundle update --bundler` to pass on + ruby/ruby. + +Consider the case that the latest Bundler version on RubyGems is higher than +the `system_bundler_version` (= `Bundler::VERSION`) in `make test-bundler` on +ruby/ruby. + +See . +--- + spec/bundler/commands/binstubs_spec.rb | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/spec/bundler/commands/binstubs_spec.rb b/spec/bundler/commands/binstubs_spec.rb +index 198226207bc..2634f43417c 100644 +--- a/spec/bundler/commands/binstubs_spec.rb ++++ b/spec/bundler/commands/binstubs_spec.rb +@@ -226,7 +226,10 @@ + + it "calls through to the latest bundler version" do + sys_exec "bin/bundle update --bundler", :env => { "DEBUG" => "1" } +- expect(out).to include %(Using bundler #{system_bundler_version}\n) ++ using_bundler_line = /Using bundler ([\w\.]+)\n/.match(out) ++ expect(using_bundler_line).to_not be_nil ++ latest_version = using_bundler_line[1] ++ expect(Gem::Version.new(latest_version)).to be >= Gem::Version.new(system_bundler_version) + end + + it "calls through to the explicit bundler version" do diff --git a/ruby.spec b/ruby.spec index b44669b..7e37172 100644 --- a/ruby.spec +++ b/ruby.spec @@ -85,6 +85,8 @@ %bcond_without gmp %bcond_without hostname %bcond_without systemtap +# Enable test when building on local. +%bcond_with bundler_tests %if 0%{?fedora} %bcond_without hardening_test @@ -161,6 +163,10 @@ Patch7: ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch +# Fix a test for `bin/bundle update --bundler` in `make test-bundler`. +# https://bugs.ruby-lang.org/issues/18643 +# https://github.com/rubygems/rubygems/commit/bfa2f72cfa3bfde34049d26dcb24976316074ad7 +Patch20: ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -186,6 +192,8 @@ BuildRequires: multilib-rpm-config BuildRequires: gcc BuildRequires: make BuildRequires: zlib-devel +# The bundler/spec/runtime/setup_spec.rb requires the command `man`. +%{?with_bundler_tests:BuildRequires: %{_bindir}/man} # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. @@ -623,6 +631,7 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch7 -p1 %patch19 -p1 +%patch20 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -938,6 +947,8 @@ mv test/fiddle/test_import.rb{,.disable} %{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" +%{?with_bundler_tests:make test-bundler-parallel} + %files %license BSDL %license COPYING From 22d91a091076f5aabd70c345381e44755235ca91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 4 Apr 2022 12:10:29 +0200 Subject: [PATCH 425/530] Properly build binary gem extensions. Because the gem extensions were built in `%{buildroot}` they referred `BUILDROOT` directory, which would be under normal circumstances reported by RPM, but there was a bug in RPM due to changes in grep: https://github.com/rpm-software-management/rpm/issues/1968 --- ...Properly-build-binary-gem-extensions.patch | 231 ++++++++++++++++++ ruby.spec | 18 +- 2 files changed, 240 insertions(+), 9 deletions(-) create mode 100644 ruby-3.1.1-Properly-build-binary-gem-extensions.patch diff --git a/ruby-3.1.1-Properly-build-binary-gem-extensions.patch b/ruby-3.1.1-Properly-build-binary-gem-extensions.patch new file mode 100644 index 0000000..17cb836 --- /dev/null +++ b/ruby-3.1.1-Properly-build-binary-gem-extensions.patch @@ -0,0 +1,231 @@ +From 0da0152986f7d1e666aeb1317d18746250423575 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 31 Mar 2022 19:12:24 +0200 +Subject: [PATCH 1/4] Properly install expanded gem extensions. + +The expanded gem location changed from 'gem' to '.bundled/gems' +directory in commit:git|55bf0ef1aa7c936b564b883196de1ace4be4cc7e / + #2922, leaving behind binary extension installation. This should fix +the issues, so the gem binary extensions are buildable as part of Ruby +build process again. +--- + ext/extmk.rb | 13 ++++++------- + template/exts.mk.tmpl | 4 ++-- + tool/rbinstall.rb | 4 ++-- + 3 files changed, 10 insertions(+), 11 deletions(-) + +diff --git a/ext/extmk.rb b/ext/extmk.rb +index 4a087f294ac9..bc0e4f135d8e 100755 +--- a/ext/extmk.rb ++++ b/ext/extmk.rb +@@ -146,7 +146,7 @@ def extmake(target, basedir = 'ext', maybestatic = true) + top_srcdir = $top_srcdir + topdir = $topdir + hdrdir = $hdrdir +- prefix = "../" * (target.count("/")+1) ++ prefix = "../" * (target.count("/") + basedir.count("/")) + $top_srcdir = relative_from(top_srcdir, prefix) + $hdrdir = relative_from(hdrdir, prefix) + $topdir = prefix + $topdir +@@ -461,15 +461,15 @@ def $mflags.defined?(var) + + @gemname = nil + if ARGV[0] +- ext_prefix, exts = ARGV.shift.split('/', 2) ++ ext_prefix, exts = File.split(ARGV.shift) + $extension = [exts] if exts +- if ext_prefix == 'gems' ++ if ext_prefix == '.bundle/gems' + @gemname = exts + elsif exts + $static_ext.delete_if {|t, *| !File.fnmatch(t, exts)} + end + end +-ext_prefix = "#{$top_srcdir}/#{ext_prefix || 'ext'}" ++ext_prefix = "#{$top_srcdir}/#{ext_prefix || './ext'}" + exts = $static_ext.sort_by {|t, i| i}.collect {|t, i| t} + default_exclude_exts = + case +@@ -515,7 +515,6 @@ def $mflags.defined?(var) + exts.delete_if {|d| File.fnmatch?("-*", d)} + end + end +-ext_prefix = File.basename(ext_prefix) + + extend Module.new { + def timestamp_file(name, target_prefix = nil) +@@ -534,7 +533,7 @@ def create_makefile(*args, &block) + super(*args) do |conf| + conf.find do |s| + s.sub!(/^(TARGET_SO_DIR *= *)\$\(RUBYARCHDIR\)/) { +- "TARGET_GEM_DIR = $(extout)/gems/$(arch)/#{@gemname}\n"\ ++ "TARGET_GEM_DIR = $(extout)/.bundle/gems/$(arch)/#{@gemname}\n"\ + "#{$1}$(TARGET_GEM_DIR)$(target_prefix)" + } + end +@@ -634,7 +633,7 @@ def initialize(src) + end + } + +-Dir.chdir ".." ++Dir.chdir dir + unless $destdir.to_s.empty? + $mflags.defined?("DESTDIR") or $mflags << "DESTDIR=#{$destdir}" + end +diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl +index 2f37f4480ac5..401ea9a497f3 100644 +--- a/template/exts.mk.tmpl ++++ b/template/exts.mk.tmpl +@@ -19,13 +19,13 @@ opt = OptionParser.new do |o| + o.on('--configure-exts=FILE') {|v| confexts = v} + o.order!(ARGV) + end +-confexts &&= File.read(confexts).scan(/^exts: (.*\.mk)/).flatten rescue nil ++confexts &&= File.read(confexts).scan(/^(exts|gems): (.*\.mk)/).collect {|i| i.last } rescue nil + confexts ||= [] + macros["old_extensions"] = [] + + contpat = /(?>(?>[^\\\n]|\\.)*\\\n)*(?>[^\\\n]|\\.)*/ + Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| +- gem = /\Agems(?=\/)/ =~ e ++ gem = /\A.bundle\/gems(?=\/)/ =~ e + s = File.read(e) + s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v| + v.gsub!(/\\\n[ \t]*/, ' ') +diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb +index 9d9b672be472..8c8a14193ec9 100755 +--- a/tool/rbinstall.rb ++++ b/tool/rbinstall.rb +@@ -1047,7 +1047,7 @@ def install_default_gem(dir, srcdir, bindir) + :wrappers => true, + :format_executable => true, + } +- gem_ext_dir = "#$extout/gems/#{CONFIG['arch']}" ++ gem_ext_dir = "#$extout/.bundle/gems/#{CONFIG['arch']}" + extensions_dir = with_destdir(Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir) + + File.foreach("#{srcdir}/gems/bundled_gems") do |name| +@@ -1080,7 +1080,7 @@ def install_default_gem(dir, srcdir, bindir) + File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec")) + end + unless spec.extensions.empty? +- install_recursive(ext, spec.extension_dir) ++ install_recursive(ext, without_destdir(spec.extension_dir)) + end + installed_gems[spec.full_name] = true + end + +From 8c57deb09dbd9005ebc872c3c9147d6c2924e208 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 31 Mar 2022 19:22:15 +0200 +Subject: [PATCH 2/4] Re-enable building gem extensions. + +This reverts commit bac6e8ca5d8f6bc45984d12ddad55d3d876d4324. +--- + template/configure-ext.mk.tmpl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/template/configure-ext.mk.tmpl b/template/configure-ext.mk.tmpl +index 6636a7759c54..8ba6b963e3ec 100644 +--- a/template/configure-ext.mk.tmpl ++++ b/template/configure-ext.mk.tmpl +@@ -27,7 +27,7 @@ SCRIPT_ARGS = <%=script_args.gsub("#", "\\#")%> + EXTMK_ARGS = $(SCRIPT_ARGS) --gnumake=$(gnumake) --extflags="$(EXTLDFLAGS)" \ + --make-flags="MINIRUBY='$(MINIRUBY)'" + +-all: exts # gems ++all: exts gems + exts: + gems: + + +From ee6a16eed10c3ab6e4cc8285ca137e83964e0f5c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Fri, 1 Apr 2022 16:26:04 +0200 +Subject: [PATCH 3/4] Trust that .gemspec correctly declare their extensions. + +Do not judge the extension availability by the available extension +build. This is already assumed on other places anyway: + +https://github.com/ruby/ruby/blob/d1d48cb690fdad855da94b2a2d11721428bc06ba/tool/rbinstall.rb#L1062 +--- + tool/rbinstall.rb | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb +index 8c8a14193ec9..259792ad878c 100755 +--- a/tool/rbinstall.rb ++++ b/tool/rbinstall.rb +@@ -1069,9 +1069,6 @@ def install_default_gem(dir, srcdir, bindir) + next + end + spec.extension_dir = "#{extensions_dir}/#{spec.full_name}" +- if File.directory?(ext = "#{gem_ext_dir}/#{spec.full_name}") +- spec.extensions[0] ||= "-" +- end + package = RbInstall::DirPackage.new spec + ins = RbInstall::UnpackedInstaller.new(package, options) + puts "#{INDENT}#{spec.name} #{spec.version}" +@@ -1080,6 +1077,7 @@ def install_default_gem(dir, srcdir, bindir) + File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec")) + end + unless spec.extensions.empty? ++ ext = "#{gem_ext_dir}/#{spec.full_name}" + install_recursive(ext, without_destdir(spec.extension_dir)) + end + installed_gems[spec.full_name] = true + +From d11bc592494529f8732a4a40defaf18f600c261d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 4 Apr 2022 11:18:51 +0200 +Subject: [PATCH 4/4] Install the previously build gem extensions. + +Install the pre-build gem binary extensions and attempt to build them +during `gem install` phase only when they are not available for whatever +reason. +--- + tool/rbinstall.rb | 17 ++++++++++++----- + 1 file changed, 12 insertions(+), 5 deletions(-) + +diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb +index 259792ad878c..4e42133bc1ce 100755 +--- a/tool/rbinstall.rb ++++ b/tool/rbinstall.rb +@@ -901,6 +901,18 @@ def write_default_spec + super unless $dryrun + $installed_list.puts(without_destdir(default_spec_file)) if $installed_list + end ++ ++ def build_extensions ++ return if spec.extensions.empty? ++ ++ ext = "#$extout/.bundle/gems/#{CONFIG['arch']}/#{spec.full_name}" ++ ++ # Call `install_recursive` with global binding, so it correctly use ++ # the global `install` ++ Object.__send__ :install_recursive, ext, without_destdir(spec.extension_dir) ++ ++ super unless File.exist? spec.gem_build_complete_path ++ end + end + + class GemInstaller +@@ -1047,7 +1059,6 @@ def install_default_gem(dir, srcdir, bindir) + :wrappers => true, + :format_executable => true, + } +- gem_ext_dir = "#$extout/.bundle/gems/#{CONFIG['arch']}" + extensions_dir = with_destdir(Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir) + + File.foreach("#{srcdir}/gems/bundled_gems") do |name| +@@ -1076,10 +1087,6 @@ def install_default_gem(dir, srcdir, bindir) + unless $dryrun + File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec")) + end +- unless spec.extensions.empty? +- ext = "#{gem_ext_dir}/#{spec.full_name}" +- install_recursive(ext, without_destdir(spec.extension_dir)) +- end + installed_gems[spec.full_name] = true + end + installed_gems, gems = Dir.glob(srcdir+'/gems/*.gem').partition {|gem| installed_gems.key?(File.basename(gem, '.gem'))} diff --git a/ruby.spec b/ruby.spec index 7e37172..c0aac4d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 162 +%global release 163 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -167,6 +167,10 @@ Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch # https://bugs.ruby-lang.org/issues/18643 # https://github.com/rubygems/rubygems/commit/bfa2f72cfa3bfde34049d26dcb24976316074ad7 Patch20: ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch +# Workaround gem binary extensions build and installation issues. +# https://bugs.ruby-lang.org/issues/18373 +# https://github.com/ruby/ruby/pull/5743 +Patch21: ruby-3.1.1-Properly-build-binary-gem-extensions.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -632,6 +636,7 @@ rm -rf ext/fiddle/libffi* %patch7 -p1 %patch19 -p1 %patch20 -p1 +%patch21 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -666,13 +671,6 @@ autoconf %install rm -rf %{buildroot} -# Workaround binary extensions installation issues. -# https://bugs.ruby-lang.org/issues/18373 -find .bundle -name extconf.rb -exec \ - sed -i \ - -e '/create_makefile/i \$arch_hdrdir = "$(hdrdir)/../.ext/include/$(arch)"' \ - -e '/create_makefile/i \$DLDFLAGS << " -L#{$top_srcdir}"' {} \; - %make_install # TODO: Regenerate RBS parser in lib/rbs/parser.rb @@ -797,7 +795,6 @@ ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby # the extensions directory might be empty). # TODO: Get information about extension form .gemspec files. find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{major_minor_version}.*/* -maxdepth 0 \ - -exec rm '{}/gem_make.out' \; \ -exec mv '{}' %{buildroot}%{_libdir}/gems/%{name}/ \; \ || echo "No gem binary extensions to move." @@ -1496,6 +1493,9 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Mon Apr 04 2022 Vít Ondruch - 3.1.1-163 +- Properly build binary gem extensions. + * Mon Mar 14 2022 Vít Ondruch - 3.1.1-162 - Upgrade to Ruby 3.1.1. From 09d0e79c2bb0d3198c556ac250bc4b82f68cb0b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 14 Apr 2022 13:37:12 +0200 Subject: [PATCH 426/530] Upgrade to Ruby 3.1.2. --- ruby.spec | 7 +++++-- sources | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index c0aac4d..fa01783 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 1 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -22,7 +22,7 @@ %endif -%global release 163 +%global release 164 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1493,6 +1493,9 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Thu Apr 14 2022 Vít Ondruch - 3.1.2-164 +- Upgrade to Ruby 3.1.2. + * Mon Apr 04 2022 Vít Ondruch - 3.1.1-163 - Properly build binary gem extensions. diff --git a/sources b/sources index b5357ad..9cefc8d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.1.1.tar.xz) = 8877fa9a458964a59a11529cd10b3d25b5f6238cd4678b6dcea0bd4b750499cf8ff39d8824053b4ab26c5cd0cfb604a57807ce61580175857fcf00b2cff3e55f +SHA512 (ruby-3.1.2.tar.xz) = 4a74e9efc6ea4b3eff4fec7534eb1fff4794d021531defc2e9937e53c6668db8ecdc0fff2bc23d5e6602d0df344a2caa85b31c5414309541e3d5313ec82b6e21 From c2061af620c2a52c936f73c7df97694106d72cca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 14 Apr 2022 11:56:21 +0200 Subject: [PATCH 427/530] Use upstream patch for correct build of gem extensions. --- ...Properly-build-binary-gem-extensions.patch | 231 ------------ ...-extension-libraries-in-bundled-gems.patch | 338 ++++++++++++++++++ ruby.spec | 11 +- 3 files changed, 347 insertions(+), 233 deletions(-) delete mode 100644 ruby-3.1.1-Properly-build-binary-gem-extensions.patch create mode 100644 ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch diff --git a/ruby-3.1.1-Properly-build-binary-gem-extensions.patch b/ruby-3.1.1-Properly-build-binary-gem-extensions.patch deleted file mode 100644 index 17cb836..0000000 --- a/ruby-3.1.1-Properly-build-binary-gem-extensions.patch +++ /dev/null @@ -1,231 +0,0 @@ -From 0da0152986f7d1e666aeb1317d18746250423575 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 31 Mar 2022 19:12:24 +0200 -Subject: [PATCH 1/4] Properly install expanded gem extensions. - -The expanded gem location changed from 'gem' to '.bundled/gems' -directory in commit:git|55bf0ef1aa7c936b564b883196de1ace4be4cc7e / - #2922, leaving behind binary extension installation. This should fix -the issues, so the gem binary extensions are buildable as part of Ruby -build process again. ---- - ext/extmk.rb | 13 ++++++------- - template/exts.mk.tmpl | 4 ++-- - tool/rbinstall.rb | 4 ++-- - 3 files changed, 10 insertions(+), 11 deletions(-) - -diff --git a/ext/extmk.rb b/ext/extmk.rb -index 4a087f294ac9..bc0e4f135d8e 100755 ---- a/ext/extmk.rb -+++ b/ext/extmk.rb -@@ -146,7 +146,7 @@ def extmake(target, basedir = 'ext', maybestatic = true) - top_srcdir = $top_srcdir - topdir = $topdir - hdrdir = $hdrdir -- prefix = "../" * (target.count("/")+1) -+ prefix = "../" * (target.count("/") + basedir.count("/")) - $top_srcdir = relative_from(top_srcdir, prefix) - $hdrdir = relative_from(hdrdir, prefix) - $topdir = prefix + $topdir -@@ -461,15 +461,15 @@ def $mflags.defined?(var) - - @gemname = nil - if ARGV[0] -- ext_prefix, exts = ARGV.shift.split('/', 2) -+ ext_prefix, exts = File.split(ARGV.shift) - $extension = [exts] if exts -- if ext_prefix == 'gems' -+ if ext_prefix == '.bundle/gems' - @gemname = exts - elsif exts - $static_ext.delete_if {|t, *| !File.fnmatch(t, exts)} - end - end --ext_prefix = "#{$top_srcdir}/#{ext_prefix || 'ext'}" -+ext_prefix = "#{$top_srcdir}/#{ext_prefix || './ext'}" - exts = $static_ext.sort_by {|t, i| i}.collect {|t, i| t} - default_exclude_exts = - case -@@ -515,7 +515,6 @@ def $mflags.defined?(var) - exts.delete_if {|d| File.fnmatch?("-*", d)} - end - end --ext_prefix = File.basename(ext_prefix) - - extend Module.new { - def timestamp_file(name, target_prefix = nil) -@@ -534,7 +533,7 @@ def create_makefile(*args, &block) - super(*args) do |conf| - conf.find do |s| - s.sub!(/^(TARGET_SO_DIR *= *)\$\(RUBYARCHDIR\)/) { -- "TARGET_GEM_DIR = $(extout)/gems/$(arch)/#{@gemname}\n"\ -+ "TARGET_GEM_DIR = $(extout)/.bundle/gems/$(arch)/#{@gemname}\n"\ - "#{$1}$(TARGET_GEM_DIR)$(target_prefix)" - } - end -@@ -634,7 +633,7 @@ def initialize(src) - end - } - --Dir.chdir ".." -+Dir.chdir dir - unless $destdir.to_s.empty? - $mflags.defined?("DESTDIR") or $mflags << "DESTDIR=#{$destdir}" - end -diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl -index 2f37f4480ac5..401ea9a497f3 100644 ---- a/template/exts.mk.tmpl -+++ b/template/exts.mk.tmpl -@@ -19,13 +19,13 @@ opt = OptionParser.new do |o| - o.on('--configure-exts=FILE') {|v| confexts = v} - o.order!(ARGV) - end --confexts &&= File.read(confexts).scan(/^exts: (.*\.mk)/).flatten rescue nil -+confexts &&= File.read(confexts).scan(/^(exts|gems): (.*\.mk)/).collect {|i| i.last } rescue nil - confexts ||= [] - macros["old_extensions"] = [] - - contpat = /(?>(?>[^\\\n]|\\.)*\\\n)*(?>[^\\\n]|\\.)*/ - Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| -- gem = /\Agems(?=\/)/ =~ e -+ gem = /\A.bundle\/gems(?=\/)/ =~ e - s = File.read(e) - s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v| - v.gsub!(/\\\n[ \t]*/, ' ') -diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 9d9b672be472..8c8a14193ec9 100755 ---- a/tool/rbinstall.rb -+++ b/tool/rbinstall.rb -@@ -1047,7 +1047,7 @@ def install_default_gem(dir, srcdir, bindir) - :wrappers => true, - :format_executable => true, - } -- gem_ext_dir = "#$extout/gems/#{CONFIG['arch']}" -+ gem_ext_dir = "#$extout/.bundle/gems/#{CONFIG['arch']}" - extensions_dir = with_destdir(Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir) - - File.foreach("#{srcdir}/gems/bundled_gems") do |name| -@@ -1080,7 +1080,7 @@ def install_default_gem(dir, srcdir, bindir) - File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec")) - end - unless spec.extensions.empty? -- install_recursive(ext, spec.extension_dir) -+ install_recursive(ext, without_destdir(spec.extension_dir)) - end - installed_gems[spec.full_name] = true - end - -From 8c57deb09dbd9005ebc872c3c9147d6c2924e208 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 31 Mar 2022 19:22:15 +0200 -Subject: [PATCH 2/4] Re-enable building gem extensions. - -This reverts commit bac6e8ca5d8f6bc45984d12ddad55d3d876d4324. ---- - template/configure-ext.mk.tmpl | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/template/configure-ext.mk.tmpl b/template/configure-ext.mk.tmpl -index 6636a7759c54..8ba6b963e3ec 100644 ---- a/template/configure-ext.mk.tmpl -+++ b/template/configure-ext.mk.tmpl -@@ -27,7 +27,7 @@ SCRIPT_ARGS = <%=script_args.gsub("#", "\\#")%> - EXTMK_ARGS = $(SCRIPT_ARGS) --gnumake=$(gnumake) --extflags="$(EXTLDFLAGS)" \ - --make-flags="MINIRUBY='$(MINIRUBY)'" - --all: exts # gems -+all: exts gems - exts: - gems: - - -From ee6a16eed10c3ab6e4cc8285ca137e83964e0f5c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 1 Apr 2022 16:26:04 +0200 -Subject: [PATCH 3/4] Trust that .gemspec correctly declare their extensions. - -Do not judge the extension availability by the available extension -build. This is already assumed on other places anyway: - -https://github.com/ruby/ruby/blob/d1d48cb690fdad855da94b2a2d11721428bc06ba/tool/rbinstall.rb#L1062 ---- - tool/rbinstall.rb | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 8c8a14193ec9..259792ad878c 100755 ---- a/tool/rbinstall.rb -+++ b/tool/rbinstall.rb -@@ -1069,9 +1069,6 @@ def install_default_gem(dir, srcdir, bindir) - next - end - spec.extension_dir = "#{extensions_dir}/#{spec.full_name}" -- if File.directory?(ext = "#{gem_ext_dir}/#{spec.full_name}") -- spec.extensions[0] ||= "-" -- end - package = RbInstall::DirPackage.new spec - ins = RbInstall::UnpackedInstaller.new(package, options) - puts "#{INDENT}#{spec.name} #{spec.version}" -@@ -1080,6 +1077,7 @@ def install_default_gem(dir, srcdir, bindir) - File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec")) - end - unless spec.extensions.empty? -+ ext = "#{gem_ext_dir}/#{spec.full_name}" - install_recursive(ext, without_destdir(spec.extension_dir)) - end - installed_gems[spec.full_name] = true - -From d11bc592494529f8732a4a40defaf18f600c261d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 4 Apr 2022 11:18:51 +0200 -Subject: [PATCH 4/4] Install the previously build gem extensions. - -Install the pre-build gem binary extensions and attempt to build them -during `gem install` phase only when they are not available for whatever -reason. ---- - tool/rbinstall.rb | 17 ++++++++++++----- - 1 file changed, 12 insertions(+), 5 deletions(-) - -diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 259792ad878c..4e42133bc1ce 100755 ---- a/tool/rbinstall.rb -+++ b/tool/rbinstall.rb -@@ -901,6 +901,18 @@ def write_default_spec - super unless $dryrun - $installed_list.puts(without_destdir(default_spec_file)) if $installed_list - end -+ -+ def build_extensions -+ return if spec.extensions.empty? -+ -+ ext = "#$extout/.bundle/gems/#{CONFIG['arch']}/#{spec.full_name}" -+ -+ # Call `install_recursive` with global binding, so it correctly use -+ # the global `install` -+ Object.__send__ :install_recursive, ext, without_destdir(spec.extension_dir) -+ -+ super unless File.exist? spec.gem_build_complete_path -+ end - end - - class GemInstaller -@@ -1047,7 +1059,6 @@ def install_default_gem(dir, srcdir, bindir) - :wrappers => true, - :format_executable => true, - } -- gem_ext_dir = "#$extout/.bundle/gems/#{CONFIG['arch']}" - extensions_dir = with_destdir(Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir) - - File.foreach("#{srcdir}/gems/bundled_gems") do |name| -@@ -1076,10 +1087,6 @@ def install_default_gem(dir, srcdir, bindir) - unless $dryrun - File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec")) - end -- unless spec.extensions.empty? -- ext = "#{gem_ext_dir}/#{spec.full_name}" -- install_recursive(ext, without_destdir(spec.extension_dir)) -- end - installed_gems[spec.full_name] = true - end - installed_gems, gems = Dir.glob(srcdir+'/gems/*.gem').partition {|gem| installed_gems.key?(File.basename(gem, '.gem'))} diff --git a/ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch b/ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch new file mode 100644 index 0000000..de8d4d3 --- /dev/null +++ b/ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch @@ -0,0 +1,338 @@ +From 111f8422427d78becc9183ae149b2105a16bf327 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Tue, 5 Apr 2022 23:24:00 +0900 +Subject: [PATCH 1/5] Bundled gems are expanded under `.bundle/gems` now + +--- + ext/extmk.rb | 13 +++++++------ + template/exts.mk.tmpl | 2 +- + 2 files changed, 8 insertions(+), 7 deletions(-) + +diff --git a/ext/extmk.rb b/ext/extmk.rb +index 4a087f294ac9..1da9e2704521 100755 +--- a/ext/extmk.rb ++++ b/ext/extmk.rb +@@ -146,7 +146,7 @@ def extmake(target, basedir = 'ext', maybestatic = true) + top_srcdir = $top_srcdir + topdir = $topdir + hdrdir = $hdrdir +- prefix = "../" * (target.count("/")+1) ++ prefix = "../" * (basedir.count("/")+target.count("/")+1) + $top_srcdir = relative_from(top_srcdir, prefix) + $hdrdir = relative_from(hdrdir, prefix) + $topdir = prefix + $topdir +@@ -460,10 +460,11 @@ def $mflags.defined?(var) + end unless $extstatic + + @gemname = nil +-if ARGV[0] +- ext_prefix, exts = ARGV.shift.split('/', 2) ++if exts = ARGV.shift ++ ext_prefix = exts[%r[\A(?>\.bundle/)?[^/]+(?:/(?=(.+)?)|\z)]] ++ exts = $1 + $extension = [exts] if exts +- if ext_prefix == 'gems' ++ if ext_prefix.start_with?('.') + @gemname = exts + elsif exts + $static_ext.delete_if {|t, *| !File.fnmatch(t, exts)} +@@ -515,7 +516,7 @@ def $mflags.defined?(var) + exts.delete_if {|d| File.fnmatch?("-*", d)} + end + end +-ext_prefix = File.basename(ext_prefix) ++ext_prefix = ext_prefix[$top_srcdir.size+1..-2] + + extend Module.new { + def timestamp_file(name, target_prefix = nil) +@@ -634,7 +635,7 @@ def initialize(src) + end + } + +-Dir.chdir ".." ++Dir.chdir dir + unless $destdir.to_s.empty? + $mflags.defined?("DESTDIR") or $mflags << "DESTDIR=#{$destdir}" + end +diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl +index 2f37f4480ac5..964939e365a1 100644 +--- a/template/exts.mk.tmpl ++++ b/template/exts.mk.tmpl +@@ -25,7 +25,7 @@ macros["old_extensions"] = [] + + contpat = /(?>(?>[^\\\n]|\\.)*\\\n)*(?>[^\\\n]|\\.)*/ + Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| +- gem = /\Agems(?=\/)/ =~ e ++ gem = e.start_with?(".bundle/gems/") + s = File.read(e) + s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v| + v.gsub!(/\\\n[ \t]*/, ' ') + +From 6ea34cac22131d28a9cc50e7875e854aed9bdb88 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Wed, 6 Apr 2022 20:25:53 +0900 +Subject: [PATCH 2/5] Retrieve configured gems info + +--- + template/configure-ext.mk.tmpl | 2 +- + template/exts.mk.tmpl | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/template/configure-ext.mk.tmpl b/template/configure-ext.mk.tmpl +index 6636a7759c54..8ba6b963e3ec 100644 +--- a/template/configure-ext.mk.tmpl ++++ b/template/configure-ext.mk.tmpl +@@ -27,7 +27,7 @@ SCRIPT_ARGS = <%=script_args.gsub("#", "\\#")%> + EXTMK_ARGS = $(SCRIPT_ARGS) --gnumake=$(gnumake) --extflags="$(EXTLDFLAGS)" \ + --make-flags="MINIRUBY='$(MINIRUBY)'" + +-all: exts # gems ++all: exts gems + exts: + gems: + +diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl +index 964939e365a1..e544c4c88bd7 100644 +--- a/template/exts.mk.tmpl ++++ b/template/exts.mk.tmpl +@@ -19,7 +19,7 @@ opt = OptionParser.new do |o| + o.on('--configure-exts=FILE') {|v| confexts = v} + o.order!(ARGV) + end +-confexts &&= File.read(confexts).scan(/^exts: (.*\.mk)/).flatten rescue nil ++confexts &&= File.read(confexts).scan(/^(?:ext|gem)s: (.*\.mk)/).flatten rescue nil + confexts ||= [] + macros["old_extensions"] = [] + +@@ -30,7 +30,7 @@ Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| + s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v| + v.gsub!(/\\\n[ \t]*/, ' ') + next if v.empty? +- next if gem and n != "extensions" ++ next if n != "extensions" + n = "old_extensions" if n == "extensions" and !confexts.include?(e) + v = v.split + m = macros[n] ||= [] + +From be9d00ee7c72766551ba8c3530f1538034498a6a Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Wed, 6 Apr 2022 20:28:00 +0900 +Subject: [PATCH 3/5] Move the target directory of bundled gems like as + rubygems + +--- + ext/extmk.rb | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/ext/extmk.rb b/ext/extmk.rb +index 1da9e2704521..a440af27fc5d 100755 +--- a/ext/extmk.rb ++++ b/ext/extmk.rb +@@ -2,6 +2,9 @@ + # -*- mode: ruby; coding: us-ascii -*- + # frozen_string_literal: false + ++module Gem; end # only needs Gem::Platform ++require 'rubygems/platform' ++ + # :stopdoc: + $extension = nil + $extstatic = nil +@@ -535,11 +538,12 @@ def create_makefile(*args, &block) + super(*args) do |conf| + conf.find do |s| + s.sub!(/^(TARGET_SO_DIR *= *)\$\(RUBYARCHDIR\)/) { +- "TARGET_GEM_DIR = $(extout)/gems/$(arch)/#{@gemname}\n"\ ++ "TARGET_GEM_DIR = $(topdir)/.bundle/extensions/$(gem_platform)/$(ruby_version)/#{@gemname}\n"\ + "#{$1}$(TARGET_GEM_DIR)$(target_prefix)" + } + end + conf.any? {|s| /^TARGET *= *\S/ =~ s} and conf << %{ ++gem_platform = #{Gem::Platform.local} + + # default target + all: + +From c4daf8e445925695c34bab8bf5135dcd1e8575a3 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Wed, 6 Apr 2022 22:57:01 +0900 +Subject: [PATCH 4/5] Obey spec file locations to rubygems + +--- + common.mk | 3 ++- + defs/gmake.mk | 2 +- + tool/gem-unpack.rb | 5 +++-- + 3 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/common.mk b/common.mk +index 7c552cba1e04..b4adb2729c0e 100644 +--- a/common.mk ++++ b/common.mk +@@ -1359,10 +1359,11 @@ extract-gems$(gnumake:yes=-nongnumake): PHONY + $(Q) $(RUNRUBY) -C "$(srcdir)" \ + -Itool -rgem-unpack -answ \ + -e 'BEGIN {FileUtils.mkdir_p(d = ".bundle/gems")}' \ ++ -e 'BEGIN {FileUtils.mkdir_p(s = ".bundle/specifications")}' \ + -e 'gem, ver = *$$F' \ + -e 'next if !ver or /^#/=~gem' \ + -e 'g = "#{gem}-#{ver}"' \ +- -e 'File.directory?("#{d}/#{g}") or Gem.unpack("gems/#{g}.gem", d)' \ ++ -e 'File.directory?("#{d}/#{g}") or Gem.unpack("gems/#{g}.gem", d, s)' \ + gems/bundled_gems + + update-bundled_gems: PHONY +diff --git a/defs/gmake.mk b/defs/gmake.mk +index a625379a6804..27e3e21cc4d6 100644 +--- a/defs/gmake.mk ++++ b/defs/gmake.mk +@@ -290,7 +290,7 @@ extract-gems: | $(patsubst %,.bundle/gems/%,$(bundled-gems)) + $(ECHO) Extracting bundle gem $*... + $(Q) $(BASERUBY) -C "$(srcdir)" \ + -Itool -rgem-unpack \ +- -e 'Gem.unpack("gems/$(@F).gem", ".bundle/gems")' ++ -e 'Gem.unpack("gems/$(@F).gem", ".bundle/gems", ".bundle/specifications")' + + $(srcdir)/.bundle/gems: + $(MAKEDIRS) $@ +diff --git a/tool/gem-unpack.rb b/tool/gem-unpack.rb +index cb05719463f2..fe10b0e420fa 100644 +--- a/tool/gem-unpack.rb ++++ b/tool/gem-unpack.rb +@@ -5,13 +5,14 @@ + # This library is used by "make extract-gems" to + # unpack bundled gem files. + +-def Gem.unpack(file, dir = nil) ++def Gem.unpack(file, dir = nil, spec_dir = nil) + pkg = Gem::Package.new(file) + spec = pkg.spec + target = spec.full_name + target = File.join(dir, target) if dir + pkg.extract_files target +- spec_file = File.join(target, "#{spec.name}-#{spec.version}.gemspec") ++ FileUtils.mkdir_p(spec_dir ||= target) ++ spec_file = File.join(spec_dir, "#{spec.name}-#{spec.version}.gemspec") + open(spec_file, 'wb') do |f| + f.print spec.to_ruby + end + +From 3de652d8198be9cd2998c095903889a80e738275 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Thu, 7 Apr 2022 01:44:43 +0900 +Subject: [PATCH 5/5] Install built gem extension binaries + +--- + tool/rbinstall.rb | 56 ++++++++++++++--------------------------------- + 1 file changed, 16 insertions(+), 40 deletions(-) + +diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb +index 9d9b672be472..624961b4eee6 100755 +--- a/tool/rbinstall.rb ++++ b/tool/rbinstall.rb +@@ -858,6 +858,9 @@ class UnpackedInstaller < GemInstaller + def write_cache_file + end + ++ def build_extensions ++ end ++ + def shebang(bin_file_name) + path = File.join(gem_dir, spec.bindir, bin_file_name) + first_line = File.open(path, "rb") {|file| file.gets} +@@ -940,13 +943,12 @@ def ensure_writable_dir(dir) + install_default_gem('ext', srcdir, bindir) + end + +-def load_gemspec(file, expanded = false) ++def load_gemspec(file, base = nil) + file = File.realpath(file) + code = File.read(file, encoding: "utf-8:-") + code.gsub!(/(?:`git[^\`]*`|%x\[git[^\]]*\])\.split\([^\)]*\)/m) do + files = [] +- if expanded +- base = File.dirname(file) ++ if base + Dir.glob("**/*", File::FNM_DOTMATCH, base: base) do |n| + case File.basename(n); when ".", ".."; next; end + next if File.directory?(File.join(base, n)) +@@ -959,7 +961,7 @@ def load_gemspec(file, expanded = false) + unless Gem::Specification === spec + raise TypeError, "[#{file}] isn't a Gem::Specification (#{spec.class} instead)." + end +- spec.loaded_from = file ++ spec.loaded_from = base ? File.join(base, File.basename(file)) : file + spec.files.reject! {|n| n.end_with?(".gemspec") or n.start_with?(".git")} + + spec +@@ -1014,20 +1016,6 @@ def install_default_gem(dir, srcdir, bindir) + end + + install?(:ext, :comm, :gem, :'bundled-gems') do +- if CONFIG['CROSS_COMPILING'] == 'yes' +- # The following hacky steps set "$ruby = BASERUBY" in tool/fake.rb +- $hdrdir = '' +- $extmk = nil +- $ruby = nil # ... +- ruby_path = $ruby + " -I#{Dir.pwd}" # $baseruby + " -I#{Dir.pwd}" +- else +- # ruby_path = File.expand_path(with_destdir(File.join(bindir, ruby_install_name))) +- ENV['RUBYLIB'] = nil +- ENV['RUBYOPT'] = nil +- ruby_path = File.expand_path(with_destdir(File.join(bindir, ruby_install_name))) + " --disable=gems -I#{with_destdir(archlibdir)}" +- end +- Gem.instance_variable_set(:@ruby, ruby_path) if Gem.ruby != ruby_path +- + gem_dir = Gem.default_dir + install_dir = with_destdir(gem_dir) + prepare "bundled gems", gem_dir +@@ -1047,40 +1035,28 @@ def install_default_gem(dir, srcdir, bindir) + :wrappers => true, + :format_executable => true, + } +- gem_ext_dir = "#$extout/gems/#{CONFIG['arch']}" +- extensions_dir = with_destdir(Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir) ++ ++ extensions_dir = Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir ++ specifications_dir = File.join(gem_dir, "specifications") ++ build_dir = Gem::StubSpecification.gemspec_stub("", ".bundle", ".bundle").extensions_dir + + File.foreach("#{srcdir}/gems/bundled_gems") do |name| + next if /^\s*(?:#|$)/ =~ name + next unless /^(\S+)\s+(\S+).*/ =~ name + gem_name = "#$1-#$2" +- path = "#{srcdir}/.bundle/gems/#{gem_name}/#{gem_name}.gemspec" +- if File.exist?(path) +- spec = load_gemspec(path) +- else +- path = "#{srcdir}/.bundle/gems/#{gem_name}/#$1.gemspec" +- next unless File.exist?(path) +- spec = load_gemspec(path, true) +- end ++ path = "#{srcdir}/.bundle/specifications/#{gem_name}.gemspec" ++ next unless File.exist?(path) ++ spec = load_gemspec(path, "#{srcdir}/.bundle/gems/#{gem_name}") + next unless spec.platform == Gem::Platform::RUBY + next unless spec.full_name == gem_name +- if !spec.extensions.empty? && CONFIG["EXTSTATIC"] == "static" +- puts "skip installation of #{spec.name} #{spec.version}; bundled gem with an extension library is not supported on --with-static-linked-ext" +- next +- end + spec.extension_dir = "#{extensions_dir}/#{spec.full_name}" +- if File.directory?(ext = "#{gem_ext_dir}/#{spec.full_name}") +- spec.extensions[0] ||= "-" +- end + package = RbInstall::DirPackage.new spec + ins = RbInstall::UnpackedInstaller.new(package, options) + puts "#{INDENT}#{spec.name} #{spec.version}" + ins.install +- unless $dryrun +- File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec")) +- end +- unless spec.extensions.empty? +- install_recursive(ext, spec.extension_dir) ++ install_recursive("#{build_dir}/#{gem_name}", "#{extensions_dir}/#{gem_name}") do |src, dest| ++ # puts "#{INDENT} #{dest[extensions_dir.size+gem_name.size+2..-1]}" ++ install src, dest, :mode => (File.executable?(src) ? $prog_mode : $data_mode) + end + installed_gems[spec.full_name] = true + end diff --git a/ruby.spec b/ruby.spec index fa01783..f5d028d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -169,8 +169,8 @@ Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch Patch20: ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch # Workaround gem binary extensions build and installation issues. # https://bugs.ruby-lang.org/issues/18373 -# https://github.com/ruby/ruby/pull/5743 -Patch21: ruby-3.1.1-Properly-build-binary-gem-extensions.patch +# https://github.com/ruby/ruby/pull/5774 +Patch21: ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -636,6 +636,12 @@ rm -rf ext/fiddle/libffi* %patch7 -p1 %patch19 -p1 %patch20 -p1 + +# Once the upstream tarball contains the files on the right place, this code +# won't be necessary. This should happen at the same moment when the patch21 +# is not needed anymore. +mkdir .bundle/specifications +find .bundle/gems -name '*-[0-9]*.gemspec' -exec cp -t .bundle/specifications/ {} + %patch21 -p1 # Provide an example of usage of the tapset: @@ -1495,6 +1501,7 @@ mv test/fiddle/test_import.rb{,.disable} %changelog * Thu Apr 14 2022 Vít Ondruch - 3.1.2-164 - Upgrade to Ruby 3.1.2. +- Use upstream patch for correct build of gem extensions. * Mon Apr 04 2022 Vít Ondruch - 3.1.1-163 - Properly build binary gem extensions. From 03e8cec9fef6cb11dbfb52bfb4fd422c9018830b Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Thu, 21 Apr 2022 16:52:48 +0200 Subject: [PATCH 428/530] Drop `Q=` in make options. Because the `%make_build` macro includes the `V=1`. Note there is no actual difference of build.log between before and after this commit. ``` $ rpm --eval %make_build /usr/bin/make -O -j8 V=1 VERBOSE=1 ``` --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index f5d028d..a194ec2 100644 --- a/ruby.spec +++ b/ruby.spec @@ -672,7 +672,7 @@ autoconf # Q= makes the build output more verbose and allows to check Fedora # compiler options. -%make_build COPY="cp -p" Q= +%make_build COPY="cp -p" %install rm -rf %{buildroot} From 2c91b113bbd0b56707181223e0a5db8eaf0f9578 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Wed, 4 May 2022 20:09:28 +0200 Subject: [PATCH 429/530] Update a comment about `make` verbose option, dropping `Q=` explanation. According to the , the `Q=` is not recommended. The `V=1` is recommended to output for the verbose mode. The `make V=1` suppresses some logs that `make` without `V=1` outputs rather than just adding verbose logs. While the `V=1 ECHO0=echo` is more equivalent with `Q=`, the `make V=1 ECHO0=echo` doesn't really output meaningful logs additionally. So, the `make V=1` is the best option for us to check the compiler flags. --- ruby.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index a194ec2..a92223c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -670,8 +670,8 @@ autoconf --with-ruby-version='' \ --enable-multiarch \ -# Q= makes the build output more verbose and allows to check Fedora -# compiler options. +# V=1 in %%make_build outputs the compiler options more verbosely. +# https://bugs.ruby-lang.org/issues/18756 %make_build COPY="cp -p" %install From b7b547379654b3a337010d15914139e158e59acb Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Thu, 26 May 2022 12:37:01 +0200 Subject: [PATCH 430/530] Define compaction methods as rb_f_notimplement on unsupported platforms. The patch implements the methods as rb_f_notimplement. To test for compaction users can now use `GC.respond_to?(:compact)`. The upstream patch relies on the macro `GC_COMPACTION_SUPPORTED` that is defined when the `__wasi__` is false. The define is defined by an arch conditional in the specfile, which is not optimal but works in our case. https://github.com/ruby/ruby/commit/663833b08fbae8d92cb2245a729312b86aa33a35 https://bugs.ruby-lang.org/issues/18829 This also requires regenerating the gc.rbinc and miniprelude.c since the patch touches gc.rb. This patch is available in ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch. To regenerate the gc.rbinc and miniprelude.c files patch: ~~~ tar -Jxvf ./ruby-3.1.2.tar.xz git clone https://github.com/ruby/ruby.git cd ruby && git checkout v3_1_2 patch -p1 < ../ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch ./autogen.sh && ./configure make gc.rbinc miniprelude.c cd .. diff -u {ruby-3.1.2,ruby}/gc.rbinc > ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch diff -u {ruby-3.1.2,ruby}/miniprelude.c >> ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch ~~~ Uptream bug: https://bugs.ruby-lang.org/issues/18779 Upstream PR: https://github.com/ruby/ruby/pull/5934 --- ...paction-methods-as-rb_f_notimplement.patch | 402 ++++++++++++++ ...c-compaction-methods_generated-files.patch | 502 ++++++++++++++++++ ruby.spec | 29 +- 3 files changed, 932 insertions(+), 1 deletion(-) create mode 100644 ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch create mode 100644 ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch diff --git a/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch b/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch new file mode 100644 index 0000000..1e34def --- /dev/null +++ b/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch @@ -0,0 +1,402 @@ +commit 6d1ca6737f31b2e24664a093f1827dd74a121a9f +Author: Jarek Prokop +Date: Thu May 26 11:28:13 2022 +0200 + + Gc ppc64le fix + +diff --git a/gc.c b/gc.c +index ef9327df1f..1c35856c44 100644 +--- a/gc.c ++++ b/gc.c +@@ -9421,6 +9421,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) + return (VALUE)src; + } + ++#if GC_COMPACTION_SUPPORTED + static int + compare_free_slots(const void *left, const void *right, void *dummy) + { +@@ -9468,6 +9469,7 @@ gc_sort_heap_by_empty_slots(rb_objspace_t *objspace) + free(page_list); + } + } ++#endif + + static void + gc_ref_update_array(rb_objspace_t * objspace, VALUE v) +@@ -10147,8 +10149,21 @@ gc_update_references(rb_objspace_t *objspace) + gc_update_table_refs(objspace, finalizer_table); + } + ++#if GC_COMPACTION_SUPPORTED ++/* ++ * call-seq: ++ * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} ++ * ++ * Returns information about object moved in the most recent GC compaction. ++ * ++ * The returned hash has two keys :considered and :moved. The hash for ++ * :considered lists the number of objects that were considered for movement ++ * by the compactor, and the :moved hash lists the number of objects that ++ * were actually moved. Some objects can't be moved (maybe they were pinned) ++ * so these numbers can be used to calculate compaction efficiency. ++ */ + static VALUE +-gc_compact_stats(rb_execution_context_t *ec, VALUE self) ++gc_compact_stats(VALUE self) + { + size_t i; + rb_objspace_t *objspace = &rb_objspace; +@@ -10171,7 +10186,11 @@ gc_compact_stats(rb_execution_context_t *ec, VALUE self) + + return h; + } ++#else ++# define gc_compact_stats rb_f_notimplement ++#endif + ++#if GC_COMPACTION_SUPPORTED + static void + root_obj_check_moved_i(const char *category, VALUE obj, void *data) + { +@@ -10221,22 +10240,78 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) + return 0; + } + ++/* ++ * call-seq: ++ * GC.compact ++ * ++ * This function compacts objects together in Ruby's heap. It eliminates ++ * unused space (or fragmentation) in the heap by moving objects in to that ++ * unused space. This function returns a hash which contains statistics about ++ * which objects were moved. See `GC.latest_gc_info` for details about ++ * compaction statistics. ++ * ++ * This method is implementation specific and not expected to be implemented ++ * in any implementation besides MRI. ++ * ++ * To test whether GC compaction is supported, use the idiom: ++ * ++ * GC.respond_to?(:compact) ++ */ + static VALUE +-gc_compact(rb_execution_context_t *ec, VALUE self) ++gc_compact(VALUE self) + { + /* Run GC with compaction enabled */ +- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue); ++ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qtrue); + +- return gc_compact_stats(ec, self); ++ return gc_compact_stats(self); + } ++#else ++# define gc_compact rb_f_notimplement ++#endif + ++#if GC_COMPACTION_SUPPORTED ++/* ++ * call-seq: ++ * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash ++ * ++ * Verify compaction reference consistency. ++ * ++ * This method is implementation specific. During compaction, objects that ++ * were moved are replaced with T_MOVED objects. No object should have a ++ * reference to a T_MOVED object after compaction. ++ * ++ * This function doubles the heap to ensure room to move all objects, ++ * compacts the heap to make sure everything moves, updates all references, ++ * then performs a full GC. If any object contains a reference to a T_MOVED ++ * object, that object should be pushed on the mark stack, and will ++ * make a SEGV. ++ */ + static VALUE +-gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE double_heap, VALUE toward_empty) ++gc_verify_compaction_references(int argc, VALUE *argv, VALUE self) + { + rb_objspace_t *objspace = &rb_objspace; ++ VALUE kwargs, double_heap = Qfalse, toward_empty = Qfalse; ++ static ID id_toward, id_double_heap, id_empty; ++ ++ if (!id_toward) { ++ id_toward = rb_intern("toward"); ++ id_double_heap = rb_intern("double_heap"); ++ id_empty = rb_intern("empty"); ++ } ++ ++ rb_scan_args(argc, argv, ":", &kwargs); ++ if (!NIL_P(kwargs)) { ++ if (rb_hash_has_key(kwargs, ID2SYM(id_toward))) { ++ VALUE toward = rb_hash_aref(kwargs, ID2SYM(id_toward)); ++ toward_empty = (toward == ID2SYM(id_empty)) ? Qtrue : Qfalse; ++ } ++ if (rb_hash_has_key(kwargs, ID2SYM(id_double_heap))) { ++ double_heap = rb_hash_aref(kwargs, ID2SYM(id_double_heap)); ++ } ++ } + + /* Clear the heap. */ +- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qfalse); ++ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qfalse); + + RB_VM_LOCK_ENTER(); + { +@@ -10256,13 +10331,16 @@ gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE do + } + RB_VM_LOCK_LEAVE(); + +- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue); ++ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qtrue); + + objspace_reachable_objects_from_root(objspace, root_obj_check_moved_i, NULL); + objspace_each_objects(objspace, heap_check_moved_i, NULL, TRUE); + +- return gc_compact_stats(ec, self); ++ return gc_compact_stats(self); + } ++#else ++# define gc_verify_compaction_references rb_f_notimplement ++#endif + + VALUE + rb_gc_start(void) +@@ -10722,26 +10800,45 @@ gc_disable(rb_execution_context_t *ec, VALUE _) + return rb_gc_disable(); + } + ++#if GC_COMPACTION_SUPPORTED ++/* ++ * call-seq: ++ * GC.auto_compact = flag ++ * ++ * Updates automatic compaction mode. ++ * ++ * When enabled, the compactor will execute on every major collection. ++ * ++ * Enabling compaction will degrade performance on major collections. ++ */ + static VALUE +-gc_set_auto_compact(rb_execution_context_t *ec, VALUE _, VALUE v) ++gc_set_auto_compact(VALUE _, VALUE v) + { + /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for + * the read barrier, so we must disable automatic compaction. */ +-#if !defined(__MINGW32__) && !defined(_WIN32) +- if (!USE_MMAP_ALIGNED_ALLOC) { +- rb_raise(rb_eNotImpError, "Automatic compaction isn't available on this platform"); +- } +-#endif + + ruby_enable_autocompact = RTEST(v); + return v; + } ++#else ++# define gc_set_auto_compact rb_f_notimplement ++#endif + ++#if GC_COMPACTION_SUPPORTED ++/* ++ * call-seq: ++ * GC.auto_compact -> true or false ++ * ++ * Returns whether or not automatic compaction has been enabled. ++ */ + static VALUE +-gc_get_auto_compact(rb_execution_context_t *ec, VALUE _) ++gc_get_auto_compact(VALUE _) + { + return RBOOL(ruby_enable_autocompact); + } ++#else ++# define gc_get_auto_compact rb_f_notimplement ++#endif + + static int + get_envparam_size(const char *name, size_t *default_value, size_t lower_bound) +@@ -13599,6 +13696,11 @@ Init_GC(void) + rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); + rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0); + #endif ++ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); ++ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); ++ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); + + #if GC_DEBUG_STRESS_TO_CLASS + rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); +diff --git a/test/ruby/test_gc_compact.rb b/test/ruby/test_gc_compact.rb +index 42ad028530..411d5eab69 100644 +--- a/test/ruby/test_gc_compact.rb ++++ b/test/ruby/test_gc_compact.rb +@@ -9,14 +9,7 @@ + end + + class TestGCCompact < Test::Unit::TestCase +- module SupportsCompact +- def setup +- skip "autocompact not supported on this platform" unless supports_auto_compact? +- super +- end +- +- private +- ++ module CompactionSupportInspector + def supports_auto_compact? + return true unless defined?(Etc::SC_PAGE_SIZE) + +@@ -30,10 +23,19 @@ def supports_auto_compact? + end + end + +- include SupportsCompact ++ module OmitUnlessCompactSupported ++ include CompactionSupportInspector ++ ++ def setup ++ omit "autocompact not supported on this platform" unless supports_auto_compact? ++ super ++ end ++ end ++ ++ include OmitUnlessCompactSupported + + class AutoCompact < Test::Unit::TestCase +- include SupportsCompact ++ include OmitUnlessCompactSupported + + def test_enable_autocompact + before = GC.auto_compact +@@ -87,13 +89,39 @@ def test_implicit_compaction_does_something + end + end + +- def os_page_size +- return true unless defined?(Etc::SC_PAGE_SIZE) ++ class CompactMethodsNotImplemented < Test::Unit::TestCase ++ include CompactionSupportInspector ++ ++ def assert_not_implemented(method, *args) ++ omit "autocompact is supported on this platform" if supports_auto_compact? ++ ++ assert_raise(NotImplementedError) { GC.send(method, *args) } ++ refute(GC.respond_to?(method), "GC.#{method} should be defined as rb_f_notimplement") ++ end ++ ++ def test_gc_compact_not_implemented ++ assert_not_implemented(:compact) ++ end ++ ++ def test_gc_auto_compact_get_not_implemented ++ assert_not_implemented(:auto_compact) ++ end ++ ++ def test_gc_auto_compact_set_not_implemented ++ assert_not_implemented(:auto_compact=, true) ++ end ++ ++ def test_gc_latest_compact_info_not_implemented ++ assert_not_implemented(:latest_compact_info) ++ end ++ ++ def test_gc_verify_compaction_references_not_implemented ++ assert_not_implemented(:verify_compaction_references) ++ end + end + +- def setup +- skip "autocompact not supported on this platform" unless supports_auto_compact? +- super ++ def os_page_size ++ return true unless defined?(Etc::SC_PAGE_SIZE) + end + + def test_gc_compact_stats +diff --git a/gc.rb b/gc.rb +index 72637f3796..9265dd7b57 100644 +--- a/gc.rb ++++ b/gc.rb +@@ -38,27 +38,6 @@ def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true + Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false + end + +- # call-seq: +- # GC.auto_compact -> true or false +- # +- # Returns whether or not automatic compaction has been enabled. +- # +- def self.auto_compact +- Primitive.gc_get_auto_compact +- end +- +- # call-seq: +- # GC.auto_compact = flag +- # +- # Updates automatic compaction mode. +- # +- # When enabled, the compactor will execute on every major collection. +- # +- # Enabling compaction will degrade performance on major collections. +- def self.auto_compact=(flag) +- Primitive.gc_set_auto_compact(flag) +- end +- + # call-seq: + # GC.enable -> true or false + # +@@ -210,53 +189,6 @@ def self.latest_gc_info hash_or_key = nil + Primitive.gc_latest_gc_info hash_or_key + end + +- # call-seq: +- # GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} +- # +- # Returns information about object moved in the most recent GC compaction. +- # +- # The returned hash has two keys :considered and :moved. The hash for +- # :considered lists the number of objects that were considered for movement +- # by the compactor, and the :moved hash lists the number of objects that +- # were actually moved. Some objects can't be moved (maybe they were pinned) +- # so these numbers can be used to calculate compaction efficiency. +- def self.latest_compact_info +- Primitive.gc_compact_stats +- end +- +- # call-seq: +- # GC.compact +- # +- # This function compacts objects together in Ruby's heap. It eliminates +- # unused space (or fragmentation) in the heap by moving objects in to that +- # unused space. This function returns a hash which contains statistics about +- # which objects were moved. See `GC.latest_gc_info` for details about +- # compaction statistics. +- # +- # This method is implementation specific and not expected to be implemented +- # in any implementation besides MRI. +- def self.compact +- Primitive.gc_compact +- end +- +- # call-seq: +- # GC.verify_compaction_references(toward: nil, double_heap: false) -> hash +- # +- # Verify compaction reference consistency. +- # +- # This method is implementation specific. During compaction, objects that +- # were moved are replaced with T_MOVED objects. No object should have a +- # reference to a T_MOVED object after compaction. +- # +- # This function doubles the heap to ensure room to move all objects, +- # compacts the heap to make sure everything moves, updates all references, +- # then performs a full GC. If any object contains a reference to a T_MOVED +- # object, that object should be pushed on the mark stack, and will +- # make a SEGV. +- def self.verify_compaction_references(toward: nil, double_heap: false) +- Primitive.gc_verify_compaction_references(double_heap, toward == :empty) +- end +- + # call-seq: + # GC.using_rvargc? -> true or false + # diff --git a/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch b/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch new file mode 100644 index 0000000..240cc9c --- /dev/null +++ b/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch @@ -0,0 +1,502 @@ +--- ruby-3.1.2/gc.rbinc 2022-04-12 13:11:17.000000000 +0200 ++++ ruby/gc.rbinc 2022-06-08 12:49:16.288024971 +0200 +@@ -9,27 +9,27 @@ + #include "builtin.h" /* for RB_BUILTIN_FUNCTION */ + struct rb_execution_context_struct; /* in vm_core.h */ + +-static VALUE builtin_inline_class_277(struct rb_execution_context_struct *ec, const VALUE self) ++static VALUE builtin_inline_class_209(struct rb_execution_context_struct *ec, const VALUE self) + { + MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3); +-#line 277 "gc.rb" ++#line 209 "gc.rb" + + rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE; + return flag; + #line 20 "gc.rbinc" + } + +-static VALUE builtin_inline_class_289(struct rb_execution_context_struct *ec, const VALUE self) ++static VALUE builtin_inline_class_221(struct rb_execution_context_struct *ec, const VALUE self) + { +-#line 289 "gc.rb" ++#line 221 "gc.rb" + return + RBOOL(rb_objspace.flags.measure_gc); + #line 28 "gc.rbinc" + } + +-static VALUE builtin_inline_class_299(struct rb_execution_context_struct *ec, const VALUE self) ++static VALUE builtin_inline_class_231(struct rb_execution_context_struct *ec, const VALUE self) + { +-#line 299 "gc.rb" ++#line 231 "gc.rb" + return + ULL2NUM(rb_objspace.profile.total_time_ns); + #line 36 "gc.rbinc" +@@ -52,31 +52,6 @@ + } + + static void +-mjit_compile_invokebuiltin_for_gc_get_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) +-{ +- fprintf(f, " VALUE self = GET_SELF();\n"); +- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_get_auto_compact */\n", (VALUE)gc_get_auto_compact); +- fprintf(f, " val = f(ec, self);\n"); +-} +- +-static void +-mjit_compile_invokebuiltin_for_gc_set_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) +-{ +- fprintf(f, " VALUE self = GET_SELF();\n"); +- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE);\n"); +- if (index == -1) { +- fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 1); +- } +- else { +- fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n"); +- fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index); +- } +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_set_auto_compact */\n", (VALUE)gc_set_auto_compact); +- fprintf(f, " val = f(ec, self, argv[0]);\n"); +-} +- +-static void + mjit_compile_invokebuiltin_for_gc_enable(FILE *f, long index, unsigned stack_size, bool inlinable_p) + { + fprintf(f, " VALUE self = GET_SELF();\n"); +@@ -161,40 +136,6 @@ + } + + static void +-mjit_compile_invokebuiltin_for_gc_compact_stats(FILE *f, long index, unsigned stack_size, bool inlinable_p) +-{ +- fprintf(f, " VALUE self = GET_SELF();\n"); +- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact_stats */\n", (VALUE)gc_compact_stats); +- fprintf(f, " val = f(ec, self);\n"); +-} +- +-static void +-mjit_compile_invokebuiltin_for_gc_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) +-{ +- fprintf(f, " VALUE self = GET_SELF();\n"); +- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact */\n", (VALUE)gc_compact); +- fprintf(f, " val = f(ec, self);\n"); +-} +- +-static void +-mjit_compile_invokebuiltin_for_gc_verify_compaction_references(FILE *f, long index, unsigned stack_size, bool inlinable_p) +-{ +- fprintf(f, " VALUE self = GET_SELF();\n"); +- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE, VALUE);\n"); +- if (index == -1) { +- fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 2); +- } +- else { +- fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n"); +- fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index); +- } +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_verify_compaction_references */\n", (VALUE)gc_verify_compaction_references); +- fprintf(f, " val = f(ec, self, argv[0], argv[1]);\n"); +-} +- +-static void + mjit_compile_invokebuiltin_for__bi0(FILE *f, long index, unsigned stack_size, bool inlinable_p) + { + fprintf(f, " VALUE self = GET_SELF();\n"); +@@ -202,7 +143,7 @@ + if (inlinable_p) { + fprintf(f, "%s", " {\n"); + fprintf(f, "%s", " MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3);\n"); +- fprintf(f, "%s", "#line 277 \"gc.rb\"\n"); ++ fprintf(f, "%s", "#line 209 \"gc.rb\"\n"); + fprintf(f, "%s", " \n"); + fprintf(f, "%s", " rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n"); + fprintf(f, "%s", " return flag;\n"); +@@ -211,7 +152,7 @@ + fprintf(f, "%s", " \n"); + return; + } +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_277 */\n", (VALUE)builtin_inline_class_277); ++ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_209 */\n", (VALUE)builtin_inline_class_209); + fprintf(f, " val = f(ec, self);\n"); + } + +@@ -222,7 +163,7 @@ + fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); + if (inlinable_p) { + fprintf(f, "%s", " {\n"); +- fprintf(f, "%s", "#line 289 \"gc.rb\"\n"); ++ fprintf(f, "%s", "#line 221 \"gc.rb\"\n"); + fprintf(f, "%s", " return \n"); + fprintf(f, "%s", " RBOOL(rb_objspace.flags.measure_gc);\n"); + fprintf(f, "%s", "#line 52 \"gc.rbinc\"\n"); +@@ -230,7 +171,7 @@ + fprintf(f, "%s", " \n"); + return; + } +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_289 */\n", (VALUE)builtin_inline_class_289); ++ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_221 */\n", (VALUE)builtin_inline_class_221); + fprintf(f, " val = f(ec, self);\n"); + } + +@@ -241,7 +182,7 @@ + fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); + if (inlinable_p) { + fprintf(f, "%s", " {\n"); +- fprintf(f, "%s", "#line 299 \"gc.rb\"\n"); ++ fprintf(f, "%s", "#line 231 \"gc.rb\"\n"); + fprintf(f, "%s", " return \n"); + fprintf(f, "%s", " ULL2NUM(rb_objspace.profile.total_time_ns);\n"); + fprintf(f, "%s", "#line 59 \"gc.rbinc\"\n"); +@@ -249,7 +190,7 @@ + fprintf(f, "%s", " \n"); + return; + } +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_299 */\n", (VALUE)builtin_inline_class_299); ++ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_231 */\n", (VALUE)builtin_inline_class_231); + fprintf(f, " val = f(ec, self);\n"); + } + +@@ -258,21 +199,16 @@ + // table definition + static const struct rb_builtin_function gc_table[] = { + RB_BUILTIN_FUNCTION(0, gc_start_internal, gc_start_internal, 4, mjit_compile_invokebuiltin_for_gc_start_internal), +- RB_BUILTIN_FUNCTION(1, gc_get_auto_compact, gc_get_auto_compact, 0, mjit_compile_invokebuiltin_for_gc_get_auto_compact), +- RB_BUILTIN_FUNCTION(2, gc_set_auto_compact, gc_set_auto_compact, 1, mjit_compile_invokebuiltin_for_gc_set_auto_compact), +- RB_BUILTIN_FUNCTION(3, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable), +- RB_BUILTIN_FUNCTION(4, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable), +- RB_BUILTIN_FUNCTION(5, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get), +- RB_BUILTIN_FUNCTION(6, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m), +- RB_BUILTIN_FUNCTION(7, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count), +- RB_BUILTIN_FUNCTION(8, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat), +- RB_BUILTIN_FUNCTION(9, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info), +- RB_BUILTIN_FUNCTION(10, gc_compact_stats, gc_compact_stats, 0, mjit_compile_invokebuiltin_for_gc_compact_stats), +- RB_BUILTIN_FUNCTION(11, gc_compact, gc_compact, 0, mjit_compile_invokebuiltin_for_gc_compact), +- RB_BUILTIN_FUNCTION(12, gc_verify_compaction_references, gc_verify_compaction_references, 2, mjit_compile_invokebuiltin_for_gc_verify_compaction_references), +- RB_BUILTIN_FUNCTION(13, _bi0, builtin_inline_class_277, 0, mjit_compile_invokebuiltin_for__bi0), +- RB_BUILTIN_FUNCTION(14, _bi1, builtin_inline_class_289, 0, mjit_compile_invokebuiltin_for__bi1), +- RB_BUILTIN_FUNCTION(15, _bi2, builtin_inline_class_299, 0, mjit_compile_invokebuiltin_for__bi2), ++ RB_BUILTIN_FUNCTION(1, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable), ++ RB_BUILTIN_FUNCTION(2, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable), ++ RB_BUILTIN_FUNCTION(3, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get), ++ RB_BUILTIN_FUNCTION(4, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m), ++ RB_BUILTIN_FUNCTION(5, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count), ++ RB_BUILTIN_FUNCTION(6, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat), ++ RB_BUILTIN_FUNCTION(7, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info), ++ RB_BUILTIN_FUNCTION(8, _bi0, builtin_inline_class_209, 0, mjit_compile_invokebuiltin_for__bi0), ++ RB_BUILTIN_FUNCTION(9, _bi1, builtin_inline_class_221, 0, mjit_compile_invokebuiltin_for__bi1), ++ RB_BUILTIN_FUNCTION(10, _bi2, builtin_inline_class_231, 0, mjit_compile_invokebuiltin_for__bi2), + RB_BUILTIN_FUNCTION(-1, NULL, NULL, 0, 0), + }; + +@@ -282,8 +218,6 @@ + COMPILER_WARNING_ERROR(-Wincompatible-pointer-types) + #endif + if (0) rb_builtin_function_check_arity4(gc_start_internal); +- if (0) rb_builtin_function_check_arity0(gc_get_auto_compact); +- if (0) rb_builtin_function_check_arity1(gc_set_auto_compact); + if (0) rb_builtin_function_check_arity0(gc_enable); + if (0) rb_builtin_function_check_arity0(gc_disable); + if (0) rb_builtin_function_check_arity0(gc_stress_get); +@@ -291,12 +225,9 @@ + if (0) rb_builtin_function_check_arity0(gc_count); + if (0) rb_builtin_function_check_arity1(gc_stat); + if (0) rb_builtin_function_check_arity1(gc_latest_gc_info); +- if (0) rb_builtin_function_check_arity0(gc_compact_stats); +- if (0) rb_builtin_function_check_arity0(gc_compact); +- if (0) rb_builtin_function_check_arity2(gc_verify_compaction_references); +- if (0) rb_builtin_function_check_arity0(builtin_inline_class_277); +- if (0) rb_builtin_function_check_arity0(builtin_inline_class_289); +- if (0) rb_builtin_function_check_arity0(builtin_inline_class_299); ++ if (0) rb_builtin_function_check_arity0(builtin_inline_class_209); ++ if (0) rb_builtin_function_check_arity0(builtin_inline_class_221); ++ if (0) rb_builtin_function_check_arity0(builtin_inline_class_231); + COMPILER_WARNING_POP + + // load +--- ruby-3.1.2/miniprelude.c 2022-04-12 13:11:17.000000000 +0200 ++++ ruby/miniprelude.c 2022-06-08 12:49:16.377024871 +0200 +@@ -545,11 +545,10 @@ + + static const char prelude_name2[] = ""; + static const struct { +- char L0[479]; /* 1..58 */ +- char L58[508]; /* 59..204 */ +- char L204[504]; /* 205..275 */ +- char L275[490]; /* 276..306 */ +- char L306[128]; /* 307..312 */ ++ char L0[492]; /* 1..70 */ ++ char L70[468]; /* 71..197 */ ++ char L197[470]; /* 198..237 */ ++ char L237[211]; /* 238..244 */ + } prelude_code2 = { + #line 1 "gc.rb" + ""/* for gc.c */ +@@ -593,29 +592,6 @@ + " end\n" + "\n" + "\n"/* call-seq: */ +-"\n"/* GC.auto_compact -> true or false */ +-"\n"/* */ +-"\n"/* Returns whether or not automatic compaction has been enabled. */ +-"\n"/* */ +-" def self.auto_compact\n" +-" Primitive.gc_get_auto_compact\n" +-" end\n" +-"\n" +-"\n"/* call-seq: */ +-"\n"/* GC.auto_compact = flag */ +-"\n"/* */ +-"\n"/* Updates automatic compaction mode. */ +-"\n"/* */ +-"\n"/* When enabled, the compactor will execute on every major collection. */ +-"\n"/* */ +-"\n"/* Enabling compaction will degrade performance on major collections. */ +-" def self.auto_compact=(flag)\n" +-, +-#line 59 "gc.rb" +-" Primitive.gc_set_auto_compact(flag)\n" +-" end\n" +-"\n" +-"\n"/* call-seq: */ + "\n"/* GC.enable -> true or false */ + "\n"/* */ + "\n"/* Enables garbage collection, returning +true+ if garbage */ +@@ -645,6 +621,8 @@ + "\n"/* GC.stress -> integer, true or false */ + "\n"/* */ + "\n"/* Returns current status of GC stress mode. */ ++, ++#line 71 "gc.rb" + " def self.stress\n" + " Primitive.gc_stress_get\n" + " end\n" +@@ -758,8 +736,6 @@ + "\n"/* GC.latest_gc_info(:major_by) -> :malloc */ + "\n"/* */ + "\n"/* Returns information about the most recent garbage collection. */ +-, +-#line 205 "gc.rb" + "\n"/* */ + "\n"/* If the optional argument, hash, is given, */ + "\n"/* it is overwritten and returned. */ +@@ -768,59 +744,14 @@ + " Primitive.gc_latest_gc_info hash_or_key\n" + " end\n" + "\n" +-"\n"/* call-seq: */ +-"\n"/* GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} */ +-"\n"/* */ +-"\n"/* Returns information about object moved in the most recent GC compaction. */ +-"\n"/* */ +-"\n"/* The returned hash has two keys :considered and :moved. The hash for */ +-"\n"/* :considered lists the number of objects that were considered for movement */ +-"\n"/* by the compactor, and the :moved hash lists the number of objects that */ +-"\n"/* were actually moved. Some objects can't be moved (maybe they were pinned) */ +-"\n"/* so these numbers can be used to calculate compaction efficiency. */ +-" def self.latest_compact_info\n" +-" Primitive.gc_compact_stats\n" +-" end\n" +-"\n" +-"\n"/* call-seq: */ +-"\n"/* GC.compact */ +-"\n"/* */ +-"\n"/* This function compacts objects together in Ruby's heap. It eliminates */ +-"\n"/* unused space (or fragmentation) in the heap by moving objects in to that */ +-"\n"/* unused space. This function returns a hash which contains statistics about */ +-"\n"/* which objects were moved. See `GC.latest_gc_info` for details about */ +-"\n"/* compaction statistics. */ +-"\n"/* */ +-"\n"/* This method is implementation specific and not expected to be implemented */ +-"\n"/* in any implementation besides MRI. */ +-" def self.compact\n" +-" Primitive.gc_compact\n" +-" end\n" +-"\n" +-"\n"/* call-seq: */ +-"\n"/* GC.verify_compaction_references(toward: nil, double_heap: false) -> hash */ +-"\n"/* */ +-"\n"/* Verify compaction reference consistency. */ +-"\n"/* */ +-"\n"/* This method is implementation specific. During compaction, objects that */ +-"\n"/* were moved are replaced with T_MOVED objects. No object should have a */ +-"\n"/* reference to a T_MOVED object after compaction. */ +-"\n"/* */ +-"\n"/* This function doubles the heap to ensure room to move all objects, */ +-"\n"/* compacts the heap to make sure everything moves, updates all references, */ +-"\n"/* then performs a full GC. If any object contains a reference to a T_MOVED */ +-"\n"/* object, that object should be pushed on the mark stack, and will */ +-"\n"/* make a SEGV. */ +-" def self.verify_compaction_references(toward: nil, double_heap: false)\n" +-" Primitive.gc_verify_compaction_references(double_heap, toward == :empty)\n" +-" end\n" +-"\n" + "\n"/* call-seq: */ + "\n"/* GC.using_rvargc? -> true or false */ + "\n"/* */ + "\n"/* Returns true if using experimental feature Variable Width Allocation, false */ + "\n"/* otherwise. */ + " def self.using_rvargc?\n"/* :nodoc: */ ++, ++#line 198 "gc.rb" + " GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] > 1\n" + " end\n" + "\n" +@@ -831,8 +762,6 @@ + "\n"/* Enable to measure GC time. */ + "\n"/* You can get the result with GC.stat(:time). */ + "\n"/* Note that GC time measurement can cause some performance overhead. */ +-, +-#line 276 "gc.rb" + " def self.measure_total_time=(flag)\n" + " Primitive.cstmt! %{\n" + " rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n" +@@ -863,15 +792,15 @@ + "end\n" + "\n" + "module ObjectSpace\n" +-" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n" + , +-#line 307 "gc.rb" ++#line 238 "gc.rb" ++" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n" + " Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false\n" + " end\n" + "\n" + " module_function :garbage_collect\n" + "end\n" +-#line 875 "miniprelude.c" ++#line 804 "miniprelude.c" + }; + + static const char prelude_name3[] = ""; +@@ -1223,7 +1152,7 @@ + " end\n" + "\n" + "end\n" +-#line 1227 "miniprelude.c" ++#line 1156 "miniprelude.c" + }; + + static const char prelude_name4[] = ""; +@@ -1354,7 +1283,7 @@ + " Primitive.io_write_nonblock(buf, exception)\n" + " end\n" + "end\n" +-#line 1358 "miniprelude.c" ++#line 1287 "miniprelude.c" + }; + + static const char prelude_name5[] = ""; +@@ -1402,7 +1331,7 @@ + " alias restore load\n" + " end\n" + "end\n" +-#line 1406 "miniprelude.c" ++#line 1335 "miniprelude.c" + }; + + static const char prelude_name6[] = ""; +@@ -1724,7 +1653,7 @@ + " Primitive.pack_unpack1(fmt, offset)\n" + " end\n" + "end\n" +-#line 1728 "miniprelude.c" ++#line 1657 "miniprelude.c" + }; + + static const char prelude_name7[] = ""; +@@ -2111,7 +2040,7 @@ + " Primitive.tracepoint_attr_instruction_sequence\n" + " end\n" + "end\n" +-#line 2115 "miniprelude.c" ++#line 2044 "miniprelude.c" + }; + + static const char prelude_name8[] = ""; +@@ -2172,7 +2101,7 @@ + " Primitive.rb_warn_m(msgs, uplevel, category)\n" + " end\n" + "end\n" +-#line 2176 "miniprelude.c" ++#line 2105 "miniprelude.c" + }; + + static const char prelude_name9[] = ""; +@@ -2249,7 +2178,7 @@ + " end\n" + " end\n" + "end\n" +-#line 2253 "miniprelude.c" ++#line 2182 "miniprelude.c" + }; + + static const char prelude_name10[] = ""; +@@ -2438,7 +2367,7 @@ + " end\n" + " end\n" + "end\n" +-#line 2442 "miniprelude.c" ++#line 2371 "miniprelude.c" + }; + + static const char prelude_name11[] = ""; +@@ -3305,7 +3234,7 @@ + " }\n" + " end\n" + "end\n" +-#line 3309 "miniprelude.c" ++#line 3238 "miniprelude.c" + }; + + static const char prelude_name12[] = ""; +@@ -3628,7 +3557,7 @@ + " Primitive.time_init_args(year, mon, mday, hour, min, sec, zone)\n" + " end\n" + "end\n" +-#line 3632 "miniprelude.c" ++#line 3561 "miniprelude.c" + }; + + static const char prelude_name13[] = ""; +@@ -3661,7 +3590,7 @@ + " return 0.0\n" + " end\n" + "end\n" +-#line 3665 "miniprelude.c" ++#line 3594 "miniprelude.c" + }; + + static const char prelude_name14[] = ""; +@@ -3691,7 +3620,7 @@ + "\n" + " private :pp\n" + "end\n" +-#line 3695 "miniprelude.c" ++#line 3624 "miniprelude.c" + }; + + static const char prelude_name15[] = ""; +@@ -3718,7 +3647,7 @@ + "rescue LoadError\n" + " warn \"`did_you_mean' was not loaded.\"\n" + "end if defined?(DidYouMean)\n" +-#line 3722 "miniprelude.c" ++#line 3651 "miniprelude.c" + }; + + static const char prelude_name16[] = ""; +@@ -4059,7 +3988,7 @@ + " end\n" + " end\n" + "end\n" +-#line 4063 "miniprelude.c" ++#line 3992 "miniprelude.c" + }; + + COMPILER_WARNING_POP diff --git a/ruby.spec b/ruby.spec index a92223c..eb3ac14 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 164 +%global release 165 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -171,6 +171,22 @@ Patch20: ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch # https://bugs.ruby-lang.org/issues/18373 # https://github.com/ruby/ruby/pull/5774 Patch21: ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch +# If GC compaction is not supported on platform, define the +# corresponding GC methods as not implemented. +# https://bugs.ruby-lang.org/issues/18779 +# https://github.com/ruby/ruby/pull/5934 +Patch22: ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch +# To regenerate the patch you need to have ruby, autoconf, xz, tar and make installed: +# tar -Jxvf ./ruby-3.1.2.tar.xz +# git clone https://github.com/ruby/ruby.git +# cd ruby && git checkout v3_1_2 +# patch -p1 < ../ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch +# ./autogen.sh && ./configure +# make gc.rbinc miniprelude.c +# cd .. +# diff -u {ruby-3.1.2,ruby}/gc.rbinc > ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch +# diff -u {ruby-3.1.2,ruby}/miniprelude.c >> ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch +Patch23: ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -643,6 +659,8 @@ rm -rf ext/fiddle/libffi* mkdir .bundle/specifications find .bundle/gems -name '*-[0-9]*.gemspec' -exec cp -t .bundle/specifications/ {} + %patch21 -p1 +%patch22 -p1 +%patch23 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -650,6 +668,12 @@ cp -a %{SOURCE3} . %build autoconf +# Some platforms do not support compaction and upstream does not seem to provide the +# right mechanism for the enablement of the preprocessor macros. +# https://bugs.ruby-lang.org/issues/18829 +%ifnarch ppc64le +CFLAGS="%{build_cflags} -DGC_COMPACTION_SUPPORTED" +%endif %configure \ --with-rubylibprefix='%{ruby_libdir}' \ --with-archlibdir='%{_libdir}' \ @@ -1499,6 +1523,9 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Tue Jun 07 2022 Jarek Prokop - 3.1.2-165 +- Define GC compaction methods as rb_f_notimplement on unsupported platforms. + * Thu Apr 14 2022 Vít Ondruch - 3.1.2-164 - Upgrade to Ruby 3.1.2. - Use upstream patch for correct build of gem extensions. From ca94aff023c5779dec1e03094784bdf736beca83 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Thu, 16 Jun 2022 13:00:59 +0200 Subject: [PATCH 431/530] Define the GC compaction support during run time. Previous commit changed GC compaction methods to not be implemented when not supported. However, that commit only does compile time checks, but there are additional compaction support checks during run time. This commit changes it so that GC compaction methods aren't defined also during run time if the platform does not support GC compaction. The patch is manually backported from following change set: https://github.com/ruby/ruby/pull/6019 https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20 To apply the patch included with this commit, first apply `ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch` and then apply the `ruby-3.2.0-detect_compaction_support_during_runtime.patch`. Related upstream issue: https://bugs.ruby-lang.org/issues/18829 --- ...ct-compaction-support-during-runtime.patch | 293 ++++++++++++++++++ ruby.spec | 17 +- 2 files changed, 303 insertions(+), 7 deletions(-) create mode 100644 ruby-3.2.0-Detect-compaction-support-during-runtime.patch diff --git a/ruby-3.2.0-Detect-compaction-support-during-runtime.patch b/ruby-3.2.0-Detect-compaction-support-during-runtime.patch new file mode 100644 index 0000000..fd8162f --- /dev/null +++ b/ruby-3.2.0-Detect-compaction-support-during-runtime.patch @@ -0,0 +1,293 @@ +From 4d9cc9afa47981520d991d19fd78b322f1ba9f2a Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Wed, 22 Jun 2022 01:03:49 +0200 +Subject: [PATCH] Detect compaction support during runtime. + +The patch is created by backporting 3 commits from +the upstream Ruby master branch in the chronological order below. + +https://github.com/ruby/ruby/commit/52d42e702375446746164a0251e1a10bce813b78 +https://github.com/ruby/ruby/commit/79eaaf2d0b641710613f16525e4b4c439dfe854e +https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20 + +== How to create this patch == + +Download Ruby source code. +``` +$ git clone https://github.com/ruby/ruby.git +$ cd ruby +``` + +First create a commit squashed from the 3 commits above. +Checkout the second commmit above, and create a temporary branch. +``` +$ git checkout 79eaaf2d0b641710613f16525e4b4c439dfe854e +$ git checkout -b wip/detect-compaction-runtime-tmp +``` + +Cherry pick the third commit on the second commit. +``` +$ git cherry-pick 2c190863239bee3f54cfb74b16bb6ea4cae6ed20 +``` + +Squash the last 3 commits on the branch. +``` +$ git rebase -i 2223eb082afa6d05321b69df783d4133b9aacba6 +``` + +Then checkout Ruby 3.1.2 branch. +Create a new branch. +Merge the Fedora Ruby's +ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch. +``` +$ git checkout v3_1_2 +$ git checkout -b wip/detect-compaction-runtime +$ patch -p1 < +~/fed/ruby/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch +$ git add gc.c gc.rb test/ruby/test_gc_compact.rb +$ git commit +``` + +Merge the squashed one commit on the +`wip/detect-compaction-runtime-tmp` branch +into the `wip/detect-compaction-runtime` branch. +``` +$ git cherry-pick +``` + +Fix conflicts seeing the difference by `git show ` +on another terminal. +``` +$ vi gc.c +$ git add gc.c +$ git commit +``` + +== Notes for the patch == + +``` ++# define GC_COMPACTION_SUPPORTED (GC_CAN_COMPILE_COMPACTION && USE_MMAP_ALIGNED_ALLOC) +``` + +We use the USE_MMAP_ALIGNED_ALLOC instead of HEAP_PAGE_ALLOC_USE_MMAP on +the line above. Because while the Ruby on the master branch replaced the +USE_MMAP_ALIGNED_ALLOC with HEAP_PAGE_ALLOC_USE_MMAP, Ruby 3.1.2 doesn't. +See . + + +``` ++ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); +``` + +We added the line in the case that GC_COMPACTION_SUPPORTED is true. +Because while the Ruby on the master branch defines the +GC.verify_compaction_references in the gc.rb in +the case that GC_COMPACTION_SUPPORTED is true, Ruby 3.1.2 +doesn't define it in the gc.rb. +See . + + +``` ++ OPT(GC_COMPACTION_SUPPORTED); +``` + +We added the line to expose the C macro to Ruby level. +In Ruby the macro existance can then be checked like so: +```Ruby +GC::OPTS.include?("GC_COMPACTION_SUPPORTED") +``` +It will return `true` if the GC_COMPACTION_SUPPORTED evaluates to `true` on the +C level, `false` otherwise. +See + +== Original commit messages == + +This is a combination of 3 commits. +This is the 1st commit message: +~~~ +Rename GC_COMPACTION_SUPPORTED + +Naming this macro GC_COMPACTION_SUPPORTED is misleading because it +only checks whether compaction is supported at compile time. + +[Bug #18829] +~~~ + +This is the commit message #2: +~~~ +Include runtime checks for compaction support + +Commit 0c36ba53192c5a0d245c9b626e4346a32d7d144e changed GC compaction +methods to not be implemented when not supported. However, that commit +only does compile time checks (which currently only checks for WASM), +but there are additional compaction support checks during run time. + +This commit changes it so that GC compaction methods aren't defined +during run time if the platform does not support GC compaction. + +[Bug #18829] +~~~ + +This is the commit message #3: +~~~ +Suppress code unused unless GC_CAN_COMPILE_COMPACTION +~~~ +--- + gc.c | 63 +++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 43 insertions(+), 20 deletions(-) + +diff --git a/gc.c b/gc.c +index 1c35856c44..bff0666a17 100644 +--- a/gc.c ++++ b/gc.c +@@ -4980,6 +4980,23 @@ gc_unprotect_pages(rb_objspace_t *objspace, rb_heap_t *heap) + static void gc_update_references(rb_objspace_t * objspace); + static void invalidate_moved_page(rb_objspace_t *objspace, struct heap_page *page); + ++#ifndef GC_CAN_COMPILE_COMPACTION ++#if defined(__wasi__) /* WebAssembly doesn't support signals */ ++# define GC_CAN_COMPILE_COMPACTION 0 ++#else ++# define GC_CAN_COMPILE_COMPACTION 1 ++#endif ++#endif ++ ++#if defined(__MINGW32__) || defined(_WIN32) ++# define GC_COMPACTION_SUPPORTED 1 ++#else ++/* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for ++ * the read barrier, so we must disable compaction. */ ++# define GC_COMPACTION_SUPPORTED (GC_CAN_COMPILE_COMPACTION && USE_MMAP_ALIGNED_ALLOC) ++#endif ++ ++#if GC_CAN_COMPILE_COMPACTION + static void + read_barrier_handler(uintptr_t address) + { +@@ -5000,6 +5017,7 @@ read_barrier_handler(uintptr_t address) + } + RB_VM_LOCK_LEAVE(); + } ++#endif + + #if defined(_WIN32) + static LPTOP_LEVEL_EXCEPTION_FILTER old_handler; +@@ -9250,13 +9268,7 @@ gc_start_internal(rb_execution_context_t *ec, VALUE self, VALUE full_mark, VALUE + + /* For now, compact implies full mark / sweep, so ignore other flags */ + if (RTEST(compact)) { +- /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for +- * the read barrier, so we must disable compaction. */ +-#if !defined(__MINGW32__) && !defined(_WIN32) +- if (!USE_MMAP_ALIGNED_ALLOC) { +- rb_raise(rb_eNotImpError, "Compaction isn't available on this platform"); +- } +-#endif ++ GC_ASSERT(GC_COMPACTION_SUPPORTED); + + reason |= GPR_FLAG_COMPACT; + } +@@ -9421,7 +9433,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) + return (VALUE)src; + } + +-#if GC_COMPACTION_SUPPORTED ++#if GC_CAN_COMPILE_COMPACTION + static int + compare_free_slots(const void *left, const void *right, void *dummy) + { +@@ -10149,7 +10161,7 @@ gc_update_references(rb_objspace_t *objspace) + gc_update_table_refs(objspace, finalizer_table); + } + +-#if GC_COMPACTION_SUPPORTED ++#if GC_CAN_COMPILE_COMPACTION + /* + * call-seq: + * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} +@@ -10190,7 +10202,7 @@ gc_compact_stats(VALUE self) + # define gc_compact_stats rb_f_notimplement + #endif + +-#if GC_COMPACTION_SUPPORTED ++#if GC_CAN_COMPILE_COMPACTION + static void + root_obj_check_moved_i(const char *category, VALUE obj, void *data) + { +@@ -10269,7 +10281,7 @@ gc_compact(VALUE self) + # define gc_compact rb_f_notimplement + #endif + +-#if GC_COMPACTION_SUPPORTED ++#if GC_CAN_COMPILE_COMPACTION + /* + * call-seq: + * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash +@@ -10800,7 +10812,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) + return rb_gc_disable(); + } + +-#if GC_COMPACTION_SUPPORTED ++#if GC_CAN_COMPILE_COMPACTION + /* + * call-seq: + * GC.auto_compact = flag +@@ -10814,8 +10826,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) + static VALUE + gc_set_auto_compact(VALUE _, VALUE v) + { +- /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for +- * the read barrier, so we must disable automatic compaction. */ ++ GC_ASSERT(GC_COMPACTION_SUPPORTED); + + ruby_enable_autocompact = RTEST(v); + return v; +@@ -10824,7 +10835,8 @@ gc_set_auto_compact(VALUE _, VALUE v) + # define gc_set_auto_compact rb_f_notimplement + #endif + +-#if GC_COMPACTION_SUPPORTED ++ ++#if GC_CAN_COMPILE_COMPACTION + /* + * call-seq: + * GC.auto_compact -> true or false +@@ -13696,11 +13708,21 @@ Init_GC(void) + rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); + rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0); + #endif +- rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); +- rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); +- rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); +- rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); +- rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); ++ if (GC_COMPACTION_SUPPORTED) { ++ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); ++ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); ++ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); ++ } ++ else { ++ rb_define_singleton_method(rb_mGC, "compact", rb_f_notimplement, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact", rb_f_notimplement, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact=", rb_f_notimplement, 1); ++ rb_define_singleton_method(rb_mGC, "latest_compact_info", rb_f_notimplement, 0); ++ /* When !GC_COMPACTION_SUPPORTED, this method is not defined in gc.rb */ ++ rb_define_singleton_method(rb_mGC, "verify_compaction_references", rb_f_notimplement, -1); ++ } + + #if GC_DEBUG_STRESS_TO_CLASS + rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); +@@ -13724,6 +13746,7 @@ Init_GC(void) + OPT(MALLOC_ALLOCATED_SIZE); + OPT(MALLOC_ALLOCATED_SIZE_CHECK); + OPT(GC_PROFILE_DETAIL_MEMORY); ++ OPT(GC_COMPACTION_SUPPORTED); + #undef OPT + OBJ_FREEZE(opts); + } +-- +2.36.1 + diff --git a/ruby.spec b/ruby.spec index eb3ac14..3cbd793 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 165 +%global release 166 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -187,6 +187,11 @@ Patch22: ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplemen # diff -u {ruby-3.1.2,ruby}/gc.rbinc > ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch # diff -u {ruby-3.1.2,ruby}/miniprelude.c >> ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch Patch23: ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch +# Define the GC compaction support macro at run time. +# https://bugs.ruby-lang.org/issues/18829 +# https://github.com/ruby/ruby/pull/6019 +# https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20 +Patch24: ruby-3.2.0-Detect-compaction-support-during-runtime.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -661,6 +666,7 @@ find .bundle/gems -name '*-[0-9]*.gemspec' -exec cp -t .bundle/specifications/ { %patch21 -p1 %patch22 -p1 %patch23 -p1 +%patch24 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -668,12 +674,6 @@ cp -a %{SOURCE3} . %build autoconf -# Some platforms do not support compaction and upstream does not seem to provide the -# right mechanism for the enablement of the preprocessor macros. -# https://bugs.ruby-lang.org/issues/18829 -%ifnarch ppc64le -CFLAGS="%{build_cflags} -DGC_COMPACTION_SUPPORTED" -%endif %configure \ --with-rubylibprefix='%{ruby_libdir}' \ --with-archlibdir='%{_libdir}' \ @@ -1523,6 +1523,9 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Thu Jun 16 2022 Jarek Prokop - 3.1.2-166 +- Detect compaction support during run time. + * Tue Jun 07 2022 Jarek Prokop - 3.1.2-165 - Define GC compaction methods as rb_f_notimplement on unsupported platforms. From e2951e6856e1e3480ff232948fa25dd6674c4b84 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 23 Jul 2022 01:10:40 +0000 Subject: [PATCH 432/530] Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 3cbd793..0d4cb8c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 166 +%global release 167 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -1523,6 +1523,9 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Sat Jul 23 2022 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + * Thu Jun 16 2022 Jarek Prokop - 3.1.2-166 - Detect compaction support during run time. From f93afdebdd045891fa0b723ea2330f5fcfd027b0 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Mon, 11 Jul 2022 13:02:25 +0200 Subject: [PATCH 433/530] Fix Ruby build failing due to unremovable tmp subdirectory. RPM 4.18.0-beta1 or later versions remove the build directory automatically, the build fails on removing temporary directories with the missing 'w' bit. RubyGems contain this patch since version 3.3.8. This was merged to ruby_3_1 branch in upstream ruby, but it is not included in the v3_1_2 tag, so new Ruby 3.1 release should contain this change. Relevant RPM upstream PR: https://github.com/rpm-software-management/rpm/pull/2080 Relevant bug: https://bugzilla.redhat.com/show_bug.cgi?id=2105393 --- ...aned-up-error-with-temporary-gemhome.patch | 22 +++++++++++++++++++ ruby.spec | 11 ++++++++++ 2 files changed, 33 insertions(+) create mode 100644 ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.patch diff --git a/ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.patch b/ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.patch new file mode 100644 index 0000000..66c3382 --- /dev/null +++ b/ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.patch @@ -0,0 +1,22 @@ +From 623162ad2bb3b589bddcc32616492a2bc4651726 Mon Sep 17 00:00:00 2001 +From: Hiroshi SHIBATA +Date: Tue, 22 Feb 2022 11:58:54 +0900 +Subject: [PATCH] Resolve cleaned-up error with temporary gemhome + +--- + test/rubygems/test_gem_commands_setup_command.rb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/test/rubygems/test_gem_commands_setup_command.rb b/test/rubygems/test_gem_commands_setup_command.rb +index 5cf94a1dc99..934c76b1d1a 100644 +--- a/test/rubygems/test_gem_commands_setup_command.rb ++++ b/test/rubygems/test_gem_commands_setup_command.rb +@@ -274,6 +274,8 @@ def test_install_default_bundler_gem_with_destdir_flag + spec.executables.each do |e| + assert_path_exist File.join destdir, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'gems', spec.full_name, spec.bindir, e + end ++ ensure ++ FileUtils.chmod "+w", @gemhome + end + + def test_install_default_bundler_gem_with_destdir_and_prefix_flags diff --git a/ruby.spec b/ruby.spec index 0d4cb8c..3176d99 100644 --- a/ruby.spec +++ b/ruby.spec @@ -192,6 +192,13 @@ Patch23: ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.pat # https://github.com/ruby/ruby/pull/6019 # https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20 Patch24: ruby-3.2.0-Detect-compaction-support-during-runtime.patch +# RPM 4.18.0-beta1 or later versions remove the build directory automatically +# on successful build, the build then fails on removing temporary directories +# that are missing the 'w' bit. +# https://bugzilla.redhat.com/show_bug.cgi?id=2105393 +# https://github.com/rpm-software-management/rpm/pull/2080 +# https://github.com/rubygems/rubygems/pull/5372 +Patch25: ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -667,6 +674,7 @@ find .bundle/gems -name '*-[0-9]*.gemspec' -exec cp -t .bundle/specifications/ { %patch22 -p1 %patch23 -p1 %patch24 -p1 +%patch25 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1523,6 +1531,9 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Mon Jul 25 2022 Jarek Prokop - 3.1.2-167 +- Fix directory permissions in one of the rubygems tests. + * Sat Jul 23 2022 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild From ad7f78b5c865f3cbf8721d7eecf950a508a6bc5d Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Wed, 24 Aug 2022 13:44:41 +0200 Subject: [PATCH 434/530] Fix tests with Europe/Amsterdam pre-1970 time on tzdata version 2022b. Resolves: rhbz#2120354 --- ruby-spec-Fix-tests-on-tzdata-2022b.patch | 40 +++++++++++++++++++++++ ruby.spec | 10 +++++- 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 ruby-spec-Fix-tests-on-tzdata-2022b.patch diff --git a/ruby-spec-Fix-tests-on-tzdata-2022b.patch b/ruby-spec-Fix-tests-on-tzdata-2022b.patch new file mode 100644 index 0000000..19386d9 --- /dev/null +++ b/ruby-spec-Fix-tests-on-tzdata-2022b.patch @@ -0,0 +1,40 @@ +From 7e9ec8a20b0f7469b415283d2ec0c22087f8eb2b Mon Sep 17 00:00:00 2001 +From: Jun Aruga +Date: Wed, 24 Aug 2022 12:02:56 +0200 +Subject: [PATCH] Fix tests with Europe/Amsterdam pre-1970 time on tzdata + version 2022b. + +The Time Zone Database (tzdata) changed the pre-1970 timestamps in some zones +including Europe/Amsterdam on tzdata version 2022b or later. +See . + +The tzdata RPM package maintainer on Fedora project suggested changing the Ruby +test, because the change is intentional. +See . + +We use post-1970 time test data to simplify the test. +--- + core/time/shared/local.rb | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/spec/ruby/core/time/shared/local.rb b/spec/ruby/core/time/shared/local.rb +index 43f331c4c..c4aa7a7ea 100644 +--- a/spec/ruby/core/time/shared/local.rb ++++ b/spec/ruby/core/time/shared/local.rb +@@ -8,10 +8,10 @@ describe :time_local, shared: true do + + platform_is_not :windows do + describe "timezone changes" do +- it "correctly adjusts the timezone change to 'CEST' on 'Europe/Amsterdam'" do ++ it "correctly adjusts the timezone change to 'CET' on 'Europe/Amsterdam'" do + with_timezone("Europe/Amsterdam") do +- Time.send(@method, 1940, 5, 16).to_a.should == +- [0, 40, 1, 16, 5, 1940, 4, 137, true, "CEST"] ++ Time.send(@method, 1970, 5, 16).to_a.should == ++ [0, 0, 0, 16, 5, 1970, 6, 136, false, "CET"] + end + end + end +-- +2.36.1 + diff --git a/ruby.spec b/ruby.spec index 3176d99..3de20eb 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 167 +%global release 168 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -199,6 +199,9 @@ Patch24: ruby-3.2.0-Detect-compaction-support-during-runtime.patch # https://github.com/rpm-software-management/rpm/pull/2080 # https://github.com/rubygems/rubygems/pull/5372 Patch25: ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.patch +# Fix tests with Europe/Amsterdam pre-1970 time on tzdata version 2022b. +# https://github.com/ruby/spec/pull/939 +Patch26: ruby-spec-Fix-tests-on-tzdata-2022b.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -675,6 +678,7 @@ find .bundle/gems -name '*-[0-9]*.gemspec' -exec cp -t .bundle/specifications/ { %patch23 -p1 %patch24 -p1 %patch25 -p1 +%patch26 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1531,6 +1535,10 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Wed Aug 24 2022 Jun Aruga - 3.1.2-168 +- Fix tests with Europe/Amsterdam pre-1970 time on tzdata version 2022b. + Resolves: rhbz#2120354 + * Mon Jul 25 2022 Jarek Prokop - 3.1.2-167 - Fix directory permissions in one of the rubygems tests. From bf921512e288965724353ecf73ca9aa6d4975489 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 26 Aug 2022 14:36:43 +0200 Subject: [PATCH 435/530] Make RDoc soft dependnecy in IRB. Resolves: rhbz#2119964 --- ruby-irb-1.4.1-drop-rdoc-hard-dep.patch | 24 +++++++++++++++ ruby-irb-1.4.1-set-rdoc-soft-dep.patch | 41 +++++++++++++++++++++++++ ruby.spec | 13 ++++++++ 3 files changed, 78 insertions(+) create mode 100644 ruby-irb-1.4.1-drop-rdoc-hard-dep.patch create mode 100644 ruby-irb-1.4.1-set-rdoc-soft-dep.patch diff --git a/ruby-irb-1.4.1-drop-rdoc-hard-dep.patch b/ruby-irb-1.4.1-drop-rdoc-hard-dep.patch new file mode 100644 index 0000000..711c514 --- /dev/null +++ b/ruby-irb-1.4.1-drop-rdoc-hard-dep.patch @@ -0,0 +1,24 @@ +From 54c8df06ff9e161012f89d19a4e3aa2e0e37e1b0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 23 Aug 2022 10:41:28 +0200 +Subject: [PATCH] Drop hard dependency on RDoc. + +This has been introduced in 026700499dfd640b2072d7bf0370247a98d5ac40, +but it seems that this is just be mistake, otherwise the later handling +of `LoadError` would not be needed. +--- + lib/irb/input-method.rb | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb +index fd68239e..a8227caa 100644 +--- a/lib/irb/input-method.rb ++++ b/lib/irb/input-method.rb +@@ -14,7 +14,6 @@ + require_relative 'completion' + require 'io/console' + require 'reline' +-require 'rdoc' + + module IRB + STDIN_FILE_NAME = "(line)" # :nodoc: diff --git a/ruby-irb-1.4.1-set-rdoc-soft-dep.patch b/ruby-irb-1.4.1-set-rdoc-soft-dep.patch new file mode 100644 index 0000000..0156fe0 --- /dev/null +++ b/ruby-irb-1.4.1-set-rdoc-soft-dep.patch @@ -0,0 +1,41 @@ +From b24852058fc87c940252c8a711c60ae2eb298082 Mon Sep 17 00:00:00 2001 +From: Jun Aruga +Date: Thu, 25 Aug 2022 20:11:34 +0200 +Subject: [PATCH] Require RDoc in `input-method.rb` again in a limited scope. + +RDoc is implemented as soft dependency in IRB. See how the rdoc is required in +the files. I reverted the commit below. + +``` +$ grep -ril rdoc lib/ +lib/irb/cmd/help.rb +lib/irb/completion.rb +lib/irb/easter-egg.rb +lib/irb/input-method.rb +``` + +--- + +Revert "Remove `require` in signal handler to avoid ThreadError" + +This reverts commit 5f749c613c895cf1b11b5e4cbd1205363bc58028. +--- + lib/irb/input-method.rb | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb +index a8227ca..b77fd32 100644 +--- a/lib/irb/input-method.rb ++++ b/lib/irb/input-method.rb +@@ -320,6 +320,11 @@ def auto_indent(&block) + [195, 164], # The "ä" that appears when Alt+d is pressed on xterm. + [226, 136, 130] # The "∂" that appears when Alt+d in pressed on iTerm2. + ] ++ begin ++ require 'rdoc' ++ rescue LoadError ++ return nil ++ end + + if just_cursor_moving and completion_journey_data.nil? + return nil diff --git a/ruby.spec b/ruby.spec index 3de20eb..e2429ac 100644 --- a/ruby.spec +++ b/ruby.spec @@ -202,6 +202,12 @@ Patch25: ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.pat # Fix tests with Europe/Amsterdam pre-1970 time on tzdata version 2022b. # https://github.com/ruby/spec/pull/939 Patch26: ruby-spec-Fix-tests-on-tzdata-2022b.patch +# Drop hard dependency on RDoc in IRB. +# https://github.com/ruby/irb/pull/393 +Patch27: ruby-irb-1.4.1-drop-rdoc-hard-dep.patch +# Set soft dependency on RDoc in input-method.rb in IRB. +# https://github.com/ruby/irb/pull/395 +Patch28: ruby-irb-1.4.1-set-rdoc-soft-dep.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -354,6 +360,7 @@ Requires: ruby(rubygems) >= %{rubygems_version} # ruby-default-gems is required to run irb. # https://bugs.ruby-lang.org/issues/16951 Requires: ruby-default-gems >= %{ruby_version} +Recommends: rubygem(rdoc) >= %{rdoc_version} Provides: irb = %{version}-%{release} Provides: rubygem(irb) = %{version}-%{release} # Obsoleted by Ruby 2.6 in F30 timeframe. @@ -679,6 +686,8 @@ find .bundle/gems -name '*-[0-9]*.gemspec' -exec cp -t .bundle/specifications/ { %patch24 -p1 %patch25 -p1 %patch26 -p1 +%patch27 -p1 +%patch28 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1535,6 +1544,10 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Mon Aug 29 2022 Jun Aruga - 3.1.2-168 +- Make RDoc soft dependnecy in IRB. + Resolves: rhbz#2119964 + * Wed Aug 24 2022 Jun Aruga - 3.1.2-168 - Fix tests with Europe/Amsterdam pre-1970 time on tzdata version 2022b. Resolves: rhbz#2120354 From 3f106c188ea6368c950ba7d610594f910773a25f Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Fri, 26 Aug 2022 15:58:52 +0200 Subject: [PATCH 436/530] Add IRB to ruby-bundled-gems recommends. Resolves: rhbz#2120562 --- ruby.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruby.spec b/ruby.spec index e2429ac..22f7e84 100644 --- a/ruby.spec +++ b/ruby.spec @@ -500,6 +500,8 @@ many machines, systematically and repeatably. %package bundled-gems Summary: Bundled gems which are part of Ruby StdLib Requires: ruby(rubygems) >= %{rubygems_version} +# Runtime dependency of rubygem(debug). +Recommends: rubygem(irb) >= %{irb_version} Provides: rubygem(net-ftp) = %{net_ftp_version} Provides: rubygem(net-imap) = %{net_imap_version} Provides: rubygem(net-pop) = %{net_pop_version} @@ -1547,6 +1549,8 @@ mv test/fiddle/test_import.rb{,.disable} * Mon Aug 29 2022 Jun Aruga - 3.1.2-168 - Make RDoc soft dependnecy in IRB. Resolves: rhbz#2119964 +- Add IRB to ruby-bundled-gems recommends. + Resolves: rhbz#2120562 * Wed Aug 24 2022 Jun Aruga - 3.1.2-168 - Fix tests with Europe/Amsterdam pre-1970 time on tzdata version 2022b. From c2026da1750e6d0cc70c7370a0840628bbbfa965 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Fri, 2 Sep 2022 10:21:43 +0200 Subject: [PATCH 437/530] Disable Fiddle test cases making use of FFI closure. Fiddle::Closure object is making use of FFI closure from libffi. When such object is created (instantiated) in Ruby, and then the process forks on an SELinux-enabled system, the memory will become corrupted. That is usually not a problem until the The garbage collector sweeps the object and tries to free it, in which case the Ruby process will fail with signal SIGABRT. Tests in test/fiddle/test_closure.rb, test/fiddle/test_func.rb, and test/fiddle/test_function.rb use the `Fiddle::Closure` class directly and fiddle/test_import.rb use the class indirectly through `bind_function` method, therefore they are disabled to prevent introducing the problematic object into the Ruby GC during test suite execution instead of relying on that fork and subsequent garbage collection will not happen. If an FFI closure object is allocated in Ruby and the `fork` function is used afterward, the memory pointing to the closure gets corrupted, and if Ruby GC tries to collect the object in that state, a SIGABRT error occurs. The minimal Ruby reproducer for the issue is the following: ~~~ $ cat fiddle_fork.rb require 'fiddle/closure' require 'fiddle/struct' Fiddle::Closure.new(Fiddle::TYPE_VOID, []) fork { } GC.start ~~~ We allocate an unused Closure object, so it is free for the GC to pick up. Before we call `GC.start` we fork the process as that corrupts the memory. Running this with ruby-3.1.2-167.fc37.x86_64 on SELinux enabled system: ~~~ $ ruby fiddle_fork.rb Aborted (core dumped) ~~~ Such issues may appear at random (depending on the use of forking and GC) in larger applications that use Fiddle::Closure but can be spotted by the following functions appearing in the coredump backtrace: ~~~ 0x00007f6284d3e5b3 in dlfree (mem=) at ../src/dlmalloc.c:4350 0x00007f6284d6d0b1 in dealloc () from /usr/lib64/ruby/fiddle.so 0x00007f6295e432ec in finalize_list () from /lib64/libruby.so.3.1 0x00007f6295e43420 in finalize_deferred.lto_priv () from /lib64/libruby.so.3.1 0x00007f6295e4ff1c in gc_start_internal.lto_priv () from /lib64/libruby.so.3.1 ~~~ Possible solutions to prevent Ruby from crashing: * Do not use Fiddle::Closure. * Use the Fiddle::Closure object only in isolated subprocess that will not fork further. * Enable static trampolines in libffi as noted in bugzilla comment: See related discussion on Ruby upstream ticket: Ruby Fiddle ticket: --- ruby.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 22f7e84..c7198db 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 168 +%global release 169 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -991,6 +991,9 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/TestReadline#test_interrupt_in_other_thread/" # other components are fixed. # https://bugzilla.redhat.com/show_bug.cgi?id=2040380 mv test/fiddle/test_import.rb{,.disable} +mv test/fiddle/test_closure.rb{,.disable} +DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunc#test_qsort1/" +DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" # Give an option to increase the timeout in tests. # https://bugs.ruby-lang.org/issues/16921 @@ -1546,6 +1549,10 @@ mv test/fiddle/test_import.rb{,.disable} %changelog +* Fri Sep 02 2022 Jarek Prokop - 3.1.2-169 +- Disable fiddle tests that use FFI closures. + Related: rhbz#2040380 + * Mon Aug 29 2022 Jun Aruga - 3.1.2-168 - Make RDoc soft dependnecy in IRB. Resolves: rhbz#2119964 From 588a4ae9f02928d7bedbcf46a739d36b0a76e632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 29 Sep 2022 09:27:01 +0200 Subject: [PATCH 438/530] Re-enable package notes. The rhbz#2043092 is not resolved. Nevertheless, the generation of package notes should not break builds of rubygem- packages anymore. Nevertheless, the additional linker options will keep making issues for `gem install`ed gems. Nothing new here unfortunately. --- ruby.spec | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ruby.spec b/ruby.spec index c7198db..ff1d6da 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 169 +%global release 170 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -92,10 +92,6 @@ %bcond_without hardening_test %endif -# The additional linker flags break binary rubygem- packages. -# https://bugzilla.redhat.com/show_bug.cgi?id=2043092 -%undefine _package_note_flags - Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version} @@ -1549,6 +1545,9 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" %changelog +* Thu Sep 29 2022 Vít Ondruch - 3.1.2-170 +- Re-enable package notes. + * Fri Sep 02 2022 Jarek Prokop - 3.1.2-169 - Disable fiddle tests that use FFI closures. Related: rhbz#2040380 From 79d75fdcddac78d2c73000a6ae7569eabb05f7bc Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Wed, 2 Nov 2022 18:30:04 +0100 Subject: [PATCH 439/530] Bypass git submodule test failure on Git >= 2.38.1. --- ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch | 27 +++++++++++++++++++ ruby.spec | 4 +++ 2 files changed, 31 insertions(+) create mode 100644 ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch diff --git a/ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch b/ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch new file mode 100644 index 0000000..73f9a02 --- /dev/null +++ b/ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch @@ -0,0 +1,27 @@ +From dae843f6b7502f921a7e66f39e3714a39d860181 Mon Sep 17 00:00:00 2001 +From: Hiroshi SHIBATA +Date: Wed, 19 Oct 2022 19:40:00 +0900 +Subject: [PATCH] Bypass git submodule add/update with git config + protocol.file.allow=always option. + +Co-authored-by: Nobuyoshi Nakada +--- + test/rubygems/test_gem_source_git.rb | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/test/rubygems/test_gem_source_git.rb b/test/rubygems/test_gem_source_git.rb +index 5702da05974b6..c3b324771fa4d 100644 +--- a/test/rubygems/test_gem_source_git.rb ++++ b/test/rubygems/test_gem_source_git.rb +@@ -63,6 +63,11 @@ def test_checkout_local_cached + end + + def test_checkout_submodules ++ # We need to allow to checkout submodules with file:// protocol ++ # CVE-2022-39253 ++ # https://lore.kernel.org/lkml/xmqq4jw1uku5.fsf@gitster.g/ ++ system(@git, *%W"config --global protocol.file.allow always") ++ + source = Gem::Source::Git.new @name, @repository, 'master', true + + git_gem 'b' diff --git a/ruby.spec b/ruby.spec index ff1d6da..565a547 100644 --- a/ruby.spec +++ b/ruby.spec @@ -204,6 +204,9 @@ Patch27: ruby-irb-1.4.1-drop-rdoc-hard-dep.patch # Set soft dependency on RDoc in input-method.rb in IRB. # https://github.com/ruby/irb/pull/395 Patch28: ruby-irb-1.4.1-set-rdoc-soft-dep.patch +# Bypass git submodule test failure on Git >= 2.38.1. +# https://github.com/ruby/ruby/pull/6587 +Patch29: ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -686,6 +689,7 @@ find .bundle/gems -name '*-[0-9]*.gemspec' -exec cp -t .bundle/specifications/ { %patch26 -p1 %patch27 -p1 %patch28 -p1 +%patch29 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . From 1d0c071aebd50621eb049a2ab8d20da3133f9f16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 22 Nov 2022 17:41:49 +0100 Subject: [PATCH 440/530] Revert "Re-enable package notes." This reverts commit 588a4ae9f02928d7bedbcf46a739d36b0a76e632, because it causes additional issues: https://bugzilla.redhat.com/show_bug.cgi?id=2043092#c67 --- ruby.spec | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 565a547..3375cc6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 170 +%global release 171 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -92,6 +92,10 @@ %bcond_without hardening_test %endif +# The additional linker flags break binary rubygem- packages. +# https://bugzilla.redhat.com/show_bug.cgi?id=2043092 +%undefine _package_note_flags + Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version} @@ -1549,6 +1553,10 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" %changelog +* Tue Nov 22 2022 Vít Ondruch - 3.1.2-171 +- Re-disable package notes. It causes additional issues with installing binary + gems. + * Thu Sep 29 2022 Vít Ondruch - 3.1.2-170 - Re-enable package notes. From 649a6e3083fc66b95c956427cc269bdc7dc21cd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 25 Nov 2022 13:49:21 +0100 Subject: [PATCH 441/530] Upgrade to Ruby 3.1.3. --- ruby-1.9.3-mkmf-verbose.patch | 4 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 +- ruby-2.3.0-ruby_version.patch | 42 +- ruby-2.7.0-Initialize-ABRT-hook.patch | 4 +- ...-extension-libraries-in-bundled-gems.patch | 338 -------------- ...ct-compaction-support-during-runtime.patch | 26 +- ...paction-methods-as-rb_f_notimplement.patch | 414 +++++++++++------- ...c-compaction-methods_generated-files.patch | 44 +- ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch | 27 -- ...0-bundle-update-bundler-test-in-ruby.patch | 31 -- ruby-irb-1.4.1-set-rdoc-soft-dep.patch | 6 - ...aned-up-error-with-temporary-gemhome.patch | 22 - ruby-spec-Fix-tests-on-tzdata-2022b.patch | 40 -- ruby.spec | 97 ++-- sources | 2 +- 18 files changed, 362 insertions(+), 745 deletions(-) delete mode 100644 ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch delete mode 100644 ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch delete mode 100644 ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch delete mode 100644 ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.patch delete mode 100644 ruby-spec-Fix-tests-on-tzdata-2022b.patch diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch index 2113bea..03128be 100644 --- a/ruby-1.9.3-mkmf-verbose.patch +++ b/ruby-1.9.3-mkmf-verbose.patch @@ -11,11 +11,11 @@ diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 682eb46..e6b1445 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb -@@ -1974,7 +1974,7 @@ def configuration(srcdir) +@@ -1971,7 +1971,7 @@ def configuration(srcdir) SHELL = /bin/sh # V=0 quiet, V=1 verbose. other values don't work. --V = 0 +-V = #{CONFIG['MKMF_VERBOSE']} +V = 1 V0 = $(V:0=) Q1 = $(V:1=) diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index f82660f..502b47a 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index d261ea57b5..3c13076b82 100644 --- a/configure.ac +++ b/configure.ac -@@ -3368,6 +3368,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3374,6 +3374,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 041f475..8961723 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index c42436c23d..d261ea57b5 100644 --- a/configure.ac +++ b/configure.ac -@@ -4026,7 +4026,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4032,7 +4032,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index dffeb91..1a9a758 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 3c13076b82..93af30321d 100644 --- a/configure.ac +++ b/configure.ac -@@ -4090,6 +4090,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4096,6 +4096,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index fdf0dfe..fe34219 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.ac b/configure.ac index 93af30321d..bc13397e0e 100644 --- a/configure.ac +++ b/configure.ac -@@ -4062,6 +4062,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4068,6 +4068,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 93af30321d..bc13397e0e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4086,6 +4090,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4092,6 +4096,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 1f42472..2508aeb 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -3977,9 +3977,6 @@ AS_CASE(["$target_os"], +@@ -3983,9 +3983,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 80b137e380..63cd3b4f8b 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -4002,56 +3999,62 @@ AC_ARG_WITH(ridir, +@@ -4008,56 +4005,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4068,6 +4071,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4074,6 +4077,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -202,8 +202,8 @@ index d4ff4a262c..3f9a5bf590 100644 # specified in the environment def self.default_dir -- @default_dir ||= File.join(RbConfig::CONFIG['rubylibprefix'], 'gems', RbConfig::CONFIG['ruby_version']) -+ @default_dir ||= File.join(RbConfig::CONFIG['rubylibprefix'], 'gems', RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']) +- @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version"]) ++ @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]) end ## @@ -211,18 +211,18 @@ index d4ff4a262c..3f9a5bf590 100644 gem_dir = File.join(Gem.user_home, ".gem") gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir) parts = [gem_dir, ruby_engine] -- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty? -+ ruby_version_dir_name = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] +- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty? ++ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] + parts << ruby_version_dir_name unless ruby_version_dir_name.empty? File.join parts end @@ -234,7 +235,7 @@ def self.vendor_dir # :nodoc: - return nil unless RbConfig::CONFIG.key? 'vendordir' + return nil unless RbConfig::CONFIG.key? "vendordir" - File.join RbConfig::CONFIG['vendordir'], 'gems', -- RbConfig::CONFIG['ruby_version'] -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + File.join RbConfig::CONFIG["vendordir"], "gems", +- RbConfig::CONFIG["ruby_version"] ++ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] end ## @@ -230,22 +230,22 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1410,7 +1410,8 @@ def test_self_use_paths +@@ -1395,7 +1395,8 @@ def test_self_use_paths def test_self_user_dir - parts = [@userhome, '.gem', Gem.ruby_engine] -- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty? -+ ruby_version_dir_name = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + parts = [@userhome, ".gem", Gem.ruby_engine] +- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty? ++ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] + parts << ruby_version_dir_name unless ruby_version_dir_name.empty? FileUtils.mkdir_p File.join(parts) -@@ -1486,7 +1487,7 @@ def test_self_vendor_dir - vendordir(File.join(@tempdir, 'vendor')) do +@@ -1471,7 +1472,7 @@ def test_self_vendor_dir + vendordir(File.join(@tempdir, "vendor")) do expected = - File.join RbConfig::CONFIG['vendordir'], 'gems', -- RbConfig::CONFIG['ruby_version'] -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + File.join RbConfig::CONFIG["vendordir"], "gems", +- RbConfig::CONFIG["ruby_version"] ++ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] assert_equal expected, Gem.vendor_dir end @@ -267,7 +267,7 @@ diff --git a/configure.ac b/configure.ac index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -108,7 +108,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -115,7 +115,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index fc2bd08..4d5ab29 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -45,7 +45,7 @@ index b2e5b2b6d0..f39f81da5c 100644 +++ b/common.mk @@ -82,7 +82,8 @@ ENC_MK = enc.mk MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \ - RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(mflags) + RUBY="$(BOOTSTRAPRUBY)" MINIRUBY="$(BOOTSTRAPRUBY)" $(mflags) -COMMONOBJS = array.$(OBJEXT) \ +COMMONOBJS = abrt.$(OBJEXT) \ @@ -57,7 +57,7 @@ diff --git a/ruby.c b/ruby.c index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1611,10 +1611,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1623,10 +1623,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); diff --git a/ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch b/ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch deleted file mode 100644 index de8d4d3..0000000 --- a/ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch +++ /dev/null @@ -1,338 +0,0 @@ -From 111f8422427d78becc9183ae149b2105a16bf327 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Tue, 5 Apr 2022 23:24:00 +0900 -Subject: [PATCH 1/5] Bundled gems are expanded under `.bundle/gems` now - ---- - ext/extmk.rb | 13 +++++++------ - template/exts.mk.tmpl | 2 +- - 2 files changed, 8 insertions(+), 7 deletions(-) - -diff --git a/ext/extmk.rb b/ext/extmk.rb -index 4a087f294ac9..1da9e2704521 100755 ---- a/ext/extmk.rb -+++ b/ext/extmk.rb -@@ -146,7 +146,7 @@ def extmake(target, basedir = 'ext', maybestatic = true) - top_srcdir = $top_srcdir - topdir = $topdir - hdrdir = $hdrdir -- prefix = "../" * (target.count("/")+1) -+ prefix = "../" * (basedir.count("/")+target.count("/")+1) - $top_srcdir = relative_from(top_srcdir, prefix) - $hdrdir = relative_from(hdrdir, prefix) - $topdir = prefix + $topdir -@@ -460,10 +460,11 @@ def $mflags.defined?(var) - end unless $extstatic - - @gemname = nil --if ARGV[0] -- ext_prefix, exts = ARGV.shift.split('/', 2) -+if exts = ARGV.shift -+ ext_prefix = exts[%r[\A(?>\.bundle/)?[^/]+(?:/(?=(.+)?)|\z)]] -+ exts = $1 - $extension = [exts] if exts -- if ext_prefix == 'gems' -+ if ext_prefix.start_with?('.') - @gemname = exts - elsif exts - $static_ext.delete_if {|t, *| !File.fnmatch(t, exts)} -@@ -515,7 +516,7 @@ def $mflags.defined?(var) - exts.delete_if {|d| File.fnmatch?("-*", d)} - end - end --ext_prefix = File.basename(ext_prefix) -+ext_prefix = ext_prefix[$top_srcdir.size+1..-2] - - extend Module.new { - def timestamp_file(name, target_prefix = nil) -@@ -634,7 +635,7 @@ def initialize(src) - end - } - --Dir.chdir ".." -+Dir.chdir dir - unless $destdir.to_s.empty? - $mflags.defined?("DESTDIR") or $mflags << "DESTDIR=#{$destdir}" - end -diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl -index 2f37f4480ac5..964939e365a1 100644 ---- a/template/exts.mk.tmpl -+++ b/template/exts.mk.tmpl -@@ -25,7 +25,7 @@ macros["old_extensions"] = [] - - contpat = /(?>(?>[^\\\n]|\\.)*\\\n)*(?>[^\\\n]|\\.)*/ - Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| -- gem = /\Agems(?=\/)/ =~ e -+ gem = e.start_with?(".bundle/gems/") - s = File.read(e) - s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v| - v.gsub!(/\\\n[ \t]*/, ' ') - -From 6ea34cac22131d28a9cc50e7875e854aed9bdb88 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Wed, 6 Apr 2022 20:25:53 +0900 -Subject: [PATCH 2/5] Retrieve configured gems info - ---- - template/configure-ext.mk.tmpl | 2 +- - template/exts.mk.tmpl | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/template/configure-ext.mk.tmpl b/template/configure-ext.mk.tmpl -index 6636a7759c54..8ba6b963e3ec 100644 ---- a/template/configure-ext.mk.tmpl -+++ b/template/configure-ext.mk.tmpl -@@ -27,7 +27,7 @@ SCRIPT_ARGS = <%=script_args.gsub("#", "\\#")%> - EXTMK_ARGS = $(SCRIPT_ARGS) --gnumake=$(gnumake) --extflags="$(EXTLDFLAGS)" \ - --make-flags="MINIRUBY='$(MINIRUBY)'" - --all: exts # gems -+all: exts gems - exts: - gems: - -diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl -index 964939e365a1..e544c4c88bd7 100644 ---- a/template/exts.mk.tmpl -+++ b/template/exts.mk.tmpl -@@ -19,7 +19,7 @@ opt = OptionParser.new do |o| - o.on('--configure-exts=FILE') {|v| confexts = v} - o.order!(ARGV) - end --confexts &&= File.read(confexts).scan(/^exts: (.*\.mk)/).flatten rescue nil -+confexts &&= File.read(confexts).scan(/^(?:ext|gem)s: (.*\.mk)/).flatten rescue nil - confexts ||= [] - macros["old_extensions"] = [] - -@@ -30,7 +30,7 @@ Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| - s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v| - v.gsub!(/\\\n[ \t]*/, ' ') - next if v.empty? -- next if gem and n != "extensions" -+ next if n != "extensions" - n = "old_extensions" if n == "extensions" and !confexts.include?(e) - v = v.split - m = macros[n] ||= [] - -From be9d00ee7c72766551ba8c3530f1538034498a6a Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Wed, 6 Apr 2022 20:28:00 +0900 -Subject: [PATCH 3/5] Move the target directory of bundled gems like as - rubygems - ---- - ext/extmk.rb | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/ext/extmk.rb b/ext/extmk.rb -index 1da9e2704521..a440af27fc5d 100755 ---- a/ext/extmk.rb -+++ b/ext/extmk.rb -@@ -2,6 +2,9 @@ - # -*- mode: ruby; coding: us-ascii -*- - # frozen_string_literal: false - -+module Gem; end # only needs Gem::Platform -+require 'rubygems/platform' -+ - # :stopdoc: - $extension = nil - $extstatic = nil -@@ -535,11 +538,12 @@ def create_makefile(*args, &block) - super(*args) do |conf| - conf.find do |s| - s.sub!(/^(TARGET_SO_DIR *= *)\$\(RUBYARCHDIR\)/) { -- "TARGET_GEM_DIR = $(extout)/gems/$(arch)/#{@gemname}\n"\ -+ "TARGET_GEM_DIR = $(topdir)/.bundle/extensions/$(gem_platform)/$(ruby_version)/#{@gemname}\n"\ - "#{$1}$(TARGET_GEM_DIR)$(target_prefix)" - } - end - conf.any? {|s| /^TARGET *= *\S/ =~ s} and conf << %{ -+gem_platform = #{Gem::Platform.local} - - # default target - all: - -From c4daf8e445925695c34bab8bf5135dcd1e8575a3 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Wed, 6 Apr 2022 22:57:01 +0900 -Subject: [PATCH 4/5] Obey spec file locations to rubygems - ---- - common.mk | 3 ++- - defs/gmake.mk | 2 +- - tool/gem-unpack.rb | 5 +++-- - 3 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/common.mk b/common.mk -index 7c552cba1e04..b4adb2729c0e 100644 ---- a/common.mk -+++ b/common.mk -@@ -1359,10 +1359,11 @@ extract-gems$(gnumake:yes=-nongnumake): PHONY - $(Q) $(RUNRUBY) -C "$(srcdir)" \ - -Itool -rgem-unpack -answ \ - -e 'BEGIN {FileUtils.mkdir_p(d = ".bundle/gems")}' \ -+ -e 'BEGIN {FileUtils.mkdir_p(s = ".bundle/specifications")}' \ - -e 'gem, ver = *$$F' \ - -e 'next if !ver or /^#/=~gem' \ - -e 'g = "#{gem}-#{ver}"' \ -- -e 'File.directory?("#{d}/#{g}") or Gem.unpack("gems/#{g}.gem", d)' \ -+ -e 'File.directory?("#{d}/#{g}") or Gem.unpack("gems/#{g}.gem", d, s)' \ - gems/bundled_gems - - update-bundled_gems: PHONY -diff --git a/defs/gmake.mk b/defs/gmake.mk -index a625379a6804..27e3e21cc4d6 100644 ---- a/defs/gmake.mk -+++ b/defs/gmake.mk -@@ -290,7 +290,7 @@ extract-gems: | $(patsubst %,.bundle/gems/%,$(bundled-gems)) - $(ECHO) Extracting bundle gem $*... - $(Q) $(BASERUBY) -C "$(srcdir)" \ - -Itool -rgem-unpack \ -- -e 'Gem.unpack("gems/$(@F).gem", ".bundle/gems")' -+ -e 'Gem.unpack("gems/$(@F).gem", ".bundle/gems", ".bundle/specifications")' - - $(srcdir)/.bundle/gems: - $(MAKEDIRS) $@ -diff --git a/tool/gem-unpack.rb b/tool/gem-unpack.rb -index cb05719463f2..fe10b0e420fa 100644 ---- a/tool/gem-unpack.rb -+++ b/tool/gem-unpack.rb -@@ -5,13 +5,14 @@ - # This library is used by "make extract-gems" to - # unpack bundled gem files. - --def Gem.unpack(file, dir = nil) -+def Gem.unpack(file, dir = nil, spec_dir = nil) - pkg = Gem::Package.new(file) - spec = pkg.spec - target = spec.full_name - target = File.join(dir, target) if dir - pkg.extract_files target -- spec_file = File.join(target, "#{spec.name}-#{spec.version}.gemspec") -+ FileUtils.mkdir_p(spec_dir ||= target) -+ spec_file = File.join(spec_dir, "#{spec.name}-#{spec.version}.gemspec") - open(spec_file, 'wb') do |f| - f.print spec.to_ruby - end - -From 3de652d8198be9cd2998c095903889a80e738275 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Thu, 7 Apr 2022 01:44:43 +0900 -Subject: [PATCH 5/5] Install built gem extension binaries - ---- - tool/rbinstall.rb | 56 ++++++++++++++--------------------------------- - 1 file changed, 16 insertions(+), 40 deletions(-) - -diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 9d9b672be472..624961b4eee6 100755 ---- a/tool/rbinstall.rb -+++ b/tool/rbinstall.rb -@@ -858,6 +858,9 @@ class UnpackedInstaller < GemInstaller - def write_cache_file - end - -+ def build_extensions -+ end -+ - def shebang(bin_file_name) - path = File.join(gem_dir, spec.bindir, bin_file_name) - first_line = File.open(path, "rb") {|file| file.gets} -@@ -940,13 +943,12 @@ def ensure_writable_dir(dir) - install_default_gem('ext', srcdir, bindir) - end - --def load_gemspec(file, expanded = false) -+def load_gemspec(file, base = nil) - file = File.realpath(file) - code = File.read(file, encoding: "utf-8:-") - code.gsub!(/(?:`git[^\`]*`|%x\[git[^\]]*\])\.split\([^\)]*\)/m) do - files = [] -- if expanded -- base = File.dirname(file) -+ if base - Dir.glob("**/*", File::FNM_DOTMATCH, base: base) do |n| - case File.basename(n); when ".", ".."; next; end - next if File.directory?(File.join(base, n)) -@@ -959,7 +961,7 @@ def load_gemspec(file, expanded = false) - unless Gem::Specification === spec - raise TypeError, "[#{file}] isn't a Gem::Specification (#{spec.class} instead)." - end -- spec.loaded_from = file -+ spec.loaded_from = base ? File.join(base, File.basename(file)) : file - spec.files.reject! {|n| n.end_with?(".gemspec") or n.start_with?(".git")} - - spec -@@ -1014,20 +1016,6 @@ def install_default_gem(dir, srcdir, bindir) - end - - install?(:ext, :comm, :gem, :'bundled-gems') do -- if CONFIG['CROSS_COMPILING'] == 'yes' -- # The following hacky steps set "$ruby = BASERUBY" in tool/fake.rb -- $hdrdir = '' -- $extmk = nil -- $ruby = nil # ... -- ruby_path = $ruby + " -I#{Dir.pwd}" # $baseruby + " -I#{Dir.pwd}" -- else -- # ruby_path = File.expand_path(with_destdir(File.join(bindir, ruby_install_name))) -- ENV['RUBYLIB'] = nil -- ENV['RUBYOPT'] = nil -- ruby_path = File.expand_path(with_destdir(File.join(bindir, ruby_install_name))) + " --disable=gems -I#{with_destdir(archlibdir)}" -- end -- Gem.instance_variable_set(:@ruby, ruby_path) if Gem.ruby != ruby_path -- - gem_dir = Gem.default_dir - install_dir = with_destdir(gem_dir) - prepare "bundled gems", gem_dir -@@ -1047,40 +1035,28 @@ def install_default_gem(dir, srcdir, bindir) - :wrappers => true, - :format_executable => true, - } -- gem_ext_dir = "#$extout/gems/#{CONFIG['arch']}" -- extensions_dir = with_destdir(Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir) -+ -+ extensions_dir = Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir -+ specifications_dir = File.join(gem_dir, "specifications") -+ build_dir = Gem::StubSpecification.gemspec_stub("", ".bundle", ".bundle").extensions_dir - - File.foreach("#{srcdir}/gems/bundled_gems") do |name| - next if /^\s*(?:#|$)/ =~ name - next unless /^(\S+)\s+(\S+).*/ =~ name - gem_name = "#$1-#$2" -- path = "#{srcdir}/.bundle/gems/#{gem_name}/#{gem_name}.gemspec" -- if File.exist?(path) -- spec = load_gemspec(path) -- else -- path = "#{srcdir}/.bundle/gems/#{gem_name}/#$1.gemspec" -- next unless File.exist?(path) -- spec = load_gemspec(path, true) -- end -+ path = "#{srcdir}/.bundle/specifications/#{gem_name}.gemspec" -+ next unless File.exist?(path) -+ spec = load_gemspec(path, "#{srcdir}/.bundle/gems/#{gem_name}") - next unless spec.platform == Gem::Platform::RUBY - next unless spec.full_name == gem_name -- if !spec.extensions.empty? && CONFIG["EXTSTATIC"] == "static" -- puts "skip installation of #{spec.name} #{spec.version}; bundled gem with an extension library is not supported on --with-static-linked-ext" -- next -- end - spec.extension_dir = "#{extensions_dir}/#{spec.full_name}" -- if File.directory?(ext = "#{gem_ext_dir}/#{spec.full_name}") -- spec.extensions[0] ||= "-" -- end - package = RbInstall::DirPackage.new spec - ins = RbInstall::UnpackedInstaller.new(package, options) - puts "#{INDENT}#{spec.name} #{spec.version}" - ins.install -- unless $dryrun -- File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec")) -- end -- unless spec.extensions.empty? -- install_recursive(ext, spec.extension_dir) -+ install_recursive("#{build_dir}/#{gem_name}", "#{extensions_dir}/#{gem_name}") do |src, dest| -+ # puts "#{INDENT} #{dest[extensions_dir.size+gem_name.size+2..-1]}" -+ install src, dest, :mode => (File.executable?(src) ? $prog_mode : $data_mode) - end - installed_gems[spec.full_name] = true - end diff --git a/ruby-3.2.0-Detect-compaction-support-during-runtime.patch b/ruby-3.2.0-Detect-compaction-support-during-runtime.patch index fd8162f..64566f5 100644 --- a/ruby-3.2.0-Detect-compaction-support-during-runtime.patch +++ b/ruby-3.2.0-Detect-compaction-support-during-runtime.patch @@ -75,7 +75,6 @@ the line above. Because while the Ruby on the master branch replaced the USE_MMAP_ALIGNED_ALLOC with HEAP_PAGE_ALLOC_USE_MMAP, Ruby 3.1.2 doesn't. See . - ``` + rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); ``` @@ -87,7 +86,6 @@ the case that GC_COMPACTION_SUPPORTED is true, Ruby 3.1.2 doesn't define it in the gc.rb. See . - ``` + OPT(GC_COMPACTION_SUPPORTED); ``` @@ -141,7 +139,7 @@ diff --git a/gc.c b/gc.c index 1c35856c44..bff0666a17 100644 --- a/gc.c +++ b/gc.c -@@ -4980,6 +4980,23 @@ gc_unprotect_pages(rb_objspace_t *objspace, rb_heap_t *heap) +@@ -4984,6 +4984,23 @@ gc_unprotect_pages(rb_objspace_t *objspace, rb_heap_t *heap) static void gc_update_references(rb_objspace_t * objspace); static void invalidate_moved_page(rb_objspace_t *objspace, struct heap_page *page); @@ -165,7 +163,7 @@ index 1c35856c44..bff0666a17 100644 static void read_barrier_handler(uintptr_t address) { -@@ -5000,6 +5017,7 @@ read_barrier_handler(uintptr_t address) +@@ -5004,6 +5021,7 @@ read_barrier_handler(uintptr_t address) } RB_VM_LOCK_LEAVE(); } @@ -173,7 +171,7 @@ index 1c35856c44..bff0666a17 100644 #if defined(_WIN32) static LPTOP_LEVEL_EXCEPTION_FILTER old_handler; -@@ -9250,13 +9268,7 @@ gc_start_internal(rb_execution_context_t *ec, VALUE self, VALUE full_mark, VALUE +@@ -9267,13 +9285,7 @@ gc_start_internal(rb_execution_context_t *ec, VALUE self, VALUE full_mark, VALUE /* For now, compact implies full mark / sweep, so ignore other flags */ if (RTEST(compact)) { @@ -188,7 +186,7 @@ index 1c35856c44..bff0666a17 100644 reason |= GPR_FLAG_COMPACT; } -@@ -9421,7 +9433,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) +@@ -9438,7 +9450,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) return (VALUE)src; } @@ -197,7 +195,7 @@ index 1c35856c44..bff0666a17 100644 static int compare_free_slots(const void *left, const void *right, void *dummy) { -@@ -10149,7 +10161,7 @@ gc_update_references(rb_objspace_t *objspace) +@@ -10166,7 +10178,7 @@ gc_update_references(rb_objspace_t *objspace) gc_update_table_refs(objspace, finalizer_table); } @@ -206,7 +204,7 @@ index 1c35856c44..bff0666a17 100644 /* * call-seq: * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} -@@ -10190,7 +10202,7 @@ gc_compact_stats(VALUE self) +@@ -10207,7 +10219,7 @@ gc_compact_stats(VALUE self) # define gc_compact_stats rb_f_notimplement #endif @@ -215,7 +213,7 @@ index 1c35856c44..bff0666a17 100644 static void root_obj_check_moved_i(const char *category, VALUE obj, void *data) { -@@ -10269,7 +10281,7 @@ gc_compact(VALUE self) +@@ -10286,7 +10298,7 @@ gc_compact(VALUE self) # define gc_compact rb_f_notimplement #endif @@ -224,7 +222,7 @@ index 1c35856c44..bff0666a17 100644 /* * call-seq: * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash -@@ -10800,7 +10812,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) +@@ -10817,7 +10829,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) return rb_gc_disable(); } @@ -233,7 +231,7 @@ index 1c35856c44..bff0666a17 100644 /* * call-seq: * GC.auto_compact = flag -@@ -10814,8 +10826,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) +@@ -10831,8 +10843,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) static VALUE gc_set_auto_compact(VALUE _, VALUE v) { @@ -243,7 +241,7 @@ index 1c35856c44..bff0666a17 100644 ruby_enable_autocompact = RTEST(v); return v; -@@ -10824,7 +10835,8 @@ gc_set_auto_compact(VALUE _, VALUE v) +@@ -10841,7 +10852,8 @@ gc_set_auto_compact(VALUE _, VALUE v) # define gc_set_auto_compact rb_f_notimplement #endif @@ -253,7 +251,7 @@ index 1c35856c44..bff0666a17 100644 /* * call-seq: * GC.auto_compact -> true or false -@@ -13696,11 +13708,21 @@ Init_GC(void) +@@ -13714,11 +13726,21 @@ Init_GC(void) rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0); #endif @@ -280,7 +278,7 @@ index 1c35856c44..bff0666a17 100644 #if GC_DEBUG_STRESS_TO_CLASS rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); -@@ -13724,6 +13746,7 @@ Init_GC(void) +@@ -13742,6 +13764,7 @@ Init_GC(void) OPT(MALLOC_ALLOCATED_SIZE); OPT(MALLOC_ALLOCATED_SIZE_CHECK); OPT(GC_PROFILE_DETAIL_MEMORY); diff --git a/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch b/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch index 1e34def..1a06227 100644 --- a/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch +++ b/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch @@ -1,34 +1,31 @@ -commit 6d1ca6737f31b2e24664a093f1827dd74a121a9f -Author: Jarek Prokop -Date: Thu May 26 11:28:13 2022 +0200 +From 1b3502156a665e2782f366aa5ac8c3bfd7637ab8 Mon Sep 17 00:00:00 2001 +From: Mike Dalessio +Date: Mon, 23 May 2022 15:40:22 -0400 +Subject: [PATCH 1/2] Move compaction-related methods into gc.c - Gc ppc64le fix +These methods are removed from gc.rb and added to gc.c: + +- GC.compact +- GC.auto_compact +- GC.auto_compact= +- GC.latest_compact_info +- GC.verify_compaction_references + +This is a prefactor to allow setting these methods to +`rb_f_notimplement` in a followup commit. +--- + gc.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ + gc.rb | 68 --------------------------------------- + 2 files changed, 91 insertions(+), 78 deletions(-) diff --git a/gc.c b/gc.c index ef9327df1f..1c35856c44 100644 --- a/gc.c +++ b/gc.c -@@ -9421,6 +9421,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) - return (VALUE)src; - } - -+#if GC_COMPACTION_SUPPORTED - static int - compare_free_slots(const void *left, const void *right, void *dummy) - { -@@ -9468,6 +9469,7 @@ gc_sort_heap_by_empty_slots(rb_objspace_t *objspace) - free(page_list); - } - } -+#endif - - static void - gc_ref_update_array(rb_objspace_t * objspace, VALUE v) -@@ -10147,8 +10149,21 @@ gc_update_references(rb_objspace_t *objspace) +@@ -10164,8 +10164,20 @@ gc_update_references(rb_objspace_t *objspace) gc_update_table_refs(objspace, finalizer_table); } -+#if GC_COMPACTION_SUPPORTED +/* + * call-seq: + * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} @@ -47,19 +44,7 @@ index ef9327df1f..1c35856c44 100644 { size_t i; rb_objspace_t *objspace = &rb_objspace; -@@ -10171,7 +10186,11 @@ gc_compact_stats(rb_execution_context_t *ec, VALUE self) - - return h; - } -+#else -+# define gc_compact_stats rb_f_notimplement -+#endif - -+#if GC_COMPACTION_SUPPORTED - static void - root_obj_check_moved_i(const char *category, VALUE obj, void *data) - { -@@ -10221,22 +10240,78 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) +@@ -10238,22 +10250,70 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) return 0; } @@ -75,10 +60,6 @@ index ef9327df1f..1c35856c44 100644 + * + * This method is implementation specific and not expected to be implemented + * in any implementation besides MRI. -+ * -+ * To test whether GC compaction is supported, use the idiom: -+ * -+ * GC.respond_to?(:compact) + */ static VALUE -gc_compact(rb_execution_context_t *ec, VALUE self) @@ -91,11 +72,7 @@ index ef9327df1f..1c35856c44 100644 - return gc_compact_stats(ec, self); + return gc_compact_stats(self); } -+#else -+# define gc_compact rb_f_notimplement -+#endif -+#if GC_COMPACTION_SUPPORTED +/* + * call-seq: + * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash @@ -143,7 +120,7 @@ index ef9327df1f..1c35856c44 100644 RB_VM_LOCK_ENTER(); { -@@ -10256,13 +10331,16 @@ gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE do +@@ -10273,12 +10333,12 @@ gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE do } RB_VM_LOCK_LEAVE(); @@ -156,17 +133,12 @@ index ef9327df1f..1c35856c44 100644 - return gc_compact_stats(ec, self); + return gc_compact_stats(self); } -+#else -+# define gc_verify_compaction_references rb_f_notimplement -+#endif VALUE - rb_gc_start(void) -@@ -10722,26 +10800,45 @@ gc_disable(rb_execution_context_t *ec, VALUE _) +@@ -10739,8 +10799,18 @@ gc_disable(rb_execution_context_t *ec, VALUE _) return rb_gc_disable(); } -+#if GC_COMPACTION_SUPPORTED +/* + * call-seq: + * GC.auto_compact = flag @@ -183,6 +155,237 @@ index ef9327df1f..1c35856c44 100644 { /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for * the read barrier, so we must disable automatic compaction. */ +@@ -10754,8 +10824,14 @@ gc_set_auto_compact(rb_execution_context_t *ec, VALUE _, VALUE v) + return v; + } + ++/* ++ * call-seq: ++ * GC.auto_compact -> true or false ++ * ++ * Returns whether or not automatic compaction has been enabled. ++ */ + static VALUE +-gc_get_auto_compact(rb_execution_context_t *ec, VALUE _) ++gc_get_auto_compact(VALUE _) + { + return RBOOL(ruby_enable_autocompact); + } +@@ -13617,6 +13693,11 @@ Init_GC(void) + rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); + rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0); + #endif ++ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); ++ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); ++ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); + + #if GC_DEBUG_STRESS_TO_CLASS + rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); +diff --git a/gc.rb b/gc.rb +index 72637f3796..9265dd7b57 100644 +--- a/gc.rb ++++ b/gc.rb +@@ -38,27 +38,6 @@ def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true + Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false + end + +- # call-seq: +- # GC.auto_compact -> true or false +- # +- # Returns whether or not automatic compaction has been enabled. +- # +- def self.auto_compact +- Primitive.gc_get_auto_compact +- end +- +- # call-seq: +- # GC.auto_compact = flag +- # +- # Updates automatic compaction mode. +- # +- # When enabled, the compactor will execute on every major collection. +- # +- # Enabling compaction will degrade performance on major collections. +- def self.auto_compact=(flag) +- Primitive.gc_set_auto_compact(flag) +- end +- + # call-seq: + # GC.enable -> true or false + # +@@ -210,53 +189,6 @@ def self.latest_gc_info hash_or_key = nil + Primitive.gc_latest_gc_info hash_or_key + end + +- # call-seq: +- # GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} +- # +- # Returns information about object moved in the most recent GC compaction. +- # +- # The returned hash has two keys :considered and :moved. The hash for +- # :considered lists the number of objects that were considered for movement +- # by the compactor, and the :moved hash lists the number of objects that +- # were actually moved. Some objects can't be moved (maybe they were pinned) +- # so these numbers can be used to calculate compaction efficiency. +- def self.latest_compact_info +- Primitive.gc_compact_stats +- end +- +- # call-seq: +- # GC.compact +- # +- # This function compacts objects together in Ruby's heap. It eliminates +- # unused space (or fragmentation) in the heap by moving objects in to that +- # unused space. This function returns a hash which contains statistics about +- # which objects were moved. See `GC.latest_gc_info` for details about +- # compaction statistics. +- # +- # This method is implementation specific and not expected to be implemented +- # in any implementation besides MRI. +- def self.compact +- Primitive.gc_compact +- end +- +- # call-seq: +- # GC.verify_compaction_references(toward: nil, double_heap: false) -> hash +- # +- # Verify compaction reference consistency. +- # +- # This method is implementation specific. During compaction, objects that +- # were moved are replaced with T_MOVED objects. No object should have a +- # reference to a T_MOVED object after compaction. +- # +- # This function doubles the heap to ensure room to move all objects, +- # compacts the heap to make sure everything moves, updates all references, +- # then performs a full GC. If any object contains a reference to a T_MOVED +- # object, that object should be pushed on the mark stack, and will +- # make a SEGV. +- def self.verify_compaction_references(toward: nil, double_heap: false) +- Primitive.gc_verify_compaction_references(double_heap, toward == :empty) +- end +- + # call-seq: + # GC.using_rvargc? -> true or false + # + +From d3273559356db6852d1fd794f0f076fba100e09e Mon Sep 17 00:00:00 2001 +From: Mike Dalessio +Date: Mon, 23 May 2022 17:31:14 -0400 +Subject: [PATCH 2/2] Define unsupported GC compaction methods as + rb_f_notimplement + +Fixes [Bug #18779] + +Define the following methods as `rb_f_notimplement` on unsupported +platforms: + +- GC.compact +- GC.auto_compact +- GC.auto_compact= +- GC.latest_compact_info +- GC.verify_compaction_references + +This change allows users to call `GC.respond_to?(:compact)` to +properly test for compaction support. Previously, it was necessary to +invoke `GC.compact` or `GC.verify_compaction_references` and check if +those methods raised `NotImplementedError` to determine if compaction +was supported. + +This follows the precedent set for other platform-specific +methods. For example, in `process.c` for methods such as +`Process.fork`, `Process.setpgid`, and `Process.getpriority`. +--- + gc.c | 31 +++++++++++++++---- + test/ruby/test_gc_compact.rb | 58 ++++++++++++++++++++++++++---------- + 2 files changed, 69 insertions(+), 20 deletions(-) + +diff --git a/gc.c b/gc.c +index 92ed76cf96..d71924846a 100644 +--- a/gc.c ++++ b/gc.c +@@ -9438,6 +9438,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) + return (VALUE)src; + } + ++#if GC_COMPACTION_SUPPORTED + static int + compare_free_slots(const void *left, const void *right, void *dummy) + { +@@ -9485,6 +9486,7 @@ gc_sort_heap_by_empty_slots(rb_objspace_t *objspace) + free(page_list); + } + } ++#endif + + static void + gc_ref_update_array(rb_objspace_t * objspace, VALUE v) +@@ -10164,6 +10166,7 @@ gc_update_references(rb_objspace_t *objspace) + gc_update_table_refs(objspace, finalizer_table); + } + ++#if GC_COMPACTION_SUPPORTED + /* + * call-seq: + * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} +@@ -10200,7 +10203,11 @@ gc_compact_stats(VALUE self) + + return h; + } ++#else ++# define gc_compact_stats rb_f_notimplement ++#endif + ++#if GC_COMPACTION_SUPPORTED + static void + root_obj_check_moved_i(const char *category, VALUE obj, void *data) + { +@@ -10262,6 +10269,10 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) + * + * This method is implementation specific and not expected to be implemented + * in any implementation besides MRI. ++ * ++ * To test whether GC compaction is supported, use the idiom: ++ * ++ * GC.respond_to?(:compact) + */ + static VALUE + gc_compact(VALUE self) +@@ -10271,7 +10282,11 @@ gc_compact(VALUE self) + + return gc_compact_stats(self); + } ++#else ++# define gc_compact rb_f_notimplement ++#endif + ++#if GC_COMPACTION_SUPPORTED + /* + * call-seq: + * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash +@@ -10340,6 +10355,9 @@ gc_verify_compaction_references(int argc, VALUE *argv, VALUE self) + + return gc_compact_stats(self); + } ++#else ++# define gc_verify_compaction_references rb_f_notimplement ++#endif + + VALUE + rb_gc_start(void) +@@ -10799,6 +10817,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) + return rb_gc_disable(); + } + ++#if GC_COMPACTION_SUPPORTED + /* + * call-seq: + * GC.auto_compact = flag +@@ -10814,16 +10833,15 @@ gc_set_auto_compact(VALUE _, VALUE v) + { + /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for + * the read barrier, so we must disable automatic compaction. */ -#if !defined(__MINGW32__) && !defined(_WIN32) - if (!USE_MMAP_ALIGNED_ALLOC) { - rb_raise(rb_eNotImpError, "Automatic compaction isn't available on this platform"); @@ -197,15 +400,10 @@ index ef9327df1f..1c35856c44 100644 +#endif +#if GC_COMPACTION_SUPPORTED -+/* -+ * call-seq: -+ * GC.auto_compact -> true or false -+ * -+ * Returns whether or not automatic compaction has been enabled. -+ */ - static VALUE --gc_get_auto_compact(rb_execution_context_t *ec, VALUE _) -+gc_get_auto_compact(VALUE _) + /* + * call-seq: + * GC.auto_compact -> true or false +@@ -10835,6 +10853,9 @@ gc_get_auto_compact(VALUE _) { return RBOOL(ruby_enable_autocompact); } @@ -215,18 +413,6 @@ index ef9327df1f..1c35856c44 100644 static int get_envparam_size(const char *name, size_t *default_value, size_t lower_bound) -@@ -13599,6 +13696,11 @@ Init_GC(void) - rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); - rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0); - #endif -+ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); -+ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); -+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); - - #if GC_DEBUG_STRESS_TO_CLASS - rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); diff --git a/test/ruby/test_gc_compact.rb b/test/ruby/test_gc_compact.rb index 42ad028530..411d5eab69 100644 --- a/test/ruby/test_gc_compact.rb @@ -314,89 +500,3 @@ index 42ad028530..411d5eab69 100644 end def test_gc_compact_stats -diff --git a/gc.rb b/gc.rb -index 72637f3796..9265dd7b57 100644 ---- a/gc.rb -+++ b/gc.rb -@@ -38,27 +38,6 @@ def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true - Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false - end - -- # call-seq: -- # GC.auto_compact -> true or false -- # -- # Returns whether or not automatic compaction has been enabled. -- # -- def self.auto_compact -- Primitive.gc_get_auto_compact -- end -- -- # call-seq: -- # GC.auto_compact = flag -- # -- # Updates automatic compaction mode. -- # -- # When enabled, the compactor will execute on every major collection. -- # -- # Enabling compaction will degrade performance on major collections. -- def self.auto_compact=(flag) -- Primitive.gc_set_auto_compact(flag) -- end -- - # call-seq: - # GC.enable -> true or false - # -@@ -210,53 +189,6 @@ def self.latest_gc_info hash_or_key = nil - Primitive.gc_latest_gc_info hash_or_key - end - -- # call-seq: -- # GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} -- # -- # Returns information about object moved in the most recent GC compaction. -- # -- # The returned hash has two keys :considered and :moved. The hash for -- # :considered lists the number of objects that were considered for movement -- # by the compactor, and the :moved hash lists the number of objects that -- # were actually moved. Some objects can't be moved (maybe they were pinned) -- # so these numbers can be used to calculate compaction efficiency. -- def self.latest_compact_info -- Primitive.gc_compact_stats -- end -- -- # call-seq: -- # GC.compact -- # -- # This function compacts objects together in Ruby's heap. It eliminates -- # unused space (or fragmentation) in the heap by moving objects in to that -- # unused space. This function returns a hash which contains statistics about -- # which objects were moved. See `GC.latest_gc_info` for details about -- # compaction statistics. -- # -- # This method is implementation specific and not expected to be implemented -- # in any implementation besides MRI. -- def self.compact -- Primitive.gc_compact -- end -- -- # call-seq: -- # GC.verify_compaction_references(toward: nil, double_heap: false) -> hash -- # -- # Verify compaction reference consistency. -- # -- # This method is implementation specific. During compaction, objects that -- # were moved are replaced with T_MOVED objects. No object should have a -- # reference to a T_MOVED object after compaction. -- # -- # This function doubles the heap to ensure room to move all objects, -- # compacts the heap to make sure everything moves, updates all references, -- # then performs a full GC. If any object contains a reference to a T_MOVED -- # object, that object should be pushed on the mark stack, and will -- # make a SEGV. -- def self.verify_compaction_references(toward: nil, double_heap: false) -- Primitive.gc_verify_compaction_references(double_heap, toward == :empty) -- end -- - # call-seq: - # GC.using_rvargc? -> true or false - # diff --git a/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch b/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch index 240cc9c..654c54c 100644 --- a/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch +++ b/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch @@ -1,5 +1,5 @@ ---- ruby-3.1.2/gc.rbinc 2022-04-12 13:11:17.000000000 +0200 -+++ ruby/gc.rbinc 2022-06-08 12:49:16.288024971 +0200 +--- ruby-3.1.3/gc.rbinc 2022-11-24 11:20:33.000000000 +0100 ++++ ruby/gc.rbinc 2022-11-25 11:50:19.939820992 +0100 @@ -9,27 +9,27 @@ #include "builtin.h" /* for RB_BUILTIN_FUNCTION */ struct rb_execution_context_struct; /* in vm_core.h */ @@ -218,8 +218,8 @@ COMPILER_WARNING_POP // load ---- ruby-3.1.2/miniprelude.c 2022-04-12 13:11:17.000000000 +0200 -+++ ruby/miniprelude.c 2022-06-08 12:49:16.377024871 +0200 +--- ruby-3.1.3/miniprelude.c 2022-11-24 11:20:33.000000000 +0100 ++++ ruby/miniprelude.c 2022-11-25 11:50:20.012820803 +0100 @@ -545,11 +545,10 @@ static const char prelude_name2[] = ""; @@ -446,57 +446,57 @@ }; static const char prelude_name11[] = ""; -@@ -3305,7 +3234,7 @@ +@@ -3309,7 +3238,7 @@ " }\n" " end\n" "end\n" --#line 3309 "miniprelude.c" -+#line 3238 "miniprelude.c" +-#line 3313 "miniprelude.c" ++#line 3242 "miniprelude.c" }; static const char prelude_name12[] = ""; -@@ -3628,7 +3557,7 @@ +@@ -3632,7 +3561,7 @@ " Primitive.time_init_args(year, mon, mday, hour, min, sec, zone)\n" " end\n" "end\n" --#line 3632 "miniprelude.c" -+#line 3561 "miniprelude.c" +-#line 3636 "miniprelude.c" ++#line 3565 "miniprelude.c" }; static const char prelude_name13[] = ""; -@@ -3661,7 +3590,7 @@ +@@ -3665,7 +3594,7 @@ " return 0.0\n" " end\n" "end\n" --#line 3665 "miniprelude.c" -+#line 3594 "miniprelude.c" +-#line 3669 "miniprelude.c" ++#line 3598 "miniprelude.c" }; static const char prelude_name14[] = ""; -@@ -3691,7 +3620,7 @@ +@@ -3695,7 +3624,7 @@ "\n" " private :pp\n" "end\n" --#line 3695 "miniprelude.c" -+#line 3624 "miniprelude.c" +-#line 3699 "miniprelude.c" ++#line 3628 "miniprelude.c" }; static const char prelude_name15[] = ""; -@@ -3718,7 +3647,7 @@ +@@ -3722,7 +3651,7 @@ "rescue LoadError\n" " warn \"`did_you_mean' was not loaded.\"\n" "end if defined?(DidYouMean)\n" --#line 3722 "miniprelude.c" -+#line 3651 "miniprelude.c" +-#line 3726 "miniprelude.c" ++#line 3655 "miniprelude.c" }; static const char prelude_name16[] = ""; -@@ -4059,7 +3988,7 @@ +@@ -4063,7 +3992,7 @@ " end\n" " end\n" "end\n" --#line 4063 "miniprelude.c" -+#line 3992 "miniprelude.c" +-#line 4067 "miniprelude.c" ++#line 3996 "miniprelude.c" }; COMPILER_WARNING_POP diff --git a/ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch b/ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch deleted file mode 100644 index 73f9a02..0000000 --- a/ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch +++ /dev/null @@ -1,27 +0,0 @@ -From dae843f6b7502f921a7e66f39e3714a39d860181 Mon Sep 17 00:00:00 2001 -From: Hiroshi SHIBATA -Date: Wed, 19 Oct 2022 19:40:00 +0900 -Subject: [PATCH] Bypass git submodule add/update with git config - protocol.file.allow=always option. - -Co-authored-by: Nobuyoshi Nakada ---- - test/rubygems/test_gem_source_git.rb | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/test/rubygems/test_gem_source_git.rb b/test/rubygems/test_gem_source_git.rb -index 5702da05974b6..c3b324771fa4d 100644 ---- a/test/rubygems/test_gem_source_git.rb -+++ b/test/rubygems/test_gem_source_git.rb -@@ -63,6 +63,11 @@ def test_checkout_local_cached - end - - def test_checkout_submodules -+ # We need to allow to checkout submodules with file:// protocol -+ # CVE-2022-39253 -+ # https://lore.kernel.org/lkml/xmqq4jw1uku5.fsf@gitster.g/ -+ system(@git, *%W"config --global protocol.file.allow always") -+ - source = Gem::Source::Git.new @name, @repository, 'master', true - - git_gem 'b' diff --git a/ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch b/ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch deleted file mode 100644 index b208537..0000000 --- a/ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch +++ /dev/null @@ -1,31 +0,0 @@ -From bfa2f72cfa3bfde34049d26dcb24976316074ad7 Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Mon, 21 Mar 2022 15:36:51 +0100 -Subject: [PATCH] Fix a test for `bin/bundle update --bundler` to pass on - ruby/ruby. - -Consider the case that the latest Bundler version on RubyGems is higher than -the `system_bundler_version` (= `Bundler::VERSION`) in `make test-bundler` on -ruby/ruby. - -See . ---- - spec/bundler/commands/binstubs_spec.rb | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/spec/bundler/commands/binstubs_spec.rb b/spec/bundler/commands/binstubs_spec.rb -index 198226207bc..2634f43417c 100644 ---- a/spec/bundler/commands/binstubs_spec.rb -+++ b/spec/bundler/commands/binstubs_spec.rb -@@ -226,7 +226,10 @@ - - it "calls through to the latest bundler version" do - sys_exec "bin/bundle update --bundler", :env => { "DEBUG" => "1" } -- expect(out).to include %(Using bundler #{system_bundler_version}\n) -+ using_bundler_line = /Using bundler ([\w\.]+)\n/.match(out) -+ expect(using_bundler_line).to_not be_nil -+ latest_version = using_bundler_line[1] -+ expect(Gem::Version.new(latest_version)).to be >= Gem::Version.new(system_bundler_version) - end - - it "calls through to the explicit bundler version" do diff --git a/ruby-irb-1.4.1-set-rdoc-soft-dep.patch b/ruby-irb-1.4.1-set-rdoc-soft-dep.patch index 0156fe0..db8aba7 100644 --- a/ruby-irb-1.4.1-set-rdoc-soft-dep.patch +++ b/ruby-irb-1.4.1-set-rdoc-soft-dep.patch @@ -13,12 +13,6 @@ lib/irb/completion.rb lib/irb/easter-egg.rb lib/irb/input-method.rb ``` - ---- - -Revert "Remove `require` in signal handler to avoid ThreadError" - -This reverts commit 5f749c613c895cf1b11b5e4cbd1205363bc58028. --- lib/irb/input-method.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.patch b/ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.patch deleted file mode 100644 index 66c3382..0000000 --- a/ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 623162ad2bb3b589bddcc32616492a2bc4651726 Mon Sep 17 00:00:00 2001 -From: Hiroshi SHIBATA -Date: Tue, 22 Feb 2022 11:58:54 +0900 -Subject: [PATCH] Resolve cleaned-up error with temporary gemhome - ---- - test/rubygems/test_gem_commands_setup_command.rb | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/test/rubygems/test_gem_commands_setup_command.rb b/test/rubygems/test_gem_commands_setup_command.rb -index 5cf94a1dc99..934c76b1d1a 100644 ---- a/test/rubygems/test_gem_commands_setup_command.rb -+++ b/test/rubygems/test_gem_commands_setup_command.rb -@@ -274,6 +274,8 @@ def test_install_default_bundler_gem_with_destdir_flag - spec.executables.each do |e| - assert_path_exist File.join destdir, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'gems', spec.full_name, spec.bindir, e - end -+ ensure -+ FileUtils.chmod "+w", @gemhome - end - - def test_install_default_bundler_gem_with_destdir_and_prefix_flags diff --git a/ruby-spec-Fix-tests-on-tzdata-2022b.patch b/ruby-spec-Fix-tests-on-tzdata-2022b.patch deleted file mode 100644 index 19386d9..0000000 --- a/ruby-spec-Fix-tests-on-tzdata-2022b.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 7e9ec8a20b0f7469b415283d2ec0c22087f8eb2b Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Wed, 24 Aug 2022 12:02:56 +0200 -Subject: [PATCH] Fix tests with Europe/Amsterdam pre-1970 time on tzdata - version 2022b. - -The Time Zone Database (tzdata) changed the pre-1970 timestamps in some zones -including Europe/Amsterdam on tzdata version 2022b or later. -See . - -The tzdata RPM package maintainer on Fedora project suggested changing the Ruby -test, because the change is intentional. -See . - -We use post-1970 time test data to simplify the test. ---- - core/time/shared/local.rb | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/spec/ruby/core/time/shared/local.rb b/spec/ruby/core/time/shared/local.rb -index 43f331c4c..c4aa7a7ea 100644 ---- a/spec/ruby/core/time/shared/local.rb -+++ b/spec/ruby/core/time/shared/local.rb -@@ -8,10 +8,10 @@ describe :time_local, shared: true do - - platform_is_not :windows do - describe "timezone changes" do -- it "correctly adjusts the timezone change to 'CEST' on 'Europe/Amsterdam'" do -+ it "correctly adjusts the timezone change to 'CET' on 'Europe/Amsterdam'" do - with_timezone("Europe/Amsterdam") do -- Time.send(@method, 1940, 5, 16).to_a.should == -- [0, 40, 1, 16, 5, 1940, 4, 137, true, "CEST"] -+ Time.send(@method, 1970, 5, 16).to_a.should == -+ [0, 0, 0, 16, 5, 1970, 6, 136, false, "CET"] - end - end - end --- -2.36.1 - diff --git a/ruby.spec b/ruby.spec index 3375cc6..1506817 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 1 -%global teeny_version 2 +%global teeny_version 3 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -22,7 +22,7 @@ %endif -%global release 171 +%global release 172 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -30,14 +30,16 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.3.7 +%global rubygems_version 3.3.26 %global rubygems_molinillo_version 0.7.0 +%global rubygems_optparse_version 0.2.0 +%global rubygems_tsort_version 0.1.0 # Default gems. -%global bundler_version 2.3.7 +%global bundler_version 2.3.26 %global bundler_connection_pool_version 2.3.0 %global bundler_fileutils_version 1.4.1 -%global bundler_molinillo_version 0.7.0 +%global bundler_molinillo_version 0.8.0 %global bundler_net_http_persistent_version 4.0.0 %global bundler_thor_version 1.2.1 %global bundler_tmpdir_version 0.1.0 @@ -51,8 +53,8 @@ %global io_console_version 0.5.11 %global irb_version 1.4.1 %global json_version 2.6.1 -%global openssl_version 3.0.0 -%global psych_version 4.0.3 +%global openssl_version 3.0.1 +%global psych_version 4.0.4 %global racc_version 1.6.0 %global rdoc_version 6.4.0 %global stringio_version 3.0.1 @@ -70,9 +72,9 @@ %global net_smtp_version 0.3.1 %global matrix_version 0.4.2 %global prime_version 0.1.2 -%global rbs_version 2.1.0 -%global typeprof_version 0.21.2 -%global debug_version 1.4.0 +%global rbs_version 2.7.0 +%global typeprof_version 0.21.3 +%global debug_version 1.6.3 %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* @@ -163,54 +165,33 @@ Patch7: ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch # Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch -# Fix a test for `bin/bundle update --bundler` in `make test-bundler`. -# https://bugs.ruby-lang.org/issues/18643 -# https://github.com/rubygems/rubygems/commit/bfa2f72cfa3bfde34049d26dcb24976316074ad7 -Patch20: ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch -# Workaround gem binary extensions build and installation issues. -# https://bugs.ruby-lang.org/issues/18373 -# https://github.com/ruby/ruby/pull/5774 -Patch21: ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch # If GC compaction is not supported on platform, define the # corresponding GC methods as not implemented. # https://bugs.ruby-lang.org/issues/18779 # https://github.com/ruby/ruby/pull/5934 Patch22: ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch # To regenerate the patch you need to have ruby, autoconf, xz, tar and make installed: -# tar -Jxvf ./ruby-3.1.2.tar.xz +# tar -Jxvf ./ruby-3.1.3.tar.xz # git clone https://github.com/ruby/ruby.git -# cd ruby && git checkout v3_1_2 +# cd ruby && git checkout v3_1_3 # patch -p1 < ../ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch # ./autogen.sh && ./configure # make gc.rbinc miniprelude.c # cd .. -# diff -u {ruby-3.1.2,ruby}/gc.rbinc > ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch -# diff -u {ruby-3.1.2,ruby}/miniprelude.c >> ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch +# diff -u {ruby-3.1.3,ruby}/gc.rbinc > ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch +# diff -u {ruby-3.1.3,ruby}/miniprelude.c >> ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch Patch23: ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch # Define the GC compaction support macro at run time. # https://bugs.ruby-lang.org/issues/18829 # https://github.com/ruby/ruby/pull/6019 # https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20 Patch24: ruby-3.2.0-Detect-compaction-support-during-runtime.patch -# RPM 4.18.0-beta1 or later versions remove the build directory automatically -# on successful build, the build then fails on removing temporary directories -# that are missing the 'w' bit. -# https://bugzilla.redhat.com/show_bug.cgi?id=2105393 -# https://github.com/rpm-software-management/rpm/pull/2080 -# https://github.com/rubygems/rubygems/pull/5372 -Patch25: ruby-rubygems-3.3.8-Resolve-cleaned-up-error-with-temporary-gemhome.patch -# Fix tests with Europe/Amsterdam pre-1970 time on tzdata version 2022b. -# https://github.com/ruby/spec/pull/939 -Patch26: ruby-spec-Fix-tests-on-tzdata-2022b.patch # Drop hard dependency on RDoc in IRB. # https://github.com/ruby/irb/pull/393 Patch27: ruby-irb-1.4.1-drop-rdoc-hard-dep.patch # Set soft dependency on RDoc in input-method.rb in IRB. # https://github.com/ruby/irb/pull/395 Patch28: ruby-irb-1.4.1-set-rdoc-soft-dep.patch -# Bypass git submodule test failure on Git >= 2.38.1. -# https://github.com/ruby/ruby/pull/6587 -Patch29: ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -678,22 +659,11 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch7 -p1 %patch19 -p1 -%patch20 -p1 - -# Once the upstream tarball contains the files on the right place, this code -# won't be necessary. This should happen at the same moment when the patch21 -# is not needed anymore. -mkdir .bundle/specifications -find .bundle/gems -name '*-[0-9]*.gemspec' -exec cp -t .bundle/specifications/ {} + -%patch21 -p1 %patch22 -p1 %patch23 -p1 %patch24 -p1 -%patch25 -p1 -%patch26 -p1 %patch27 -p1 %patch28 -p1 -%patch29 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -910,6 +880,21 @@ checksec --file=libruby.so.%{ruby_version} | \ puts Gem::Resolver::Molinillo::VERSION\\\"\" | tail -1`" \ == '%{rubygems_molinillo_version}' ] +# OptParse. +make runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/optparse/lib/optparse'; \ + puts '%%{rubygems_optparse_version}: %{rubygems_optparse_version}'; \ + puts %Q[Gem::OptionParser::Version: #{Gem::OptionParser::Version}]; \ + exit 1 if Gem::OptionParser::Version != '%{rubygems_optparse_version}'; \ +\"" + +# tsort +# TODO: Provide some real version test if version is available. +make runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end;\ + require 'rubygems/tsort/lib/tsort'\"" + # Check Bundler bundled dependencies versions. # connection_pool. @@ -981,9 +966,6 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} -# https://bugs.ruby-lang.org/issues/18380 -DISABLE_TESTS="$DISABLE_TESTS -n !/TestAddressResolve#test_socket_getnameinfo_domain_blocking/" - %ifarch armv7hl # TestReadline#test_interrupt_in_other_thread fails on 32 bit arches according # to upstream, but the test is disabled just on Travis, not in test suite. @@ -1255,8 +1237,8 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" %{gem_dir}/specifications/default/abbrev-0.1.0.gemspec %{gem_dir}/specifications/default/base64-0.1.1.gemspec %{gem_dir}/specifications/default/benchmark-0.2.0.gemspec -%{gem_dir}/specifications/default/cgi-0.3.1.gemspec -%{gem_dir}/specifications/default/csv-3.2.2.gemspec +%{gem_dir}/specifications/default/cgi-0.3.5.gemspec +%{gem_dir}/specifications/default/csv-3.2.5.gemspec %{gem_dir}/specifications/default/date-3.2.2.gemspec %{gem_dir}/specifications/default/delegate-0.2.0.gemspec %{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec @@ -1277,7 +1259,7 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" %{gem_dir}/specifications/default/ipaddr-1.2.4.gemspec %{gem_dir}/specifications/default/logger-1.5.0.gemspec %{gem_dir}/specifications/default/mutex_m-0.1.1.gemspec -%{gem_dir}/specifications/default/net-http-0.2.0.gemspec +%{gem_dir}/specifications/default/net-http-0.3.0.gemspec %{gem_dir}/specifications/default/net-protocol-0.1.2.gemspec %{gem_dir}/specifications/default/nkf-0.1.1.gemspec %{gem_dir}/specifications/default/observer-0.1.1.gemspec @@ -1293,12 +1275,12 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" %{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{gem_dir}/specifications/default/readline-0.0.3.gemspec %{gem_dir}/specifications/default/readline-ext-0.1.4.gemspec -%{gem_dir}/specifications/default/reline-0.3.0.gemspec +%{gem_dir}/specifications/default/reline-0.3.1.gemspec %{gem_dir}/specifications/default/resolv-0.2.1.gemspec %{gem_dir}/specifications/default/resolv-replace-0.1.0.gemspec %{gem_dir}/specifications/default/rinda-0.1.1.gemspec %{gem_dir}/specifications/default/ruby2_keywords-0.0.5.gemspec -%{gem_dir}/specifications/default/securerandom-0.1.1.gemspec +%{gem_dir}/specifications/default/securerandom-0.2.0.gemspec %{gem_dir}/specifications/default/set-1.0.2.gemspec %{gem_dir}/specifications/default/shellwords-0.1.0.gemspec %{gem_dir}/specifications/default/singleton-0.1.1.gemspec @@ -1397,7 +1379,6 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" %doc %{gem_dir}/gems/debug-%{debug_version}/README.md %{gem_dir}/gems/debug-%{debug_version}/Rakefile %doc %{gem_dir}/gems/debug-%{debug_version}/TODO.md -%{gem_dir}/gems/debug-%{debug_version}/bin %{gem_dir}/gems/debug-%{debug_version}/exe %{gem_dir}/gems/debug-%{debug_version}/lib %{gem_dir}/gems/debug-%{debug_version}/misc @@ -1488,7 +1469,7 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" %license %{gem_dir}/gems/rbs-%{rbs_version}/BSDL %doc %{gem_dir}/gems/rbs-%{rbs_version}/CHANGELOG.md %license %{gem_dir}/gems/rbs-%{rbs_version}/COPYING -%{gem_dir}/gems/rbs-%{rbs_version}/Gemfile +%{gem_dir}/gems/rbs-%{rbs_version}/Gemfile* %doc %{gem_dir}/gems/rbs-%{rbs_version}/README.md %{gem_dir}/gems/rbs-%{rbs_version}/Rakefile %{gem_dir}/gems/rbs-%{rbs_version}/Steepfile @@ -1545,7 +1526,6 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" %{gem_dir}/gems/typeprof-%{typeprof_version}/lib %doc %{gem_dir}/gems/typeprof-%{typeprof_version}/tools %exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/typeprof-lsp -%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/vscode %{gem_dir}/specifications/typeprof-%{typeprof_version}.gemspec %doc %{gem_dir}/gems/typeprof-%{typeprof_version}/Gemfile* %doc %{gem_dir}/gems/typeprof-%{typeprof_version}/README.md @@ -1553,6 +1533,9 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" %changelog +* Thu Nov 24 2022 Vít Ondruch - 3.1.3-172 +- Upgrade to Ruby 3.1.3. + * Tue Nov 22 2022 Vít Ondruch - 3.1.2-171 - Re-disable package notes. It causes additional issues with installing binary gems. diff --git a/sources b/sources index 9cefc8d..9896d56 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.1.2.tar.xz) = 4a74e9efc6ea4b3eff4fec7534eb1fff4794d021531defc2e9937e53c6668db8ecdc0fff2bc23d5e6602d0df344a2caa85b31c5414309541e3d5313ec82b6e21 +SHA512 (ruby-3.1.3.tar.xz) = 4b0fd334ae56132ba98b8a69adad54bdcf7f7aeabd5eba5b0f0399a3868e2054f9026ca1b1cb2dbb197a9e9b0610b263481949c0623a62071546bc5adff8ca69 From 9819174c8dd5a04f7cc47d50d586cc6f72b8f0b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 16 Sep 2022 17:09:27 +0200 Subject: [PATCH 442/530] Use --enable-mkmf-verbose configuration opiton instead of patch. https://github.com/ruby/ruby/pull/5879 --- ruby-1.9.3-mkmf-verbose.patch | 25 ------------------------- ruby.spec | 4 +--- 2 files changed, 1 insertion(+), 28 deletions(-) delete mode 100644 ruby-1.9.3-mkmf-verbose.patch diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch deleted file mode 100644 index 03128be..0000000 --- a/ruby-1.9.3-mkmf-verbose.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 28cc0749d6729aa2444661ee7b411e183fe220b0 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 19 Nov 2012 15:14:51 +0100 -Subject: [PATCH] Verbose mkmf. - ---- - lib/mkmf.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/mkmf.rb b/lib/mkmf.rb -index 682eb46..e6b1445 100644 ---- a/lib/mkmf.rb -+++ b/lib/mkmf.rb -@@ -1971,7 +1971,7 @@ def configuration(srcdir) - SHELL = /bin/sh - - # V=0 quiet, V=1 verbose. other values don't work. --V = #{CONFIG['MKMF_VERBOSE']} -+V = 1 - V0 = $(V:0=) - Q1 = $(V:1=) - Q = $(Q1:0=@) --- -1.8.3.1 - diff --git a/ruby.spec b/ruby.spec index 1506817..2d281d5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -145,8 +145,6 @@ Patch3: ruby-2.1.0-always-use-i386.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://bugs.ruby-lang.org/issues/5617 Patch4: ruby-2.1.0-custom-rubygems-location.patch -# Make mkmf verbose by default -Patch5: ruby-1.9.3-mkmf-verbose.patch # The ABRT hook used to be initialized by preludes via following patches: # https://bugs.ruby-lang.org/issues/8566 # https://bugs.ruby-lang.org/issues/15306 @@ -655,7 +653,6 @@ rm -rf ext/fiddle/libffi* %patch2 -p1 %patch3 -p1 %patch4 -p1 -%patch5 -p1 %patch6 -p1 %patch7 -p1 %patch19 -p1 @@ -687,6 +684,7 @@ autoconf --with-ruby-pc='%{name}.pc' \ --with-compress-debug-sections=no \ --disable-rpath \ + --enable-mkmf-verbose \ --enable-shared \ --with-ruby-version='' \ --enable-multiarch \ From 2cdb051166374685a8ebc07eb40a1e1f1d08a1c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 8 Dec 2022 18:05:18 +0100 Subject: [PATCH 443/530] Disable MJIT test cases on i686 due to issues with PCH. --- ruby.spec | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 2d281d5..39a615a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 172 +%global release 173 %{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} # The RubyGems library has to stay out of Ruby directory tree, since the @@ -979,6 +979,13 @@ mv test/fiddle/test_closure.rb{,.disable} DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunc#test_qsort1/" DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" +%ifarch i686 +# The MJIT test cases are failing so often, that it is recently impossible +# to get past the test cases :/ +# https://bugzilla.redhat.com/show_bug.cgi?id=2125026 +mv test/ruby/test_jit.rb{,.disable} || : +%endif + # Give an option to increase the timeout in tests. # https://bugs.ruby-lang.org/issues/16921 %{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ @@ -1531,6 +1538,9 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" %changelog +* Thu Dec 08 2022 Vít Ondruch - 3.1.3-173 +- Disable MJIT test cases on i686 due to issues with PCH. + * Thu Nov 24 2022 Vít Ondruch - 3.1.3-172 - Upgrade to Ruby 3.1.3. From b1748af87f120b62540c7fd04c0e926dbaf1efd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 8 Dec 2022 13:12:40 +0100 Subject: [PATCH 444/530] Fix CGI causing issue with leading '.' in domain names. The original issue broke rubygem-actionpack: https://github.com/rails/rails/issues/46578 https://github.com/rails/rails/pull/46595 rubygem-rack: https://github.com/rack/rack/pull/1988 And rack-test (where I have not checked details). --- ...t_cgi_cookie_new_with_domain-to-pass.patch | 38 ++++++++++++++++ ...gi-Loosen-the-domain-regex-to-accept.patch | 44 +++++++++++++++++++ ruby.spec | 10 +++++ 3 files changed, 92 insertions(+) create mode 100644 ruby-3.2.0-ruby-cgi-Fix-test_cgi_cookie_new_with_domain-to-pass.patch create mode 100644 ruby-3.2.0-ruby-cgi-Loosen-the-domain-regex-to-accept.patch diff --git a/ruby-3.2.0-ruby-cgi-Fix-test_cgi_cookie_new_with_domain-to-pass.patch b/ruby-3.2.0-ruby-cgi-Fix-test_cgi_cookie_new_with_domain-to-pass.patch new file mode 100644 index 0000000..21579c5 --- /dev/null +++ b/ruby-3.2.0-ruby-cgi-Fix-test_cgi_cookie_new_with_domain-to-pass.patch @@ -0,0 +1,38 @@ +From 656f25987cf2885104d5b13c8d3f5b7d32f1b333 Mon Sep 17 00:00:00 2001 +From: Jean Boussier +Date: Wed, 23 Nov 2022 12:10:36 +0100 +Subject: [PATCH] [ruby/cgi] Fix test_cgi_cookie_new_with_domain to pass on + older rubies + +https://github.com/ruby/cgi/commit/05f0c58048 +--- + test/cgi/test_cgi_cookie.rb | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/test/cgi/test_cgi_cookie.rb b/test/cgi/test_cgi_cookie.rb +index e3ec4bea5286..6d31932d321a 100644 +--- a/test/cgi/test_cgi_cookie.rb ++++ b/test/cgi/test_cgi_cookie.rb +@@ -62,18 +62,18 @@ def test_cgi_cookie_new_complex + + def test_cgi_cookie_new_with_domain + h = {'name'=>'name1', 'value'=>'value1'} +- cookie = CGI::Cookie.new('domain'=>'a.example.com', **h) ++ cookie = CGI::Cookie.new(h.merge('domain'=>'a.example.com')) + assert_equal('a.example.com', cookie.domain) + +- cookie = CGI::Cookie.new('domain'=>'1.example.com', **h) ++ cookie = CGI::Cookie.new(h.merge('domain'=>'1.example.com')) + assert_equal('1.example.com', cookie.domain, 'enhanced by RFC 1123') + + assert_raise(ArgumentError) { +- CGI::Cookie.new('domain'=>'-a.example.com', **h) ++ CGI::Cookie.new(h.merge('domain'=>'-a.example.com')) + } + + assert_raise(ArgumentError) { +- CGI::Cookie.new('domain'=>'a-.example.com', **h) ++ CGI::Cookie.new(h.merge('domain'=>'a-.example.com')) + } + end + diff --git a/ruby-3.2.0-ruby-cgi-Loosen-the-domain-regex-to-accept.patch b/ruby-3.2.0-ruby-cgi-Loosen-the-domain-regex-to-accept.patch new file mode 100644 index 0000000..f217281 --- /dev/null +++ b/ruby-3.2.0-ruby-cgi-Loosen-the-domain-regex-to-accept.patch @@ -0,0 +1,44 @@ +From 745dcf5326ea2c8e2047a3bddeb0fbb7e7d07649 Mon Sep 17 00:00:00 2001 +From: Xenor Chang +Date: Mon, 28 Nov 2022 12:34:06 +0800 +Subject: [PATCH] [ruby/cgi] Loosen the domain regex to accept '.' + (https://github.com/ruby/cgi/pull/29) + +* Loosen the domain regex to accept '.' + +Co-authored-by: Nobuyoshi Nakada + +https://github.com/ruby/cgi/commit/5e09d632f3 +Co-authored-by: Hiroshi SHIBATA +--- + lib/cgi/cookie.rb | 2 +- + test/cgi/test_cgi_cookie.rb | 3 +++ + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/lib/cgi/cookie.rb b/lib/cgi/cookie.rb +index 1a9c1a82c123..9498e2f9faf9 100644 +--- a/lib/cgi/cookie.rb ++++ b/lib/cgi/cookie.rb +@@ -42,7 +42,7 @@ class Cookie < Array + + TOKEN_RE = %r"\A[[!-~]&&[^()<>@,;:\\\"/?=\[\]{}]]+\z" + PATH_VALUE_RE = %r"\A[[ -~]&&[^;]]*\z" +- DOMAIN_VALUE_RE = %r"\A(?