diff options
Diffstat (limited to 'mupdf/pdf_xobject.c')
-rw-r--r-- | mupdf/pdf_xobject.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/mupdf/pdf_xobject.c b/mupdf/pdf_xobject.c index 62cebb35..edde7bfe 100644 --- a/mupdf/pdf_xobject.c +++ b/mupdf/pdf_xobject.c @@ -19,8 +19,7 @@ pdf_loadxobject(pdf_xobject **formp, pdf_xref *xref, fz_obj *dict) form->resources = nil; form->contents = nil; - /* Store item immediately, to avoid infinite recursion if contained - objects refer again to this xobject */ + /* Store item immediately, to avoid possible recursion if objects refer back to this one */ pdf_storeitem(xref->store, PDF_KXOBJECT, dict, form); pdf_logrsrc("load xobject (%d %d R) ptr=%p {\n", fz_tonum(dict), fz_togen(dict), form); @@ -65,27 +64,20 @@ pdf_loadxobject(pdf_xobject **formp, pdf_xref *xref, fz_obj *dict) pdf_logrsrc("transparency %d\n", form->transparency); form->resources = fz_dictgets(dict, "Resources"); - if (form->resources) - form->resources = fz_keepobj(form->resources); error = pdf_loadstream(&form->contents, xref, fz_tonum(dict), fz_togen(dict)); if (error) { - error = fz_rethrow(error, "cannot load xobject content stream"); - goto cleanup; + pdf_removeitem(xref->store, PDF_KXOBJECT, dict); + pdf_dropxobject(form); + return fz_rethrow(error, "cannot load xobject content stream (%d %d R)", fz_tonum(dict), fz_togen(dict)); } pdf_logrsrc("stream %d bytes\n", form->contents->wp - form->contents->rp); - pdf_logrsrc("}\n"); *formp = form; return fz_okay; - -cleanup: - pdf_removeitem(xref->store, PDF_KXOBJECT, dict); - pdf_dropxobject(form); - return error; } pdf_xobject * @@ -100,9 +92,7 @@ pdf_dropxobject(pdf_xobject *xobj) { if (xobj && --xobj->refs == 0) { - if (xobj->resources) fz_dropobj(xobj->resources); if (xobj->contents) fz_dropbuffer(xobj->contents); fz_free(xobj); } } - |