Skip to content
  • adamroyjones's avatar
    c70dc3ca
    [ruby/csv] Add handling for ambiguous parsing options (https://github.com/ruby/csv/pull/226) · c70dc3ca
    adamroyjones authored
    GitHub: fix GH-225
    
    With Ruby 3.0.2 and csv 3.2.1, the file
    
    ```ruby
    require "csv"
    File.open("example.tsv", "w") { |f| f.puts("foo\t\tbar") }
    CSV.read("example.tsv", col_sep: "\t", strip: true)
    ```
    
    produces the error
    
    ```
    lib/csv/parser.rb:935:in `parse_quotable_robust': TODO: Meaningful
    message in line 1. (CSV::MalformedCSVError)
    ```
    
    However, the CSV in this example is not malformed; instead, ambiguous
    options were provided to the parser. It is not obvious (to me) whether
    the string should be parsed as
    
    - `["foo\t\tbar"]`,
    - `["foo", "bar"]`,
    - `["foo", "", "bar"]`, or
    - `["foo", nil, "bar"]`.
    
    This commit adds code that raises an exception when this situation is
    encountered. Specifically, it checks if the column separator either ends
    with or starts with the characters that would be stripped away.
    
    This commit also adds unit tests and updates the documentation.
    
    https://github.com/ruby/csv/commit/cc317dd42d
    c70dc3ca
    [ruby/csv] Add handling for ambiguous parsing options (https://github.com/ruby/csv/pull/226)
    adamroyjones authored
    GitHub: fix GH-225
    
    With Ruby 3.0.2 and csv 3.2.1, the file
    
    ```ruby
    require "csv"
    File.open("example.tsv", "w") { |f| f.puts("foo\t\tbar") }
    CSV.read("example.tsv", col_sep: "\t", strip: true)
    ```
    
    produces the error
    
    ```
    lib/csv/parser.rb:935:in `parse_quotable_robust': TODO: Meaningful
    message in line 1. (CSV::MalformedCSVError)
    ```
    
    However, the CSV in this example is not malformed; instead, ambiguous
    options were provided to the parser. It is not obvious (to me) whether
    the string should be parsed as
    
    - `["foo\t\tbar"]`,
    - `["foo", "bar"]`,
    - `["foo", "", "bar"]`, or
    - `["foo", nil, "bar"]`.
    
    This commit adds code that raises an exception when this situation is
    encountered. Specifically, it checks if the column separator either ends
    with or starts with the characters that would be stripped away.
    
    This commit also adds unit tests and updates the documentation.
    
    https://github.com/ruby/csv/commit/cc317dd42d
Loading