[Bf-blender-cvs] [cac5049fc92] asset-browser: Avoid unsafe access to asset browsing through BPY

Julian Eisel noreply at git.blender.org
Thu Dec 10 20:30:50 CET 2020


Commit: cac5049fc928f36fd051f080a07420d2b016a70c
Author: Julian Eisel
Date:   Thu Dec 10 19:18:06 2020 +0100
Branches: asset-browser
https://developer.blender.org/rBcac5049fc928f36fd051f080a07420d2b016a70c

Avoid unsafe access to asset browsing through BPY

Python could access asset selection params even though the browser was in file
browsing mode. The value of that data would be undifined then.

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

M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_space.c

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

diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index a500ccd22ad..d9251db21e9 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -252,6 +252,7 @@ extern StructRNA RNA_FModifierPython;
 extern StructRNA RNA_FModifierStepped;
 extern StructRNA RNA_FaceMap;
 extern StructRNA RNA_FieldSettings;
+extern StructRNA RNA_FileAssetSelectParams;
 extern StructRNA RNA_FileBrowserFSMenuEntry;
 extern StructRNA RNA_FileSelectEntry;
 extern StructRNA RNA_FileSelectParams;
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 5e7d6131e2a..8ea886ef260 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -2474,9 +2474,11 @@ static PointerRNA rna_FileSelectParams_filter_id_get(PointerRNA *ptr)
   return rna_pointer_inherit_refine(ptr, &RNA_FileSelectIDFilter, ptr->data);
 }
 
-static int rna_FileSelectParams_asset_library_get(PointerRNA *ptr)
+static int rna_FileAssetSelectParams_asset_library_get(PointerRNA *ptr)
 {
   FileAssetSelectParams *params = ptr->data;
+  /* Just an extra sanity check to ensure this isn't somehow called for RNA_FileSelectParams. */
+  BLI_assert(ptr->type == &RNA_FileAssetSelectParams);
 
   /* Simple case: Predefined repo, just set the value. */
   if (params->asset_library.type < FILE_ASSET_LIBRARY_CUSTOM) {
@@ -2496,7 +2498,7 @@ static int rna_FileSelectParams_asset_library_get(PointerRNA *ptr)
   return FILE_ASSET_LIBRARY_LOCAL;
 }
 
-static void rna_FileSelectParams_asset_library_set(PointerRNA *ptr, int value)
+static void rna_FileAssetSelectParams_asset_library_set(PointerRNA *ptr, int value)
 {
   FileAssetSelectParams *params = ptr->data;
 
@@ -2522,10 +2524,8 @@ static void rna_FileSelectParams_asset_library_set(PointerRNA *ptr, int value)
   }
 }
 
-static const EnumPropertyItem *rna_FileSelectParams_asset_library_itemf(bContext *UNUSED(C),
-                                                                        PointerRNA *UNUSED(ptr),
-                                                                        PropertyRNA *UNUSED(prop),
-                                                                        bool *r_free)
+static const EnumPropertyItem *rna_FileAssetSelectParams_asset_library_itemf(
+    bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
 {
   const EnumPropertyItem predefined_items[] = {
       /* For the future. */
@@ -2603,13 +2603,30 @@ static PointerRNA rna_FileBrowser_FileSelectEntry_asset_data_get(PointerRNA *ptr
   return rna_pointer_inherit_refine(ptr, &RNA_AssetMetaData, entry->asset_data);
 }
 
+static StructRNA *rna_FileBrowser_params_typef(PointerRNA *ptr)
+{
+  SpaceFile *sfile = ptr->data;
+  FileSelectParams *params = ED_fileselect_get_active_params(sfile);
+
+  if (params == ED_fileselect_get_file_params(sfile)) {
+    return &RNA_FileSelectParams;
+  }
+  if (params == (void *)ED_fileselect_get_asset_params(sfile)) {
+    return &RNA_FileAssetSelectParams;
+  }
+
+  BLI_assert(!"Could not identify file select parameters");
+  return NULL;
+}
+
 static PointerRNA rna_FileBrowser_params_get(PointerRNA *ptr)
 {
   SpaceFile *sfile = ptr->data;
   FileSelectParams *params = ED_fileselect_get_active_params(sfile);
+  StructRNA *params_struct = rna_FileBrowser_params_typef(ptr);
 
-  if (params) {
-    return rna_pointer_inherit_refine(ptr, &RNA_FileSelectParams, params);
+  if (params && params_struct) {
+    return rna_pointer_inherit_refine(ptr, params_struct, params);
   }
 
   return rna_pointer_inherit_refine(ptr, NULL, NULL);
@@ -6180,15 +6197,6 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
   RNA_def_property_flag(prop, PROP_TEXTEDIT_UPDATE);
   RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
 
-  prop = RNA_def_property(srna, "asset_library", PROP_ENUM, PROP_NONE);
-  RNA_def_property_enum_items(prop, DummyRNA_NULL_items);
-  RNA_def_property_enum_funcs(prop,
-                              "rna_FileSelectParams_asset_library_get",
-                              "rna_FileSelectParams_asset_library_set",
-                              "rna_FileSelectParams_asset_library_itemf");
-  RNA_def_property_ui_text(prop, "Asset Library", "");
-  RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
-
   prop = RNA_def_property(srna, "display_size", PROP_ENUM, PROP_NONE);
   RNA_def_property_enum_sdna(prop, NULL, "thumbnail_size");
   RNA_def_property_enum_items(prop, display_size_items);
@@ -6198,6 +6206,25 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
   RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
 }
 
+static void rna_def_fileselect_asset_params(BlenderRNA *brna)
+{
+  StructRNA *srna;
+  PropertyRNA *prop;
+
+  srna = RNA_def_struct(brna, "FileAssetSelectParams", "FileSelectParams");
+  RNA_def_struct_ui_text(
+      srna, "Asset Select Parameters", "Settings for the file selection in Asset Browser mode");
+
+  prop = RNA_def_property(srna, "asset_library", PROP_ENUM, PROP_NONE);
+  RNA_def_property_enum_items(prop, DummyRNA_NULL_items);
+  RNA_def_property_enum_funcs(prop,
+                              "rna_FileAssetSelectParams_asset_library_get",
+                              "rna_FileAssetSelectParams_asset_library_set",
+                              "rna_FileAssetSelectParams_asset_library_itemf");
+  RNA_def_property_ui_text(prop, "Asset Library", "");
+  RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
+}
+
 static void rna_def_filemenu_entry(BlenderRNA *brna)
 {
   StructRNA *srna;
@@ -6261,7 +6288,8 @@ static void rna_def_space_filebrowser(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "params", PROP_POINTER, PROP_NONE);
   RNA_def_property_struct_type(prop, "FileSelectParams");
-  RNA_def_property_pointer_funcs(prop, "rna_FileBrowser_params_get", NULL, NULL, NULL);
+  RNA_def_property_pointer_funcs(
+      prop, "rna_FileBrowser_params_get", NULL, "rna_FileBrowser_params_typef", NULL);
   RNA_def_property_ui_text(
       prop, "Filebrowser Parameter", "Parameters and Settings for the Filebrowser");
 
@@ -7011,6 +7039,7 @@ void RNA_def_space(BlenderRNA *brna)
   rna_def_space_text(brna);
   rna_def_fileselect_entry(brna);
   rna_def_fileselect_params(brna);
+  rna_def_fileselect_asset_params(brna);
   rna_def_fileselect_idfilter(brna);
   rna_def_filemenu_entry(brna);
   rna_def_space_filebrowser(brna);



More information about the Bf-blender-cvs mailing list