``` opts = {row_sep: "|\n", col_sep: ","} CSV.parse(CSV.generate(opts) { |csv| csv << ["yes, it's true"]; csv << [ "CSV is broken"]; csv << ["uhoh!"]; }, opts) ``` In the example above, the parser will raise a `CSV::MalformedCSVError (Unquoted fields do not allow new line <"\n"> in line 2.)` error. It will succeed if any of the following are done: 1. pass `force_quotes: true` to `generate` 2. add a comma in each row 3. remove the comma from the first row 4. use `row_sep: "\n"` Therefore, the problem seems to be that a non-standard `row_sep` + lines with a field being quoted in one row and unquoted in the next.