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 f9ccd26b03,
which didn't update collection lookup logic to fail in the case the
key of a collection wasn't found.
This commit is contained in:
Campbell Barton
2021-12-13 23:27:07 +11:00
parent 1686979747
commit 8709cbb73e

View File

@@ -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,