* [ruby-core:106194] [Ruby master Bug#18355] require("pathname") within rack application chnages behaviors of Pathname methods, such as absolute?(), when there are two versions of 'pathname' gem installed.
@ 2021-11-21 1:06 ume-san (Toshi Umehara)
2021-11-30 8:01 ` [ruby-core:106335] " hsbt (Hiroshi SHIBATA)
2023-01-25 8:49 ` [ruby-core:112025] " hsbt (Hiroshi SHIBATA) via ruby-core
0 siblings, 2 replies; 3+ messages in thread
From: ume-san (Toshi Umehara) @ 2021-11-21 1:06 UTC (permalink / raw)
To: ruby-core
Issue #18355 has been reported by ume-san (Toshi Umehara).
----------------------------------------
Bug #18355: require("pathname") within rack application chnages behaviors of Pathname methods, such as absolute?(), when there are two versions of 'pathname' gem installed.
https://bugs.ruby-lang.org/issues/18355
* Author: ume-san (Toshi Umehara)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
## 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)
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 3+ messages in thread
* [ruby-core:106335] [Ruby master Bug#18355] require("pathname") within rack application chnages behaviors of Pathname methods, such as absolute?(), when there are two versions of 'pathname' gem installed.
2021-11-21 1:06 [ruby-core:106194] [Ruby master Bug#18355] require("pathname") within rack application chnages behaviors of Pathname methods, such as absolute?(), when there are two versions of 'pathname' gem installed ume-san (Toshi Umehara)
@ 2021-11-30 8:01 ` hsbt (Hiroshi SHIBATA)
2023-01-25 8:49 ` [ruby-core:112025] " hsbt (Hiroshi SHIBATA) via ruby-core
1 sibling, 0 replies; 3+ messages in thread
From: hsbt (Hiroshi SHIBATA) @ 2021-11-30 8:01 UTC (permalink / raw)
To: ruby-core
Issue #18355 has been updated by hsbt (Hiroshi SHIBATA).
Assignee set to hsbt (Hiroshi SHIBATA)
Status changed from Open to Assigned
----------------------------------------
Bug #18355: require("pathname") within rack application chnages behaviors of Pathname methods, such as absolute?(), when there are two versions of 'pathname' gem installed.
https://bugs.ruby-lang.org/issues/18355#change-94972
* Author: ume-san (Toshi Umehara)
* Status: Assigned
* Priority: Normal
* Assignee: hsbt (Hiroshi SHIBATA)
* ruby -v: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
## 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)
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 3+ messages in thread
* [ruby-core:112025] [Ruby master Bug#18355] require("pathname") within rack application chnages behaviors of Pathname methods, such as absolute?(), when there are two versions of 'pathname' gem installed.
2021-11-21 1:06 [ruby-core:106194] [Ruby master Bug#18355] require("pathname") within rack application chnages behaviors of Pathname methods, such as absolute?(), when there are two versions of 'pathname' gem installed ume-san (Toshi Umehara)
2021-11-30 8:01 ` [ruby-core:106335] " hsbt (Hiroshi SHIBATA)
@ 2023-01-25 8:49 ` hsbt (Hiroshi SHIBATA) via ruby-core
1 sibling, 0 replies; 3+ messages in thread
From: hsbt (Hiroshi SHIBATA) via ruby-core @ 2023-01-25 8:49 UTC (permalink / raw)
To: ruby-core; +Cc: hsbt (Hiroshi SHIBATA)
Issue #18355 has been updated by hsbt (Hiroshi SHIBATA).
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
```
----------------------------------------
Bug #18355: require("pathname") within rack application chnages behaviors of Pathname methods, such as absolute?(), when there are two versions of 'pathname' gem installed.
https://bugs.ruby-lang.org/issues/18355#change-101457
* Author: ume-san (Toshi Umehara)
* Status: Feedback
* Priority: Normal
* Assignee: hsbt (Hiroshi SHIBATA)
* ruby -v: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
## 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)
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-01-25 8:50 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-21 1:06 [ruby-core:106194] [Ruby master Bug#18355] require("pathname") within rack application chnages behaviors of Pathname methods, such as absolute?(), when there are two versions of 'pathname' gem installed ume-san (Toshi Umehara)
2021-11-30 8:01 ` [ruby-core:106335] " hsbt (Hiroshi SHIBATA)
2023-01-25 8:49 ` [ruby-core:112025] " hsbt (Hiroshi SHIBATA) via ruby-core
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).