about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorAlex <huangalex409@gmail.com>2025-09-22 15:10:41 -0400
committerAlex <huangalex409@gmail.com>2025-09-22 15:10:41 -0400
commit2d18c886f5754258109fad2e1e0c3bcca0cc9fa5 (patch)
tree994ccb0713fba755aa0b1db991889d5b4c6a37fc /compiler
parent29005cb128e6d447e6bd9c110c9a684665f95985 (diff)
downloadrust-2d18c886f5754258109fad2e1e0c3bcca0cc9fa5.tar.gz
rust-2d18c886f5754258109fad2e1e0c3bcca0cc9fa5.zip
Fix a crash/mislex when more than one frontmatter closing possibility is considered
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_lexer/src/lib.rs4
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;
                     }
                 }
             }