Project

General

Profile

Actions

Bug #18355

closed

require("pathname") within rack application chnages behaviors of Pathname methods, such as absolute?(), when there are two versions of 'pathname' gem installed.

Added by ume-san (Toshi Umehara) over 2 years ago. Updated about 1 year ago.

Status:
Feedback
Target version:
-
ruby -v:
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]
[ruby-core:106194]

Description

Environment

Ruby 3.0.2 is installed on Fedora 34 from source.
'gem update' is conducted, and there are two versions of 'pathname' gems (0.2.0, default: 0.1.0) installed as follows.

> uname -a
Linux localhost.localdomain 5.14.18-200.fc34.x86_64 #1 SMP Fri Nov 12 16:48:10 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

> ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]

> gem update --system
> gem update

> gem list
...
pathname (0.2.0, default: 0.1.0)
...

Code

The following files, Gemfile and config.ru, are placed in the same directory.

# Gemfile

source 'https://rubygems.org/'
gem 'rack'
gem 'webrick'
# config.ru

class Application
  def call(env)
    status  = 200
    headers = { "Content-Type" => "text/html" }
    path = Dir.pwd()

    pathname1 = Pathname.new(path)

    require("pathname")
    pathname2 = Pathname.new(path)

    body    = ["#{pathname1.absolute?} #{pathname2.absolute?}"]

    [status, headers, body]
  end
end

run Application.new

Command

Web server starts using the following commands.

bundle config set --local path 'vendor/bundle'
bundle install
bundle exec rackup -s webrick
  • Output on the console
[2021-11-21 09:44:13] INFO  WEBrick 1.7.0
[2021-11-21 09:44:13] INFO  ruby 3.0.2 (2021-07-07) [x86_64-linux]
[2021-11-21 09:44:13] INFO  WEBrick::HTTPServer#start: pid=2770 port=9292

Expected Result

Accessing localhost:9292 using a web browser , 'true true' is an expected result on the browser, because pathname1 and pathanme2 are generated from the same absolute path in the above code.

true true

Actual Result

Accessing localhost:9292 shows the following messages on the browser and the console. After 'require("pathname")', Pathname.absolute?() retuns false, even if represents an absolute path.

  • On the browser
true false
  • On the console
/home/toshihiro/Ruby3/lib/ruby/3.0.0/pathname.rb:20: warning: already initialized constant Pathname::TO_PATH
/home/toshihiro/Ruby3/lib/ruby/gems/3.0.0/gems/pathname-0.2.0/lib/pathname.rb:20: warning: previous definition of TO_PATH was here
/home/toshihiro/Ruby3/lib/ruby/3.0.0/pathname.rb:22: warning: already initialized constant Pathname::SAME_PATHS
/home/toshihiro/Ruby3/lib/ruby/gems/3.0.0/gems/pathname-0.2.0/lib/pathname.rb:22: warning: previous definition of SAME_PATHS was here
/home/toshihiro/Ruby3/lib/ruby/3.0.0/pathname.rb:34: warning: already initialized constant Pathname::SEPARATOR_LIST
/home/toshihiro/Ruby3/lib/ruby/gems/3.0.0/gems/pathname-0.2.0/lib/pathname.rb:34: warning: previous definition of SEPARATOR_LIST was here
/home/toshihiro/Ruby3/lib/ruby/3.0.0/pathname.rb:35: warning: already initialized constant Pathname::SEPARATOR_PAT
/home/toshihiro/Ruby3/lib/ruby/gems/3.0.0/gems/pathname-0.2.0/lib/pathname.rb:35: warning: previous definition of SEPARATOR_PAT was here
/home/toshihiro/Ruby3/lib/ruby/3.0.0/pathname.rb:41: warning: already initialized constant Pathname::ABSOLUTE_PATH
/home/toshihiro/Ruby3/lib/ruby/gems/3.0.0/gems/pathname-0.2.0/lib/pathname.rb:41: warning: previous definition of ABSOLUTE_PATH was here
127.0.0.1 - - [21/Nov/2021:09:44:20 +0900] "GET / HTTP/1.1" 200 10 0.0339

Segmentation fault

Moreover, press Ctrl-c to stop the Rack application, the application causes a segmentation fault.

The segmentation fault message is attached.

Notes

Uninstalling version 0.2.0 of pathname gem solves the problem above. Therefore, I guess having two versions of pathname gems causes this behavior.

gem uninstall pathname --version=0.2.0
  • Start the Rack application again
bundle exec rackup -s webrick
  • Output on the browser

The expected output is obtained on the browser, without warning messages on the console.

true true

Files

segmentation_fault.txt (51.1 KB) segmentation_fault.txt segmentation fault message ume-san (Toshi Umehara), 11/21/2021 12:53 AM

Updated by hsbt (Hiroshi SHIBATA) over 2 years ago

  • Status changed from Open to Assigned
  • Assignee set to hsbt (Hiroshi SHIBATA)

Updated by hsbt (Hiroshi SHIBATA) about 1 year ago

  • Status changed from Assigned to Feedback

Can you try it with the latest version of RubyGems/Bundler?

You can do it with:

$ gem update --system
Actions

Also available in: Atom PDF

Like0
Like0Like0