Fix #116025: Uninitialized value when versioning old node trees
Usually we expect new DNA values do be zeroed when we add them. But the conversion to the interface format for 4.0 didn't clear the memory, so behavior was different when updating old files. Fix that by using `calloc` instead of `malloc`.
This commit is contained in:
parent
7e4c2b2649
commit
65252564ee
|
@ -1395,39 +1395,37 @@ static void version_geometry_nodes_use_rotation_socket(bNodeTree &ntree)
|
|||
static bNodeTreeInterfaceItem *legacy_socket_move_to_interface(bNodeSocket &legacy_socket,
|
||||
const eNodeSocketInOut in_out)
|
||||
{
|
||||
bNodeTreeInterfaceItem *new_item = static_cast<bNodeTreeInterfaceItem *>(
|
||||
MEM_mallocN(sizeof(bNodeTreeInterfaceSocket), __func__));
|
||||
new_item->item_type = NODE_INTERFACE_SOCKET;
|
||||
bNodeTreeInterfaceSocket &new_socket = *reinterpret_cast<bNodeTreeInterfaceSocket *>(new_item);
|
||||
bNodeTreeInterfaceSocket *new_socket = MEM_cnew<bNodeTreeInterfaceSocket>(__func__);
|
||||
new_socket->item.item_type = NODE_INTERFACE_SOCKET;
|
||||
|
||||
/* Move reusable data. */
|
||||
new_socket.name = BLI_strdup(legacy_socket.name);
|
||||
new_socket.identifier = BLI_strdup(legacy_socket.identifier);
|
||||
new_socket.description = BLI_strdup(legacy_socket.description);
|
||||
new_socket.socket_type = BLI_strdup(legacy_socket.idname);
|
||||
new_socket.flag = (in_out == SOCK_IN ? NODE_INTERFACE_SOCKET_INPUT :
|
||||
NODE_INTERFACE_SOCKET_OUTPUT);
|
||||
new_socket->name = BLI_strdup(legacy_socket.name);
|
||||
new_socket->identifier = BLI_strdup(legacy_socket.identifier);
|
||||
new_socket->description = BLI_strdup(legacy_socket.description);
|
||||
new_socket->socket_type = BLI_strdup(legacy_socket.idname);
|
||||
new_socket->flag = (in_out == SOCK_IN ? NODE_INTERFACE_SOCKET_INPUT :
|
||||
NODE_INTERFACE_SOCKET_OUTPUT);
|
||||
SET_FLAG_FROM_TEST(
|
||||
new_socket.flag, legacy_socket.flag & SOCK_HIDE_VALUE, NODE_INTERFACE_SOCKET_HIDE_VALUE);
|
||||
SET_FLAG_FROM_TEST(new_socket.flag,
|
||||
new_socket->flag, legacy_socket.flag & SOCK_HIDE_VALUE, NODE_INTERFACE_SOCKET_HIDE_VALUE);
|
||||
SET_FLAG_FROM_TEST(new_socket->flag,
|
||||
legacy_socket.flag & SOCK_HIDE_IN_MODIFIER,
|
||||
NODE_INTERFACE_SOCKET_HIDE_IN_MODIFIER);
|
||||
new_socket.attribute_domain = legacy_socket.attribute_domain;
|
||||
new_socket->attribute_domain = legacy_socket.attribute_domain;
|
||||
|
||||
/* The following data are stolen from the old data, the ownership of their memory is directly
|
||||
* transferred to the new data. */
|
||||
new_socket.default_attribute_name = legacy_socket.default_attribute_name;
|
||||
new_socket->default_attribute_name = legacy_socket.default_attribute_name;
|
||||
legacy_socket.default_attribute_name = nullptr;
|
||||
new_socket.socket_data = legacy_socket.default_value;
|
||||
new_socket->socket_data = legacy_socket.default_value;
|
||||
legacy_socket.default_value = nullptr;
|
||||
new_socket.properties = legacy_socket.prop;
|
||||
new_socket->properties = legacy_socket.prop;
|
||||
legacy_socket.prop = nullptr;
|
||||
|
||||
/* Unused data. */
|
||||
MEM_delete(legacy_socket.runtime);
|
||||
legacy_socket.runtime = nullptr;
|
||||
|
||||
return new_item;
|
||||
return &new_socket->item;
|
||||
}
|
||||
|
||||
static void versioning_convert_node_tree_socket_lists_to_interface(bNodeTree *ntree)
|
||||
|
|
Loading…
Reference in New Issue