File bgo710230-fix-leak-on-stylesheet-change.patch of Package gnome-shell.2367
From 1bdbd193bfb97999395ccff833fd17399da1f743 Mon Sep 17 00:00:00 2001
From: Hans Petter Jansson <hpj@cl.no>
Date: Wed, 1 Jun 2016 23:29:26 +0200
Subject: [PATCH] theme-node: Fix leak on stylesheet change.
on_custom_stylesheet_changed() would set properties_computed to FALSE
without freeing the old properties, then the properties pointer would
be overwritten in ensure_properties().
https://bugzilla.gnome.org/show_bug.cgi?id=710230
---
src/st/st-theme-node.c | 32 ++++++++++++++++++++------------
1 file changed, 20 insertions(+), 12 deletions(-)
diff --git a/src/st/st-theme-node.c b/src/st/st-theme-node.c
index 75df637..5582c75 100644
--- a/src/st/st-theme-node.c
+++ b/src/st/st-theme-node.c
@@ -67,10 +67,29 @@ st_theme_node_class_init (StThemeNodeClass *klass)
}
static void
+maybe_free_properties (StThemeNode *node)
+{
+ if (node->properties)
+ {
+ g_free (node->properties);
+ node->properties = NULL;
+ node->n_properties = 0;
+ }
+
+ if (node->inline_properties)
+ {
+ /* This destroys the list, not just the head of the list */
+ cr_declaration_destroy (node->inline_properties);
+ node->inline_properties = NULL;
+ }
+}
+
+static void
on_custom_stylesheets_changed (StTheme *theme,
gpointer data)
{
StThemeNode *node = data;
+ maybe_free_properties (node);
node->properties_computed = FALSE;
}
@@ -119,18 +138,7 @@ st_theme_node_finalize (GObject *object)
g_strfreev (node->pseudo_classes);
g_free (node->inline_style);
- if (node->properties)
- {
- g_free (node->properties);
- node->properties = NULL;
- node->n_properties = 0;
- }
-
- if (node->inline_properties)
- {
- /* This destroys the list, not just the head of the list */
- cr_declaration_destroy (node->inline_properties);
- }
+ maybe_free_properties (node);
if (node->font_desc)
{
--
1.8.4.5