]> git.pld-linux.org Git - packages/bash.git/blob - bash40-029
- up to 4.0.33
[packages/bash.git] / bash40-029
1                              BASH PATCH REPORT
2                              =================
3
4 Bash-Release: 4.0
5 Patch-ID: bash40-029
6
7 Bug-Reported-by:        Christian Krause <chkr@plauener.de>
8 Bug-Reference-ID:       Thu, 25 Jun 2009 21:47:59 +0200
9 Bug-Reference-URL:      http://lists.gnu.org/archive/html/bug-bash/2009-06/msg00078.html
10
11 Bug-Description:
12
13 Previous versions of bash accepted strings in the initial environment
14 that were not valid shell variable assignments, usually because the
15 names were invalid, but still created shell variables from them and
16 passed them to child processes in the environment.
17
18 Bash-4.0 ignores those names and does not pass them to child processes.
19 Some users and automated processes depend on invalid variables being
20 ignored and passed to child processes.
21
22 This patch makes bash continue to ignore the invalid names, but pass
23 them to child processes in the export environment.
24
25 Patch:
26
27 *** ../bash-4.0-patched/variables.c     2009-01-04 14:32:46.000000000 -0500
28 --- variables.c 2009-06-29 09:17:20.000000000 -0400
29 ***************
30 *** 253,256 ****
31 --- 255,259 ----
32   static int visible_var __P((SHELL_VAR *));
33   static int visible_and_exported __P((SHELL_VAR *));
34 + static int export_environment_candidate __P((SHELL_VAR *));
35   static int local_and_exported __P((SHELL_VAR *));
36   static int variable_in_context __P((SHELL_VAR *));
37 ***************
38 *** 376,383 ****
39   #  endif
40   #endif
41         else if (legal_identifier (name))
42         {
43           temp_var = bind_variable (name, string, 0);
44 !         VSETATTR (temp_var, (att_exported | att_imported));
45           array_needs_making = 1;
46         }
47 --- 379,393 ----
48   #  endif
49   #endif
50 + #if 0
51         else if (legal_identifier (name))
52 + #else
53 +       else
54 + #endif
55         {
56           temp_var = bind_variable (name, string, 0);
57 !         if (legal_identifier (name))
58 !           VSETATTR (temp_var, (att_exported | att_imported));
59 !         else
60 !           VSETATTR (temp_var, (att_exported | att_imported | att_invisible));
61           array_needs_making = 1;
62         }
63 ***************
64 *** 3083,3086 ****
65 --- 3098,3111 ----
66   }
67   
68 + /* Candidate variables for the export environment are either valid variables
69 +    with the export attribute or invalid variables inherited from the initial
70 +    environment and simply passed through. */
71 + static int
72 + export_environment_candidate (var)
73 +      SHELL_VAR *var;
74 + {
75 +   return (exported_p (var) && (invisible_p (var) == 0 || imported_p (var)));
76 + }
77
78   /* Return non-zero if VAR is a local variable in the current context and
79      is exported. */
80 ***************
81 *** 3439,3443 ****
82 --- 3464,3472 ----
83     SHELL_VAR **vars;
84   
85 + #if 0
86     vars = map_over (visible_and_exported, vcxt);
87 + #else
88 +   vars = map_over (export_environment_candidate, vcxt);
89 + #endif
90   
91     if (vars == 0)
92 *** ../bash-4.0/patchlevel.h    2009-01-04 14:32:40.000000000 -0500
93 --- patchlevel.h        2009-02-22 16:11:31.000000000 -0500
94 ***************
95 *** 26,30 ****
96      looks for to find the patch level (for the sccs version string). */
97   
98 ! #define PATCHLEVEL 28
99   
100   #endif /* _PATCHLEVEL_H_ */
101 --- 26,30 ----
102      looks for to find the patch level (for the sccs version string). */
103   
104 ! #define PATCHLEVEL 29
105   
106   #endif /* _PATCHLEVEL_H_ */
This page took 0.144308 seconds and 3 git commands to generate.