From a554f8e3595152cd2afa33c6a2a368f6469509de Mon Sep 17 00:00:00 2001 From: Nickolay V. Shmyrev Date: Thu, 17 Aug 2006 07:20:47 +0000 Subject: More correct handling of document loading. Fixes bug #349043. 2006-08-17 Nickolay V. Shmyrev * backend/ev-document-factory.c: (ev_document_factory_get_document): * tiff/tiff-document.c: (tiff_document_finalize): More correct handling of document loading. Fixes bug #349043. --- diff --git a/ChangeLog b/ChangeLog index 5c9836f..702ddde 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-08-17 Nickolay V. Shmyrev + + * backend/ev-document-factory.c: + (ev_document_factory_get_document): + * tiff/tiff-document.c: (tiff_document_finalize): + + More correct handling of document loading. Fixes + bug #349043. + 2006-08-14 Carlos Garcia Campos * backend/ev-attachment.c: (ev_attachment_save): diff --git a/backend/ev-document-factory.c b/backend/ev-document-factory.c index 23364a2..278a21a 100644 --- a/backend/ev-document-factory.c +++ b/backend/ev-document-factory.c @@ -287,27 +287,48 @@ EvDocument * ev_document_factory_get_document (const char *uri, GError **error) { EvDocument *document; + int result; document = get_document_from_uri (uri, FALSE, error); - if (*error == NULL) { - ev_document_load (document, uri, error); + if (*error != NULL) { + return NULL; } + + result = ev_document_load (document, uri, error); - if (*error) { - g_error_free (*error); - *error = NULL; + if (result == FALSE || *error) { + if (document) + g_object_unref (document); + document = NULL; } else { return document; } + if (*error) + g_error_free (*error); + *error = NULL; + document = get_document_from_uri (uri, TRUE, error); if (*error != NULL) { return NULL; } - ev_document_load (document, uri, error); + result = ev_document_load (document, uri, error); + + if (result == FALSE || *error) { + if (document) + g_object_unref (document); + document = NULL; + } + + if (result == FALSE && *error == NULL) { + g_set_error (error, + EV_DOCUMENT_ERROR, + 0, + _("Unknown MIME Type")); + } return document; } diff --git a/tiff/tiff-document.c b/tiff/tiff-document.c index 9f465a7..4a532e1 100644 --- a/tiff/tiff-document.c +++ b/tiff/tiff-document.c @@ -274,8 +274,10 @@ tiff_document_finalize (GObject *object) { TiffDocument *tiff_document = TIFF_DOCUMENT (object); - TIFFClose (tiff_document->tiff); - g_free (tiff_document->uri); + if (tiff_document->tiff) + TIFFClose (tiff_document->tiff); + if (tiff_document->uri) + g_free (tiff_document->uri); G_OBJECT_CLASS (tiff_document_parent_class)->finalize (object); } -- cgit v0.9.1