diff options
author | Robin Watts <robin.watts@artifex.com> | 2011-12-19 15:19:40 +0000 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2011-12-19 15:19:40 +0000 |
commit | 3028fbf00d2d571b6f67001b5c09c15e3e2cfa26 (patch) | |
tree | 7be7037d3a0c4d093d1861a15cae812ae8377d54 /fitz/res_text.c | |
parent | da81dc0f28246b37a487e8ace9443f2689f855c0 (diff) | |
download | mupdf-3028fbf00d2d571b6f67001b5c09c15e3e2cfa26.tar.xz |
More Memory squeezing fixes
Diffstat (limited to 'fitz/res_text.c')
-rw-r--r-- | fitz/res_text.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/fitz/res_text.c b/fitz/res_text.c index b8c5c5fd..63338435 100644 --- a/fitz/res_text.c +++ b/fitz/res_text.c @@ -19,8 +19,11 @@ fz_new_text(fz_context *ctx, fz_font *font, fz_matrix trm, int wmode) void fz_free_text(fz_context *ctx, fz_text *text) { - fz_drop_font(ctx, text->font); - fz_free(ctx, text->items); + if (text != NULL) + { + fz_drop_font(ctx, text->font); + fz_free(ctx, text->items); + } fz_free(ctx, text); } @@ -30,13 +33,21 @@ fz_clone_text(fz_context *ctx, fz_text *old) fz_text *text; text = fz_malloc_struct(ctx, fz_text); + text->len = old->len; + fz_try(ctx) + { + text->items = fz_malloc_array(ctx, text->len, sizeof(fz_text_item)); + } + fz_catch(ctx) + { + fz_free(ctx, text); + fz_rethrow(ctx); + } + memcpy(text->items, old->items, text->len * sizeof(fz_text_item)); text->font = fz_keep_font(old->font); text->trm = old->trm; text->wmode = old->wmode; - text->len = old->len; text->cap = text->len; - text->items = fz_malloc_array(ctx, text->len, sizeof(fz_text_item)); - memcpy(text->items, old->items, text->len * sizeof(fz_text_item)); return text; } |