[Bf-blender-cvs] [8709cbb73e7] master: Fix T93704: StructRNA.path_resolve fails silently with missing keys

Campbell Barton noreply at git.blender.org
Mon Dec 13 13:49:03 CET 2021


Commit: 8709cbb73e7d76970780efa2cb6084c881809e2b
Author: Campbell Barton
Date:   Mon Dec 13 23:27:07 2021 +1100
Branches: master
https://developer.blender.org/rB8709cbb73e7d76970780efa2cb6084c881809e2b

Fix T93704: StructRNA.path_resolve fails silently with missing keys

Resolving the path to a missing pose-bone (for example),
was not raising an error as it should have.

Regression introduced in f9ccd26b037d43f2490d1f0263e45e775d30473d,
which didn't update collection lookup logic to fail in the case the
key of a collection wasn't found.

===================================================================

M	source/blender/makesrna/intern/rna_access.c

===================================================================

diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index ab9568aa3de..b64fa58cf6b 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -4921,6 +4921,10 @@ static char *rna_path_token_in_brackets(const char **path,
   return buf;
 }
 
+/**
+ * \return true when when the key in the path is correctly parsed and found in the collection
+ * or when the path is empty.
+ */
 static bool rna_path_parse_collection_key(const char **path,
                                           PointerRNA *ptr,
                                           PropertyRNA *prop,
@@ -4936,6 +4940,7 @@ static bool rna_path_parse_collection_key(const char **path,
     return true;
   }
 
+  bool found = false;
   if (**path == '[') {
     bool quoted;
     char *token;
@@ -4950,7 +4955,7 @@ static bool rna_path_parse_collection_key(const char **path,
     /* check for "" to see if it is a string */
     if (quoted) {
       if (RNA_property_collection_lookup_string(ptr, prop, token, r_nextptr)) {
-        /* pass */
+        found = true;
       }
       else {
         r_nextptr->data = NULL;
@@ -4963,7 +4968,7 @@ static bool rna_path_parse_collection_key(const char **path,
         return false; /* we can be sure the fixedbuf was used in this case */
       }
       if (RNA_property_collection_lookup_int(ptr, prop, intkey, r_nextptr)) {
-        /* pass */
+        found = true;
       }
       else {
         r_nextptr->data = NULL;
@@ -4976,7 +4981,7 @@ static bool rna_path_parse_collection_key(const char **path,
   }
   else {
     if (RNA_property_collection_type_get(ptr, prop, r_nextptr)) {
-      /* pass */
+      found = true;
     }
     else {
       /* ensure we quit on invalid values */
@@ -4984,7 +4989,7 @@ static bool rna_path_parse_collection_key(const char **path,
     }
   }
 
-  return true;
+  return found;
 }
 
 static bool rna_path_parse_array_index(const char **path,



More information about the Bf-blender-cvs mailing list