[nautilus] gnome-desktop: update to latest version of upstream thumbnail code



commit e88b2dc8783833c4263ad5d84567a67dbc7bc6de
Author: Timothy OBrien <obrien timothy a gmail com>
Date:   Fri Jan 18 19:42:46 2019 +1100

    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

 src/gnome-desktop/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)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]