fix: potential crash while calling apply_insert if the path is empty

This commit is contained in:
appflowy 2022-09-08 17:47:53 +08:00
parent 8f5134305e
commit 89a5ee4a8a
2 changed files with 13 additions and 6 deletions

View File

@ -121,14 +121,15 @@ impl DocumentTree {
}
fn apply_insert(&mut self, path: &Path, nodes: &[NodeSubTree]) -> Result<(), OTError> {
debug_assert!(!path.is_empty());
if path.is_empty() {
return Err(OTErrorCode::PathIsEmpty.into());
}
let parent_path = &path.0[0..(path.0.len() - 1)];
let last_index = path.0[path.0.len() - 1];
let (parent_path, last_path) = path.split_at(path.0.len() - 1);
let last_index = *last_path.first().unwrap();
let parent_node = self
.node_at_path(&Path(parent_path.to_vec()))
.node_at_path(parent_path)
.ok_or_else(|| ErrorBuilder::new(OTErrorCode::PathNotFound).build())?;
self.insert_child_at_index(parent_node, last_index, nodes)

View File

@ -39,6 +39,12 @@ impl From<&Vec<usize>> for Path {
}
}
impl From<&[usize]> for Path {
fn from(values: &[usize]) -> Self {
Path(values.to_vec())
}
}
impl Path {
// delta is default to be 1