Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8. The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2006, 2007, 2009, 2010, 2011 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
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
struct dataset *ds = NULL;
struct dataset *ds = NULL;
struct expression *expr;
for (;;)
struct expression *expr;
for (;;)
dump_postfix = 1;
else if (lex_match (lexer, T_LPAREN))
{
dump_postfix = 1;
else if (lex_match (lexer, T_LPAREN))
{
- char name[VAR_NAME_LEN + 1];
struct variable *v;
size_t old_value_cnt;
int width;
if (!lex_force_id (lexer))
goto done;
struct variable *v;
size_t old_value_cnt;
int width;
if (!lex_force_id (lexer))
goto done;
- strcpy (name, lex_tokcstr (lexer));
+ name = xstrdup (lex_tokcstr (lexer));
lex_get (lexer);
if (!lex_force_match (lexer, T_EQUALS))
lex_get (lexer);
if (!lex_force_match (lexer, T_EQUALS))
msg (SE, _("Duplicate variable name %s."), name);
goto done;
}
msg (SE, _("Duplicate variable name %s."), name);
goto done;
}
+ free (name);
+ name = NULL;
if (c == NULL)
c = case_create (dict_get_proto (d));
if (c == NULL)
c = case_create (dict_get_proto (d));