Project

General

Profile

Feature #9147

Updated by hsbt (Hiroshi SHIBATA) over 6 years ago

After r43823, the following script ignore all lines. 

 == test_csv.rb == 

 ``` 
 require "csv" 

 csv = CSV.new(<<-EOL, skip_lines: ".") 
 1,foo 
 .2,bar 
 3,baz 
 EOL 

 p csv.each.to_a # => [] 
 ``` ================= 

 I think String value for skip_lines option should be escaped before convert to Regexp. 

 ``` 
 diff --git a/lib/csv.rb b/lib/csv.rb 
 index a4d8e3d..3e067f2 100644 
 --- a/lib/csv.rb 
 +++ b/lib/csv.rb 
 @@ -2127,7 +2127,7 @@ class CSV 
    # See also CSV.new 
    def init_comments(options) 
      @skip_lines = options.delete(:skip_lines) 
 -      @skip_lines = Regexp.new(@skip_lines) if @skip_lines.is_a? String 
 +      @skip_lines = Regexp.new(Regexp.escape(@skip_lines)) if @skip_lines.is_a? String 
      if @skip_lines and not @skip_lines.respond_to?(:match) 
        raise ArgumentError, ":skip_lines has to respond to matches" 
      end 
 ```

Back