summaryrefslogtreecommitdiff
path: root/source/fitz
diff options
context:
space:
mode:
authorMatt Holgate <matt@emobix.co.uk>2014-06-26 14:16:27 +0100
committerMatt Holgate <matt@emobix.co.uk>2014-06-26 16:53:36 +0100
commitada560eb015e7b2208c492d47f28da8093733c4a (patch)
tree00f8a4739292098fe27db5e7bc6e272d90394730 /source/fitz
parent526ab461bd85cce92d866ee5c4245a6c3636082c (diff)
downloadmupdf-ada560eb015e7b2208c492d47f28da8093733c4a.tar.xz
Add missing fz_var() and fix potential memory leak.
Diffstat (limited to 'source/fitz')
-rw-r--r--source/fitz/list-device.c60
1 files changed, 37 insertions, 23 deletions
diff --git a/source/fitz/list-device.c b/source/fitz/list-device.c
index 529e0bbf..981d530f 100644
--- a/source/fitz/list-device.c
+++ b/source/fitz/list-device.c
@@ -557,36 +557,50 @@ fz_list_end_tile(fz_device *dev)
fz_device *
fz_new_list_device(fz_context *ctx, fz_display_list *list)
{
- fz_device *dev = fz_new_device(ctx, list);
+ fz_device *dev = NULL;
- dev->begin_page = fz_list_begin_page;
- dev->end_page = fz_list_end_page;
+ fz_var(list);
+ fz_var(dev);
+ fz_try(ctx)
+ {
+ dev = fz_new_device(ctx, list);
+ list = NULL;
- dev->fill_path = fz_list_fill_path;
- dev->stroke_path = fz_list_stroke_path;
- dev->clip_path = fz_list_clip_path;
- dev->clip_stroke_path = fz_list_clip_stroke_path;
+ dev->begin_page = fz_list_begin_page;
+ dev->end_page = fz_list_end_page;
- dev->fill_text = fz_list_fill_text;
- dev->stroke_text = fz_list_stroke_text;
- dev->clip_text = fz_list_clip_text;
- dev->clip_stroke_text = fz_list_clip_stroke_text;
- dev->ignore_text = fz_list_ignore_text;
+ dev->fill_path = fz_list_fill_path;
+ dev->stroke_path = fz_list_stroke_path;
+ dev->clip_path = fz_list_clip_path;
+ dev->clip_stroke_path = fz_list_clip_stroke_path;
- dev->fill_shade = fz_list_fill_shade;
- dev->fill_image = fz_list_fill_image;
- dev->fill_image_mask = fz_list_fill_image_mask;
- dev->clip_image_mask = fz_list_clip_image_mask;
+ dev->fill_text = fz_list_fill_text;
+ dev->stroke_text = fz_list_stroke_text;
+ dev->clip_text = fz_list_clip_text;
+ dev->clip_stroke_text = fz_list_clip_stroke_text;
+ dev->ignore_text = fz_list_ignore_text;
- dev->pop_clip = fz_list_pop_clip;
+ dev->fill_shade = fz_list_fill_shade;
+ dev->fill_image = fz_list_fill_image;
+ dev->fill_image_mask = fz_list_fill_image_mask;
+ dev->clip_image_mask = fz_list_clip_image_mask;
- dev->begin_mask = fz_list_begin_mask;
- dev->end_mask = fz_list_end_mask;
- dev->begin_group = fz_list_begin_group;
- dev->end_group = fz_list_end_group;
+ dev->pop_clip = fz_list_pop_clip;
- dev->begin_tile = fz_list_begin_tile;
- dev->end_tile = fz_list_end_tile;
+ dev->begin_mask = fz_list_begin_mask;
+ dev->end_mask = fz_list_end_mask;
+ dev->begin_group = fz_list_begin_group;
+ dev->end_group = fz_list_end_group;
+
+ dev->begin_tile = fz_list_begin_tile;
+ dev->end_tile = fz_list_end_tile;
+ }
+ fz_catch(ctx)
+ {
+ fz_free_device(dev);
+ fz_drop_display_list(ctx, list);
+ fz_rethrow(ctx);
+ }
return dev;
}