[tracker/wip/carlosg/leak-fixes: 1/4] libtracker-sparql: Fix possible invalid writes in TrackerResource dispose



commit e83b6911f582c061b0300c88c77556b008e34702
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Jun 3 17:29:27 2020 +0200

    libtracker-sparql: Fix possible invalid writes in TrackerResource dispose
    
    A resource may indirectly point to itself, in which case, clearing the
    properties hashtables on finalize() will end up calling dispose() again
    on this resource, but the hashtables were now gone.
    
    Ensure the hashtables are freed/nullified on dispose(), so this kind
    of reentrancy cannot happen. Any later time(s) the dispose method happens
    will be on empty hashtables.

 src/libtracker-sparql/tracker-resource.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)
---
diff --git a/src/libtracker-sparql/tracker-resource.c b/src/libtracker-sparql/tracker-resource.c
index 0f0c361a6..15eeac575 100644
--- a/src/libtracker-sparql/tracker-resource.c
+++ b/src/libtracker-sparql/tracker-resource.c
@@ -150,8 +150,8 @@ dispose (GObject *object)
 
        priv = GET_PRIVATE (TRACKER_RESOURCE (object));
 
-       g_hash_table_remove_all (priv->overwrite);
-       g_hash_table_remove_all (priv->properties);
+       g_clear_pointer (&priv->overwrite, g_hash_table_unref);
+       g_clear_pointer (&priv->properties, g_hash_table_unref);
 
        G_OBJECT_CLASS (tracker_resource_parent_class)->dispose (object);
 }
@@ -181,9 +181,6 @@ finalize (GObject *object)
                g_free (priv->identifier);
        }
 
-       g_hash_table_unref (priv->overwrite);
-       g_hash_table_unref (priv->properties);
-
        (G_OBJECT_CLASS (tracker_resource_parent_class)->finalize)(object);
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]