From d236257299344207736086400960b0add2c1200b Mon Sep 17 00:00:00 2001 From: Ondrej Holy Date: Mon, 19 Oct 2015 13:48:46 +0200 Subject: [PATCH] google: Fail in-fs copy/move if it leads to display name loss Complicated file name handling on google backend leads to display name loss if in-fs copy and move operation is proceeded e.g. using Nautilus. Proper fix will require larger changes for the whole platform. Therefore fail the job preferably to avoid display name loss... https://bugzilla.gnome.org/show_bug.cgi?id=755701 --- daemon/gvfsbackendgoogle.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/daemon/gvfsbackendgoogle.c b/daemon/gvfsbackendgoogle.c index 0acec9a..59e2dfe 100644 --- a/daemon/gvfsbackendgoogle.c +++ b/daemon/gvfsbackendgoogle.c @@ -1192,6 +1192,22 @@ g_vfs_backend_google_copy (GVfsBackend *_self, } } + etag = gdata_entry_get_etag (source_entry); + id = gdata_entry_get_id (source_entry); + summary = gdata_entry_get_summary (source_entry); + + /* Fail the job if copy/move operation leads to display name loss. + * Use G_IO_ERROR_FAILED instead of _NOT_SUPPORTED to avoid r/w fallback. + * See: https://bugzilla.gnome.org/show_bug.cgi?id=755701 */ + if (g_strcmp0 (id, destination_basename) == 0) + { + g_vfs_job_failed_literal (G_VFS_JOB (job), + G_IO_ERROR, + G_IO_ERROR_FAILED, + _("Operation unsupported")); + goto out; + } + if (destination_not_directory) { g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_NOT_DIRECTORY, _("The file is not a directory")); @@ -1230,10 +1246,6 @@ g_vfs_backend_google_copy (GVfsBackend *_self, } } - etag = gdata_entry_get_etag (source_entry); - id = gdata_entry_get_id (source_entry); - summary = gdata_entry_get_summary (source_entry); - source_entry_type = G_OBJECT_TYPE (source_entry); dummy_source_entry = g_object_new (source_entry_type, "etag", etag, -- 2.5.0