diff options
author | Robin Watts <robin.watts@artifex.com> | 2012-11-29 11:55:34 +0000 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2012-11-29 11:57:11 +0000 |
commit | c3fa0d45ff96eefe6effaeffc45516c6f85587bd (patch) | |
tree | 5f6b8682571b9a76ffde02895ce1b7fc109d9c95 /xps/xps_doc.c | |
parent | 94b2a364223143dc7f749862c6983173d8b47a66 (diff) | |
download | mupdf-c3fa0d45ff96eefe6effaeffc45516c6f85587bd.tar.xz |
Bug 693463: Fix various memory leaks.
All these leaks were spotted by zeniko, so credit/thanks to him.
Diffstat (limited to 'xps/xps_doc.c')
-rw-r--r-- | xps/xps_doc.c | 32 |
1 files changed, 28 insertions, 4 deletions
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"); |