On 2/7/10 8:33 PM, Crestez Dan Leonard wrote:
> We encountered a strange bug while working on bash-completion. I was
> originally only able to reproduce this through a fairly elaborate setup
> but Freddy Vulto <fvu...@gmail.com> found a tiny test case:
> 
>     set -o posix
>     t() {
>         local x
>         BAR=a eval true
>     }
>     BAR=b; t; echo $BAR
> 
> Bash documentation claims the following (section 6.11 point 23):

See if the attached patch does the trick.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU    c...@case.edu    http://cnswww.cns.cwru.edu/~chet/
*** ../bash-4.1-patched/variables.c     2009-11-03 14:13:58.000000000 -0500
--- variables.c 2010-02-08 17:36:18.000000000 -0500
***************
*** 3809,3812 ****
--- 3809,3817 ----
    if (tempvar_p (var) && (posixly_correct || (var->attributes & 
att_propagate)))
      {
+       /* Make sure we have a hash table to store the variable in while it is
+        being propagated down to the global variables table.  Create one if
+        we have to */
+       if ((vc_isfuncenv (shell_variables) || vc_istempenv (shell_variables)) 
&& shell_variables->table == 0)
+       shell_variables->table = hash_create (0);
        /* XXX - should we set v->context here? */
        v = bind_variable_internal (var->name, value_cell (var), 
shell_variables->table, 0, 0);

Reply via email to