diff --git a/lib/rubygems/package.rb b/lib/rubygems/package.rb index 387e40ffd753bb..72a179da376d87 100644 --- a/lib/rubygems/package.rb +++ b/lib/rubygems/package.rb @@ -454,7 +454,7 @@ def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc: if entry.file? File.open(destination, "wb") {|out| copy_stream(entry, out) } - FileUtils.chmod file_mode(entry.header.mode), destination + FileUtils.chmod file_mode(entry.header.mode) & ~File.umask, destination end verbose destination diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index d4c307978e7c5d..244b7749a5ead1 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb @@ -133,7 +133,7 @@ def test_self_install_permissions_umask_0 def test_self_install_permissions_umask_077 umask = File.umask(0o077) - assert_self_install_permissions + assert_self_install_permissions(data_mode: 0o600) ensure File.umask(umask) end @@ -151,12 +151,12 @@ def test_self_install_permissions_with_format_executable_and_non_standard_ruby_i Gem::Installer.exec_format = nil end - def assert_self_install_permissions(format_executable: false) + def assert_self_install_permissions(format_executable: false, data_mode: 0o640) mask = Gem.win_platform? ? 0o700 : 0o777 options = { dir_mode: 0o500, prog_mode: Gem.win_platform? ? 0o410 : 0o510, - data_mode: 0o640, + data_mode: data_mode, wrappers: true, format_executable: format_executable, }