]> www.fi.muni.cz Git - evince.git/commitdiff
Make sure to always set @error when returning FALSE.
authorChristian Persch <chpe@src.gnome.org>
Sun, 15 Feb 2009 13:52:50 +0000 (13:52 +0000)
committerChristian Persch <chpe@src.gnome.org>
Sun, 15 Feb 2009 13:52:50 +0000 (13:52 +0000)
* backend/comics/comics-document.c: (comics_document_load): Make sure
to always set @error when returning FALSE.

svn path=/trunk/; revision=3452

ChangeLog
backend/comics/comics-document.c

index 64a9a4f8f4c7baa5e68fa300e51b15bc23e1730c..04ebd2b6e7b9452101d228d20790f6c5749848ea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-02-14  Christian Persch  <chpe@gnome.org>
+
+       * backend/comics/comics-document.c: (comics_document_load): Make sure
+       to always set @error when returning FALSE.
+
 2009-02-14  Christian Persch  <chpe@gnome.org>
 
        * backend/impress/impress-document.c: (impress_document_load): Plug a
index 82b3e398ca0e5808a3d0d145fc481a73b250e6ff..dc5a8b0dde79300b24ed5888bb8c0800ab40e00b 100644 (file)
@@ -114,12 +114,27 @@ comics_document_load (EvDocument *document,
        gchar **cbr_files;
        gboolean success;
        int i, retval;
+       GError *err = NULL;
 
        comics_document->archive = g_filename_from_uri (uri, NULL, error);
-       g_return_val_if_fail (comics_document->archive != NULL, FALSE);
+       if (!comics_document->archive)
+               return FALSE;
+
+       mime_type = ev_file_get_mime_type (uri, FALSE, &err);
+       if (!mime_type) {
+               if (err) {
+                       g_propagate_error (error, err);
+               } else {
+                       g_set_error_literal (error,
+                                             EV_DOCUMENT_ERROR,
+                                             EV_DOCUMENT_ERROR_INVALID,
+                                             _("Unknown MIME Type"));
+               }
+
+               return FALSE;
+       }
 
        quoted_file = g_shell_quote (comics_document->archive);
-       mime_type = ev_file_get_mime_type (uri, FALSE, NULL);
 
        /* FIXME, use proper cbr/cbz mime types once they're
         * included in shared-mime-info */
@@ -143,6 +158,15 @@ comics_document_load (EvDocument *document,
                list_files_command = 
                        g_strdup_printf ("7zr l -- %s", quoted_file);
                comics_document->regex_arg = TRUE;
+       } else {
+               g_set_error (error,
+                            EV_DOCUMENT_ERROR,
+                            EV_DOCUMENT_ERROR_INVALID,
+                            _("Not a comic book MIME type: %s"),
+                            mime_type);
+               g_free (mime_type);
+               g_free (quoted_file);
+               return FALSE;
        }
 
        g_free (mime_type);
@@ -163,7 +187,18 @@ comics_document_load (EvDocument *document,
                return FALSE;
        }
 
+       /* FIXME: is this safe against filenames containing \n in the archive ? */
        cbr_files = g_strsplit (std_out, "\n", 0);
+       g_free (std_out);
+
+       if (!cbr_files) {
+               g_set_error_literal (error,
+                                    EV_DOCUMENT_ERROR,
+                                    EV_DOCUMENT_ERROR_INVALID,
+                                    _("No files in archive."));
+               return FALSE;
+       }
+
        supported_extensions = get_supported_image_extensions ();
        for (i = 0; cbr_files[i] != NULL; i++) {
                gchar *suffix = g_strrstr (cbr_files[i], ".");
@@ -184,7 +219,6 @@ comics_document_load (EvDocument *document,
                g_free (suffix);
        }
 
-       g_free (std_out);
        g_strfreev (cbr_files);
        g_slist_foreach (supported_extensions, (GFunc) g_free, NULL);
        g_slist_free (supported_extensions);