Blob Blame History Raw
From b5a674a757d4ad934eb505f4e3c50ee1180f3693 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Tue, 8 Aug 2017 19:12:51 +0200
Subject: [PATCH 1/3] thumbnail: Don't crash if the thumbnailer could not be
 setup

script_exec_new() can fail in certain cases, and we should not crash
when trying to expand the script command later if the initial setup
failed.

https://bugzilla.gnome.org/show_bug.cgi?id=785963
---
 libgnome-desktop/gnome-desktop-thumbnail-script.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/libgnome-desktop/gnome-desktop-thumbnail-script.c b/libgnome-desktop/gnome-desktop-thumbnail-script.c
index 5a5f05f4..d9437d40 100644
--- a/libgnome-desktop/gnome-desktop-thumbnail-script.c
+++ b/libgnome-desktop/gnome-desktop-thumbnail-script.c
@@ -657,6 +657,9 @@ child_setup (gpointer user_data)
 static void
 script_exec_free (ScriptExec *exec)
 {
+  if (exec == NULL)
+    return;
+
   g_free (exec->infile);
   if (exec->outfile)
     {
@@ -757,6 +760,8 @@ gnome_desktop_thumbnail_script_exec (const char  *cmd,
   ScriptExec *exec;
 
   exec = script_exec_new (uri);
+  if (!exec)
+    goto out;
   expanded_script = expand_thumbnailing_cmd (cmd, exec, size, error);
   if (expanded_script == NULL)
     goto out;
-- 
2.13.4


From 99df9a83a36882d8a666176d9452283ae065d014 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Tue, 8 Aug 2017 19:14:09 +0200
Subject: [PATCH 2/3] thumbnail: Report errors when script_exec_new() fails

Makes it easier to debug.

https://bugzilla.gnome.org/show_bug.cgi?id=785963
---
 libgnome-desktop/gnome-desktop-thumbnail-script.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/libgnome-desktop/gnome-desktop-thumbnail-script.c b/libgnome-desktop/gnome-desktop-thumbnail-script.c
index d9437d40..1012efa8 100644
--- a/libgnome-desktop/gnome-desktop-thumbnail-script.c
+++ b/libgnome-desktop/gnome-desktop-thumbnail-script.c
@@ -687,7 +687,8 @@ clear_fd (gpointer data)
 }
 
 static ScriptExec *
-script_exec_new (const char *uri)
+script_exec_new (const char  *uri,
+		 GError     **error)
 {
   ScriptExec *exec;
   g_autoptr(GFile) file = NULL;
@@ -705,7 +706,11 @@ script_exec_new (const char *uri)
 
   exec->infile = g_file_get_path (file);
   if (!exec->infile)
-    goto bail;
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
+                   "Could not get path for URI '%s'", uri);
+      goto bail;
+    }
 
 #ifdef HAVE_BWRAP
   if (exec->sandbox)
@@ -719,7 +724,11 @@ script_exec_new (const char *uri)
       tmpl = g_strdup ("/tmp/gnome-desktop-thumbnailer-XXXXXX");
       exec->outdir = g_mkdtemp (tmpl);
       if (!exec->outdir)
-        goto bail;
+        {
+          g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                               "Could not create temporary sandbox directory");
+          goto bail;
+        }
       exec->outfile = g_build_filename (exec->outdir, "gnome-desktop-thumbnailer.png", NULL);
 
       ext = get_extension (exec->infile);
@@ -732,7 +741,7 @@ script_exec_new (const char *uri)
       int fd;
       g_autofree char *tmpname = NULL;
 
-      fd = g_file_open_tmp (".gnome_desktop_thumbnail.XXXXXX", &tmpname, NULL);
+      fd = g_file_open_tmp (".gnome_desktop_thumbnail.XXXXXX", &tmpname, error);
       if (fd == -1)
         goto bail;
       close (fd);
@@ -759,7 +768,7 @@ gnome_desktop_thumbnail_script_exec (const char  *cmd,
   GBytes *image = NULL;
   ScriptExec *exec;
 
-  exec = script_exec_new (uri);
+  exec = script_exec_new (uri, error);
   if (!exec)
     goto out;
   expanded_script = expand_thumbnailing_cmd (cmd, exec, size, error);
-- 
2.13.4


From f96041679f46ece036d742bde7d78afc67d73519 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Tue, 8 Aug 2017 19:20:31 +0200
Subject: [PATCH 3/3] thumbnail: And print those errors in the debug

https://bugzilla.gnome.org/show_bug.cgi?id=785963
---
 libgnome-desktop/gnome-desktop-thumbnail.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/libgnome-desktop/gnome-desktop-thumbnail.c b/libgnome-desktop/gnome-desktop-thumbnail.c
index 73751f69..866fc7d2 100644
--- a/libgnome-desktop/gnome-desktop-thumbnail.c
+++ b/libgnome-desktop/gnome-desktop-thumbnail.c
@@ -1066,13 +1066,20 @@ gnome_desktop_thumbnail_factory_generate_thumbnail (GnomeDesktopThumbnailFactory
   if (script)
     {
       GBytes *data;
+      GError *error = NULL;
 
-      data = gnome_desktop_thumbnail_script_exec (script, size, uri, NULL);
+      data = gnome_desktop_thumbnail_script_exec (script, size, uri, &error);
       if (data)
         {
           pixbuf = pixbuf_new_from_bytes (data, NULL);
           g_bytes_unref (data);
         }
+      else
+        {
+          g_debug ("Thumbnail script ('%s') failed for '%s': %s",
+                   script, uri, error ? error->message : "no details");
+          g_clear_error (&error);
+        }
     }
 
   g_free (script);
-- 
2.13.4