1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/error_highlight] Add a test to check if it is robust against a spoofed filename

Previously, RubyVM::AST.of opened a wrong file if the iseq's file path is spoofed.

```
module Dummy
  binding.irb
end
```

```
$ ruby test.rb

From: test.rb @ line 2 :

    1: module Dummy
 => 2:   binding.irb
    3: end

irb(Dummy):001:0> foo
/home/mame/work/ruby/local/lib/ruby/3.1.0/error_highlight/base.rb:412:in `spot_colon2': undefined method `last_lineno' for nil:NilClass (NoMethodError)

      if nd_parent.last_lineno == @node.last_lineno
                  ^^^^^^^^^^^^
```

Found by @kateinoigakukun

This issue is already fixed in the interpreter side.
This change just adds a test for the case.

https://github.com/ruby/error_highlight/commit/f3626b9032
This commit is contained in:
Yusuke Endoh 2022-01-04 23:18:34 +09:00 committed by git
parent 11b1ebe606
commit e9a4cc02b4

View file

@ -1207,4 +1207,21 @@ undefined method `foo' for nil:NilClass
end
end
def test_spoofed_filename
Tempfile.create(["error_highlight_test", ".rb"], binmode: true) do |tmp|
tmp << "module Dummy\nend\n"
tmp.close
assert_error_message(NameError, <<~END) do
undefined local variable or method `foo' for "dummy":String
END
"dummy".instance_eval do
eval <<-END, nil, tmp.path
foo
END
end
end
end
end
end