Fix T70555: Crash when attempting to create an override for an object with a cloth...
authorBastien Montagne <montagne29@wanadoo.fr>
Mon, 7 Oct 2019 09:56:33 +0000 (11:56 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Mon, 7 Oct 2019 11:17:56 +0000 (13:17 +0200)
Was not taking into account the case where pointer RNA prop is valid,
but has no data (i.e. is a 'null' pointer)...

source/blender/makesrna/intern/rna_rna.c

index 26c8df4c7bb0769730be369336bbc12784af4ce0..4db702b215f3c541504cc4ded89c730d9fb66758 100644 (file)
@@ -1157,20 +1157,21 @@ static bool rna_property_override_diff_propptr_validate_diffing(PointerRNA *prop
   *r_is_id = *r_is_null = *r_is_type_diff = false;
 
   /* Beware, PointerRNA_NULL has no type and is considered a 'blank page'! */
-  if (propptr_a->type == NULL) {
-    if (propptr_b == NULL || propptr_b->type == NULL) {
+  if (ELEM(NULL, propptr_a->type, propptr_a->data)) {
+    if (ELEM(NULL, propptr_b, propptr_b->type, propptr_b->data)) {
       *r_is_null = true;
     }
     else {
       *r_is_id = RNA_struct_is_ID(propptr_b->type);
       *r_is_null = true;
-      *r_is_type_diff = true;
+      *r_is_type_diff = propptr_a->type != propptr_b->type;
     }
     is_valid_for_diffing = false;
   }
   else {
     *r_is_id = RNA_struct_is_ID(propptr_a->type);
-    *r_is_null = *r_is_type_diff = (ELEM(NULL, propptr_b, propptr_b->type));
+    *r_is_null = (ELEM(NULL, propptr_b, propptr_b->type, propptr_b->data));
+    *r_is_type_diff = (propptr_b == NULL || propptr_b->type != propptr_a->type);
     is_valid_for_diffing = !(*r_is_id || *r_is_null);
   }