diff options
author | Ondrej Holy <oholy@redhat.com> | 2014-11-14 10:08:03 +0100 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2015-01-06 10:38:40 +0100 |
commit | a03635ee68f043b68c1bb4cb95114af3ecb65ec4 (patch) | |
tree | 037d01373d40a8d30ebc1696133e59a19be816c9 /client/gdaemonfile.c | |
parent | 7ea61cb7e5ff41f4abf228df3d9539ce3c07d18b (diff) | |
download | gvfs-a03635ee68f043b68c1bb4cb95114af3ecb65ec4.tar.gz |
metadata: don't crash if meta_tree_init fails
It can fail when e.g. database file is corrupted or doesn't have
correct permissions. This patch also adds warnings to be possible
determine reason why initialization failed.
It is based on patches from Matthew W. S. Bell and Ross Lagerwall.
https://bugzilla.gnome.org/show_bug.cgi?id=598561
Diffstat (limited to 'client/gdaemonfile.c')
-rw-r--r-- | client/gdaemonfile.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/client/gdaemonfile.c b/client/gdaemonfile.c index e97c9a4e..53e5f9a0 100644 --- a/client/gdaemonfile.c +++ b/client/gdaemonfile.c @@ -830,12 +830,16 @@ add_metadata (GFile *file, tree = meta_tree_lookup_by_name (treename, FALSE); g_free (treename); - g_file_info_set_attribute_mask (info, matcher); - meta_tree_enumerate_keys (tree, daemon_file->path, - enumerate_keys_callback, info); - g_file_info_unset_attribute_mask (info); + if (tree) + { + g_file_info_set_attribute_mask (info, matcher); + meta_tree_enumerate_keys (tree, daemon_file->path, + enumerate_keys_callback, info); + g_file_info_unset_attribute_mask (info); + + meta_tree_unref (tree); + } - meta_tree_unref (tree); g_file_attribute_matcher_unref (matcher); } @@ -2649,6 +2653,14 @@ set_metadata_attribute (GFile *file, tree = meta_tree_lookup_by_name (treename, FALSE); g_free (treename); + if (!tree) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, + _("Error setting file metadata: %s"), + _("can't open metadata tree")); + return FALSE; + } + res = FALSE; proxy = _g_daemon_vfs_get_metadata_proxy (cancellable, error); |