* lib/rubygems/installer.rb: Untaint string when checking output

for $SAFE=1

	* lib/rubygems/specification.rb:  Keep previously loaded specs as
	  active.  This prevents double loading when refreshing the gem list.
	* test/rubygems/test_gem.rb:  Test for above

	* lib/rubygems.rb:  Bump version to 2.0.0.rc.2


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38855 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
drbrain 2013-01-17 00:37:28 +00:00
Родитель 1be8ac57ab
Коммит 219e156687
5 изменённых файлов: 40 добавлений и 1 удалений

Просмотреть файл

@ -1,3 +1,14 @@
Thu Jan 17 09:30:21 2013 Eric Hodel <drbrain@segment7.net>
* lib/rubygems/installer.rb: Untaint string when checking output
for $SAFE=1
* lib/rubygems/specification.rb: Keep previously loaded specs as
active. This prevents double loading when refreshing the gem list.
* test/rubygems/test_gem.rb: Test for above
* lib/rubygems.rb: Bump version to 2.0.0.rc.2
Thu Jan 17 09:08:37 2013 Eric Hodel <drbrain@segment7.net>
* doc/syntax/control_expressions.rdoc: Added ? : ternary if

Просмотреть файл

@ -98,7 +98,7 @@
require 'rbconfig'
module Gem
VERSION = '2.0.0.preview3.1'
VERSION = '2.0.0.rc.2'
end
# Must be first since it unloads the prelude from 1.9.2

Просмотреть файл

@ -489,6 +489,7 @@ class Gem::Installer
def ensure_loadable_spec
ruby = spec.to_ruby_for_cache
ruby.untaint
begin
eval ruby

Просмотреть файл

@ -656,6 +656,12 @@ class Gem::Specification
@@all = specs.values
# After a reset, make sure already loaded specs
# are still marked as activated.
specs = {}
Gem.loaded_specs.each_value{|s| specs[s] = true}
@@all.each{|s| s.activated = true if specs[s]}
_resort!
end
@@all

Просмотреть файл

@ -959,6 +959,27 @@ class TestGem < Gem::TestCase
assert_includes Gem::Specification.all_names, @a1.full_name
end
def test_self_refresh_keeps_loaded_specs_activated
util_make_gems
a1_spec = @a1.spec_file
moved_path = File.join @tempdir, File.basename(a1_spec)
FileUtils.mv a1_spec, moved_path
Gem.refresh
s = Gem::Specification.first
s.activate
Gem.refresh
Gem::Specification.each{|spec| assert spec.activated? if spec == s}
Gem.loaded_specs.delete(s)
Gem.refresh
end
def test_self_ruby_escaping_spaces_in_path
orig_ruby = Gem.ruby
orig_bindir = Gem::ConfigMap[:bindir]