Skip to content

Stop CRLF carriage-return leakage from unterminated single-line literals - #401

Merged
matt-edmondson merged 2 commits into
mainfrom
copilot/fix-crlf-normalization-issue
Sep 14, 2026
Merged

matt-edmondson merged 2 commits into
mainfrom
copilot/fix-crlf-normalization-issue

Conversation

Copilot AI commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

On CRLF input, unterminated single-line string/char literals were terminated only on \n, allowing \r to be captured inside StringLiteral tokens. That leaked a literal CR into HighlightedToken.Text, unlike sibling scanners that already stop on both line terminators.

  • Tokenizer termination parity (CR + LF)

    • Updated CodeTokenizer.ScanStringBody to end non-multiline literals on either \r or \n, matching line-comment and directive scanning behavior.
  • Regression coverage for real edit-time states

    • Added CRLF + unterminated literal cases in LineSplitterTests for:
      • C# unterminated string literal
      • C# unterminated char literal
      • Python unterminated string literal
    • Assertions verify first-line output contains no \r.
if (!rule.AllowMultiline && (current == '\n' || current == '\r'))
{
	return scan;
}

Co-authored-by: matt-edmondson <19528727+matt-edmondson@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix CRLF normalization leaking literal CR from unterminated string Stop CRLF carriage-return leakage from unterminated single-line literals Sep 13, 2026
@matt-edmondson
matt-edmondson marked this pull request as ready for review September 13, 2026 13:04
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CRLF normalization leaks a literal CR out of an unterminated single-line string literal

2 participants