From 2e36d4bacc3cffebe62161adc375bb9ec64099f5 Mon Sep 17 00:00:00 2001 From: Timothy OBrien Date: Fri, 18 Jan 2019 19:42:46 +1100 Subject: [PATCH 1/2] gnome-desktop: update to latest version of upstream thumbnail code The thumbnail code in gnome-desktop had recent bug fixes that needed to be carried across to the Nautilus implementation. Issues for the three related upstream fixes can be found at: https://gitlab.gnome.org/GNOME/gnome-desktop/issues/4 | https://gitlab.gnome.org/GNOME/gnome-desktop/issues/89 | https://gitlab.gnome.org/GNOME/gnome-desktop/issues/87 This patch includes the latest thumbnail code from the gnome-desktop repository to include the fixes. Fixes #836 (cherry picked from commit e88b2dc8783833c4263ad5d84567a67dbc7bc6de) --- .../gnome-desktop-thumbnail-script.c | 54 +++++++++++++++++-- src/gnome-desktop/gnome-desktop-thumbnail.c | 4 +- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/src/gnome-desktop/gnome-desktop-thumbnail-script.c b/src/gnome-desktop/gnome-desktop-thumbnail-script.c index 14e2fed3a..525766388 100644 --- a/src/gnome-desktop/gnome-desktop-thumbnail-script.c +++ b/src/gnome-desktop/gnome-desktop-thumbnail-script.c @@ -506,22 +506,68 @@ setup_seccomp (GPtrArray *argv_array, #endif #ifdef HAVE_BWRAP +static gboolean +path_is_usrmerged (const char *dir) +{ + /* does /dir point to /usr/dir? */ + g_autofree char *target = NULL; + GStatBuf stat_buf_src, stat_buf_target; + + if (g_stat (dir, &stat_buf_src) < 0) + return FALSE; + + target = g_strdup_printf ("/usr/%s", dir); + + if (g_stat (target, &stat_buf_target) < 0) + return FALSE; + + return (stat_buf_src.st_dev == stat_buf_target.st_dev) && + (stat_buf_src.st_ino == stat_buf_target.st_ino); +} + static gboolean add_bwrap (GPtrArray *array, ScriptExec *script) { + const char * const usrmerged_dirs[] = { "bin", "lib64", "lib", "sbin" }; + int i; + g_return_val_if_fail (script->outdir != NULL, FALSE); g_return_val_if_fail (script->s_infile != NULL, FALSE); add_args (array, "bwrap", "--ro-bind", "/usr", "/usr", - "--ro-bind", "/lib", "/lib", - "--ro-bind", "/lib64", "/lib64", + "--ro-bind", "/etc/ld.so.cache", "/etc/ld.so.cache", + NULL); + + /* These directories might be symlinks into /usr/... */ + for (i = 0; i < G_N_ELEMENTS (usrmerged_dirs); i++) + { + g_autofree char *absolute_dir = g_strdup_printf ("/%s", usrmerged_dirs[i]); + + if (!g_file_test (absolute_dir, G_FILE_TEST_EXISTS)) + continue; + + if (path_is_usrmerged (absolute_dir)) + { + g_autofree char *symlink_target = g_strdup_printf ("/usr/%s", absolute_dir); + + add_args (array, + "--symlink", symlink_target, absolute_dir, + NULL); + } + else + { + add_args (array, + "--ro-bind", absolute_dir, absolute_dir, + NULL); + } + } + + add_args (array, "--proc", "/proc", "--dev", "/dev", - "--symlink", "usr/bin", "/bin", - "--symlink", "usr/sbin", "/sbin", "--chdir", "/", "--setenv", "GIO_USE_VFS", "local", "--unshare-all", diff --git a/src/gnome-desktop/gnome-desktop-thumbnail.c b/src/gnome-desktop/gnome-desktop-thumbnail.c index b31bad58d..f48fd461a 100644 --- a/src/gnome-desktop/gnome-desktop-thumbnail.c +++ b/src/gnome-desktop/gnome-desktop-thumbnail.c @@ -967,8 +967,8 @@ get_preview_thumbnail (const char *uri, if (file_info == NULL) return NULL; - object = g_file_info_get_attribute_object (file_info, - G_FILE_ATTRIBUTE_PREVIEW_ICON); + object = g_object_ref (g_file_info_get_attribute_object (file_info, + G_FILE_ATTRIBUTE_PREVIEW_ICON)); g_object_unref (file_info); if (!object) -- 2.17.0