diff options
author | Campbell Barton <campbell@blender.org> | 2022-04-06 04:42:45 +0300 |
---|---|---|
committer | Fabian Schempp <fabianschempp@googlemail.com> | 2022-04-11 01:31:58 +0300 |
commit | b3f997a6ff1fd6c13c89905e5f85d1673061dfb7 (patch) | |
tree | 4299932930f1b106ae0e2649c1f8d704d2c17db5 /source | |
parent | d3d7007d32d38e87c704599667f0eb158f804957 (diff) |
Fix accessing an empty context succeeding when it shouldn't
Internally an empty string is used to access context member `__dir__`,
which caused `getattr(context, "")` to succeed returning None.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/python/intern/bpy_rna.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index bb212bfcccc..a28137c3bed 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -4210,7 +4210,17 @@ static PyObject *pyrna_struct_getattro(BPy_StructRNA *self, PyObject *pyname) ListBase newlb; short newtype; - const eContextResult done = CTX_data_get(C, name, &newptr, &newlb, &newtype); + /* An empty string is used to implement #CTX_data_dir_get, + * without this check `getattr(context, "")` succeeds. */ + eContextResult done; + if (name[0]) { + done = CTX_data_get(C, name, &newptr, &newlb, &newtype); + } + else { + /* Fall through to built-in `getattr`. */ + done = CTX_RESULT_MEMBER_NOT_FOUND; + BLI_listbase_clear(&newlb); + } if (done == CTX_RESULT_OK) { switch (newtype) { |