summaryrefslogtreecommitdiff
path: root/fitz/res_text.c
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2011-12-19 15:19:40 +0000
committerRobin Watts <robin.watts@artifex.com>2011-12-19 15:19:40 +0000
commit3028fbf00d2d571b6f67001b5c09c15e3e2cfa26 (patch)
tree7be7037d3a0c4d093d1861a15cae812ae8377d54 /fitz/res_text.c
parentda81dc0f28246b37a487e8ace9443f2689f855c0 (diff)
downloadmupdf-3028fbf00d2d571b6f67001b5c09c15e3e2cfa26.tar.xz
More Memory squeezing fixes
Diffstat (limited to 'fitz/res_text.c')
-rw-r--r--fitz/res_text.c21
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;
}