From 8709cbb73e7d76970780efa2cb6084c881809e2b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 13 Dec 2021 23:27:07 +1100 Subject: [PATCH] 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. --- source/blender/makesrna/intern/rna_access.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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,