From c3fa0d45ff96eefe6effaeffc45516c6f85587bd Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Thu, 29 Nov 2012 11:55:34 +0000 Subject: Bug 693463: Fix various memory leaks. All these leaks were spotted by zeniko, so credit/thanks to him. --- xps/xps_doc.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'xps/xps_doc.c') diff --git a/xps/xps_doc.c b/xps/xps_doc.c index 8c86fd59..4fefceb3 100644 --- a/xps/xps_doc.c +++ b/xps/xps_doc.c @@ -366,12 +366,25 @@ xps_parse_metadata(xps_document *doc, xps_part *part, xps_fixdoc *fixdoc) static void xps_read_and_process_metadata_part(xps_document *doc, char *name, xps_fixdoc *fixdoc) { - if (xps_has_part(doc, name)) + fz_context *ctx = doc->ctx; + xps_part *part; + + if (!xps_has_part(doc, name)) + return; + + part = xps_read_part(doc, name); + fz_try(ctx) { - xps_part *part = xps_read_part(doc, name); xps_parse_metadata(doc, part, fixdoc); + } + fz_always(ctx) + { xps_free_part(doc, part); } + fz_catch(ctx) + { + fz_rethrow(ctx); + } } void @@ -415,10 +428,21 @@ xps_load_fixed_page(xps_document *doc, xps_page *page) fz_xml *root; char *width_att; char *height_att; + fz_context *ctx = doc->ctx; part = xps_read_part(doc, page->name); - root = fz_parse_xml(doc->ctx, part->data, part->size); - xps_free_part(doc, part); + fz_try(ctx) + { + root = fz_parse_xml(doc->ctx, part->data, part->size); + } + fz_always(ctx) + { + xps_free_part(doc, part); + } + fz_catch(ctx) + { + root = NULL; + } if (!root) fz_throw(doc->ctx, "FixedPage missing root element"); -- cgit v1.2.3