From 06af0310f7b210f9dadf7fd36b328c71ace8af05 Mon Sep 17 00:00:00 2001 From: Bennet Bo Fenner Date: Sun, 11 May 2025 17:08:37 +0200 Subject: [PATCH] markdown: Fix out of range panic in parser (#30510) For some reason `pulldown_cmark` treats \````` as a codeblock, meaning that we could end up with an invalid range generated from `extract_code_block_content_range` (`3..2`) Closes #30495 Release Notes: - agent: Fix an edge case where the editor would crash when model generated malformed markdown --- crates/markdown/src/parser.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/crates/markdown/src/parser.rs b/crates/markdown/src/parser.rs index debfe5245f..ca7bd406c4 100644 --- a/crates/markdown/src/parser.rs +++ b/crates/markdown/src/parser.rs @@ -510,6 +510,9 @@ pub(crate) fn extract_code_block_content_range(text: &str) -> Range { if !range.is_empty() && text.ends_with("```") { range.end -= 3; } + if range.start > range.end { + range.end = range.start; + } range } @@ -686,6 +689,10 @@ mod tests { let input = "```python\nprint('hello')\nprint('world')\n```"; assert_eq!(extract_code_block_content_range(input), 10..40); + + // Malformed input + let input = "`````"; + assert_eq!(extract_code_block_content_range(input), 3..3); } #[test]