summaryrefslogtreecommitdiff
path: root/mupdf/pdf_xobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'mupdf/pdf_xobject.c')
-rw-r--r--mupdf/pdf_xobject.c18
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);
}
}
-