summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTimothy OBrien <obrien.timothy.a@gmail.com>2019-01-18 19:42:46 +1100
committerTimothy OBrien <obrien.timothy.a@gmail.com>2019-01-18 19:42:46 +1100
commite88b2dc8783833c4263ad5d84567a67dbc7bc6de (patch)
treebc7077c8f9abcae75e9eac9ceac081981bccd40f /src
parentef9dca67c6ff05f599f1f5ac2e72448017782dd9 (diff)
downloadnautilus-e88b2dc8783833c4263ad5d84567a67dbc7bc6de.tar.gz
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
Diffstat (limited to 'src')
-rw-r--r--src/gnome-desktop/gnome-desktop-thumbnail-script.c54
-rw-r--r--src/gnome-desktop/gnome-desktop-thumbnail.c4
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
@@ -507,21 +507,67 @@ setup_seccomp (GPtrArray *argv_array,
#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)