From ad01cdd7fc931c7e313eebc0027a05d96e36e66f Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Wed, 11 Jan 2023 12:08:04 -0300 Subject: [PATCH] Transform: improve safety when restoring data --- .../blender/editors/transform/transform_generics.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 5d3e326d8b0..968e2bca5b9 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -811,13 +811,15 @@ void applyTransObjects(TransInfo *t) static void transdata_restore_basic(TransDataBasic *td_basic) { - /* TransData for crease has no loc */ - if (td_basic->loc) { - copy_v3_v3(td_basic->loc, td_basic->iloc); + if (td_basic->val) { + *td_basic->val = td_basic->ival; } - if (td_basic->val && td_basic->val != td_basic->loc) { - *td_basic->val = td_basic->ival; + /* TODO(mano-wii): Only use 3D or larger vectors in `td->loc`. + * If `loc` and `val` point to the same address, it may indicate that `loc` is not 3D which is + * not safe for `copy_v3_v3`. */ + if (td_basic->loc && td_basic->val != td_basic->loc) { + copy_v3_v3(td_basic->loc, td_basic->iloc); } }