Project

General

Profile

Bug #13305

Updated by decuplet (Nikita Shilnikov) about 7 years ago

The problem occurs on MRI 2.4.0 and the latest trunk only (2017-03-13 trunk 57944). After running `Coverage.start` code defines the same method few times but every time the size of the method increases. Occasionally MRI can fail on attempt to get the coverage result. The bug can be reproduced quite easily with the following two files 

 a.rb 

 ```ruby ~~~ ruby 
 require 'coverage' 
 Coverage.start 

 require_relative './b' 

 add_method(Class.new) 

 Coverage.result 
 ``` ~~~ 

 b.rb 

 ```ruby ~~~ ruby 
 REPEATS = 400 

 def add_method(target) 
   REPEATS.times do 
     target.class_eval(<<~RUBY, __FILE__, __LINE__ + 1) 
       def foo 
         #{"\n" * rand(REPEATS)} 
       end 
       1 
     RUBY 
   end 
 end 
 ``` ~~~ 

 Run `ruby a.rb` to reproduce the bug. Several runs may be required before MRI fails, but for me it fails on almost every run. 

 Note that passing filename and line number to `class_eval` is important, so as adding `1` after the method definition.  

 The crash report attached to the issue.

Back