From 396c757f00279e058d8614315d63bc699eefe3cf Mon Sep 17 00:00:00 2001 From: John Darrington Date: Mon, 1 Feb 2016 12:18:10 +0100 Subject: [PATCH] Fix memory leak in barcharts --- src/output/charts/barchart.c | 10 +++++++--- src/output/charts/barchart.h | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/output/charts/barchart.c b/src/output/charts/barchart.c index 07a39e818f..812a96d03a 100644 --- a/src/output/charts/barchart.c +++ b/src/output/charts/barchart.c @@ -136,8 +136,9 @@ barchart_create (const struct variable **var, int n_vars, { struct category *s = xzalloc (sizeof *s); s->idx = idx++; - value_init (&s->val, var_get_width (var[pidx])); - value_copy (&s->val, &src->values[pidx], var_get_width (var[pidx])); + s->width = var_get_width (var[pidx]); + value_init (&s->val, s->width); + value_copy (&s->val, &src->values[pidx], s->width); ds_init_empty (&s->label); var_append_value_name (var[pidx], &s->val, &s->label); @@ -173,7 +174,8 @@ barchart_create (const struct variable **var, int n_vars, { struct category *s = xzalloc (sizeof *s); s->idx = idx++; - value_init (&s->val, var_get_width (var[sidx])); + s->width = var_get_width (var[sidx]); + value_init (&s->val, s->width); value_copy (&s->val, &src->values[sidx], var_get_width (var[sidx])); ds_init_empty (&s->label); var_append_value_name (var[sidx], &s->val, &s->label); @@ -256,6 +258,8 @@ destroy_cat_map (struct hmap *m) struct category *next = NULL; HMAP_FOR_EACH_SAFE (foo, next, struct category, node, m) { + value_destroy (&foo->val, foo->width); + ds_destroy (&foo->label); free (foo); } diff --git a/src/output/charts/barchart.h b/src/output/charts/barchart.h index dabf61b050..d47ce165bb 100644 --- a/src/output/charts/barchart.h +++ b/src/output/charts/barchart.h @@ -29,6 +29,7 @@ struct category int idx; /* Unique zero based index */ struct string label; /* The label to be displayed for this category */ union value val; /* The value of this category */ + int width; /* The width of VAL */ }; -- 2.30.2