From: shibata.hiroshi@... Date: 2014-01-30T06:17:25+00:00 Subject: [ruby-core:60326] [ruby-trunk - Feature #9147] CSV.new option skip_lines should escape String before convert to Regexp Issue #9147 has been updated by Hiroshi SHIBATA. Target version changed from 2.1.0 to current: 2.2.0 ---------------------------------------- Feature #9147: CSV.new option skip_lines should escape String before convert to Regexp https://bugs.ruby-lang.org/issues/9147#change-44811 * Author: Tomoyuki Chikanaga * Status: Assigned * Priority: Normal * Assignee: James Gray * Category: lib * Target version: current: 2.2.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/