diff options
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/patches/ruby-symlinkfix.patch | 53 | ||||
-rw-r--r-- | gnu/packages/ruby.scm | 5 |
3 files changed, 57 insertions, 2 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index 9308c38758..7556fa76e8 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -723,6 +723,7 @@ dist_patch_DATA = \ gnu/packages/patches/readline-link-ncurses.patch \ gnu/packages/patches/ripperx-missing-file.patch \ gnu/packages/patches/rsem-makefile.patch \ + gnu/packages/patches/ruby-symlinkfix.patch \ gnu/packages/patches/sed-hurd-path-max.patch \ gnu/packages/patches/scheme48-tests.patch \ gnu/packages/patches/scotch-test-threading.patch \ diff --git a/gnu/packages/patches/ruby-symlinkfix.patch b/gnu/packages/patches/ruby-symlinkfix.patch new file mode 100644 index 0000000000..16beecc97a --- /dev/null +++ b/gnu/packages/patches/ruby-symlinkfix.patch @@ -0,0 +1,53 @@ +Fix symlinks to '..' to fix rubygems improperly expanding symlinked +paths. Without this fix, some gems fail to install. This patch is applied in +rubygems 2.5.2, but ruby version 2.3.1 bundles an older version of rubygems +(2.5.1). + +--- a/lib/rubygems/package.rb ++++ b/lib/rubygems/package.rb +@@ -383,7 +383,7 @@ def extract_tar_gz io, destination_dir, pattern = "*" # :nodoc: + FileUtils.chmod entry.header.mode, destination + end if entry.file? + +- File.symlink(install_location(entry.header.linkname, destination_dir), destination) if entry.symlink? ++ File.symlink(entry.header.linkname, destination) if entry.symlink? + + verbose destination + end +diff --git a/test/rubygems/test_gem_package.rb b/test/rubygems/test_gem_package.rb +index 7848bc2..f287bd3 100644 +--- a/test/rubygems/test_gem_package.rb ++++ b/test/rubygems/test_gem_package.rb +@@ -428,19 +428,25 @@ def test_extract_tar_gz_absolute + "#{@destination} is not allowed", e.message) + end + +- def test_extract_tar_gz_symlink_absolute ++ def test_extract_tar_gz_symlink_relative_path ++ skip 'symlink not supported' if Gem.win_platform? ++ + package = Gem::Package.new @gem + + tgz_io = util_tar_gz do |tar| +- tar.add_symlink 'code.rb', '/absolute.rb', 0644 ++ tar.add_file 'relative.rb', 0644 do |io| io.write 'hi' end ++ tar.mkdir 'lib', 0755 ++ tar.add_symlink 'lib/foo.rb', '../relative.rb', 0644 + end + +- e = assert_raises Gem::Package::PathError do +- package.extract_tar_gz tgz_io, @destination +- end ++ package.extract_tar_gz tgz_io, @destination + +- assert_equal("installing into parent path /absolute.rb of " + +- "#{@destination} is not allowed", e.message) ++ extracted = File.join @destination, 'lib/foo.rb' ++ assert_path_exists extracted ++ assert_equal '../relative.rb', ++ File.readlink(extracted) ++ assert_equal 'hi', ++ File.read(extracted) + end + + def test_extract_tar_gz_directory diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm index bafa7e3181..b8a6d01811 100644 --- a/gnu/packages/ruby.scm +++ b/gnu/packages/ruby.scm @@ -46,7 +46,7 @@ (define-public ruby (package (name "ruby") - (version "2.3.0") + (version "2.3.1") (source (origin (method url-fetch) @@ -55,8 +55,9 @@ "/ruby-" version ".tar.xz")) (sha256 (base32 - "15s0dsb5ynf3d2w5gzawnszq5594fqvapv2y7a0qw16przq5l4kh")) + "0f3395q7pd2hrl2gv26bib80038sjawxgmhl9zn22fjs9m9va9b7")) (modules '((guix build utils))) + (patches (search-patches "ruby-symlinkfix.patch")) (snippet `(begin ;; Remove bundled libffi (delete-file-recursively |