From 488ddc764e6f35217240ca0418080c08d4b14070 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Fri, 19 Feb 2016 21:35:53 -0800 Subject: [PATCH] MISSING VALUES: Report an error when too many missing values are specified. Reported by news . --- src/language/dictionary/missing-values.c | 22 ++++++++++++++------- tests/language/dictionary/missing-values.at | 19 ++++++++++++++++++ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/language/dictionary/missing-values.c b/src/language/dictionary/missing-values.c index a369c2ea69..8d82b480cb 100644 --- a/src/language/dictionary/missing-values.c +++ b/src/language/dictionary/missing-values.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011, 2013 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011, 2013, 2016 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -80,16 +80,19 @@ cmd_missing_values (struct lexer *lexer, struct dataset *ds) { enum fmt_type type = var_get_print_format (v[0])->type; double x, y; - bool ok; if (!parse_num_range (lexer, &x, &y, &type)) goto error; - ok = (x == y + if (!(x == y ? mv_add_num (&mv, x) - : mv_add_range (&mv, x, y)); - if (!ok) - ok = false; + : mv_add_range (&mv, x, y))) + { + msg (SE, _("Too many numeric missing values. At most " + "three individual values or one value and " + "one range are allowed.")); + ok = false; + } lex_match (lexer, T_COMMA); } @@ -129,7 +132,12 @@ cmd_missing_values (struct lexer *lexer, struct dataset *ds) utf8_s, utf8_trunc_len); if (!mv_add_str (&mv, CHAR_CAST (const uint8_t *, raw_s), strlen (raw_s))) - ok = false; + { + msg (SE, + _("Too many string missing values. " + "At most three individual values are allowed.")); + ok = false; + } free (raw_s); lex_get (lexer); diff --git a/tests/language/dictionary/missing-values.at b/tests/language/dictionary/missing-values.at index 214fc3f0fa..d4a9016582 100644 --- a/tests/language/dictionary/missing-values.at +++ b/tests/language/dictionary/missing-values.at @@ -142,6 +142,15 @@ MISSING VALUES str1 ('a' THRU 'z'). * Mixing string and numeric variables. MISSING VALUES str1 num1 ('123'). + +* Too many values. +MISSING VALUES num1 (1, 2, 3, 4). +MISSING VALUES num1 (1 THRU 2, 3 THRU 4). +MISSING VALUES num1 (1, 2 THRU 3, 4). +MISSING VALUES str1 ('abc', 'def', 'ghi', 'jkl'). + +* Bad range. +MISSING VALUES num1 (2 THRU 1). ]) AT_CHECK([pspp -O format=csv missing-values.sps], [1], [dnl missing-values.sps:5: error: MISSING VALUES: Missing values provided are too long to assign to variable of width 3. @@ -153,5 +162,15 @@ missing-values.sps:11.26-11.29: error: MISSING VALUES: Syntax error at `THRU': e missing-values.sps:11: error: MISSING VALUES: THRU is not a variable name. missing-values.sps:14: error: MISSING VALUES: Cannot mix numeric variables (e.g. num1) and string variables (e.g. str1) within a single list. + +missing-values.sps:17: error: MISSING VALUES: Too many numeric missing values. At most three individual values or one value and one range are allowed. + +missing-values.sps:18: error: MISSING VALUES: Too many numeric missing values. At most three individual values or one value and one range are allowed. + +missing-values.sps:19: error: MISSING VALUES: Too many numeric missing values. At most three individual values or one value and one range are allowed. + +missing-values.sps:20: error: MISSING VALUES: Too many string missing values. At most three individual values are allowed. + +missing-values.sps:23: warning: MISSING VALUES: The high end of the range (1) is below the low end (2). The range will be treated as if reversed. ]) AT_CLEANUP -- 2.30.2