From: "nagachika (Tomoyuki Chikanaga)" Date: 2013-11-24T23:42:00+09:00 Subject: [ruby-core:58549] [ruby-trunk - Feature #9147][Assigned] CSV.new option skip_lines should escape String before convert to Regexp Issue #9147 has been reported by nagachika (Tomoyuki Chikanaga). ---------------------------------------- Feature #9147: CSV.new option skip_lines should escape String before convert to Regexp https://bugs.ruby-lang.org/issues/9147 Author: nagachika (Tomoyuki Chikanaga) Status: Assigned Priority: Normal Assignee: JEG2 (James Gray) Category: lib Target version: current: 2.1.0 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 -- http://bugs.ruby-lang.org/