From 995b80ff2646c03bbe871a1d7b2528cc6b6ed81b Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 20 May 2021 12:43:32 +0200 Subject: [PATCH] Index into `prefix` or `path` depending on where the match was found This fixes a couple of tests that were panicking due to an out-of-bound access. --- zed/src/worktree/fuzzy.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/zed/src/worktree/fuzzy.rs b/zed/src/worktree/fuzzy.rs index 3897b2a588ba4ef3a512c90c8c5f830d36b90946..d9d79cc20cd0d5ffde33e4c04dc946d2ad0a0c16 100644 --- a/zed/src/worktree/fuzzy.rs +++ b/zed/src/worktree/fuzzy.rs @@ -321,14 +321,18 @@ fn score_match( return 0.0; } - let path_len = path.len() + prefix.len(); + let path_len = prefix.len() + path.len(); let mut cur_start = 0; let mut byte_ix = 0; let mut char_ix = 0; for i in 0..query.len() { let match_char_ix = best_position_matrix[i * path_len + cur_start]; while char_ix < match_char_ix { - byte_ix += path[char_ix].len_utf8(); + let ch = prefix + .get(char_ix) + .or_else(|| path.get(char_ix - prefix.len())) + .unwrap(); + byte_ix += ch.len_utf8(); char_ix += 1; } cur_start = match_char_ix + 1;