fix(csv-stringify): quote fields containing a carriage return#485
Open
sarathfrancis90 wants to merge 1 commit into
Open
fix(csv-stringify): quote fields containing a carriage return#485sarathfrancis90 wants to merge 1 commit into
sarathfrancis90 wants to merge 1 commit into
Conversation
A field holding a lone carriage return was written unquoted because the
quoting check only looked for the configured `record_delimiter` (`\n` by
default). The parser, however, treats both `\r` and `\n` as record
delimiters, so the value was split apart and the document no longer
round-tripped:
parse(stringify([['a\rb']])) // => [['a'], ['b']] instead of [['a\rb']]
When the record delimiter is newline-based, quote any field that contains
`\r` or `\n`. A custom, non-newline delimiter still leaves line breaks
as data, so its behaviour is unchanged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A field holding a lone carriage return is written unquoted, because the quoting check only looks for the configured
record_delimiter(\nby default). The parser treats both\rand\nas record delimiters, so the value gets split apart and the document no longer round-trips:\nand\r\nare already quoted; only a bare\rslips through.The fix: when the record delimiter is newline-based, quote any field that contains
\ror\n. A custom, non-newline delimiter still leaves line breaks as data, so that behaviour is unchanged.Found while fuzzing the
stringify→parseround trip. Added a regression test; the escape-formulas test is updated since a\r-leading field is now correctly quoted. Fullcsv-stringifysuite (202) andtscpass.