[DRE-maint] Bug#969130: libruby2.7: ENOENT error crash some ruby scripts

Antoni Villalonga antoni at friki.cat
Fri Aug 28 01:23:37 BST 2020


Package: libruby2.7
Version: 2.7.1-3
Severity: important
X-Debbugs-Cc: antoni at friki.cat

Dear Maintainer,

Some ruby scripts fail to run from a removed directory.

% cat /tmp/test.rb
#!/usr/bin/ruby
require 'unicode'
% mkdir /tmp/foo
% cd /tmp/foo
% rmdir /tmp/foo
% /tmp/test.rb
Traceback (most recent call last):
        5: from /tmp/test.rb:2:in `<main>'
        4: from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
        3: from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
        2: from /usr/lib/ruby/vendor_ruby/unicode.rb:2:in `<top (required)>'
        1: from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
/usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- unicode/2.7/unicode_native (LoadError)
        16: from /tmp/test.rb:2:in `<main>'
        15: from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
        14: from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
        13: from /usr/lib/ruby/vendor_ruby/unicode.rb:2:in `<top (required)>'
        12: from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:156:in `require'
        11: from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:161:in `rescue in require'
        10: from /usr/lib/ruby/2.7.0/rubygems.rb:204:in `try_activate'
         9: from /usr/lib/ruby/2.7.0/rubygems/specification.rb:996:in `find_by_path'
         8: from /usr/lib/ruby/2.7.0/rubygems/specification.rb:996:in `find'
         7: from /usr/lib/ruby/2.7.0/rubygems/specification.rb:996:in `each'
         6: from /usr/lib/ruby/2.7.0/rubygems/specification.rb:997:in `block in find_by_path'
         5: from /usr/lib/ruby/2.7.0/rubygems/bundler_version_finder.rb:39:in `compatible?'
         4: from /usr/lib/ruby/2.7.0/rubygems/bundler_version_finder.rb:7:in `bundler_version'
         3: from /usr/lib/ruby/2.7.0/rubygems/bundler_version_finder.rb:22:in `bundler_version_with_reason'
         2: from /usr/lib/ruby/2.7.0/rubygems/bundler_version_finder.rb:73:in `lockfile_version'
         1: from /usr/lib/ruby/2.7.0/rubygems/bundler_version_finder.rb:85:in `lockfile_contents'
/usr/lib/ruby/2.7.0/rubygems/bundler_version_finder.rb:85:in `pwd': No such file or directory - getcwd (Errno::ENOENT)

If apt-listchanges package is installed apt crashes that way. That's why I've
switched to "important".

Following inline patch fixes the issue.

---- 
From: Antoni Villalonga <antoni at friki.cat>
Date: Fri, 28 Aug 2020 02:09:42 +0200
Subject: Rescue getcwd ENOENT error
Forwarded: not-needed
Upstream-Author: David Rodríguez

Rescue ENOENT error allowing run ruby scripts when cwd does not exists.
Cherry-pick from upstream 96064e6f1ce100a37680dc8f9509f06b3350e9c8

--- a/lib/rubygems/bundler_version_finder.rb
+++ b/lib/rubygems/bundler_version_finder.rb
@@ -82,12 +82,19 @@
   def self.lockfile_contents
     gemfile = ENV["BUNDLE_GEMFILE"]
     gemfile = nil if gemfile && gemfile.empty?
-    Gem::Util.traverse_parents Dir.pwd do |directory|
-      next unless gemfile = Gem::GEM_DEP_FILES.find { |f| File.file?(f.tap(&Gem::UNTAINT)) }

-      gemfile = File.join directory, gemfile
-      break
-    end unless gemfile
+    unless gemfile
+      begin
+        Gem::Util.traverse_parents(Dir.pwd) do |directory|
+          next unless gemfile = Gem::GEM_DEP_FILES.find { |f| File.file?(f.tap(&Gem::UNTAINT)) }
+
+          gemfile = File.join directory, gemfile
+          break
+        end
+      rescue Errno::ENOENT
+        return
+      end
+    end

     return unless gemfile
---- 

Regards,


More information about the Pkg-ruby-extras-maintainers mailing list