diff --git a/crates/engine/src/cmd/sketch_clipboard.rs b/crates/engine/src/cmd/sketch_clipboard.rs index 5818063c..b8036f93 100644 --- a/crates/engine/src/cmd/sketch_clipboard.rs +++ b/crates/engine/src/cmd/sketch_clipboard.rs @@ -209,8 +209,12 @@ fn copy(s: &mut Session, p: &Value) -> Result { } fn cut(s: &mut Session, p: &Value) -> Result { + // `q["entities"] = …` below panics on anything but an object. + if !(p.is_object() || p.is_null()) { + return Err(bad("sketch.cut", "params must be an object")); + } let entities = chosen(s, p); - let mut q = p.clone(); + let mut q = if p.is_null() { json!({}) } else { p.clone() }; q["entities"] = json!(entities); let out = copy(s, &q)?; let delete = super::find_command("sketch.delete").ok_or_else(|| bad("sketch.cut", "sketch.delete is missing"))?;