From 3902bcf1103b559bf918b132aa9d84e680a062cc Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Sun, 15 Feb 2009 13:53:34 +0000 Subject: Add code to catch backends incorrectly implementing the load vfunc. * libdocument/ev-document.c: (ev_document_load): Add code to catch backends incorrectly implementing the load vfunc. svn path=/trunk/; revision=3460 --- diff --git a/ChangeLog b/ChangeLog index 1721e2f..7b78906 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2009-02-14 Christian Persch + * libdocument/ev-document.c: (ev_document_load): Add code to catch + backends incorrectly implementing the load vfunc. + +2009-02-14 Christian Persch + * libdocument/ev-document-factory.c: (ev_document_factory_get_document): Use a local GError, and propagate as appropriate, making sure always to fill in @error if returning NULL. diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c index 3356dc2..b230b70 100644 --- a/libdocument/ev-document.c +++ b/libdocument/ev-document.c @@ -120,8 +120,23 @@ ev_document_load (EvDocument *document, { EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); gboolean retval; - - retval = iface->load (document, uri, error); + GError *err = NULL; + + retval = iface->load (document, uri, &err); + if (!retval) { + if (err) { + g_propagate_error (error, err); + } else { + g_warning ("%s::EvDocumentIface::load returned FALSE but did not fill in @error; fix the backend!\n", + G_OBJECT_TYPE_NAME (document)); + + /* So upper layers don't crash */ + g_set_error_literal (error, + EV_DOCUMENT_ERROR, + EV_DOCUMENT_ERROR_INVALID, + "Internal error in backend"); + } + } return retval; } -- cgit v0.9.1