diff --git a/Cargo.lock b/Cargo.lock index c60b84b877ba2b..86bb0fc7439276 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5030,6 +5030,7 @@ name = "fuzzy" version = "0.1.0" dependencies = [ "gpui", + "log", "util", ] diff --git a/crates/fuzzy/Cargo.toml b/crates/fuzzy/Cargo.toml index e3a016c98b718c..6d115fb1b5be8b 100644 --- a/crates/fuzzy/Cargo.toml +++ b/crates/fuzzy/Cargo.toml @@ -15,3 +15,4 @@ doctest = false [dependencies] gpui.workspace = true util.workspace = true +log.workspace = true diff --git a/crates/fuzzy/src/strings.rs b/crates/fuzzy/src/strings.rs index e1f6de37a572b3..1a5fb2b02f8914 100644 --- a/crates/fuzzy/src/strings.rs +++ b/crates/fuzzy/src/strings.rs @@ -61,9 +61,23 @@ impl StringMatch { let mut positions = self.positions.iter().peekable(); iter::from_fn(move || { if let Some(start) = positions.next().copied() { + if start >= self.string.len() { + log::error!( + "Invariant violation: Index {start} out of range in string {:?}", + self.string + ); + return None; + } let mut end = start + self.char_len_at_index(start); while let Some(next_start) = positions.peek() { if end == **next_start { + if end >= self.string.len() { + log::error!( + "Invariant violation: Index {end} out of range in string {:?}", + self.string + ); + return None; + } end += self.char_len_at_index(end); positions.next(); } else {