summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vrhel <michael.vrhel@artifex.com>2016-02-22 16:17:40 -0800
committerMichael Vrhel <michael.vrhel@artifex.com>2016-02-22 16:17:40 -0800
commit7fd83ca9b3c58bc3156611e2ad9349be9ef94718 (patch)
treef44f22b41e4a17ff844bec211d4342aef95f1b2e
parentf99993f33a5af4dad808cb2f8d3668cbd0a192e9 (diff)
downloadmupdf-7fd83ca9b3c58bc3156611e2ad9349be9ef94718.tar.xz
Fix leaks in pdf-device.c
The Forms object should have been dropped once the reference was created for it. Also needed to clean up the group and font objects that the device maintains.
-rw-r--r--source/pdf/pdf-device.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/source/pdf/pdf-device.c b/source/pdf/pdf-device.c
index 3bc7276b..2908b9fd 100644
--- a/source/pdf/pdf-device.c
+++ b/source/pdf/pdf-device.c
@@ -851,9 +851,12 @@ pdf_dev_new_form(fz_context *ctx, pdf_obj **form_ref, pdf_device *pdev, const fz
pdf_dict_put_drop(ctx, form, PDF_NAME_BBox, pdf_new_rect(ctx, doc, bbox));
*form_ref = pdf_new_ref(ctx, doc, form);
}
- fz_catch(ctx)
+ fz_always(ctx)
{
pdf_drop_obj(ctx, form);
+ }
+ fz_catch(ctx)
+ {
fz_rethrow(ctx);
}
@@ -1285,6 +1288,11 @@ pdf_dev_drop_imp(fz_context *ctx, fz_device *dev)
pdf_drop_obj(ctx, pdev->images[i].ref);
}
+ for (i = pdev->num_groups - 1; i >= 0; i--)
+ {
+ pdf_drop_obj(ctx, pdev->groups[i].ref);
+ }
+
if (pdev->contents)
{
pdf_update_stream(ctx, doc, pdev->contents, pdev->gstates[0].buf, 0);
@@ -1298,6 +1306,8 @@ pdf_dev_drop_imp(fz_context *ctx, fz_device *dev)
pdf_drop_obj(ctx, pdev->resources);
+ fz_free(ctx, pdev->groups);
+ fz_free(ctx, pdev->fonts);
fz_free(ctx, pdev->images);
fz_free(ctx, pdev->alphas);
fz_free(ctx, pdev->gstates);