Merge pull request #91312 from DarioSamo/render_graph_asan

Fix incorrect memory read when capacity changes in RD Graph.
This commit is contained in:
Rémi Verschelde 2024-04-30 17:03:39 +02:00
commit 4fb0c00de3
No known key found for this signature in database
GPG Key ID: C3336907360768E1
1 changed files with 5 additions and 4 deletions

View File

@ -495,18 +495,19 @@ void RenderingDeviceGraph::_add_command_to_graph(ResourceTracker **p_resource_tr
// We add this command to the adjacency list of all commands that were reading from the entire resource. // We add this command to the adjacency list of all commands that were reading from the entire resource.
int32_t read_full_command_list_index = search_tracker->read_full_command_list_index; int32_t read_full_command_list_index = search_tracker->read_full_command_list_index;
while (read_full_command_list_index >= 0) { while (read_full_command_list_index >= 0) {
const RecordedCommandListNode &command_list_node = command_list_nodes[read_full_command_list_index]; int32_t read_full_command_index = command_list_nodes[read_full_command_list_index].command_index;
if (command_list_node.command_index == p_command_index) { int32_t read_full_next_index = command_list_nodes[read_full_command_list_index].next_list_index;
if (read_full_command_index == p_command_index) {
if (!resource_has_parent) { if (!resource_has_parent) {
// Only slices are allowed to be in different usages in the same command as they are guaranteed to have no overlap in the same command. // Only slices are allowed to be in different usages in the same command as they are guaranteed to have no overlap in the same command.
ERR_FAIL_MSG("Command can't have itself as a dependency."); ERR_FAIL_MSG("Command can't have itself as a dependency.");
} }
} else { } else {
// Add this command to the adjacency list of each command that was reading this resource. // Add this command to the adjacency list of each command that was reading this resource.
_add_adjacent_command(command_list_node.command_index, p_command_index, r_command); _add_adjacent_command(read_full_command_index, p_command_index, r_command);
} }
read_full_command_list_index = command_list_node.next_list_index; read_full_command_list_index = read_full_next_index;
} }
if (!resource_has_parent) { if (!resource_has_parent) {