[Bf-blender-cvs] [5d31252c762] master: Fix accessing an empty context succeeding when it shouldn't

Campbell Barton noreply at git.blender.org
Wed Apr 6 10:03:39 CEST 2022


Commit: 5d31252c762b35a5af3d668f45dccf5bb397627e
Author: Campbell Barton
Date:   Wed Apr 6 11:42:45 2022 +1000
Branches: master
https://developer.blender.org/rB5d31252c762b35a5af3d668f45dccf5bb397627e

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.

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

M	source/blender/python/intern/bpy_rna.c

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

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) {



More information about the Bf-blender-cvs mailing list