From: Ben Pfaff <blp@cs.stanford.edu>
Date: Sat, 20 Feb 2016 05:35:53 +0000 (-0800)
Subject: MISSING VALUES: Report an error when too many missing values are specified.
X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=488ddc764e6f35217240ca0418080c08d4b14070;p=pspp

MISSING VALUES: Report an error when too many missing values are specified.

Reported by news <news.ftr@free.fr>.
---

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