diff options
| author | Alex <huangalex409@gmail.com> | 2025-09-22 15:10:41 -0400 |
|---|---|---|
| committer | Alex <huangalex409@gmail.com> | 2025-09-22 15:10:41 -0400 |
| commit | 2d18c886f5754258109fad2e1e0c3bcca0cc9fa5 (patch) | |
| tree | 994ccb0713fba755aa0b1db991889d5b4c6a37fc /compiler/rustc_lexer | |
| parent | 29005cb128e6d447e6bd9c110c9a684665f95985 (diff) | |
| download | rust-2d18c886f5754258109fad2e1e0c3bcca0cc9fa5.tar.gz rust-2d18c886f5754258109fad2e1e0c3bcca0cc9fa5.zip | |
Fix a crash/mislex when more than one frontmatter closing possibility is considered
Diffstat (limited to 'compiler/rustc_lexer')
| -rw-r--r-- | compiler/rustc_lexer/src/lib.rs | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/compiler/rustc_lexer/src/lib.rs b/compiler/rustc_lexer/src/lib.rs index c29ab569f47..f6790f7ed1e 100644 --- a/compiler/rustc_lexer/src/lib.rs +++ b/compiler/rustc_lexer/src/lib.rs @@ -599,14 +599,16 @@ impl Cursor<'_> { if potential_closing.is_none() { // a less fortunate recovery if all else fails which finds any dashes preceded by whitespace // on a standalone line. Might be wrong. + let mut base_index = 0; while let Some(closing) = rest.find("---") { let preceding_chars_start = rest[..closing].rfind("\n").map_or(0, |i| i + 1); if rest[preceding_chars_start..closing].chars().all(is_horizontal_whitespace) { // candidate found - potential_closing = Some(closing); + potential_closing = Some(closing + base_index); break; } else { rest = &rest[closing + 3..]; + base_index += closing + 3; } } } |
