[PATCH 4/6] mf/topology: Fix various simple reference counting leaks in the topology loader.

Derek Lesho dlesho at codeweavers.com
Tue Jan 4 11:35:25 CST 2022


Signed-off-by: Derek Lesho <dlesho at codeweavers.com>
---
 dlls/mf/topology.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/dlls/mf/topology.c b/dlls/mf/topology.c
index 34459912fb0..a92d7478440 100644
--- a/dlls/mf/topology.c
+++ b/dlls/mf/topology.c
@@ -2358,6 +2358,7 @@ static HRESULT topology_loader_resolve_branch(struct topoloader_context *context
     };
     MF_TOPOLOGY_TYPE u_type, d_type;
     IMFTopologyNode *node;
+    HRESULT hr;
     TOPOID id;
 
     /* Downstream node might have already been cloned. */
@@ -2371,10 +2372,13 @@ static HRESULT topology_loader_resolve_branch(struct topoloader_context *context
     if (!connectors[u_type][d_type])
     {
         WARN("Unsupported branch kind %d -> %d.\n", u_type, d_type);
+        IMFTopologyNode_Release(node);
         return E_FAIL;
     }
 
-    return connectors[u_type][d_type](context, upstream_node, output_index, node, input_index);
+    hr = connectors[u_type][d_type](context, upstream_node, output_index, node, input_index);
+    IMFTopologyNode_Release(node);
+    return hr;
 }
 
 static HRESULT topology_loader_resolve_nodes(struct topoloader_context *context, unsigned int *layer_size)
@@ -2398,10 +2402,13 @@ static HRESULT topology_loader_resolve_nodes(struct topoloader_context *context,
                 if (FAILED(IMFTopologyNode_GetOutput(orig_node, 0, &downstream_node, &input_index)))
                 {
                     IMFTopology_RemoveNode(context->output_topology, node);
+                    IMFTopologyNode_Release(orig_node);
+                    IMFTopologyNode_Release(node);
                     continue;
                 }
 
                 hr = topology_loader_resolve_branch(context, node, 0, downstream_node, input_index);
+                IMFTopologyNode_Release(downstream_node);
                 break;
             case MF_TOPOLOGY_TRANSFORM_NODE:
             case MF_TOPOLOGY_TEE_NODE:
@@ -2412,6 +2419,8 @@ static HRESULT topology_loader_resolve_nodes(struct topoloader_context *context,
         }
 
         IMFTopologyNode_DeleteItem(node, &context->key);
+        IMFTopologyNode_Release(orig_node);
+        IMFTopologyNode_Release(node);
 
         if (FAILED(hr))
             break;
-- 
2.33.1




More information about the wine-devel mailing list