diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2017-06-11 23:11:42 +0800 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2017-09-07 21:02:53 +0800 |
commit | 8cb0a389794356d7b6624f78365a5e92efdeb8e8 (patch) | |
tree | f05e3442351a46af3e4d5209f8b754c6b33f948f /source/tools | |
parent | a27d9903ec238af6e4c1c59de1e1dae817b4f028 (diff) | |
download | mupdf-8cb0a389794356d7b6624f78365a5e92efdeb8e8.tar.xz |
Make sure to always drop a fz_device even upon error.
Diffstat (limited to 'source/tools')
-rw-r--r-- | source/tools/muconvert.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/source/tools/muconvert.c b/source/tools/muconvert.c index 08932772..b38538ac 100644 --- a/source/tools/muconvert.c +++ b/source/tools/muconvert.c @@ -66,14 +66,26 @@ static void runpage(int number) { fz_rect mediabox; fz_page *page; - fz_device *dev; + fz_device *dev = NULL; page = fz_load_page(ctx, doc, number - 1); - fz_bound_page(ctx, page, &mediabox); - dev = fz_begin_page(ctx, out, &mediabox); - fz_run_page(ctx, page, dev, &fz_identity, NULL); - fz_end_page(ctx, out); - fz_drop_page(ctx, page); + + fz_var(dev); + + fz_try(ctx) + { + fz_bound_page(ctx, page, &mediabox); + dev = fz_begin_page(ctx, out, &mediabox); + fz_run_page(ctx, page, dev, &fz_identity, NULL); + } + fz_always(ctx) + { + if (dev) + fz_end_page(ctx, out); + fz_drop_page(ctx, page); + } + fz_catch(ctx) + fz_rethrow(ctx); } static void runrange(const char *range) |