X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fcrosstabs.q;h=fcfccc39a251c2fbbfffbda7a6913207a70d1757;hb=c4a500426ebcddef3d19dbbb0514f6dbb41f8d1e;hp=5277e54528820be8b1efb783c1e31d38a2b14344;hpb=7a887989fb1da56ebd264ee3338c1472c7e40a51;p=pspp diff --git a/src/language/stats/crosstabs.q b/src/language/stats/crosstabs.q index 5277e54528..fcfccc39a2 100644 --- a/src/language/stats/crosstabs.q +++ b/src/language/stats/crosstabs.q @@ -520,10 +520,11 @@ precalc (struct casereader *input, const struct dataset *ds) { struct ccase c; - if (!casereader_peek (input, 0, &c)) - return; - output_split_file_values (ds, &c); - case_destroy (&c); + if (casereader_peek (input, 0, &c)) + { + output_split_file_values (ds, &c); + case_destroy (&c); + } if (mode == GENERAL) { @@ -636,12 +637,14 @@ calc_general (struct ccase *c, const struct dataset *ds) te->values[j].f = case_num (c, x->vars[j]); else { - memcpy (te->values[j].s, case_str (c, x->vars[j]), - var_get_width (x->vars[j])); + size_t n = var_get_width (x->vars[j]); + if (n > MAX_SHORT_STRING) + n = MAX_SHORT_STRING; + memcpy (te->values[j].s, case_str (c, x->vars[j]), n); /* Necessary in order to simplify comparisons. */ memset (&te->values[j].s[var_get_width (x->vars[j])], 0, - sizeof (union value) - var_get_width (x->vars[j])); + sizeof (union value) - n); } } }