summaryrefslogtreecommitdiff
path: root/source/fitz
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2017-06-11 23:11:42 +0800
committerSebastian Rasmussen <sebras@gmail.com>2017-09-07 21:02:53 +0800
commit8cb0a389794356d7b6624f78365a5e92efdeb8e8 (patch)
treef05e3442351a46af3e4d5209f8b754c6b33f948f /source/fitz
parenta27d9903ec238af6e4c1c59de1e1dae817b4f028 (diff)
downloadmupdf-8cb0a389794356d7b6624f78365a5e92efdeb8e8.tar.xz
Make sure to always drop a fz_device even upon error.
Diffstat (limited to 'source/fitz')
-rw-r--r--source/fitz/font.c17
-rw-r--r--source/fitz/image.c12
-rw-r--r--source/fitz/output-cbz.c16
-rw-r--r--source/fitz/output-pcl.c8
-rw-r--r--source/fitz/output-ps.c8
-rw-r--r--source/fitz/output-pwg.c8
-rw-r--r--source/fitz/output-svg.c9
-rw-r--r--source/fitz/stext-output.c9
8 files changed, 64 insertions, 23 deletions
diff --git a/source/fitz/font.c b/source/fitz/font.c
index 9a113460..9044b26b 100644
--- a/source/fitz/font.c
+++ b/source/fitz/font.c
@@ -1274,12 +1274,17 @@ fz_prepare_t3_glyph(fz_context *ctx, fz_font *font, int gid, int nested_depth)
FZ_DEVFLAG_LINEJOIN_UNDEFINED |
FZ_DEVFLAG_MITERLIMIT_UNDEFINED |
FZ_DEVFLAG_LINEWIDTH_UNDEFINED;
- font->t3run(ctx, font->t3doc, font->t3resources, contents, dev, &fz_identity, NULL, 0);
- fz_close_device(ctx, dev);
- font->t3flags[gid] = dev->flags;
- d1_rect = dev->d1_rect;
- fz_drop_device(ctx, dev);
- dev = NULL;
+ fz_try(ctx)
+ {
+ font->t3run(ctx, font->t3doc, font->t3resources, contents, dev, &fz_identity, NULL, 0);
+ fz_close_device(ctx, dev);
+ font->t3flags[gid] = dev->flags;
+ d1_rect = dev->d1_rect;
+ }
+ fz_always(ctx)
+ fz_drop_device(ctx, dev);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
if (fz_display_list_is_empty(ctx, font->t3lists[gid]))
{
/* If empty, no need for a huge bbox, especially as the logic
diff --git a/source/fitz/image.c b/source/fitz/image.c
index 2716cf56..9eedea8a 100644
--- a/source/fitz/image.c
+++ b/source/fitz/image.c
@@ -1074,9 +1074,15 @@ display_list_image_get_pixmap(fz_context *ctx, fz_image *image_, fz_irect *subar
fz_clear_pixmap(ctx, pix); /* clear to transparent */
dev = fz_new_draw_device(ctx, &ctm, pix);
- fz_run_display_list(ctx, image->list, dev, &fz_identity, NULL, NULL);
- fz_close_device(ctx, dev);
- fz_drop_device(ctx, dev);
+ fz_try(ctx)
+ {
+ fz_run_display_list(ctx, image->list, dev, &fz_identity, NULL, NULL);
+ fz_close_device(ctx, dev);
+ }
+ fz_always(ctx)
+ fz_drop_device(ctx, dev);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
/* Never do more subsampling, cos we've already given them the right size */
if (l2factor)
diff --git a/source/fitz/output-cbz.c b/source/fitz/output-cbz.c
index 68a71fed..0abeb1a4 100644
--- a/source/fitz/output-cbz.c
+++ b/source/fitz/output-cbz.c
@@ -31,8 +31,12 @@ cbz_end_page(fz_context *ctx, fz_document_writer *wri_, fz_device *dev)
fz_buffer *buffer;
char name[40];
- fz_close_device(ctx, dev);
- fz_drop_device(ctx, dev);
+ fz_try(ctx)
+ fz_close_device(ctx, dev);
+ fz_always(ctx)
+ fz_drop_device(ctx, dev);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
wri->count += 1;
@@ -111,8 +115,12 @@ pixmap_end_page(fz_context *ctx, fz_document_writer *wri_, fz_device *dev)
fz_pixmap_writer *wri = (fz_pixmap_writer*)wri_;
char path[PATH_MAX];
- fz_close_device(ctx, dev);
- fz_drop_device(ctx, dev);
+ fz_try(ctx)
+ fz_close_device(ctx, dev);
+ fz_always(ctx)
+ fz_drop_device(ctx, dev);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
wri->count += 1;
diff --git a/source/fitz/output-pcl.c b/source/fitz/output-pcl.c
index 32072518..e3999b25 100644
--- a/source/fitz/output-pcl.c
+++ b/source/fitz/output-pcl.c
@@ -1423,8 +1423,12 @@ pcl_end_page(fz_context *ctx, fz_document_writer *wri_, fz_device *dev)
{
fz_pcl_writer *wri = (fz_pcl_writer*)wri_;
- fz_close_device(ctx, dev);
- fz_drop_device(ctx, dev);
+ fz_try(ctx)
+ fz_close_device(ctx, dev);
+ fz_always(ctx)
+ fz_drop_device(ctx, dev);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
if (wri->mono)
{
diff --git a/source/fitz/output-ps.c b/source/fitz/output-ps.c
index 8f19693e..f0af6ff0 100644
--- a/source/fitz/output-ps.c
+++ b/source/fitz/output-ps.c
@@ -287,8 +287,12 @@ ps_end_page(fz_context *ctx, fz_document_writer *wri_, fz_device *dev)
fz_pixmap *pix = wri->pixmap;
fz_band_writer *bw;
- fz_close_device(ctx, dev);
- fz_drop_device(ctx, dev);
+ fz_try(ctx)
+ fz_close_device(ctx, dev);
+ fz_always(ctx)
+ fz_drop_device(ctx, dev);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
bw = fz_new_ps_band_writer(ctx, wri->out);
fz_try(ctx)
diff --git a/source/fitz/output-pwg.c b/source/fitz/output-pwg.c
index 7e2a4178..8abcbb6d 100644
--- a/source/fitz/output-pwg.c
+++ b/source/fitz/output-pwg.c
@@ -419,8 +419,12 @@ pwg_end_page(fz_context *ctx, fz_document_writer *wri_, fz_device *dev)
{
fz_pwg_writer *wri = (fz_pwg_writer*)wri_;
- fz_close_device(ctx, dev);
- fz_drop_device(ctx, dev);
+ fz_try(ctx)
+ fz_close_device(ctx, dev);
+ fz_always(ctx)
+ fz_drop_device(ctx, dev);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
if (wri->mono)
{
diff --git a/source/fitz/output-svg.c b/source/fitz/output-svg.c
index 20d57c17..7bae9d4f 100644
--- a/source/fitz/output-svg.c
+++ b/source/fitz/output-svg.c
@@ -45,8 +45,13 @@ svg_end_page(fz_context *ctx, fz_document_writer *wri_, fz_device *dev)
{
fz_svg_writer *wri = (fz_svg_writer*)wri_;
- fz_close_device(ctx, dev);
- fz_drop_device(ctx, dev);
+ fz_try(ctx)
+ fz_close_device(ctx, dev);
+ fz_always(ctx)
+ fz_drop_device(ctx, dev);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
+
fz_drop_output(ctx, wri->out);
wri->out = NULL;
}
diff --git a/source/fitz/stext-output.c b/source/fitz/stext-output.c
index 63cd3c17..c2218357 100644
--- a/source/fitz/stext-output.c
+++ b/source/fitz/stext-output.c
@@ -471,8 +471,13 @@ static void
text_end_page(fz_context *ctx, fz_document_writer *wri_, fz_device *dev)
{
fz_text_writer *wri = (fz_text_writer*)wri_;
- fz_close_device(ctx, dev);
- fz_drop_device(ctx, dev);
+
+ fz_try(ctx)
+ fz_close_device(ctx, dev);
+ fz_always(ctx)
+ fz_drop_device(ctx, dev);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
switch (wri->format)
{