summaryrefslogtreecommitdiff
path: root/xps/xps_doc.c
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2012-11-29 11:55:34 +0000
committerRobin Watts <robin.watts@artifex.com>2012-11-29 11:57:11 +0000
commitc3fa0d45ff96eefe6effaeffc45516c6f85587bd (patch)
tree5f6b8682571b9a76ffde02895ce1b7fc109d9c95 /xps/xps_doc.c
parent94b2a364223143dc7f749862c6983173d8b47a66 (diff)
downloadmupdf-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.c32
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");