Fix #127952: Crash on load after id_properties_ui type change
Resolve regression in [0] which keeps UI data when ID property types
change.
[0]: 91466f71f1
This commit is contained in:
@@ -1465,6 +1465,10 @@ static void read_ui_data(IDProperty *prop, BlendDataReader *reader)
|
||||
BLO_read_int32_array(
|
||||
reader, ui_data_int->default_array_len, (int **)&ui_data_int->default_array);
|
||||
}
|
||||
else {
|
||||
ui_data_int->default_array = nullptr;
|
||||
ui_data_int->default_array_len = 0;
|
||||
}
|
||||
BLO_read_struct_array(reader,
|
||||
IDPropertyUIDataEnumItem,
|
||||
size_t(ui_data_int->enum_items_num),
|
||||
@@ -1484,6 +1488,10 @@ static void read_ui_data(IDProperty *prop, BlendDataReader *reader)
|
||||
BLO_read_int8_array(
|
||||
reader, ui_data_bool->default_array_len, (int8_t **)&ui_data_bool->default_array);
|
||||
}
|
||||
else {
|
||||
ui_data_bool->default_array = nullptr;
|
||||
ui_data_bool->default_array_len = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case IDP_UI_DATA_TYPE_FLOAT: {
|
||||
@@ -1493,6 +1501,10 @@ static void read_ui_data(IDProperty *prop, BlendDataReader *reader)
|
||||
BLO_read_double_array(
|
||||
reader, ui_data_float->default_array_len, (double **)&ui_data_float->default_array);
|
||||
}
|
||||
else {
|
||||
ui_data_float->default_array = nullptr;
|
||||
ui_data_float->default_array_len = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case IDP_UI_DATA_TYPE_UNSUPPORTED: {
|
||||
|
||||
@@ -198,6 +198,11 @@ static bool idprop_ui_data_update_int_default(IDProperty *idprop,
|
||||
PyErr_SetString(PyExc_ValueError, "Error converting \"default\" argument to integer");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Use the non-array default, even for arrays, also prevent dangling pointer, see #127952. */
|
||||
ui_data->default_array = nullptr;
|
||||
ui_data->default_array_len = 0;
|
||||
|
||||
ui_data->default_value = value;
|
||||
}
|
||||
|
||||
@@ -356,6 +361,11 @@ static bool idprop_ui_data_update_bool_default(IDProperty *idprop,
|
||||
PyErr_SetString(PyExc_ValueError, "Error converting \"default\" argument to integer");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Use the non-array default, even for arrays, also prevent dangling pointer, see #127952. */
|
||||
ui_data->default_array_len = 0;
|
||||
ui_data->default_array = nullptr;
|
||||
|
||||
ui_data->default_value = (value != 0);
|
||||
}
|
||||
|
||||
@@ -441,6 +451,11 @@ static bool idprop_ui_data_update_float_default(IDProperty *idprop,
|
||||
PyErr_SetString(PyExc_ValueError, "Error converting \"default\" argument to double");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Use the non-array default, even for arrays, also prevent dangling pointer, see #127952. */
|
||||
ui_data->default_array_len = 0;
|
||||
ui_data->default_array = nullptr;
|
||||
|
||||
ui_data->default_value = value;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user