Actions
Bug #20175
closedBroken File.dirname(__FILE__) in eval blocks
Status:
Feedback
Assignee:
-
Target version:
-
ruby -v:
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-linux]
Description
Since #19755 eval use caller location by default, however, it broke File.dirname(__FILE__)
in some cases.
# eval.rb
eval('puts file: __FILE__, dirname: File.dirname(__FILE__)')
Up to Ruby 3.2.2 it gave back the same results, even if it wasn't technically correct in some cases
## Ruby 3.2.2
ruby eval.rb
# {:file=>"(eval)", :dirname=>"."}
ruby ./eval.rb
# {:file=>"(eval)", :dirname=>"."}
cd folder && ruby ../eval.rb
# {:file=>"(eval)", :dirname=>"."}
# This one is not pointing to the right directory, but still returns a valid path
ruby /Codes/eval.rb
# {:file=>"(eval)", :dirname=>"."}
# This one is not pointing to the right directory, but still returns a valid path
In Ruby 3.3.0 (introduced in 43a5c19135), it gives back different paths, trying to point to the right directory, but it has the (eval at
prefix which makes it broken for codes expecting a valid path.
## Ruby 3.3.0
ruby eval.rb
# {:file=>"(eval at eval.rb:1)", :dirname=>"."}
ruby ./eval.rb
# {:file=>"(eval at ./eval.rb:1)", :dirname=>"(eval at ."}
# Broken path
cd folder && ruby ../eval.rb
# {:file=>"(eval at ../eval.rb:1)", :dirname=>"(eval at .."}
# This one is trying to point to the right directory, but it has a broken syntax
ruby /Codes/eval.rb
# {:file=>"(eval at /Codes/eval.rb:1)", :dirname=>"(eval at /Codes"}
# This one is trying to point to the right directory, but it has a broken syntax
I was able to reproduce it on current master as well.
Actions
Like0
Like0Like0Like0Like0Like0