summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDario <dariosamo@gmail.com>2024-04-29 10:48:48 -0300
committerDario <dariosamo@gmail.com>2024-04-29 10:48:48 -0300
commit21bd59cdaa5f1b0c410efa30c52a3da9252667fe (patch)
tree7db2792ba17fc8a639ab8913e0860a98ea50d0ac
parentbeb798d01ab941a9abd428f3ab2ce4dd54afa53c (diff)
downloadredot-engine-21bd59cdaa5f1b0c410efa30c52a3da9252667fe.tar.gz
Fix incorrect memory read when capacity changes in RD Graph.
-rw-r--r--servers/rendering/rendering_device_graph.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/servers/rendering/rendering_device_graph.cpp b/servers/rendering/rendering_device_graph.cpp
index adac7ee3eb..b04f2ebbaa 100644
--- a/servers/rendering/rendering_device_graph.cpp
+++ b/servers/rendering/rendering_device_graph.cpp
@@ -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.
int32_t read_full_command_list_index = search_tracker->read_full_command_list_index;
while (read_full_command_list_index >= 0) {
- const RecordedCommandListNode &command_list_node = command_list_nodes[read_full_command_list_index];
- if (command_list_node.command_index == p_command_index) {
+ int32_t read_full_command_index = command_list_nodes[read_full_command_list_index].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) {
// 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.");
}
} else {
// 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) {