From 4ab468e65f17be79732fccb13f848dcdd4a05928 Mon Sep 17 00:00:00 2001 From: Daniel Buch Hansen Date: Thu, 18 Aug 2022 12:44:09 +0200 Subject: [PATCH] Fix slice indexing (#6322) * Return empty suggestions if no span contents is present * Fix slice indexing --- crates/nu-cli/src/completions/command_completions.rs | 3 +++ crates/nu-protocol/src/engine/engine_state.rs | 11 ++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/crates/nu-cli/src/completions/command_completions.rs b/crates/nu-cli/src/completions/command_completions.rs index c4dee0760..37417e3a2 100644 --- a/crates/nu-cli/src/completions/command_completions.rs +++ b/crates/nu-cli/src/completions/command_completions.rs @@ -81,6 +81,9 @@ impl CommandCompletion { match_algorithm: MatchAlgorithm, ) -> Vec { let partial = working_set.get_span_contents(span); + if partial.is_empty() { + return Vec::new(); + } let filter_predicate = |command: &[u8]| match_algorithm.matches_u8(command, partial); diff --git a/crates/nu-protocol/src/engine/engine_state.rs b/crates/nu-protocol/src/engine/engine_state.rs index d06c1e75f..d00032d5b 100644 --- a/crates/nu-protocol/src/engine/engine_state.rs +++ b/crates/nu-protocol/src/engine/engine_state.rs @@ -576,8 +576,7 @@ impl EngineState { return &contents[(span.start - start)..(span.end - start)]; } } - - panic!("internal error: span missing in file contents cache") + &[0u8; 0] } pub fn get_config(&self) -> &Config { @@ -1292,7 +1291,13 @@ impl<'a> StateWorkingSet<'a> { if permanent_end <= span.start { for (contents, start, finish) in &self.delta.file_contents { if (span.start >= *start) && (span.end <= *finish) { - return &contents[(span.start - start)..(span.end - start)]; + let begin = span.start - start; + let mut end = span.end - start; + if begin > end { + end = *finish - permanent_end; + } + + return &contents[begin..end]; } } } else {