diff options
author | Paul Gardiner <paul.gardiner@artifex.com> | 2018-07-17 10:27:28 +0100 |
---|---|---|
committer | Paul Gardiner <paul.gardiner@artifex.com> | 2018-07-17 14:57:43 +0100 |
commit | 9ce347b409ef0416513698e68ca662ff64935886 (patch) | |
tree | 1ed8867b6eeff26dc9ec1e192b036028153c2837 | |
parent | 8e36fb40f92e3ebe3989aaf7b54c898eb040cbce (diff) | |
download | mupdf-9ce347b409ef0416513698e68ca662ff64935886.tar.xz |
Fix memory leak in form recalculation function
-rw-r--r-- | source/pdf/pdf-form.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/source/pdf/pdf-form.c b/source/pdf/pdf-form.c index f5466168..5ccdc7fa 100644 --- a/source/pdf/pdf-form.c +++ b/source/pdf/pdf-form.c @@ -400,10 +400,14 @@ static void set_check_grp(fz_context *ctx, pdf_document *doc, pdf_obj *grp, pdf_ static void recalculate(fz_context *ctx, pdf_document *doc) { + pdf_js_event e = {NULL, NULL}; + if (doc->recalculating) return; doc->recalculating = 1; + + fz_var(e); fz_try(ctx) { pdf_obj *co = pdf_dict_getp(ctx, pdf_trailer(ctx, doc), "Root/AcroForm/CO"); @@ -424,6 +428,9 @@ static void recalculate(fz_context *ctx, pdf_document *doc) e.target = field; e.value = pdf_field_value(ctx, doc, field); pdf_js_setup_event(doc->js, &e); + /* e.value has been copied. We can free it */ + fz_free(ctx, e.value); + e.value = NULL; pdf_execute_action(ctx, doc, field, calc); /* A calculate action, updates event.value. We need * to place the value in the field */ @@ -434,6 +441,7 @@ static void recalculate(fz_context *ctx, pdf_document *doc) } fz_always(ctx) { + fz_free(ctx, e.value); doc->recalculating = 0; } fz_catch(ctx) |