diff --git a/builtins/declare.def b/builtins/declare.def index a1e9b4e..2ae12a8 100644 --- a/builtins/declare.def +++ b/builtins/declare.def @@ -570,7 +570,7 @@ declare_internal (list, local_var) } else if (flags_on & att_nameref) { -#if 0 +#if 1 if (nameref_p (var) == 0 && var_isset (var) && var_isnull (var) == 0 && legal_identifier (value_cell (var)) == 0) { builtin_error (_("%s: invalid variable name for name reference"), value_cell (var)); diff --git a/variables.c b/variables.c index 69ed170..dd62d96 100644 --- a/variables.c +++ b/variables.c @@ -2628,9 +2628,13 @@ bind_variable_internal (name, value, table, hflags, aflags) } /* The first clause handles `declare -n ref; ref=x;' */ - if (entry && invisible_p (entry) && nameref_p (entry)) + if (entry && invisible_p (entry) && nameref_p (entry)) { + if(!legal_identifier(value)) { + internal_error (_("`%s': not a valid identifier"), value); + exit(1); + } goto assign_value; - else if (entry && nameref_p (entry)) + } else if (entry && nameref_p (entry)) { newval = nameref_cell (entry); #if defined (ARRAY_VARS)