From 60a6ae6f0b84f059e33b8c658ef22c3d933db0a2 Mon Sep 17 00:00:00 2001 From: Christophe Fergeau Date: Sun, 29 Mar 2015 17:15:15 +0200 Subject: [PATCH] Fix GError leak in g_file_query_writable_namespaces() gvfs commit b358ca "Make sure metadata is always returned by query_writable_namespaces()" changed the query_writable_namespaces vfunc to never return NULL, but the error checking in g_daemon_file_query_writable_namespaces still assumes vfunc failure implies NULL return value and GError set. This causes a memory leak as on failure the GError will be set but the vfunc implementation will have created its own default list so NULL will not be returned, and the GError will never be cleared. This commit directly checks if the GError is set to detect failures, my_error is directly dereferenced in the error block anyway. This also removes an unneeded call to g_file_attribute_info_new(); as the vfunc always returns us a non-NULL GFileAttributeInfoList. https://bugzilla.gnome.org/show_bug.cgi?id=747364 --- gio/gfile.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gio/gfile.c b/gio/gfile.c index 0fd62f21b..851be01fb 100644 --- a/gio/gfile.c +++ b/gio/gfile.c @@ -4336,10 +4336,15 @@ g_file_query_writable_namespaces (GFile *file, list = (* iface->query_writable_namespaces) (file, cancellable, &my_error); if (list == NULL) + { + g_warn_if_reached(); + list = g_file_attribute_info_list_new (); + } + + if (my_error != NULL) { if (my_error->domain == G_IO_ERROR && my_error->code == G_IO_ERROR_NOT_SUPPORTED) { - list = g_file_attribute_info_list_new (); g_error_free (my_error); } else