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.
f3626b9032
			
			
This commit is contained in:
		
							parent
							
								
									11b1ebe606
								
							
						
					
					
						commit
						e9a4cc02b4
					
				
					 1 changed files with 17 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue