From 09cb28e5b0fb1469cdd8695d91ba4780033c4603 Mon Sep 17 00:00:00 2001 From: Karim Jerbi Date: Sat, 17 Oct 2026 23:59:32 +0100 Subject: [PATCH] feat: validate reverse Lookup inputs Restrict geometry updates to finite UpdatedDistance columns and reject unsupported mappings atomically. --- src/scene/block_lookup.rs | 14 ++++++++++++++ src/scene/block_lookup/tests.rs | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/src/scene/block_lookup.rs b/src/scene/block_lookup.rs index b9b11acf2..d4f192b47 100644 --- a/src/scene/block_lookup.rs +++ b/src/scene/block_lookup.rs @@ -226,6 +226,13 @@ fn reference_row( if property.lookup_property { return true; } + if property.value_type != 40 + || !property + .connection_name + .eq_ignore_ascii_case("UpdatedDistance") + { + return false; + } let Some(parameter) = params.iter().find(|p| p.id == property.node_id) else { return false; }; @@ -331,6 +338,13 @@ pub(crate) fn evaluate_reference_value( if property.lookup_property { continue; } + if property.value_type != 40 + || !property + .connection_name + .eq_ignore_ascii_case("UpdatedDistance") + { + return Err("This Lookup input property is unsupported."); + } let parameter = parameters .iter() .find(|parameter| parameter.id == property.node_id) diff --git a/src/scene/block_lookup/tests.rs b/src/scene/block_lookup/tests.rs index b8b777350..730232a82 100644 --- a/src/scene/block_lookup/tests.rs +++ b/src/scene/block_lookup/tests.rs @@ -291,6 +291,14 @@ fn lookup_reverse_selection_evaluates_saved_reference_geometry() { .unwrap() .is_none() ); + + let mut unsupported = document.clone(); + let (_, mut malformed) = table(&unsupported, definition, lookup).unwrap().unwrap(); + malformed.columns[0].connection_name = "UpdatedAngle".into(); + apply_table(&mut unsupported, definition, lookup, malformed).unwrap(); + let before = unsupported.clone(); + assert!(evaluate_reference_choice(&unsupported, insert, "Large").is_err()); + assert_eq!(unsupported, before); } #[test]