author | zihao.zhu@oracle.com <zihao.zhu@oracle.com> |
Tue, 18 Oct 2016 14:50:09 -0700 | |
changeset 7123 | b650e07ff9f6 |
parent 5518 | c47fe0edc204 |
permissions | -rw-r--r-- |
5518
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1 |
BASH PATCH REPORT |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
2 |
================= |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
3 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
4 |
Bash-Release: 4.3 |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
5 |
Patch-ID: bash43-014 |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
6 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
7 |
Bug-Reported-by: Greg Wooledge <[email protected]> |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
8 |
Bug-Reference-ID: <[email protected]> |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
9 |
Bug-Reference-URL: http://lists.gnu.org/archive/html/help-bash/2014-04/msg00004.html |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
10 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
11 |
Bug-Description: |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
12 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
13 |
Under certain circumstances, $@ is expanded incorrectly in contexts where |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
14 |
word splitting is not performed. |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
15 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
16 |
Patch (apply with `patch -p0'): |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
17 |
*** ../bash-4.3-patched/subst.c 2014-01-23 16:26:37.000000000 -0500 |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
18 |
--- subst.c 2014-04-19 15:41:26.000000000 -0400 |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
19 |
*************** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
20 |
*** 3249,3254 **** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
21 |
--- 3249,3256 ---- |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
22 |
return ((char *)NULL); |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
23 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
24 |
+ expand_no_split_dollar_star = 1; |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
25 |
w->flags |= W_NOSPLIT2; |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
26 |
l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0); |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
27 |
+ expand_no_split_dollar_star = 0; |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
28 |
if (l) |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
29 |
{ |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
30 |
*************** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
31 |
*** 7848,7851 **** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
32 |
--- 7850,7857 ---- |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
33 |
according to POSIX.2, this expands to a list of the positional |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
34 |
parameters no matter what IFS is set to. */ |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
35 |
+ /* XXX - what to do when in a context where word splitting is not |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
36 |
+ performed? Even when IFS is not the default, posix seems to imply |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
37 |
+ that we behave like unquoted $* ? Maybe we should use PF_NOSPLIT2 |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
38 |
+ here. */ |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
39 |
temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted); |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
40 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
41 |
*************** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
42 |
*** 8817,8820 **** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
43 |
--- 8823,8827 ---- |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
44 |
{ |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
45 |
char *ifs_chars; |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
46 |
+ char *tstring; |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
47 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
48 |
ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL; |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
49 |
*************** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
50 |
*** 8831,8834 **** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
51 |
--- 8838,8865 ---- |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
52 |
if (split_on_spaces) |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
53 |
list = list_string (istring, " ", 1); /* XXX quoted == 1? */ |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
54 |
+ /* If we have $@ (has_dollar_at != 0) and we are in a context where we |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
55 |
+ don't want to split the result (W_NOSPLIT2), and we are not quoted, |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
56 |
+ we have already separated the arguments with the first character of |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
57 |
+ $IFS. In this case, we want to return a list with a single word |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
58 |
+ with the separator possibly replaced with a space (it's what other |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
59 |
+ shells seem to do). |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
60 |
+ quoted_dollar_at is internal to this function and is set if we are |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
61 |
+ passed an argument that is unquoted (quoted == 0) but we encounter a |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
62 |
+ double-quoted $@ while expanding it. */ |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
63 |
+ else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2)) |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
64 |
+ { |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
65 |
+ /* Only split and rejoin if we have to */ |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
66 |
+ if (*ifs_chars && *ifs_chars != ' ') |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
67 |
+ { |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
68 |
+ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
69 |
+ tstring = string_list (list); |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
70 |
+ } |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
71 |
+ else |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
72 |
+ tstring = istring; |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
73 |
+ tword = make_bare_word (tstring); |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
74 |
+ if (tstring != istring) |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
75 |
+ free (tstring); |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
76 |
+ goto set_word_flags; |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
77 |
+ } |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
78 |
else if (has_dollar_at && ifs_chars) |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
79 |
list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
80 |
*************** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
81 |
*** 8836,8839 **** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
82 |
--- 8867,8871 ---- |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
83 |
{ |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
84 |
tword = make_bare_word (istring); |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
85 |
+ set_word_flags: |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
86 |
if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED)) |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
87 |
tword->flags |= W_QUOTED; |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
88 |
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
89 |
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
90 |
*************** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
91 |
*** 26,30 **** |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
92 |
looks for to find the patch level (for the sccs version string). */ |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
93 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
94 |
! #define PATCHLEVEL 13 |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
95 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
96 |
#endif /* _PATCHLEVEL_H_ */ |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
97 |
--- 26,30 ---- |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
98 |
looks for to find the patch level (for the sccs version string). */ |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
99 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
100 |
! #define PATCHLEVEL 14 |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
101 |
|
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
102 |
#endif /* _PATCHLEVEL_H_ */ |