From 5be974e58d838cb8f7dfdf4f7137f0b4a6e8e193 Mon Sep 17 00:00:00 2001 From: "gcp-cherry-pick-bot[bot]" <98988430+gcp-cherry-pick-bot[bot]@users.noreply.github.com> Date: Sun, 11 May 2025 17:34:59 +0200 Subject: [PATCH] markdown: Fix out of range panic in parser (cherry-pick #30510) (#30511) Cherry-picked 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 Co-authored-by: Bennet Bo Fenner --- 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 ed9f64374bce262e89565fd42290388f290a0749..1c9376c6d41f26bc350585c8164c549c5404a8e1 100644 --- a/crates/markdown/src/parser.rs +++ b/crates/markdown/src/parser.rs @@ -509,6 +509,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 } @@ -663,6 +666,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]