Backport #9104 ยป rubygems.2.0.14.ruby.2.0.0.patch
NEWS (working copy) | ||
---|---|---|
XML declaration is used for XML document encoding.
|
||
* RubyGems
|
||
* Updated to 2.0.13.
|
||
* Updated to 2.0.14.
|
||
See http://rubygems.rubyforge.org/rubygems-update/History_txt.html#label-2.0.13+%2F+2013-10-24
|
||
See http://rubygems.rubyforge.org/rubygems-update/History_txt.html#label-2.0.14+%2F+2013-11-12
|
||
for release notes.
|
||
* Updated to 2.0.10. This fixes CVE_2013-4363:
|
lib/rubygems/dependency_installer.rb (working copy) | ||
---|---|---|
if gem_name =~ /\.gem$/ and File.file? gem_name then
|
||
src = Gem::Source::SpecificFile.new(gem_name)
|
||
set.add src.spec, src
|
||
elsif gem_name =~ /\.gem$/ then
|
||
Dir[gem_name].each do |name|
|
||
begin
|
||
src = Gem::Source::SpecificFile.new name
|
||
set.add src.spec, src
|
||
rescue Gem::Package::FormatError
|
||
end
|
||
end
|
||
else
|
||
local = Gem::Source::Local.new
|
||
lib/rubygems/specification.rb (working copy) | ||
---|---|---|
# Removes +spec+ from the known specs.
|
||
def self.remove_spec spec
|
||
# TODO: beat on the tests
|
||
raise "wtf: #{spec.full_name} not in #{all_names.inspect}" unless
|
||
_all.include? spec
|
||
_all.delete spec
|
||
end
|
||
lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem (working copy) | ||
---|---|---|
-----BEGIN CERTIFICATE-----
|
||
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
|
||
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
||
d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
|
||
ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
|
||
MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
|
||
LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
|
||
RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
|
||
+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
|
||
PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
|
||
xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
|
||
Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
|
||
hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
|
||
EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
|
||
MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
|
||
FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
|
||
nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
|
||
eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
|
||
hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
|
||
Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
||
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
|
||
+OkuE6N36B9K
|
||
-----END CERTIFICATE-----
|
lib/rubygems.rb (working copy) | ||
---|---|---|
require 'rbconfig'
|
||
module Gem
|
||
VERSION = '2.0.13'
|
||
VERSION = '2.0.14'
|
||
end
|
||
# Must be first since it unloads the prelude from 1.9.2
|
test/rubygems/test_gem_dependency_installer.rb (working copy) | ||
---|---|---|
assert_equal Gem::Source.new(@gem_repo), s.source
|
||
end
|
||
def test_find_spec_by_name_and_version_wildcard
|
||
util_gem 'a', 1
|
||
FileUtils.mv 'gems/a-1.gem', @tempdir
|
||
FileUtils.touch 'rdoc.gem'
|
||
inst = Gem::DependencyInstaller.new
|
||
available = inst.find_spec_by_name_and_version('*.gem')
|
||
assert_equal %w[a-1], available.all_specs.map { |spec| spec.full_name }
|
||
end
|
||
def test_find_spec_by_name_and_version_wildcard_bad_gem
|
||
FileUtils.touch 'rdoc.gem'
|
||
inst = Gem::DependencyInstaller.new
|
||
assert_raises Gem::Package::FormatError do
|
||
inst.find_spec_by_name_and_version '*.gem'
|
||
end
|
||
end
|
||
def test_find_spec_by_name_and_version_bad_gem
|
||
FileUtils.touch 'rdoc.gem'
|
||
test/rubygems/test_gem_remote_fetcher.rb (working copy) | ||
---|---|---|
PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, '0.4.2')
|
||
# don't let 1.8 and 1.9 autotest collide
|
||
RUBY_VERSION =~ /(\d+)\.(\d+)\.(\d+)/
|
||
# don't let parallel runners collide
|
||
PROXY_PORT = process_based_port + 100 + $1.to_i * 100 + $2.to_i * 10 + $3.to_i
|
||
SERVER_PORT = process_based_port + 200 + $1.to_i * 100 + $2.to_i * 10 + $3.to_i
|
||
DIR = File.expand_path(File.dirname(__FILE__))
|
||
def setup
|
||
... | ... | |
self.class.enable_yaml = true
|
||
self.class.enable_zip = false
|
||
base_server_uri = "http://localhost:#{SERVER_PORT}"
|
||
@proxy_uri = "http://localhost:#{PROXY_PORT}"
|
||
base_server_uri = "http://localhost:#{self.class.normal_server_port}"
|
||
@proxy_uri = "http://localhost:#{self.class.proxy_server_port}"
|
||
@server_uri = base_server_uri + "/yaml"
|
||
@server_z_uri = base_server_uri + "/yaml.Z"
|
||
... | ... | |
attr_accessor :enable_zip, :enable_yaml
|
||
def start_servers
|
||
@normal_server ||= start_server(SERVER_PORT, SERVER_DATA)
|
||
@proxy_server ||= start_server(PROXY_PORT, PROXY_DATA)
|
||
@normal_server ||= start_server(SERVER_DATA)
|
||
@proxy_server ||= start_server(PROXY_DATA)
|
||
@enable_yaml = true
|
||
@enable_zip = false
|
||
end
|
||
def normal_server_port
|
||
@normal_server[:server].config[:Port]
|
||
end
|
||
def proxy_server_port
|
||
@proxy_server[:server].config[:Port]
|
||
end
|
||
DIR = File.expand_path(File.dirname(__FILE__))
|
||
DH_PARAM = OpenSSL::PKey::DH.new(128)
|
||
... | ... | |
private
|
||
def start_server(port, data)
|
||
Thread.new do
|
||
def start_server(data)
|
||
null_logger = NilLog.new
|
||
s = WEBrick::HTTPServer.new(
|
||
:Port => 0,
|
||
:DocumentRoot => nil,
|
||
:Logger => null_logger,
|
||
:AccessLog => null_logger
|
||
)
|
||
s.mount_proc("/kill") { |req, res| s.shutdown }
|
||
s.mount_proc("/yaml") { |req, res|
|
||
if @enable_yaml
|
||
res.body = data
|
||
res['Content-Type'] = 'text/plain'
|
||
res['content-length'] = data.size
|
||
else
|
||
res.status = "404"
|
||
res.body = "<h1>NOT FOUND</h1>"
|
||
res['Content-Type'] = 'text/html'
|
||
end
|
||
}
|
||
s.mount_proc("/yaml.Z") { |req, res|
|
||
if @enable_zip
|
||
res.body = Zlib::Deflate.deflate(data)
|
||
res['Content-Type'] = 'text/plain'
|
||
else
|
||
res.status = "404"
|
||
res.body = "<h1>NOT FOUND</h1>"
|
||
res['Content-Type'] = 'text/html'
|
||
end
|
||
}
|
||
th = Thread.new do
|
||
begin
|
||
null_logger = NilLog.new
|
||
s = WEBrick::HTTPServer.new(
|
||
:Port => port,
|
||
:DocumentRoot => nil,
|
||
:Logger => null_logger,
|
||
:AccessLog => null_logger
|
||
)
|
||
s.mount_proc("/kill") { |req, res| s.shutdown }
|
||
s.mount_proc("/yaml") { |req, res|
|
||
if @enable_yaml
|
||
res.body = data
|
||
res['Content-Type'] = 'text/plain'
|
||
res['content-length'] = data.size
|
||
else
|
||
res.status = "404"
|
||
res.body = "<h1>NOT FOUND</h1>"
|
||
res['Content-Type'] = 'text/html'
|
||
end
|
||
}
|
||
s.mount_proc("/yaml.Z") { |req, res|
|
||
if @enable_zip
|
||
res.body = Zlib::Deflate.deflate(data)
|
||
res['Content-Type'] = 'text/plain'
|
||
else
|
||
res.status = "404"
|
||
res.body = "<h1>NOT FOUND</h1>"
|
||
res['Content-Type'] = 'text/html'
|
||
end
|
||
}
|
||
s.start
|
||
rescue Exception => ex
|
||
abort ex.message
|
||
puts "ERROR during server thread: #{ex.message}"
|
||
abort "ERROR during server thread: #{ex.message}"
|
||
end
|
||
end
|
||
sleep 0.2 # Give the servers time to startup
|
||
th[:server] = s
|
||
th
|
||
end
|
||
def cert(filename)
|
test/rubygems/test_gem_specification.rb (working copy) | ||
---|---|---|
assert_equal %w[a], Gem::Specification.outdated
|
||
end
|
||
def test_self_remove_spec
|
||
assert_includes Gem::Specification.all_names, 'a-1'
|
||
Gem::Specification.remove_spec @a1
|
||
refute_includes Gem::Specification.all_names, 'a-1'
|
||
end
|
||
def test_self_remove_spec_removed
|
||
open @a1.spec_file, 'w' do |io|
|
||
io.write @a1.to_ruby
|
||
end
|
||
Gem::Specification.reset
|
||
FileUtils.rm @a1.spec_file # bug #698
|
||
Gem::Specification.remove_spec @a1
|
||
refute_includes Gem::Specification.all_names, 'a-1'
|
||
end
|
||
DATA_PATH = File.expand_path "../data", __FILE__
|
||
def test_handles_private_null_type
|