File vte-fix-memory-leaks.patch of Package vte

From 1d200a63ac4e39035af35e80881aa4fdae5556c6 Mon Sep 17 00:00:00 2001
From: Christian Persch <chpe@src.gnome.org>
Date: Sat, 18 Nov 2017 18:40:03 +0100
Subject: matcher: Fix memory leak

Don't leak the GValueArray.

https://bugzilla.gnome.org/show_bug.cgi?id=790539
(cherry picked from commit dda73cc07250ea324b4227907197c39b93fcd365)
---
 src/matcher.cc | 12 +++++++-----
 src/table.cc   | 19 +++++++++++--------
 2 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/src/matcher.cc b/src/matcher.cc
index 10f3bc7..a4f7584 100644
--- a/src/matcher.cc
+++ b/src/matcher.cc
@@ -202,14 +202,16 @@ _vte_matcher_print(struct _vte_matcher *matcher)
  * we need to free those ourselves. */
 void
 _vte_matcher_free_params_array(struct _vte_matcher *matcher,
-		               GValueArray *params)
+                               GValueArray *params)
 {
 	guint i;
 	for (i = 0; i < params->n_values; i++) {
-		GValue *value = &params->values[i];
-		if (G_UNLIKELY (g_type_is_a (value->g_type, G_TYPE_POINTER))) {
-			g_free (g_value_get_pointer (value));
-		}
+                auto value = g_value_array_get_nth(params, i);
+                if (G_UNLIKELY (G_VALUE_HOLDS_POINTER(value))) {
+                        g_free(g_value_get_pointer(value));
+                } else if (G_UNLIKELY (G_VALUE_HOLDS_BOXED(value))) {
+                        g_value_array_free((GValueArray*)g_value_get_boxed(value));
+                }
 	}
 	if (G_UNLIKELY (matcher == NULL || matcher->free_params != NULL)) {
 		g_value_array_free (params);
diff --git a/src/table.cc b/src/table.cc
index 3c78f3a..09a6172 100644
--- a/src/table.cc
+++ b/src/table.cc
@@ -516,18 +516,14 @@ static void
 _vte_table_extract_numbers(GValueArray **array,
 			   struct _vte_table_arginfo *arginfo)
 {
-	GValue value = {0,};
-	GValue subvalue = {0,};
-	GValueArray *subarray = NULL;
-	gssize i;
-
         if (G_UNLIKELY (*array == NULL)) {
                 *array = g_value_array_new(1);
         }
 
+	GValue value = {0,};
 	g_value_init(&value, G_TYPE_LONG);
-	g_value_init(&subvalue, G_TYPE_VALUE_ARRAY);
-	i = 0;
+	gssize i = 0;
+        GValueArray *subarray = nullptr;
 	do {
 		long total = 0;
 		for (; i < arginfo->length && arginfo->start[i] != ';' && arginfo->start[i] != ':'; i++) {
@@ -546,13 +542,20 @@ _vte_table_extract_numbers(GValueArray **array,
 				g_value_array_append(*array, &value);
 			} else {
 				g_value_array_append(subarray, &value);
-				g_value_set_boxed(&subvalue, subarray);
+
+                                GValue subvalue = {0,};
+                                g_value_init(&subvalue, G_TYPE_VALUE_ARRAY);
+				g_value_take_boxed(&subvalue, subarray);
 				g_value_array_append(*array, &subvalue);
+                                g_value_unset(&subvalue);
+
 				subarray = NULL;
 			}
 		}
 	} while (i++ < arginfo->length);
 	g_value_unset(&value);
+        if (subarray != nullptr)
+                g_value_array_free(subarray);
 }
 
 static void
-- 
cgit v0.12


From ddd6dc998d9842369ec20f8e83c380401a8aed02 Mon Sep 17 00:00:00 2001
From: Christian Persch <chpe@src.gnome.org>
Date: Sat, 18 Nov 2017 19:10:10 +0100
Subject: pty: Fix mem leak

(cherry picked from commit 304e29d8a603828f42410ceac39ad803fcac475b)
---
 src/pty.cc | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/pty.cc b/src/pty.cc
index c1741d2..0c0b001 100644
--- a/src/pty.cc
+++ b/src/pty.cc
@@ -1200,5 +1200,7 @@ vte_pty_spawn_finish(VtePty *pty,
                 *child_pid = *(GPid*)pidptr;
         if (error)
                 *error = nullptr;
+
+        g_free(pidptr);
         return TRUE;
 }
-- 
cgit v0.12

openSUSE Build Service is sponsored by