i9c-stream-3.1
changed/i9c-stream-3.1/ruby-3.1.4-143.module+el9.3.0+21558+96b51efd
parent
f4ffef536a
commit
562bd39c98
@ -1 +1 @@
|
||||
SOURCES/ruby-3.1.2.tar.xz
|
||||
SOURCES/ruby-3.1.4.tar.xz
|
||||
|
@ -1 +1 @@
|
||||
4c47f1dfeeb23fc55d65bcae50cf70c23bc28aa3 SOURCES/ruby-3.1.2.tar.xz
|
||||
2e2fbf43b7db6f24280548a3544912535bed8212 SOURCES/ruby-3.1.4.tar.xz
|
||||
|
@ -1,25 +0,0 @@
|
||||
From 28cc0749d6729aa2444661ee7b411e183fe220b0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
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
|
||||
@@ -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=@)
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -0,0 +1,23 @@
|
||||
From bffadcd6d46ccfccade79ce0efb60ced8eac4483 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zhu <peter@peterzhu.ca>
|
||||
Date: Thu, 6 Apr 2023 13:35:25 -0400
|
||||
Subject: [PATCH] Add guard to compaction test in WeakMap
|
||||
|
||||
Some platforms don't support compaction, so we should skip this test.
|
||||
---
|
||||
test/ruby/test_weakmap.rb | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/test/ruby/test_weakmap.rb b/test/ruby/test_weakmap.rb
|
||||
index c72e7310db101..7fc956dfae474 100644
|
||||
--- a/test/ruby/test_weakmap.rb
|
||||
+++ b/test/ruby/test_weakmap.rb
|
||||
@@ -178,6 +178,8 @@ def test_no_memory_leak
|
||||
end
|
||||
|
||||
def test_compaction_bug_19529
|
||||
+ omit "compaction is not supported on this platform" unless GC.respond_to?(:compact)
|
||||
+
|
||||
obj = Object.new
|
||||
100.times do |i|
|
||||
GC.compact
|
@ -0,0 +1,135 @@
|
||||
From 7af748ba924ba6119251ff959231c126784621e2 Mon Sep 17 00:00:00 2001
|
||||
From: Hiroshi SHIBATA <hsbt@ruby-lang.org>
|
||||
Date: Wed, 21 Jun 2023 13:26:37 +0900
|
||||
Subject: [PATCH 1/2] Bump up v0.12.2
|
||||
|
||||
---
|
||||
lib/uri/rfc2396_parser.rb | 4 ++--
|
||||
lib/uri/rfc3986_parser.rb | 2 +-
|
||||
lib/uri/version.rb | 2 +-
|
||||
test/uri/test_parser.rb | 22 ++++++++++++++++++++++
|
||||
4 files changed, 26 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/lib/uri/rfc2396_parser.rb b/lib/uri/rfc2396_parser.rb
|
||||
index 76a8f99fd48ccd..00c66cf0422213 100644
|
||||
--- a/lib/uri/rfc2396_parser.rb
|
||||
+++ b/lib/uri/rfc2396_parser.rb
|
||||
@@ -497,8 +497,8 @@ def initialize_regexp(pattern)
|
||||
ret = {}
|
||||
|
||||
# for URI::split
|
||||
- ret[:ABS_URI] = Regexp.new('\A\s*' + pattern[:X_ABS_URI] + '\s*\z', Regexp::EXTENDED)
|
||||
- ret[:REL_URI] = Regexp.new('\A\s*' + pattern[:X_REL_URI] + '\s*\z', Regexp::EXTENDED)
|
||||
+ ret[:ABS_URI] = Regexp.new('\A\s*+' + pattern[:X_ABS_URI] + '\s*\z', Regexp::EXTENDED)
|
||||
+ ret[:REL_URI] = Regexp.new('\A\s*+' + pattern[:X_REL_URI] + '\s*\z', Regexp::EXTENDED)
|
||||
|
||||
# for URI::extract
|
||||
ret[:URI_REF] = Regexp.new(pattern[:URI_REF])
|
||||
diff --git a/lib/uri/rfc3986_parser.rb b/lib/uri/rfc3986_parser.rb
|
||||
index dd24a409ea174e..9b1663dbb6efe3 100644
|
||||
--- a/lib/uri/rfc3986_parser.rb
|
||||
+++ b/lib/uri/rfc3986_parser.rb
|
||||
@@ -100,7 +100,7 @@ def default_regexp # :nodoc:
|
||||
QUERY: /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*\z/,
|
||||
FRAGMENT: /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*\z/,
|
||||
OPAQUE: /\A(?:[^\/].*)?\z/,
|
||||
- PORT: /\A[\x09\x0a\x0c\x0d ]*\d*[\x09\x0a\x0c\x0d ]*\z/,
|
||||
+ PORT: /\A[\x09\x0a\x0c\x0d ]*+\d*[\x09\x0a\x0c\x0d ]*\z/,
|
||||
}
|
||||
end
|
||||
|
||||
diff --git a/lib/uri/version.rb b/lib/uri/version.rb
|
||||
index 7497a7d31a5df7..f0aca586acab4f 100644
|
||||
--- a/lib/uri/version.rb
|
||||
+++ b/lib/uri/version.rb
|
||||
@@ -1,6 +1,6 @@
|
||||
module URI
|
||||
# :stopdoc:
|
||||
- VERSION_CODE = '001201'.freeze
|
||||
+ VERSION_CODE = '001202'.freeze
|
||||
VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze
|
||||
# :startdoc:
|
||||
end
|
||||
diff --git a/test/uri/test_parser.rb b/test/uri/test_parser.rb
|
||||
index 72fb5901d963f6..cee0acb4b57c87 100644
|
||||
--- a/test/uri/test_parser.rb
|
||||
+++ b/test/uri/test_parser.rb
|
||||
@@ -79,4 +79,26 @@ def test_split
|
||||
assert_equal([nil, nil, "example.com", nil, nil, "", nil, nil, nil], URI.split("//example.com"))
|
||||
assert_equal([nil, nil, "[0::0]", nil, nil, "", nil, nil, nil], URI.split("//[0::0]"))
|
||||
end
|
||||
+
|
||||
+ def test_rfc2822_parse_relative_uri
|
||||
+ pre = ->(length) {
|
||||
+ " " * length + "\0"
|
||||
+ }
|
||||
+ parser = URI::RFC2396_Parser.new
|
||||
+ assert_linear_performance((1..5).map {|i| 10**i}, pre: pre) do |uri|
|
||||
+ assert_raise(URI::InvalidURIError) do
|
||||
+ parser.split(uri)
|
||||
+ end
|
||||
+ end
|
||||
+ end
|
||||
+
|
||||
+ def test_rfc3986_port_check
|
||||
+ pre = ->(length) {"\t" * length + "a"}
|
||||
+ uri = URI.parse("http://my.example.com")
|
||||
+ assert_linear_performance((1..5).map {|i| 10**i}, pre: pre) do |port|
|
||||
+ assert_raise(URI::InvalidComponentError) do
|
||||
+ uri.port = port
|
||||
+ end
|
||||
+ end
|
||||
+ end
|
||||
end
|
||||
|
||||
From b2deea8a2e71ab880370080a9ddf243747abc8fd Mon Sep 17 00:00:00 2001
|
||||
From: Hiroshi SHIBATA <hsbt@ruby-lang.org>
|
||||
Date: Wed, 21 Jun 2023 14:15:26 +0900
|
||||
Subject: [PATCH 2/2] Merge URI-0.10.3 for Bundler
|
||||
|
||||
---
|
||||
lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb | 4 ++--
|
||||
lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb | 2 +-
|
||||
lib/bundler/vendor/uri/lib/uri/version.rb | 2 +-
|
||||
3 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb b/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb
|
||||
index e48e164f4c13e7..09ed40754d5bfe 100644
|
||||
--- a/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb
|
||||
+++ b/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb
|
||||
@@ -491,8 +491,8 @@ def initialize_regexp(pattern)
|
||||
ret = {}
|
||||
|
||||
# for Bundler::URI::split
|
||||
- ret[:ABS_URI] = Regexp.new('\A\s*' + pattern[:X_ABS_URI] + '\s*\z', Regexp::EXTENDED)
|
||||
- ret[:REL_URI] = Regexp.new('\A\s*' + pattern[:X_REL_URI] + '\s*\z', Regexp::EXTENDED)
|
||||
+ ret[:ABS_URI] = Regexp.new('\A\s*+' + pattern[:X_ABS_URI] + '\s*\z', Regexp::EXTENDED)
|
||||
+ ret[:REL_URI] = Regexp.new('\A\s*+' + pattern[:X_REL_URI] + '\s*\z', Regexp::EXTENDED)
|
||||
|
||||
# for Bundler::URI::extract
|
||||
ret[:URI_REF] = Regexp.new(pattern[:URI_REF])
|
||||
diff --git a/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb b/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb
|
||||
index cd4dd0c7526630..870720e5b3e8d0 100644
|
||||
--- a/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb
|
||||
+++ b/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb
|
||||
@@ -95,7 +95,7 @@ def default_regexp # :nodoc:
|
||||
QUERY: /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*\z/,
|
||||
FRAGMENT: /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*\z/,
|
||||
OPAQUE: /\A(?:[^\/].*)?\z/,
|
||||
- PORT: /\A[\x09\x0a\x0c\x0d ]*\d*[\x09\x0a\x0c\x0d ]*\z/,
|
||||
+ PORT: /\A[\x09\x0a\x0c\x0d ]*+\d*[\x09\x0a\x0c\x0d ]*\z/,
|
||||
}
|
||||
end
|
||||
|
||||
diff --git a/lib/bundler/vendor/uri/lib/uri/version.rb b/lib/bundler/vendor/uri/lib/uri/version.rb
|
||||
index 3895df0de5c53a..d65b7e5b7574d8 100644
|
||||
--- a/lib/bundler/vendor/uri/lib/uri/version.rb
|
||||
+++ b/lib/bundler/vendor/uri/lib/uri/version.rb
|
||||
@@ -1,6 +1,6 @@
|
||||
module Bundler::URI
|
||||
# :stopdoc:
|
||||
- VERSION_CODE = '001002'.freeze
|
||||
+ VERSION_CODE = '001003'.freeze
|
||||
VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze
|
||||
# :startdoc:
|
||||
end
|
@ -1,338 +0,0 @@
|
||||
From 111f8422427d78becc9183ae149b2105a16bf327 Mon Sep 17 00:00:00 2001
|
||||
From: Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
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 <nobu@ruby-lang.org>
|
||||
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 <nobu@ruby-lang.org>
|
||||
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 <nobu@ruby-lang.org>
|
||||
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 <nobu@ruby-lang.org>
|
||||
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
|
@ -0,0 +1,32 @@
|
||||
From f0b254f1f6610294821bbfc06b414d2af452db5b Mon Sep 17 00:00:00 2001
|
||||
From: Jun Aruga <jaruga@redhat.com>
|
||||
Date: Thu, 13 Apr 2023 17:28:27 +0200
|
||||
Subject: [PATCH] [ruby/openssl] Drop a common logic disabling the FIPS mode in
|
||||
the tests.
|
||||
|
||||
We want to run the unit tests in the FIPS mode too.
|
||||
|
||||
https://github.com/ruby/openssl/commit/ab92baff34
|
||||
---
|
||||
test/openssl/utils.rb | 5 -----
|
||||
1 file changed, 5 deletions(-)
|
||||
|
||||
diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb
|
||||
index 4ebcb9837b..8a0be0d154 100644
|
||||
--- a/test/openssl/utils.rb
|
||||
+++ b/test/openssl/utils.rb
|
||||
@@ -1,11 +1,6 @@
|
||||
# frozen_string_literal: true
|
||||
begin
|
||||
require "openssl"
|
||||
-
|
||||
- # Disable FIPS mode for tests for installations
|
||||
- # where FIPS mode would be enabled by default.
|
||||
- # Has no effect on all other installations.
|
||||
- OpenSSL.fips_mode=false
|
||||
rescue LoadError
|
||||
end
|
||||
|
||||
--
|
||||
2.41.0
|
||||
|
@ -0,0 +1,73 @@
|
||||
From b6d7cdc2bad0eadbca73f3486917f0ec7a475814 Mon Sep 17 00:00:00 2001
|
||||
From: Kazuki Yamaguchi <k@rhe.jp>
|
||||
Date: Tue, 29 Aug 2023 19:46:02 +0900
|
||||
Subject: [PATCH] [ruby/openssl] ssl: use ffdhe2048 from RFC 7919 as the
|
||||
default DH group parameters
|
||||
|
||||
In TLS 1.2 or before, if DH group parameters for DHE are not supplied
|
||||
with SSLContext#tmp_dh= or #tmp_dh_callback=, we currently use the
|
||||
self-generated parameters added in commit https://github.com/ruby/openssl/commit/bb3399a61c03 ("support 2048
|
||||
bit length DH-key", 2016-01-15) as the fallback.
|
||||
|
||||
While there is no known weakness in the current parameters, it would be
|
||||
a good idea to switch to pre-defined, more well audited parameters.
|
||||
|
||||
This also allows the fallback to work in the FIPS mode.
|
||||
|
||||
The PEM encoding was derived with:
|
||||
|
||||
# RFC 7919 Appendix A.1. ffdhe2048
|
||||
print OpenSSL::PKey.read(OpenSSL::ASN1::Sequence([OpenSSL::ASN1::Integer((<<-END).split.join.to_i(16)), OpenSSL::ASN1::Integer(2)]).to_der).to_pem
|
||||
FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1
|
||||
D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9
|
||||
7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561
|
||||
2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935
|
||||
984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735
|
||||
30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB
|
||||
B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19
|
||||
0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61
|
||||
9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73
|
||||
3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA
|
||||
886B4238 61285C97 FFFFFFFF FFFFFFFF
|
||||
END
|
||||
|
||||
https://github.com/ruby/openssl/commit/a5527cb4f4
|
||||
---
|
||||
ext/openssl/lib/openssl/ssl.rb | 18 +++++++++---------
|
||||
1 file changed, 9 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/ext/openssl/lib/openssl/ssl.rb b/ext/openssl/lib/openssl/ssl.rb
|
||||
index ea8bb2a18e533..94be6ba80b894 100644
|
||||
--- a/ext/openssl/lib/openssl/ssl.rb
|
||||
+++ b/ext/openssl/lib/openssl/ssl.rb
|
||||
@@ -31,21 +31,21 @@ class SSLContext
|
||||
}
|
||||
|
||||
if defined?(OpenSSL::PKey::DH)
|
||||
- DEFAULT_2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_
|
||||
+ DH_ffdhe2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_
|
||||
-----BEGIN DH PARAMETERS-----
|
||||
-MIIBCAKCAQEA7E6kBrYiyvmKAMzQ7i8WvwVk9Y/+f8S7sCTN712KkK3cqd1jhJDY
|
||||
-JbrYeNV3kUIKhPxWHhObHKpD1R84UpL+s2b55+iMd6GmL7OYmNIT/FccKhTcveab
|
||||
-VBmZT86BZKYyf45hUF9FOuUM9xPzuK3Vd8oJQvfYMCd7LPC0taAEljQLR4Edf8E6
|
||||
-YoaOffgTf5qxiwkjnlVZQc3whgnEt9FpVMvQ9eknyeGB5KHfayAc3+hUAvI3/Cr3
|
||||
-1bNveX5wInh5GDx1FGhKBZ+s1H+aedudCm7sCgRwv8lKWYGiHzObSma8A86KG+MD
|
||||
-7Lo5JquQ3DlBodj3IDyPrxIv96lvRPFtAwIBAg==
|
||||
+MIIBCAKCAQEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz
|
||||
++8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a
|
||||
+87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7
|
||||
+YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi
|
||||
+7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD
|
||||
+ssbzSibBsu/6iGtCOGEoXJf//////////wIBAg==
|
||||
-----END DH PARAMETERS-----
|
||||
_end_of_pem_
|
||||
- private_constant :DEFAULT_2048
|
||||
+ private_constant :DH_ffdhe2048
|
||||
|
||||
DEFAULT_TMP_DH_CALLBACK = lambda { |ctx, is_export, keylen| # :nodoc:
|
||||
warn "using default DH parameters." if $VERBOSE
|
||||
- DEFAULT_2048
|
||||
+ DH_ffdhe2048
|
||||
}
|
||||
end
|
||||
|
@ -0,0 +1,188 @@
|
||||
From 114140236e1835c60a9697f7b89b818c1cbb9350 Mon Sep 17 00:00:00 2001
|
||||
From: Jun Aruga <jaruga@redhat.com>
|
||||
Date: Wed, 12 Apr 2023 17:15:21 +0200
|
||||
Subject: [PATCH] Fix OpenSSL::PKey.read in OpenSSL 3 FIPS module.
|
||||
|
||||
This is a combination of the following 2 commits. Because the combined patch is
|
||||
easy to merge.
|
||||
|
||||
This is the 1st commit message:
|
||||
|
||||
[ruby/openssl] Workaround: Fix OpenSSL::PKey.read that cannot parse PKey in the FIPS mode.
|
||||
|
||||
This commit is a workaround to avoid the error below that the
|
||||
`OpenSSL::PKey.read` fails with the OpenSSL 3.0 FIPS mode.
|
||||
|
||||
```
|
||||
$ openssl genrsa -out key.pem 4096
|
||||
|
||||
$ ruby -e "require 'openssl'; OpenSSL::PKey.read(File.read('key.pem'))"
|
||||
-e:1:in `read': Could not parse PKey (OpenSSL::PKey::PKeyError)
|
||||
from -e:1:in `<main>'
|
||||
```
|
||||
|
||||
The root cause is on the OpenSSL side. The `OSSL_DECODER_CTX_set_selection`
|
||||
doesn't apply the selection value properly if there are multiple providers, and
|
||||
a provider (e.g. "base" provider) handles the decoder implementation, and
|
||||
another provider (e.g. "fips" provider) handles the keys.
|
||||
|
||||
The workaround is to create `OSSL_DECODER_CTX` variable each time without using
|
||||
the `OSSL_DECODER_CTX_set_selection`.
|
||||
|
||||
https://github.com/ruby/openssl/commit/5ff4a31621
|
||||
|
||||
This is the commit message #2:
|
||||
|
||||
[ruby/openssl] ossl_pkey.c: Workaround: Decode with non-zero selections.
|
||||
|
||||
This is a workaround for the decoding issue in ossl_pkey_read_generic().
|
||||
The issue happens in the case that a key management provider is different from
|
||||
a decoding provider.
|
||||
|
||||
Try all the non-zero selections in order, instead of selection 0 for OpenSSL 3
|
||||
to avoid the issue.
|
||||
|
||||
https://github.com/ruby/openssl/commit/db688fa739
|
||||
---
|
||||
ext/openssl/ossl_pkey.c | 103 ++++++++++++++++++++++++----------------
|
||||
1 file changed, 63 insertions(+), 40 deletions(-)
|
||||
|
||||
diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c
|
||||
index ee143d66ee..51ee0bacba 100644
|
||||
--- a/ext/openssl/ossl_pkey.c
|
||||
+++ b/ext/openssl/ossl_pkey.c
|
||||
@@ -82,31 +82,62 @@ ossl_pkey_new(EVP_PKEY *pkey)
|
||||
#if OSSL_OPENSSL_PREREQ(3, 0, 0)
|
||||
# include <openssl/decoder.h>
|
||||
|
||||
-EVP_PKEY *
|
||||
-ossl_pkey_read_generic(BIO *bio, VALUE pass)
|
||||
+static EVP_PKEY *
|
||||
+ossl_pkey_read(BIO *bio, const char *input_type, int selection, 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);
|
||||
+ dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, input_type, NULL, NULL,
|
||||
+ selection, 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)
|
||||
+ if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb,
|
||||
+ ppass) != 1)
|
||||
goto out;
|
||||
+ while (1) {
|
||||
+ if (OSSL_DECODER_from_bio(dctx, bio) == 1)
|
||||
+ goto out;
|
||||
+ if (BIO_eof(bio))
|
||||
+ break;
|
||||
+ pos2 = BIO_tell(bio);
|
||||
+ if (pos2 < 0 || pos2 <= pos)
|
||||
+ break;
|
||||
+ ossl_clear_error();
|
||||
+ pos = pos2;
|
||||
+ }
|
||||
+ out:
|
||||
OSSL_BIO_reset(bio);
|
||||
+ OSSL_DECODER_CTX_free(dctx);
|
||||
+ return pkey;
|
||||
+}
|
||||
|
||||
- /* Then check PEM; multiple OSSL_DECODER_from_bio() calls may be needed */
|
||||
- if (OSSL_DECODER_CTX_set_input_type(dctx, "PEM") != 1)
|
||||
- goto out;
|
||||
+EVP_PKEY *
|
||||
+ossl_pkey_read_generic(BIO *bio, VALUE pass)
|
||||
+{
|
||||
+ EVP_PKEY *pkey = NULL;
|
||||
+ /* First check DER, then check PEM. */
|
||||
+ const char *input_types[] = {"DER", "PEM"};
|
||||
+ int input_type_num = (int)(sizeof(input_types) / sizeof(char *));
|
||||
/*
|
||||
- * First check for private key formats. This is to keep compatibility with
|
||||
- * ruby/openssl < 3.0 which decoded the following as a private key.
|
||||
+ * Non-zero selections to try to decode.
|
||||
+ *
|
||||
+ * See EVP_PKEY_fromdata(3) - Selections to see all the selections.
|
||||
+ *
|
||||
+ * This is a workaround for the decoder failing to decode or returning
|
||||
+ * bogus keys with selection 0, if a key management provider is different
|
||||
+ * from a decoder provider. The workaround is to avoid using selection 0.
|
||||
+ *
|
||||
+ * Affected OpenSSL versions: >= 3.1.0, <= 3.1.2, or >= 3.0.0, <= 3.0.10
|
||||
+ * Fixed OpenSSL versions: 3.2, next release of the 3.1.z and 3.0.z
|
||||
+ *
|
||||
+ * See https://github.com/openssl/openssl/pull/21519 for details.
|
||||
+ *
|
||||
+ * First check for private key formats (EVP_PKEY_KEYPAIR). This is to keep
|
||||
+ * compatibility with ruby/openssl < 3.0 which decoded the following as a
|
||||
+ * private key.
|
||||
*
|
||||
* $ openssl ecparam -name prime256v1 -genkey -outform PEM
|
||||
* -----BEGIN EC PARAMETERS-----
|
||||
@@ -124,36 +155,28 @@ ossl_pkey_read_generic(BIO *bio, VALUE pass)
|
||||
*
|
||||
* Note that normally, the input is supposed to contain a single decodable
|
||||
* PEM block only, so this special handling should not create a new problem.
|
||||
+ *
|
||||
+ * Note that we need to create the OSSL_DECODER_CTX variable each time when
|
||||
+ * we use the different selection as a workaround.
|
||||
+ * See https://github.com/openssl/openssl/issues/20657 for details.
|
||||
*/
|
||||
- OSSL_DECODER_CTX_set_selection(dctx, EVP_PKEY_KEYPAIR);
|
||||
- while (1) {
|
||||
- if (OSSL_DECODER_from_bio(dctx, bio) == 1)
|
||||
- goto out;
|
||||
- if (BIO_eof(bio))
|
||||
- break;
|
||||
- pos2 = BIO_tell(bio);
|
||||
- if (pos2 < 0 || pos2 <= pos)
|
||||
- break;
|
||||
- ossl_clear_error();
|
||||
- pos = pos2;
|
||||
- }
|
||||
-
|
||||
- OSSL_BIO_reset(bio);
|
||||
- OSSL_DECODER_CTX_set_selection(dctx, 0);
|
||||
- while (1) {
|
||||
- if (OSSL_DECODER_from_bio(dctx, bio) == 1)
|
||||
- goto out;
|
||||
- if (BIO_eof(bio))
|
||||
- break;
|
||||
- pos2 = BIO_tell(bio);
|
||||
- if (pos2 < 0 || pos2 <= pos)
|
||||
- break;
|
||||
- ossl_clear_error();
|
||||
- pos = pos2;
|
||||
+ int selections[] = {
|
||||
+ EVP_PKEY_KEYPAIR,
|
||||
+ EVP_PKEY_KEY_PARAMETERS,
|
||||
+ EVP_PKEY_PUBLIC_KEY
|
||||
+ };
|
||||
+ int selection_num = (int)(sizeof(selections) / sizeof(int));
|
||||
+ int i, j;
|
||||
+
|
||||
+ for (i = 0; i < input_type_num; i++) {
|
||||
+ for (j = 0; j < selection_num; j++) {
|
||||
+ pkey = ossl_pkey_read(bio, input_types[i], selections[j], pass);
|
||||
+ if (pkey) {
|
||||
+ goto out;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
-
|
||||
out:
|
||||
- OSSL_DECODER_CTX_free(dctx);
|
||||
return pkey;
|
||||
}
|
||||
#else
|
||||
--
|
||||
2.41.0
|
||||
|
@ -0,0 +1,142 @@
|
||||
From 29920ec109751459a65c6478525f2e59c644891f Mon Sep 17 00:00:00 2001
|
||||
From: Jun Aruga <jaruga@redhat.com>
|
||||
Date: Thu, 16 Mar 2023 21:36:43 +0100
|
||||
Subject: [PATCH] [ruby/openssl] Implement FIPS functions on OpenSSL 3.
|
||||
|
||||
This commit is to implement the `OpenSSL::OPENSSL_FIPS`, `ossl_fips_mode_get`
|
||||
and `ossl_fips_mode_set` to pass the test `test/openssl/test_fips.rb`.
|
||||
|
||||
It seems that the `OPENSSL_FIPS` macro is not used on the FIPS mode case any
|
||||
more, and some FIPS related APIs also were removed in OpenSSL 3.
|
||||
|
||||
See the document <https://github.com/openssl/openssl/blob/master/doc/man7/migration_guide.pod#removed-fips_mode-and-fips_mode_set>
|
||||
the section OPENSSL 3.0 > Main Changes from OpenSSL 1.1.1 >
|
||||
Other notable deprecations and changes - Removed FIPS_mode() and FIPS_mode_set() .
|
||||
|
||||
The `OpenSSL::OPENSSL_FIPS` returns always true in OpenSSL 3 because the used
|
||||
functions `EVP_default_properties_enable_fips` and `EVP_default_properties_is_fips_enabled`
|
||||
works with the OpenSSL installed without FIPS option.
|
||||
|
||||
The `TEST_RUBY_OPENSSL_FIPS_ENABLED` is set on the FIPS mode case on the CI.
|
||||
Because I want to test that the `OpenSSL.fips_mode` returns the `true` or
|
||||
'false' surely in the CI. You can test the FIPS mode case by setting
|
||||
`TEST_RUBY_OPENSSL_FIPS_ENABLED` on local too. Right now I don't find a better
|
||||
way to get the status of the FIPS mode enabled or disabled for this purpose. I
|
||||
am afraid of the possibility that the FIPS test case is unintentionally skipped.
|
||||
|
||||
I also replaced the ambiguous "returns" with "should return" in the tests.
|
||||
|
||||
https://github.com/ruby/openssl/commit/c5b2bc1268
|
||||
---
|
||||
ext/openssl/ossl.c | 25 +++++++++++++++++++++----
|
||||
test/openssl/test_fips.rb | 32 ++++++++++++++++++++++++++++----
|
||||
2 files changed, 49 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/ext/openssl/ossl.c b/ext/openssl/ossl.c
|
||||
index 6c532aca94..fcf3744c65 100644
|
||||
--- a/ext/openssl/ossl.c
|
||||
+++ b/ext/openssl/ossl.c
|
||||
@@ -418,7 +418,11 @@ static VALUE
|
||||
ossl_fips_mode_get(VALUE self)
|
||||
{
|
||||
|
||||
-#ifdef OPENSSL_FIPS
|
||||
+#if OSSL_OPENSSL_PREREQ(3, 0, 0)
|
||||
+ VALUE enabled;
|
||||
+ enabled = EVP_default_properties_is_fips_enabled(NULL) ? Qtrue : Qfalse;
|
||||
+ return enabled;
|
||||
+#elif OPENSSL_FIPS
|
||||
VALUE enabled;
|
||||
enabled = FIPS_mode() ? Qtrue : Qfalse;
|
||||
return enabled;
|
||||
@@ -442,8 +446,18 @@ ossl_fips_mode_get(VALUE self)
|
||||
static VALUE
|
||||
ossl_fips_mode_set(VALUE self, VALUE enabled)
|
||||
{
|
||||
-
|
||||
-#ifdef OPENSSL_FIPS
|
||||
+#if OSSL_OPENSSL_PREREQ(3, 0, 0)
|
||||
+ if (RTEST(enabled)) {
|
||||
+ if (!EVP_default_properties_enable_fips(NULL, 1)) {
|
||||
+ ossl_raise(eOSSLError, "Turning on FIPS mode failed");
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (!EVP_default_properties_enable_fips(NULL, 0)) {
|
||||
+ ossl_raise(eOSSLError, "Turning off FIPS mode failed");
|
||||
+ }
|
||||
+ }
|
||||
+ return enabled;
|
||||
+#elif OPENSSL_FIPS
|
||||
if (RTEST(enabled)) {
|
||||
int mode = FIPS_mode();
|
||||
if(!mode && !FIPS_mode_set(1)) /* turning on twice leads to an error */
|
||||
@@ -1198,7 +1212,10 @@ Init_openssl(void)
|
||||
* Boolean indicating whether OpenSSL is FIPS-capable or not
|
||||
*/
|
||||
rb_define_const(mOSSL, "OPENSSL_FIPS",
|
||||
-#ifdef OPENSSL_FIPS
|
||||
+/* OpenSSL 3 is FIPS-capable even when it is installed without fips option */
|
||||
+#if OSSL_OPENSSL_PREREQ(3, 0, 0)
|
||||
+ Qtrue
|
||||
+#elif OPENSSL_FIPS
|
||||
Qtrue
|
||||
#else
|
||||
Qfalse
|
||||
diff --git a/test/openssl/test_fips.rb b/test/openssl/test_fips.rb
|
||||
index 8cd474f9a3..56a12a94ce 100644
|
||||
--- a/test/openssl/test_fips.rb
|
||||
+++ b/test/openssl/test_fips.rb
|
||||
@@ -4,22 +4,46 @@
|
||||
if defined?(OpenSSL)
|
||||
|
||||
class OpenSSL::TestFIPS < OpenSSL::TestCase
|
||||
+ def test_fips_mode_get_is_true_on_fips_mode_enabled
|
||||
+ unless ENV["TEST_RUBY_OPENSSL_FIPS_ENABLED"]
|
||||
+ omit "Only for FIPS mode environment"
|
||||
+ end
|
||||
+
|
||||
+ assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;")
|
||||
+ assert OpenSSL.fips_mode == true, ".fips_mode should return true on FIPS mode enabled"
|
||||
+ end;
|
||||
+ end
|
||||
+
|
||||
+ def test_fips_mode_get_is_false_on_fips_mode_disabled
|
||||
+ if ENV["TEST_RUBY_OPENSSL_FIPS_ENABLED"]
|
||||
+ omit "Only for non-FIPS mode environment"
|
||||
+ end
|
||||
+
|
||||
+ assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;")
|
||||
+ message = ".fips_mode should return false on FIPS mode disabled. " \
|
||||
+ "If you run the test on FIPS mode, please set " \
|
||||
+ "TEST_RUBY_OPENSSL_FIPS_ENABLED=true"
|
||||
+ assert OpenSSL.fips_mode == false, message
|
||||
+ end;
|
||||
+ end
|
||||
+
|
||||
def test_fips_mode_is_reentrant
|
||||
OpenSSL.fips_mode = false
|
||||
OpenSSL.fips_mode = false
|
||||
end
|
||||
|
||||
- def test_fips_mode_get
|
||||
- return unless OpenSSL::OPENSSL_FIPS
|
||||
+ def test_fips_mode_get_with_fips_mode_set
|
||||
+ omit('OpenSSL is not FIPS-capable') unless OpenSSL::OPENSSL_FIPS
|
||||
+
|
||||
assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;")
|
||||
require #{__FILE__.dump}
|
||||
|
||||
begin
|
||||
OpenSSL.fips_mode = true
|
||||
- assert OpenSSL.fips_mode == true, ".fips_mode returns true when .fips_mode=true"
|
||||
+ assert OpenSSL.fips_mode == true, ".fips_mode should return true when .fips_mode=true"
|
||||
|
||||
OpenSSL.fips_mode = false
|
||||
- assert OpenSSL.fips_mode == false, ".fips_mode returns false when .fips_mode=false"
|
||||
+ assert OpenSSL.fips_mode == false, ".fips_mode should return false when .fips_mode=false"
|
||||
rescue OpenSSL::OpenSSLError
|
||||
pend "Could not set FIPS mode (OpenSSL::OpenSSLError: \#$!); skipping"
|
||||
end
|
||||
--
|
||||
2.41.0
|
||||
|
@ -0,0 +1,256 @@
|
||||
From d3933fc753187a055a4904af82f5f3794c88c416 Mon Sep 17 00:00:00 2001
|
||||
From: Sorah Fukumori <her@sorah.jp>
|
||||
Date: Mon, 1 Jan 2024 20:45:54 +0900
|
||||
Subject: [PATCH] [ruby/net-http] Renew test certificates
|
||||
|
||||
The private key is replaced with a public known test key published at
|
||||
[RFC 9500].
|
||||
|
||||
Also lifetime has been extended to 10 years from 4 years.
|
||||
|
||||
[RFC 9500]: https://www.rfc-editor.org/rfc/rfc9500.html
|
||||
|
||||
https://github.com/ruby/net-http/commit/4ab6c4a500
|
||||
---
|
||||
test/net/fixtures/Makefile | 6 +--
|
||||
test/net/fixtures/cacert.pem | 44 ++++++++--------
|
||||
test/net/fixtures/server.crt | 99 +++++++-----------------------------
|
||||
test/net/fixtures/server.key | 55 ++++++++++----------
|
||||
4 files changed, 71 insertions(+), 133 deletions(-)
|
||||
|
||||
diff --git a/test/net/fixtures/Makefile b/test/net/fixtures/Makefile
|
||||
index b2bc9c7368ee2..88c232e3b6c16 100644
|
||||
--- a/test/net/fixtures/Makefile
|
||||
+++ b/test/net/fixtures/Makefile
|
||||
@@ -5,11 +5,11 @@ regen_certs:
|
||||
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"
|
||||
+ openssl req -new -x509 -days 3650 -key server.key -out cacert.pem -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"
|
||||
+ openssl req -new -key server.key -out server.csr -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
|
||||
+ openssl x509 -days 3650 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -out server.crt
|
||||
rm server.csr
|
||||
diff --git a/test/net/fixtures/cacert.pem b/test/net/fixtures/cacert.pem
|
||||
index f623bd62ed375..24c83f1c65225 100644
|
||||
--- a/test/net/fixtures/cacert.pem
|
||||
+++ b/test/net/fixtures/cacert.pem
|
||||
@@ -1,24 +1,24 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
-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==
|
||||
+MIID+zCCAuOgAwIBAgIUGMvHl3EhtKPKcgc3NQSAYfFuC+8wDQYJKoZIhvcNAQEL
|
||||
+BQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYDVQQIDAdTaGltYW5lMRQwEgYDVQQHDAtN
|
||||
+YXR6LWUgY2l0eTEXMBUGA1UECgwOUnVieSBDb3JlIFRlYW0xFTATBgNVBAMMDFJ1
|
||||
+YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJARYWc2VjdXJpdHlAcnVieS1sYW5nLm9y
|
||||
+ZzAeFw0yNDAxMDExMTQ3MjNaFw0zMzEyMjkxMTQ3MjNaMIGMMQswCQYDVQQGEwJK
|
||||
+UDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkxFzAVBgNV
|
||||
+BAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0ExJTAjBgkq
|
||||
+hkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwggEiMA0GCSqGSIb3DQEB
|
||||
+AQUAA4IBDwAwggEKAoIBAQCw+egZQ6eumJKq3hfKfED4dE/tL4FI5sjqont9ABVI
|
||||
++1GSqyi1bFBgsRjM0THllIdMbKmJtWwnKW8J+5OgNN8y6Xxv8JmM/Y5vQt2lis0f
|
||||
+qXmG8UTz0VTWdlAXXmhUs6lSADvAaIe4RVrCsZ97L3ZQTryY7JRVcbB4khUN3Gp0
|
||||
+yg+801SXzoFTTa+UGIRLE66jH51aa5VXu99hnv1OiH8tQrjdi8mH6uG/icq4XuIe
|
||||
+NWMF32wHqIOOPvQcWV3M5D2vxJEj702Ku6k9OQXkAo17qRSEonWW4HtLbtmS8He1
|
||||
+JNPc/n3dVUm+fM6NoDXPoLP7j55G9zKyqGtGAWXAj1MTAgMBAAGjUzBRMB0GA1Ud
|
||||
+DgQWBBSJGVleDvFp9cu9R+E0/OKYzGkwkTAfBgNVHSMEGDAWgBSJGVleDvFp9cu9
|
||||
+R+E0/OKYzGkwkTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBl
|
||||
+8GLB8skAWlkSw/FwbUmEV3zyqu+p7PNP5YIYoZs0D74e7yVulGQ6PKMZH5hrZmHo
|
||||
+orFSQU+VUUirG8nDGj7Rzce8WeWBxsaDGC8CE2dq6nC6LuUwtbdMnBrH0LRWAz48
|
||||
+jGFF3jHtVz8VsGfoZTZCjukWqNXvU6hETT9GsfU+PZqbqcTVRPH52+XgYayKdIbD
|
||||
+r97RM4X3+aXBHcUW0b76eyyi65RR/Xtvn8ioZt2AdX7T2tZzJyXJN3Hupp77s6Ui
|
||||
+AZR35SToHCZeTZD12YBvLBdaTPLZN7O/Q/aAO9ZiJaZ7SbFOjz813B2hxXab4Fob
|
||||
+2uJX6eMWTVxYK5D4M9lm
|
||||
-----END CERTIFICATE-----
|
||||
diff --git a/test/net/fixtures/server.crt b/test/net/fixtures/server.crt
|
||||
index 5ca78a6d146a0..5d2923795dabc 100644
|
||||
--- a/test/net/fixtures/server.crt
|
||||
+++ b/test/net/fixtures/server.crt
|
||||
@@ -1,82 +1,21 @@
|
||||
-Certificate:
|
||||
- Data:
|
||||
- Version: 3 (0x2)
|
||||
- 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: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: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:
|
||||
- CA:FALSE
|
||||
- Netscape Comment:
|
||||
- OpenSSL Generated Certificate
|
||||
- X509v3 Subject Key Identifier:
|
||||
- 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
|
||||
- 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-----
|
||||
-MIID4zCCAsugAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSlAx
|
||||
-EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK
|
||||
-DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI
|
||||
-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
|
||||
+MIIDYTCCAkkCAQAwDQYJKoZIhvcNAQELBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD
|
||||
+VQQIDAdTaGltYW5lMRQwEgYDVQQHDAtNYXR6LWUgY2l0eTEXMBUGA1UECgwOUnVi
|
||||
+eSBDb3JlIFRlYW0xFTATBgNVBAMMDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ
|
||||
+ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0yNDAxMDExMTQ3MjNaFw0zMzEy
|
||||
+MjkxMTQ3MjNaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIDAdTaGltYW5lMRcwFQYD
|
||||
+VQQKDA5SdWJ5IENvcmUgVGVhbTESMBAGA1UECwwJUnVieSBUZXN0MRIwEAYDVQQD
|
||||
+DAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCw+egZ
|
||||
+Q6eumJKq3hfKfED4dE/tL4FI5sjqont9ABVI+1GSqyi1bFBgsRjM0THllIdMbKmJ
|
||||
+tWwnKW8J+5OgNN8y6Xxv8JmM/Y5vQt2lis0fqXmG8UTz0VTWdlAXXmhUs6lSADvA
|
||||
+aIe4RVrCsZ97L3ZQTryY7JRVcbB4khUN3Gp0yg+801SXzoFTTa+UGIRLE66jH51a
|
||||
+a5VXu99hnv1OiH8tQrjdi8mH6uG/icq4XuIeNWMF32wHqIOOPvQcWV3M5D2vxJEj
|
||||
+702Ku6k9OQXkAo17qRSEonWW4HtLbtmS8He1JNPc/n3dVUm+fM6NoDXPoLP7j55G
|
||||
+9zKyqGtGAWXAj1MTAgMBAAEwDQYJKoZIhvcNAQELBQADggEBACtGNdj5TEtnJBYp
|
||||
+M+LhBeU3oNteldfycEm993gJp6ghWZFg23oX8fVmyEeJr/3Ca9bAgDqg0t9a0npN
|
||||
+oWKEY6wVKqcHgu3gSvThF5c9KhGbeDDmlTSVVNQmXWX0K2d4lS2cwZHH8mCm2mrY
|
||||
+PDqlEkSc7k4qSiqigdS8i80Yk+lDXWsm8CjsiC93qaRM7DnS0WPQR0c16S95oM6G
|
||||
+VklFKUSDAuFjw9aVWA/nahOucjn0w5fVW6lyIlkBslC1ChlaDgJmvhz+Ol3iMsE0
|
||||
+kAmFNu2KKPVrpMWaBID49QwQTDyhetNLaVVFM88iUdA9JDoVMEuP1mm39JqyzHTu
|
||||
+uBrdP4Q=
|
||||
-----END CERTIFICATE-----
|
||||
diff --git a/test/net/fixtures/server.key b/test/net/fixtures/server.key
|
||||
index 7f2380e71e637..6a83d5bcf4a52 100644
|
||||
--- a/test/net/fixtures/server.key
|
||||
+++ b/test/net/fixtures/server.key
|
||||
@@ -1,28 +1,27 @@
|
||||
------BEGIN PRIVATE KEY-----
|
||||
-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-----
|
||||
+-----BEGIN RSA PRIVATE KEY-----
|
||||
+MIIEowIBAAKCAQEAsPnoGUOnrpiSqt4XynxA+HRP7S+BSObI6qJ7fQAVSPtRkqso
|
||||
+tWxQYLEYzNEx5ZSHTGypibVsJylvCfuToDTfMul8b/CZjP2Ob0LdpYrNH6l5hvFE
|
||||
+89FU1nZQF15oVLOpUgA7wGiHuEVawrGfey92UE68mOyUVXGweJIVDdxqdMoPvNNU
|
||||
+l86BU02vlBiESxOuox+dWmuVV7vfYZ79Toh/LUK43YvJh+rhv4nKuF7iHjVjBd9s
|
||||
+B6iDjj70HFldzOQ9r8SRI+9NirupPTkF5AKNe6kUhKJ1luB7S27ZkvB3tSTT3P59
|
||||
+3VVJvnzOjaA1z6Cz+4+eRvcysqhrRgFlwI9TEwIDAQABAoIBAEEYiyDP29vCzx/+
|
||||
+dS3LqnI5BjUuJhXUnc6AWX/PCgVAO+8A+gZRgvct7PtZb0sM6P9ZcLrweomlGezI
|
||||
+FrL0/6xQaa8bBr/ve/a8155OgcjFo6fZEw3Dz7ra5fbSiPmu4/b/kvrg+Br1l77J
|
||||
+aun6uUAs1f5B9wW+vbR7tzbT/mxaUeDiBzKpe15GwcvbJtdIVMa2YErtRjc1/5B2
|
||||
+BGVXyvlJv0SIlcIEMsHgnAFOp1ZgQ08aDzvilLq8XVMOahAhP1O2A3X8hKdXPyrx
|
||||
+IVWE9bS9ptTo+eF6eNl+d7htpKGEZHUxinoQpWEBTv+iOoHsVunkEJ3vjLP3lyI/
|
||||
+fY0NQ1ECgYEA3RBXAjgvIys2gfU3keImF8e/TprLge1I2vbWmV2j6rZCg5r/AS0u
|
||||
+pii5CvJ5/T5vfJPNgPBy8B/yRDs+6PJO1GmnlhOkG9JAIPkv0RBZvR0PMBtbp6nT
|
||||
+Y3yo1lwamBVBfY6rc0sLTzosZh2aGoLzrHNMQFMGaauORzBFpY5lU50CgYEAzPHl
|
||||
+u5DI6Xgep1vr8QvCUuEesCOgJg8Yh1UqVoY/SmQh6MYAv1I9bLGwrb3WW/7kqIoD
|
||||
+fj0aQV5buVZI2loMomtU9KY5SFIsPV+JuUpy7/+VE01ZQM5FdY8wiYCQiVZYju9X
|
||||
+Wz5LxMNoz+gT7pwlLCsC4N+R8aoBk404aF1gum8CgYAJ7VTq7Zj4TFV7Soa/T1eE
|
||||
+k9y8a+kdoYk3BASpCHJ29M5R2KEA7YV9wrBklHTz8VzSTFTbKHEQ5W5csAhoL5Fo
|
||||
+qoHzFFi3Qx7MHESQb9qHyolHEMNx6QdsHUn7rlEnaTTyrXh3ifQtD6C0yTmFXUIS
|
||||
+CW9wKApOrnyKJ9nI0HcuZQKBgQCMtoV6e9VGX4AEfpuHvAAnMYQFgeBiYTkBKltQ
|
||||
+XwozhH63uMMomUmtSG87Sz1TmrXadjAhy8gsG6I0pWaN7QgBuFnzQ/HOkwTm+qKw
|
||||
+AsrZt4zeXNwsH7QXHEJCFnCmqw9QzEoZTrNtHJHpNboBuVnYcoueZEJrP8OnUG3r
|
||||
+UjmopwKBgAqB2KYYMUqAOvYcBnEfLDmyZv9BTVNHbR2lKkMYqv5LlvDaBxVfilE0
|
||||
+2riO4p6BaAdvzXjKeRrGNEKoHNBpOSfYCOM16NjL8hIZB1CaV3WbT5oY+jp7Mzd5
|
||||
+7d56RZOE+ERK2uz/7JX9VSsM/LbH9pJibd4e8mikDS9ntciqOH/3
|
||||
+-----END RSA PRIVATE KEY-----
|
@ -1,31 +0,0 @@
|
||||
From bfa2f72cfa3bfde34049d26dcb24976316074ad7 Mon Sep 17 00:00:00 2001
|
||||
From: Jun Aruga <jaruga@redhat.com>
|
||||
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 <https://bugs.ruby-lang.org/issues/18643>.
|
||||
---
|
||||
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
|
@ -0,0 +1,24 @@
|
||||
From 54c8df06ff9e161012f89d19a4e3aa2e0e37e1b0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
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:
|
@ -0,0 +1,35 @@
|
||||
From b24852058fc87c940252c8a711c60ae2eb298082 Mon Sep 17 00:00:00 2001
|
||||
From: Jun Aruga <jaruga@redhat.com>
|
||||
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
|
||||
```
|
||||
---
|
||||
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
|
@ -0,0 +1,72 @@
|
||||
diff --git a/bundler/spec/install/gemfile/specific_platform_spec.rb b/bundler/spec/install/gemfile/specific_platform_spec.rb
|
||||
index a29446305..e35d8bc16 100644
|
||||
--- a/bundler/spec/install/gemfile/specific_platform_spec.rb
|
||||
+++ b/bundler/spec/install/gemfile/specific_platform_spec.rb
|
||||
@@ -104,40 +104,53 @@
|
||||
L
|
||||
end
|
||||
|
||||
- it "still installs the generic RUBY variant if necessary even when running on a legacy lockfile locked only to RUBY" do
|
||||
- build_repo4 do
|
||||
- build_gem "nokogiri", "1.3.10"
|
||||
- build_gem "nokogiri", "1.3.10" do |s|
|
||||
- s.platform = "arm64-darwin"
|
||||
- s.required_ruby_version = "< #{Gem.ruby_version}"
|
||||
+ context "when running on a legacy lockfile locked only to RUBY" do
|
||||
+ around do |example|
|
||||
+ build_repo4 do
|
||||
+ build_gem "nokogiri", "1.3.10"
|
||||
+ build_gem "nokogiri", "1.3.10" do |s|
|
||||
+ s.platform = "arm64-darwin"
|
||||
+ s.required_ruby_version = "< #{Gem.ruby_version}"
|
||||
+ end
|
||||
+
|
||||
+ build_gem "bundler", "2.1.4"
|
||||
end
|
||||
|
||||
- build_gem "bundler", "2.1.4"
|
||||
- end
|
||||
-
|
||||
- gemfile <<~G
|
||||
+ gemfile <<~G
|
||||
source "#{file_uri_for(gem_repo4)}"
|
||||
+
|
||||
gem "nokogiri"
|
||||
- G
|
||||
+ G
|
||||
|
||||
- lockfile <<-L
|
||||
+ lockfile <<-L
|
||||
GEM
|
||||
remote: #{file_uri_for(gem_repo4)}/
|
||||
specs:
|
||||
nokogiri (1.3.10)
|
||||
+
|
||||
PLATFORMS
|
||||
ruby
|
||||
+
|
||||
DEPENDENCIES
|
||||
nokogiri
|
||||
+
|
||||
RUBY VERSION
|
||||
2.5.3p105
|
||||
+
|
||||
BUNDLED WITH
|
||||
2.1.4
|
||||
- L
|
||||
+ L
|
||||
|
||||
- simulate_platform "arm64-darwin-22" do
|
||||
+ simulate_platform "arm64-darwin-22", &example
|
||||
+ end
|
||||
+
|
||||
+ it "still installs the generic RUBY variant if necessary" do
|
||||
bundle "update --bundler", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s }
|
||||
end
|
||||
+
|
||||
+ it "still installs the generic RUBY variant if necessary, even in frozen mode" do
|
||||
+ bundle "update --bundler", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s, "BUNDLE_FROZEN" => "true" }
|
||||
+ end
|
||||
end
|
||||
|
||||
it "doesn't discard previously installed platform specific gem and fall back to ruby on subsequent bundles" do
|
@ -0,0 +1,54 @@
|
||||
From 891246c3865ed0af7e277ca50c079f466d035f7c Mon Sep 17 00:00:00 2001
|
||||
From: Jarek Prokop <jprokop@redhat.com>
|
||||
Date: Thu, 1 Jun 2023 13:22:24 +0200
|
||||
Subject: [PATCH] Backport "Fix another issue of Bundler not falling back to an
|
||||
installable candidate"
|
||||
|
||||
In this case, when materializing a legacy lockfile using only "ruby"
|
||||
platform, and in frozen mode.
|
||||
|
||||
=====
|
||||
|
||||
Commit adapted from: https://github.com/rubygems/rubygems/pull/6261
|
||||
---
|
||||
bundler/lib/bundler/lazy_specification.rb | 11 +++--
|
||||
.../install/gemfile/specific_platform_spec.rb | 41 ++++++++++++-------
|
||||
2 files changed, 35 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/bundler/lib/bundler/lazy_specification.rb b/bundler/lib/bundler/lazy_specification.rb
|
||||
index e8bee25ab..a65020e6c 100644
|
||||
--- a/bundler/lib/bundler/lazy_specification.rb
|
||||
+++ b/bundler/lib/bundler/lazy_specification.rb
|
||||
@@ -85,7 +85,7 @@ def materialize_for_installation
|
||||
|
||||
installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
|
||||
|
||||
- specification = __materialize__(installable_candidates)
|
||||
+ specification = __materialize__(installable_candidates, :fallback_to_non_installable => false)
|
||||
return specification unless specification.nil?
|
||||
|
||||
if target_platform != platform
|
||||
@@ -98,13 +98,18 @@ def materialize_for_installation
|
||||
__materialize__(candidates)
|
||||
end
|
||||
|
||||
- def __materialize__(candidates)
|
||||
+ # If in frozen mode, we fallback to a non-installable candidate because by
|
||||
+ # doing this we avoid re-resolving and potentially end up changing the
|
||||
+ # lock file, which is not allowed. In that case, we will give a proper error
|
||||
+ # about the mismatch higher up the stack, right before trying to install the
|
||||
+ # bad gem.
|
||||
+ def __materialize__(candidates, fallback_to_non_installable: Bundler.frozen_bundle?)
|
||||
search = candidates.reverse.find do |spec|
|
||||
spec.is_a?(StubSpecification) ||
|
||||
(spec.matches_current_ruby? &&
|
||||
spec.matches_current_rubygems?)
|
||||
end
|
||||
- if search.nil? && Bundler.frozen_bundle?
|
||||
+ if search.nil? && fallback_to_non_installable
|
||||
search = candidates.last
|
||||
else
|
||||
search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
||||
--
|
||||
2.41.0.rc1
|
||||
|
@ -0,0 +1,144 @@
|
||||
From 0985592ad2d815ac461100807f5b2621e5f49b21 Mon Sep 17 00:00:00 2001
|
||||
From: Jarek Prokop <jprokop@redhat.com>
|
||||
Date: Fri, 31 Mar 2023 11:54:07 +0200
|
||||
Subject: [PATCH 1/2] Provide fix for bundler Gemfile resolving regression.
|
||||
|
||||
Instead of resolving to correct Ruby platform, it preferred the
|
||||
archful package, that is actually incompatible.
|
||||
|
||||
See https://github.com/sclorg/s2i-ruby-container/issues/469
|
||||
for an example of the bug.
|
||||
|
||||
Commit taken from:
|
||||
<https://github.com/rubygems/rubygems/pull/6225>
|
||||
and adapted:
|
||||
<https://github.com/rubygems/rubygems/commit/7b64c64262a7a980c0eb23b96ea56cf72ea06e89>
|
||||
for the PR#6225.
|
||||
---
|
||||
bundler/lib/bundler/index.rb | 5 ++
|
||||
bundler/lib/bundler/lazy_specification.rb | 64 ++++++++++-------------
|
||||
2 files changed, 34 insertions(+), 35 deletions(-)
|
||||
|
||||
diff --git a/bundler/lib/bundler/index.rb b/bundler/lib/bundler/index.rb
|
||||
index ed16c90a3..903e220d5 100644
|
||||
--- a/bundler/lib/bundler/index.rb
|
||||
+++ b/bundler/lib/bundler/index.rb
|
||||
@@ -71,6 +71,7 @@ def local_search(query)
|
||||
when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification then search_by_spec(query)
|
||||
when String then specs_by_name(query)
|
||||
when Gem::Dependency then search_by_dependency(query)
|
||||
+ when Array then search_by_name_and_version(*query)
|
||||
else
|
||||
raise "You can't search for a #{query.inspect}."
|
||||
end
|
||||
@@ -173,6 +174,10 @@ def search_by_dependency(dependency)
|
||||
end
|
||||
end
|
||||
|
||||
+ def search_by_name_and_version(name, version)
|
||||
+ specs_by_name(name).select { |spec| spec.version == version }
|
||||
+ end
|
||||
+
|
||||
EMPTY_SEARCH = [].freeze
|
||||
|
||||
def search_by_spec(spec)
|
||||
diff --git a/bundler/lib/bundler/lazy_specification.rb b/bundler/lib/bundler/lazy_specification.rb
|
||||
index 949e8264b..e8bee25ab 100644
|
||||
--- a/bundler/lib/bundler/lazy_specification.rb
|
||||
+++ b/bundler/lib/bundler/lazy_specification.rb
|
||||
@@ -13,7 +13,6 @@ def initialize(name, version, platform, source = nil)
|
||||
@dependencies = []
|
||||
@platform = platform || Gem::Platform::RUBY
|
||||
@source = source
|
||||
- @specification = nil
|
||||
end
|
||||
|
||||
def full_name
|
||||
@@ -76,37 +75,41 @@ def to_lock
|
||||
def materialize_for_installation
|
||||
source.local!
|
||||
|
||||
- candidates = if source.is_a?(Source::Path) || !ruby_platform_materializes_to_ruby_platform?
|
||||
- target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : local_platform
|
||||
+ matching_specs = source.specs.search(use_exact_resolved_specifications? ? self : [name, version])
|
||||
+ return self if matching_specs.empty?
|
||||
|
||||
- GemHelpers.select_best_platform_match(source.specs.search(Dependency.new(name, version)), target_platform)
|
||||
- else
|
||||
- source.specs.search(self)
|
||||
- end
|
||||
+ candidates = if use_exact_resolved_specifications?
|
||||
+ matching_specs
|
||||
+ else
|
||||
+ target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : local_platform
|
||||
+
|
||||
+ installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
|
||||
+
|
||||
+ specification = __materialize__(installable_candidates)
|
||||
+ return specification unless specification.nil?
|
||||
|
||||
- return self if candidates.empty?
|
||||
+ if target_platform != platform
|
||||
+ installable_candidates = GemHelpers.select_best_platform_match(matching_specs, platform)
|
||||
+ end
|
||||
+
|
||||
+ installable_candidates
|
||||
+ end
|
||||
|
||||
__materialize__(candidates)
|
||||
end
|
||||
|
||||
def __materialize__(candidates)
|
||||
- @specification = begin
|
||||
- search = candidates.reverse.find do |spec|
|
||||
- spec.is_a?(StubSpecification) ||
|
||||
- (spec.matches_current_ruby? &&
|
||||
- spec.matches_current_rubygems?)
|
||||
- end
|
||||
- if search.nil? && Bundler.frozen_bundle?
|
||||
- search = candidates.last
|
||||
- else
|
||||
- search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
||||
- end
|
||||
- search
|
||||
+ search = candidates.reverse.find do |spec|
|
||||
+ spec.is_a?(StubSpecification) ||
|
||||
+ (spec.matches_current_ruby? &&
|
||||
+ spec.matches_current_rubygems?)
|
||||
end
|
||||
- end
|
||||
-
|
||||
- def respond_to?(*args)
|
||||
- super || @specification ? @specification.respond_to?(*args) : nil
|
||||
+ if search.nil? && Bundler.frozen_bundle?
|
||||
+ search = candidates.last
|
||||
+ else
|
||||
+ search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
||||
+ end
|
||||
+ search
|
||||
end
|
||||
|
||||
def to_s
|
||||
@@ -127,17 +130,8 @@ def git_version
|
||||
end
|
||||
|
||||
private
|
||||
-
|
||||
- def to_ary
|
||||
- nil
|
||||
- end
|
||||
-
|
||||
- def method_missing(method, *args, &blk)
|
||||
- raise "LazySpecification has not been materialized yet (calling :#{method} #{args.inspect})" unless @specification
|
||||
-
|
||||
- return super unless respond_to?(method)
|
||||
-
|
||||
- @specification.send(method, *args, &blk)
|
||||
+ def use_exact_resolved_specifications?
|
||||
+ @use_exact_resolved_specifications ||= !source.is_a?(Source::Path) && ruby_platform_materializes_to_ruby_platform?
|
||||
end
|
||||
|
||||
#
|
||||
--
|
||||
2.40.0
|
||||
|
@ -0,0 +1,60 @@
|
||||
From cb3d287a91e9b6762e47635137d6024fe39e117d Mon Sep 17 00:00:00 2001
|
||||
From: Jarek Prokop <jprokop@redhat.com>
|
||||
Date: Fri, 31 Mar 2023 12:06:21 +0200
|
||||
Subject: [PATCH] Tests from bundler's PR#6225.
|
||||
|
||||
See <https://github.com/rubygems/rubygems/pull/6225>.
|
||||
---
|
||||
.../install/gemfile/specific_platform_spec.rb | 36 +++++++++++++++++++
|
||||
1 file changed, 36 insertions(+)
|
||||
|
||||
diff --git a/bundler/spec/install/gemfile/specific_platform_spec.rb b/bundler/spec/install/gemfile/specific_platform_spec.rb
|
||||
index 98efec396..a29446305 100644
|
||||
--- a/bundler/spec/install/gemfile/specific_platform_spec.rb
|
||||
+++ b/bundler/spec/install/gemfile/specific_platform_spec.rb
|
||||
@@ -104,6 +104,42 @@
|
||||
L
|
||||
end
|
||||
|
||||
+ it "still installs the generic RUBY variant if necessary even when running on a legacy lockfile locked only to RUBY" do
|
||||
+ build_repo4 do
|
||||
+ build_gem "nokogiri", "1.3.10"
|
||||
+ build_gem "nokogiri", "1.3.10" do |s|
|
||||
+ s.platform = "arm64-darwin"
|
||||
+ s.required_ruby_version = "< #{Gem.ruby_version}"
|
||||
+ end
|
||||
+
|
||||
+ build_gem "bundler", "2.1.4"
|
||||
+ end
|
||||
+
|
||||
+ gemfile <<~G
|
||||
+ source "#{file_uri_for(gem_repo4)}"
|
||||
+ gem "nokogiri"
|
||||
+ G
|
||||
+
|
||||
+ lockfile <<-L
|
||||
+ GEM
|
||||
+ remote: #{file_uri_for(gem_repo4)}/
|
||||
+ specs:
|
||||
+ nokogiri (1.3.10)
|
||||
+ PLATFORMS
|
||||
+ ruby
|
||||
+ DEPENDENCIES
|
||||
+ nokogiri
|
||||
+ RUBY VERSION
|
||||
+ 2.5.3p105
|
||||
+ BUNDLED WITH
|
||||
+ 2.1.4
|
||||
+ L
|
||||
+
|
||||
+ simulate_platform "arm64-darwin-22" do
|
||||
+ bundle "update --bundler", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s }
|
||||
+ end
|
||||
+ end
|
||||
+
|
||||
it "doesn't discard previously installed platform specific gem and fall back to ruby on subsequent bundles" do
|
||||
build_repo2 do
|
||||
build_gem("libv8", "8.4.255.0")
|
||||
--
|
||||
2.40.0
|
||||
|
@ -0,0 +1,34 @@
|
||||
require 'openssl'
|
||||
|
||||
# Run openssl tests in OpenSSL FIPS. See the link below for how to test.
|
||||
# https://github.com/ruby/openssl/blob/master/.github/workflows/test.yml
|
||||
# - step name: test on fips module
|
||||
|
||||
# Listing the testing files by an array explicitly rather than the `Dir.glob`
|
||||
# to prevent the test files from not loading unintentionally.
|
||||
TEST_FILES = %w[
|
||||
test/openssl/test_fips.rb
|
||||
test/openssl/test_pkey.rb
|
||||
].freeze
|
||||
|
||||
if ARGV.empty?
|
||||
puts 'ERROR: Argument base_dir required.'
|
||||
puts "Usage: #{__FILE__} base_dir [options]"
|
||||
exit false
|
||||
end
|
||||
BASE_DIR = ARGV[0]
|
||||
abs_test_files = TEST_FILES.map { |file| File.join(BASE_DIR, file) }
|
||||
|
||||
# Set Fedora/RHEL downstream OpenSSL downstream environment variable to enable
|
||||
# FIPS module in non-FIPS OS environment. It is available in Fedora 38 or later
|
||||
# versions.
|
||||
# https://src.fedoraproject.org/rpms/openssl/blob/rawhide/f/0009-Add-Kernel-FIPS-mode-flag-support.patch
|
||||
ENV['OPENSSL_FORCE_FIPS_MODE'] = '1'
|
||||
# A flag to tell the tests the current environment is FIPS enabled.
|
||||
# https://github.com/ruby/openssl/blob/master/test/openssl/test_fips.rb
|
||||
ENV['TEST_RUBY_OPENSSL_FIPS_ENABLED'] = 'true'
|
||||
|
||||
abs_test_files.each do |file|
|
||||
puts "INFO: Loading #{file}."
|
||||
require file
|
||||
end
|
Loading…
Reference in new issue