diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2018-10-02 02:22:07 +0800 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2018-10-23 18:46:01 +0200 |
commit | e94bcbd37bca2b56880fd7729061fb0f20fe1351 (patch) | |
tree | e4370f81c71d257b0c5a04236471092ff6c04476 | |
parent | 2582f7e21ec079d2d611ad748d5fc77ea3ce3938 (diff) | |
download | mupdf-e94bcbd37bca2b56880fd7729061fb0f20fe1351.tar.xz |
Drop loaded object while writing hint stream.
This covers both the case of no error and a thrown exception.
-rw-r--r-- | source/pdf/pdf-write.c | 16 |
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 |