From: John Darrington Date: Thu, 18 Feb 2016 05:51:07 +0000 (+0100) Subject: Fixed bug where an empty chart (one with no data) would crash. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=256fe9e0bd31c0623cd9c439d7e6a9a04e9ef038 Fixed bug where an empty chart (one with no data) would crash. Reported by: Friedrich Beckmann Fixes bug: #47181 --- diff --git a/src/output/charts/boxplot.c b/src/output/charts/boxplot.c index deabc1fa6e..0a933195d0 100644 --- a/src/output/charts/boxplot.c +++ b/src/output/charts/boxplot.c @@ -25,6 +25,8 @@ struct boxplot * boxplot_create (double y_min, double y_max, const char *title) { + if (y_min >= y_max) + return NULL; struct boxplot *boxplot = xmalloc (sizeof *boxplot); chart_item_init (&boxplot->chart_item, &boxplot_class, title); boxplot->y_min = y_min; @@ -38,6 +40,9 @@ void boxplot_add_box (struct boxplot *boxplot, struct box_whisker *bw, const char *label) { + if (boxplot == NULL) + return; + struct boxplot_box *box; if (boxplot->n_boxes >= boxplot->boxes_allocated) boxplot->boxes = x2nrealloc (boxplot->boxes, &boxplot->boxes_allocated, @@ -51,6 +56,9 @@ static void boxplot_chart_destroy (struct chart_item *chart_item) { struct boxplot *boxplot = to_boxplot (chart_item); + if (boxplot == NULL) + return; + size_t i; for (i = 0; i < boxplot->n_boxes; i++) diff --git a/src/output/driver.c b/src/output/driver.c index 6f72ffe739..81ef6690e5 100644 --- a/src/output/driver.c +++ b/src/output/driver.c @@ -159,6 +159,9 @@ output_submit (struct output_item *item) { struct output_engine *e = engine_stack_top (); + if (item == NULL) + return; + if (is_syntax_item (item)) { ds_put_cstr (&e->deferred_syntax, text_item_get_text (to_text_item (item))); diff --git a/tests/output/charts.at b/tests/output/charts.at index 7cbaeb2e82..59ad8ca319 100644 --- a/tests/output/charts.at +++ b/tests/output/charts.at @@ -235,3 +235,37 @@ CROSSTABS AT_CHECK([pspp -o pspp.txt xxx.sps], [0], [ignore]) AT_CLEANUP + + + + +AT_SETUP([BOXPLOT Empty]) +AT_DATA([bp.sps],[ +DATA LIST LIST /X * Y * . +BEGIN DATA +1 +2 +2 +2 +3 +END DATA + +EXAMINE + /VARIABLES = Y + /PLOT = BOXPLOT. +]) + + +AT_CHECK([pspp -o pspp.txt bp.sps], [0], [ignore]) + +AT_CLEANUP + + + + + + + + + +