bash: update upstream patches

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2012-05-04 02:38:27 +02:00
parent 8f76a09ba4
commit d6060678db
4 changed files with 300 additions and 0 deletions

View File

@ -0,0 +1,143 @@
BASH PATCH REPORT
=================
Bash-Release: 4.2
Patch-ID: bash42-025
Bug-Reported-by: Bill Gradwohl <bill@ycc.com>
Bug-Reference-ID: <CAFyvKis-UfuOWr5THBRKh=vYHDoKEEgdW8hN1RviTuYQ00Lu5A@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/help-bash/2012-03/msg00078.html
Bug-Description:
When used in a shell function, `declare -g -a array=(compound assignment)'
creates a local variable instead of a global one.
Patch (apply with `patch -p0'):
*** ../bash-4.2-patched/command.h 2010-08-02 19:36:51.000000000 -0400
--- command.h 2012-04-01 12:38:35.000000000 -0400
***************
*** 98,101 ****
--- 98,102 ----
#define W_ASSIGNASSOC 0x400000 /* word looks like associative array assignment */
#define W_ARRAYIND 0x800000 /* word is an array index being expanded */
+ #define W_ASSNGLOBAL 0x1000000 /* word is a global assignment to declare (declare/typeset -g) */
/* Possible values for subshell_environment */
*** ../bash-4.2-patched/execute_cmd.c 2011-11-21 18:03:41.000000000 -0500
--- execute_cmd.c 2012-04-01 12:42:03.000000000 -0400
***************
*** 3581,3585 ****
WORD_LIST *w;
struct builtin *b;
! int assoc;
if (words == 0)
--- 3581,3585 ----
WORD_LIST *w;
struct builtin *b;
! int assoc, global;
if (words == 0)
***************
*** 3587,3591 ****
b = 0;
! assoc = 0;
for (w = words; w; w = w->next)
--- 3587,3591 ----
b = 0;
! assoc = global = 0;
for (w = words; w; w = w->next)
***************
*** 3604,3607 ****
--- 3604,3609 ----
if (assoc)
w->word->flags |= W_ASSIGNASSOC;
+ if (global)
+ w->word->flags |= W_ASSNGLOBAL;
#endif
}
***************
*** 3609,3613 ****
/* Note that we saw an associative array option to a builtin that takes
assignment statements. This is a bit of a kludge. */
! else if (w->word->word[0] == '-' && strchr (w->word->word, 'A'))
{
if (b == 0)
--- 3611,3618 ----
/* Note that we saw an associative array option to a builtin that takes
assignment statements. This is a bit of a kludge. */
! else if (w->word->word[0] == '-' && (strchr (w->word->word+1, 'A') || strchr (w->word->word+1, 'g')))
! #else
! else if (w->word->word[0] == '-' && strchr (w->word->word+1, 'g'))
! #endif
{
if (b == 0)
***************
*** 3619,3626 ****
words->word->flags |= W_ASSNBLTIN;
}
! if (words->word->flags & W_ASSNBLTIN)
assoc = 1;
}
- #endif
}
--- 3624,3632 ----
words->word->flags |= W_ASSNBLTIN;
}
! if ((words->word->flags & W_ASSNBLTIN) && strchr (w->word->word+1, 'A'))
assoc = 1;
+ if ((words->word->flags & W_ASSNBLTIN) && strchr (w->word->word+1, 'g'))
+ global = 1;
}
}
*** ../bash-4.2-patched/subst.c 2012-03-11 17:35:13.000000000 -0400
--- subst.c 2012-04-01 12:38:35.000000000 -0400
***************
*** 367,370 ****
--- 367,375 ----
fprintf (stderr, "W_ASSNBLTIN%s", f ? "|" : "");
}
+ if (f & W_ASSNGLOBAL)
+ {
+ f &= ~W_ASSNGLOBAL;
+ fprintf (stderr, "W_ASSNGLOBAL%s", f ? "|" : "");
+ }
if (f & W_COMPASSIGN)
{
***************
*** 2804,2808 ****
else if (assign_list)
{
! if (word->flags & W_ASSIGNARG)
aflags |= ASS_MKLOCAL;
if (word->flags & W_ASSIGNASSOC)
--- 2809,2813 ----
else if (assign_list)
{
! if ((word->flags & W_ASSIGNARG) && (word->flags & W_ASSNGLOBAL) == 0)
aflags |= ASS_MKLOCAL;
if (word->flags & W_ASSIGNASSOC)
*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010
--- patchlevel.h Thu Feb 24 21:41:34 2011
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 24
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 25
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,58 @@
BASH PATCH REPORT
=================
Bash-Release: 4.2
Patch-ID: bash42-026
Bug-Reported-by: Greg Wooledge <wooledg@eeg.ccf.org>
Bug-Reference-ID: <20120425180443.GO22241@eeg.ccf.org>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00172.html
Bug-Description:
The `lastpipe' option does not behave correctly on machines where the
open file limit is less than 256.
Patch (apply with `patch -p0'):
*** ../bash-4.2-patched/execute_cmd.c 2011-11-21 12:04:47.000000000 -0500
--- execute_cmd.c 2012-04-26 11:09:30.000000000 -0400
***************
*** 2206,2210 ****
if (lastpipe_opt && job_control == 0 && asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
{
! lstdin = move_to_high_fd (0, 0, 255);
if (lstdin > 0)
{
--- 2325,2329 ----
if (lastpipe_opt && job_control == 0 && asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
{
! lstdin = move_to_high_fd (0, 1, -1);
if (lstdin > 0)
{
***************
*** 2252,2256 ****
--- 2371,2377 ----
}
+ #if defined (JOB_CONTROL)
discard_unwind_frame ("lastpipe-exec");
+ #endif
return (exec_result);
*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010
--- patchlevel.h Thu Feb 24 21:41:34 2011
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 25
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 26
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,47 @@
BASH PATCH REPORT
=================
Bash-Release: 4.2
Patch-ID: bash42-027
Bug-Reported-by: Mike Frysinger <vapier@gentoo.org>
Bug-Reference-ID: <201204211243.30163.vapier@gentoo.org>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00134.html
Bug-Description:
When the `extglob' shell option is enabled, pattern substitution does not
work correctly in the presence of multibyte characters.
Patch (apply with `patch -p0'):
*** ../bash-4.2-patched/subst.c 2012-03-11 17:52:57.000000000 -0400
--- subst.c 2012-04-22 16:19:10.000000000 -0400
***************
*** 4167,4171 ****
#if defined (EXTENDED_GLOB)
if (extended_glob)
! simple |= (wpat[1] != L'(' || (wpat[0] != L'*' && wpat[0] != L'?' && wpat[0] != L'+' && wpat[0] != L'!' && wpat[0] != L'@')); /*)*/
#endif
--- 4167,4171 ----
#if defined (EXTENDED_GLOB)
if (extended_glob)
! simple &= (wpat[1] != L'(' || (wpat[0] != L'*' && wpat[0] != L'?' && wpat[0] != L'+' && wpat[0] != L'!' && wpat[0] != L'@')); /*)*/
#endif
*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010
--- patchlevel.h Thu Feb 24 21:41:34 2011
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 26
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 27
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,52 @@
BASH PATCH REPORT
=================
Bash-Release: 4.2
Patch-ID: bash42-028
Bug-Reported-by: Mark Edgar <medgar123@gmail.com>
Bug-Reference-ID: <CABHMh_3d+ZgO_zaEtYXPwK4P7tC0ghZ4g=Ue_TRpsEMf5YDsqw@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2012-03/msg00109.html
Bug-Description:
When using a word expansion for which the right hand side is evaluated,
certain expansions of quoted null strings include spurious ^? characters.
Patch (apply with `patch -p0'):
*** ../bash-4.2-patched/subst.c 2012-03-11 17:35:13.000000000 -0400
--- subst.c 2012-03-20 19:30:13.000000000 -0400
***************
*** 5810,5813 ****
--- 5810,5823 ----
if (qdollaratp && ((hasdol && quoted) || l->next))
*qdollaratp = 1;
+ /* If we have a quoted null result (QUOTED_NULL(temp)) and the word is
+ a quoted null (l->next == 0 && QUOTED_NULL(l->word->word)), the
+ flags indicate it (l->word->flags & W_HASQUOTEDNULL), and the
+ expansion is quoted (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
+ (which is more paranoia than anything else), we need to return the
+ quoted null string and set the flags to indicate it. */
+ if (l->next == 0 && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && QUOTED_NULL(temp) && QUOTED_NULL(l->word->word) && (l->word->flags & W_HASQUOTEDNULL))
+ {
+ w->flags |= W_HASQUOTEDNULL;
+ }
dispose_words (l);
}
*** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010
--- patchlevel.h Thu Feb 24 21:41:34 2011
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 27
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 28
#endif /* _PATCHLEVEL_H_ */