summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2018-10-02 02:22:07 +0800
committerTor Andersson <tor.andersson@artifex.com>2018-10-23 18:46:01 +0200
commite94bcbd37bca2b56880fd7729061fb0f20fe1351 (patch)
treee4370f81c71d257b0c5a04236471092ff6c04476 /source
parent2582f7e21ec079d2d611ad748d5fc77ea3ce3938 (diff)
downloadmupdf-e94bcbd37bca2b56880fd7729061fb0f20fe1351.tar.xz
Drop loaded object while writing hint stream.
This covers both the case of no error and a thrown exception.
Diffstat (limited to 'source')
-rw-r--r--source/pdf/pdf-write.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/source/pdf/pdf-write.c b/source/pdf/pdf-write.c
index 9a04082b..1849b48b 100644
--- a/source/pdf/pdf-write.c
+++ b/source/pdf/pdf-write.c
@@ -2568,20 +2568,26 @@ make_page_offset_hints(fz_context *ctx, pdf_document *doc, pdf_write_state *opts
static void
make_hint_stream(fz_context *ctx, pdf_document *doc, pdf_write_state *opts)
{
- fz_buffer *buf = fz_new_buffer(ctx, 100);
+ fz_buffer *buf;
+ pdf_obj *obj = NULL;
+
+ fz_var(obj);
+ buf = fz_new_buffer(ctx, 100);
fz_try(ctx)
{
make_page_offset_hints(ctx, doc, opts, buf);
- pdf_update_stream(ctx, doc, pdf_load_object(ctx, doc, pdf_xref_len(ctx, doc)-1), buf, 0);
+ obj = pdf_load_object(ctx, doc, pdf_xref_len(ctx, doc)-1);
+ pdf_update_stream(ctx, doc, obj, buf, 0);
opts->hintstream_len = (int)fz_buffer_storage(ctx, buf, NULL);
- fz_drop_buffer(ctx, buf);
}
- fz_catch(ctx)
+ fz_always(ctx)
{
+ pdf_drop_obj(ctx, obj);
fz_drop_buffer(ctx, buf);
- fz_rethrow(ctx);
}
+ fz_catch(ctx)
+ fz_rethrow(ctx);
}
#ifdef DEBUG_WRITING