[Bf-blender-cvs] [8473bee9090] refactor-idprop-ui-data: Free unused result in failure cases

Hans Goudey noreply at git.blender.org
Thu Aug 5 21:01:51 CEST 2021


Commit: 8473bee9090afac37270e54065ee522f8a1c63ad
Author: Hans Goudey
Date:   Thu Aug 5 13:52:28 2021 -0500
Branches: refactor-idprop-ui-data
https://developer.blender.org/rB8473bee9090afac37270e54065ee522f8a1c63ad

Free unused result in failure cases

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

M	source/blender/blenkernel/BKE_idprop.h
M	source/blender/blenkernel/intern/idprop.c
M	source/blender/python/generic/idprop_py_ui_api.c

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

diff --git a/source/blender/blenkernel/BKE_idprop.h b/source/blender/blenkernel/BKE_idprop.h
index 63da6e429a5..a6372cc490c 100644
--- a/source/blender/blenkernel/BKE_idprop.h
+++ b/source/blender/blenkernel/BKE_idprop.h
@@ -230,6 +230,7 @@ typedef enum eIDPropertyUIDataType {
 bool IDP_ui_data_supported(const struct IDProperty *prop);
 eIDPropertyUIDataType IDP_ui_data_type(const struct IDProperty *prop);
 void IDP_ui_data_free(struct IDProperty *prop);
+void IDP_ui_data_free_contents(struct IDPropertyUIData *ui_data, const eIDPropertyUIDataType type);
 struct IDPropertyUIData *IDP_ui_data_ensure(struct IDProperty *prop);
 struct IDPropertyUIData *IDP_ui_data_copy(const struct IDProperty *prop);
 
diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c
index e5a48127d01..777effca003 100644
--- a/source/blender/blenkernel/intern/idprop.c
+++ b/source/blender/blenkernel/intern/idprop.c
@@ -1096,25 +1096,25 @@ IDProperty *IDP_New(const char type, const IDPropertyTemplate *val, const char *
   return prop;
 }
 
-void IDP_ui_data_free(IDProperty *prop)
+void IDP_ui_data_free_contents(IDPropertyUIData *ui_data, const eIDPropertyUIDataType type)
 {
-  switch (IDP_ui_data_type(prop)) {
+  switch (type) {
     case IDP_UI_DATA_TYPE_STRING: {
-      IDPropertyUIDataString *ui_data = (IDPropertyUIDataString *)prop->ui_data;
-      MEM_SAFE_FREE(ui_data->default_value);
+      IDPropertyUIDataString *ui_data_string = (IDPropertyUIDataString *)ui_data;
+      MEM_SAFE_FREE(ui_data_string->default_value);
       break;
     }
     case IDP_UI_DATA_TYPE_ID: {
       break;
     }
     case IDP_UI_DATA_TYPE_INT: {
-      IDPropertyUIDataInt *ui_data = (IDPropertyUIDataInt *)prop->ui_data;
-      MEM_SAFE_FREE(ui_data->default_array);
+      IDPropertyUIDataInt *ui_data_int = (IDPropertyUIDataInt *)ui_data;
+      MEM_SAFE_FREE(ui_data_int->default_array);
       break;
     }
     case IDP_UI_DATA_TYPE_FLOAT: {
-      IDPropertyUIDataFloat *ui_data = (IDPropertyUIDataFloat *)prop->ui_data;
-      MEM_SAFE_FREE(ui_data->default_array);
+      IDPropertyUIDataFloat *ui_data_float = (IDPropertyUIDataFloat *)ui_data;
+      MEM_SAFE_FREE(ui_data_float->default_array);
       break;
     }
     case IDP_UI_DATA_TYPE_UNSUPPORTED: {
@@ -1122,7 +1122,13 @@ void IDP_ui_data_free(IDProperty *prop)
     }
   }
 
-  MEM_SAFE_FREE(prop->ui_data->description);
+  MEM_SAFE_FREE(ui_data->description);
+}
+
+void IDP_ui_data_free(IDProperty *prop)
+{
+  IDP_ui_data_free_contents(prop->ui_data, IDP_ui_data_type(prop));
+
   MEM_freeN(prop->ui_data);
   prop->ui_data = NULL;
 }
diff --git a/source/blender/python/generic/idprop_py_ui_api.c b/source/blender/python/generic/idprop_py_ui_api.c
index 51f9e33fb04..c43d2067f8e 100644
--- a/source/blender/python/generic/idprop_py_ui_api.c
+++ b/source/blender/python/generic/idprop_py_ui_api.c
@@ -148,6 +148,7 @@ static bool idprop_ui_data_update_int(IDProperty *idprop, PyObject *args, PyObje
   IDPropertyUIDataInt ui_data = *(IDPropertyUIDataInt *)idprop->ui_data;
 
   if (!idprop_ui_data_update_base((IDPropertyUIData *)&ui_data, rna_subtype, description)) {
+    IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_INT);
     return false;
   }
 
@@ -177,6 +178,7 @@ static bool idprop_ui_data_update_int(IDProperty *idprop, PyObject *args, PyObje
 
   if (!ELEM(default_value, NULL, Py_None)) {
     if (!idprop_ui_data_update_int_default(idprop, &ui_data, default_value)) {
+      IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_INT);
       return false;
     }
   }
@@ -264,6 +266,7 @@ static bool idprop_ui_data_update_float(IDProperty *idprop, PyObject *args, PyOb
   IDPropertyUIDataFloat ui_data = *(IDPropertyUIDataFloat *)idprop->ui_data;
 
   if (!idprop_ui_data_update_base((IDPropertyUIData *)&ui_data, rna_subtype, description)) {
+    IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_FLOAT);
     return false;
   }
 
@@ -298,6 +301,7 @@ static bool idprop_ui_data_update_float(IDProperty *idprop, PyObject *args, PyOb
    * value or an array, but for non-array properties it can only be a value. */
   if (!ELEM(default_value, NULL, Py_None)) {
     if (!idprop_ui_data_update_float_default(idprop, &ui_data, default_value)) {
+      IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_FLOAT);
       return false;
     }
   }
@@ -330,6 +334,7 @@ static bool idprop_ui_data_update_string(IDProperty *idprop, PyObject *args, PyO
   IDPropertyUIDataString ui_data = *(IDPropertyUIDataString *)idprop->ui_data;
 
   if (!idprop_ui_data_update_base((IDPropertyUIData *)&ui_data, rna_subtype, description)) {
+    IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_STRING);
     return false;
   }
 
@@ -360,6 +365,7 @@ static bool idprop_ui_data_update_id(IDProperty *idprop, PyObject *args, PyObjec
   IDPropertyUIDataID ui_data = *(IDPropertyUIDataID *)idprop->ui_data;
 
   if (!idprop_ui_data_update_base((IDPropertyUIData *)&ui_data, rna_subtype, description)) {
+    IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_ID);
     return false;
   }



More information about the Bf-blender-cvs mailing list