From ec6004a6d4342aa77833df9eb8af72facd8ef323 Mon Sep 17 00:00:00 2001 From: stefan-gorules <127550877+stefan-gorules@users.noreply.github.com> Date: Fri, 4 Oct 2024 22:53:49 +0200 Subject: [PATCH] fix: double borrow (#252) --- core/engine/src/handler/traversal.rs | 6 +++--- core/expression/src/variable/mod.rs | 14 ++++++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/core/engine/src/handler/traversal.rs b/core/engine/src/handler/traversal.rs index 04e8decb..7bb089a7 100644 --- a/core/engine/src/handler/traversal.rs +++ b/core/engine/src/handler/traversal.rs @@ -76,9 +76,9 @@ impl GraphWalker { let node_values = self .node_data .iter() - .map(|(idx, value)| { - let weight = g.node_weight(*idx).unwrap(); - (weight.name.clone(), value.clone()) + .filter_map(|(idx, value)| { + let weight = g.node_weight(*idx)?; + Some((weight.name.clone(), value.clone())) }) .collect(); diff --git a/core/expression/src/variable/mod.rs b/core/expression/src/variable/mod.rs index 7a90c6a1..73f7932e 100644 --- a/core/expression/src/variable/mod.rs +++ b/core/expression/src/variable/mod.rs @@ -235,9 +235,12 @@ fn merge_variables(doc: &mut Variable, patch: &Variable, top_level: bool) { if doc.is_object() && patch.is_object() { let map_ref = doc.as_object().unwrap(); - let mut map = map_ref.borrow_mut(); - let patch_ref = patch.as_object().unwrap(); + if Rc::ptr_eq(&map_ref, &patch_ref) { + return; + } + + let mut map = map_ref.borrow_mut(); let patch = patch_ref.borrow(); for (key, value) in patch.deref() { if value == &Variable::Null { @@ -249,9 +252,12 @@ fn merge_variables(doc: &mut Variable, patch: &Variable, top_level: bool) { } } else if doc.is_array() && patch.is_array() { let arr_ref = doc.as_array().unwrap(); - let mut arr = arr_ref.borrow_mut(); - let patch_ref = patch.as_array().unwrap(); + if Rc::ptr_eq(&arr_ref, &patch_ref) { + return; + } + + let mut arr = arr_ref.borrow_mut(); let patch = patch_ref.borrow(); arr.extend(patch.iter().map(|s| s.shallow_clone())); } else {