gnome-control-center/gnome-control-center-fix-crash-retrive-disksize.patch

84 lines
2.7 KiB
Diff
Raw Normal View History

From 26287234bd9152fbe95baa82b9d55b8064d789c2 Mon Sep 17 00:00:00 2001
From: Ondrej Holy <oholy@redhat.com>
Date: Wed, 13 Mar 2019 15:49:33 +0100
Subject: [PATCH] info: Fix crashes when retrieving disk size
Info panel crashes has been fixed by !387 on master branch, however,
gnome-3-30 is still affected as the same fix can't be used there, because
its complexity and changed dependencies. The panel crashes because
GUnixMountPoint is by mistake used as GUnixMountEntry. Let's find
and use corresponing GUnixMountEntry to simply fix those crashes for
gnome-3-30.
Closes: #411
---
panels/info/cc-info-overview-panel.c | 33 +++++++++++++++++++++++-----
1 file changed, 28 insertions(+), 5 deletions(-)
diff --git a/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c
index 7758271b1..fa9510b06 100644
--- a/panels/info/cc-info-overview-panel.c
+++ b/panels/info/cc-info-overview-panel.c
@@ -546,10 +546,30 @@ get_primary_disc_info_start (CcInfoOverviewPanel *self)
self);
}
+static GList *
+convert_points_to_entries (GList *points)
+{
+ GList *entries = NULL;
+ GList *p;
+
+ for (p = points; p != NULL; p = p->next)
+ {
+ GUnixMountPoint *point = p->data;
+ GUnixMountEntry *mount;
+ const gchar *mount_path = g_unix_mount_point_get_mount_path (point);
+
+ mount = g_unix_mount_at (mount_path, NULL);
+ if (mount)
+ entries = g_list_append (entries, mount);
+ }
+
+ return entries;
+}
+
static void
get_primary_disc_info (CcInfoOverviewPanel *self)
{
- GList *points;
+ GList *points, *entries = NULL;
GList *p;
GHashTable *hash;
CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self);
@@ -557,11 +577,14 @@ get_primary_disc_info (CcInfoOverviewPanel *self)
hash = g_hash_table_new (g_str_hash, g_str_equal);
points = g_unix_mount_points_get (NULL);
+ entries = convert_points_to_entries (points);
+ g_list_free_full (points, (GDestroyNotify) g_unix_mount_point_free);
+
/* If we do not have /etc/fstab around, try /etc/mtab */
- if (points == NULL)
- points = g_unix_mounts_get (NULL);
+ if (entries == NULL)
+ entries = g_unix_mounts_get (NULL);
- for (p = points; p != NULL; p = p->next)
+ for (p = entries; p != NULL; p = p->next)
{
GUnixMountEntry *mount = p->data;
const char *mount_path;
@@ -586,7 +609,7 @@ get_primary_disc_info (CcInfoOverviewPanel *self)
priv->primary_mounts = g_list_prepend (priv->primary_mounts, mount);
g_hash_table_insert (hash, (gpointer) device_path, (gpointer) device_path);
}
- g_list_free (points);
+ g_list_free (entries);
g_hash_table_destroy (hash);
priv->cancellable = g_cancellable_new ();
--
2.18.1