Fix buffer overflow reported by John Darrington.
[pspp] / src / language / dictionary / weight.c
index b6d63c972c33348861635fc27ceedeb2a3f257f7..ec6d712bb7cf29903b29296bb0fe55bba000691f 100644 (file)
    02110-1301, USA. */
 
 #include <config.h>
-#include "message.h"
+
 #include <stdio.h>
-#include "command.h"
-#include "dictionary.h"
-#include "message.h"
-#include "lexer.h"
-#include "str.h"
-#include "variable.h"
+
+#include <data/procedure.h>
+#include <data/dictionary.h>
+#include <data/variable.h>
+#include <language/command.h>
+#include <language/lexer/lexer.h>
+#include <language/lexer/variable-parser.h>
+#include <libpspp/message.h>
+#include <libpspp/str.h>
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
 int
-cmd_weight (void)
+cmd_weight (struct dataset *ds)
 {
+  struct dictionary *dict = dataset_dict (ds);
   if (lex_match_id ("OFF"))
-    dict_set_weight (default_dict, NULL);
+    dict_set_weight (dataset_dict (ds), NULL);
   else
     {
       struct variable *v;
 
       lex_match (T_BY);
-      v = parse_variable ();
+      v = parse_variable (dict);
       if (!v)
        return CMD_CASCADING_FAILURE;
       if (v->type == ALPHA)
@@ -54,7 +58,7 @@ cmd_weight (void)
          return CMD_CASCADING_FAILURE;
        }
 
-      dict_set_weight (default_dict, v);
+      dict_set_weight (dict, v);
     }
 
   return lex_end_of_command ();