bash: use local copy of patches

Fetching the patches during the build is taking a lot of time,
if - as in my case - the name resolution of ftp.gnu.org takes
literally minutes with $XBPS_FETCH_CMD. If more patches for
bash 4.3 are created, just add them to srcpkgs/bash/files and
adjust _bash_patchlevel accordingly.
This commit is contained in:
Jürgen Buchmüller 2017-01-17 17:37:45 +01:00
parent c0212721d2
commit 318df1f24f
49 changed files with 7961 additions and 11 deletions

View File

@ -0,0 +1,58 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-001
Bug-Reported-by: NBaH <nbah@sfr.fr>
Bug-Reference-ID: <ler0b5$iu9$1@speranza.aioe.org>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00092.html
Bug-Description:
A missing check for a valid option prevented `test -R' from working. There
is another problem that causes bash to look up the wrong variable name when
processing the argument to `test -R'.
Patch (apply with `patch -p0'):
*** ../bash-4.3/test.c 2014-02-04 16:52:58.000000000 -0500
--- test.c 2014-02-28 21:22:44.000000000 -0500
***************
*** 647,652 ****
case 'R':
! v = find_variable (arg);
! return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE);
}
--- 647,652 ----
case 'R':
! v = find_variable_noref (arg);
! return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE);
}
***************
*** 724,727 ****
--- 724,728 ----
case 'u': case 'v': case 'w': case 'x': case 'z':
case 'G': case 'L': case 'O': case 'S': case 'N':
+ case 'R':
return (1);
}
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 0
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 1
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,62 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-002
Bug-Reported-by: Moe Tunes <moetunes42@gmail.com>
Bug-Reference-ID: <53103F49.3070100@gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00086.html
Bug-Description:
A change to save state while running the DEBUG trap caused pipelines to hang
on systems which need process group synchronization while building pipelines.
Patch (apply with `patch -p0'):
*** ../bash-4.3/trap.c 2014-02-05 10:03:21.000000000 -0500
--- trap.c 2014-02-28 09:51:43.000000000 -0500
***************
*** 921,925 ****
#if defined (JOB_CONTROL)
! save_pipeline (1); /* XXX only provides one save level */
#endif
--- 921,926 ----
#if defined (JOB_CONTROL)
! if (sig != DEBUG_TRAP) /* run_debug_trap does this */
! save_pipeline (1); /* XXX only provides one save level */
#endif
***************
*** 941,945 ****
#if defined (JOB_CONTROL)
! restore_pipeline (1);
#endif
--- 942,947 ----
#if defined (JOB_CONTROL)
! if (sig != DEBUG_TRAP) /* run_debug_trap does this */
! restore_pipeline (1);
#endif
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 1
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 2
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,48 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-003
Bug-Reported-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Bug-Reference-ID: <CAOMFOmXy3mT2So5GQ5F-smCVArQuAeBwZ2QKzgCtMeXJoDeYOQ@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html
Bug-Description:
When in callback mode, some readline commands can cause readline to seg
fault by passing invalid contexts to callback functions.
Patch (apply with `patch -p0'):
*** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400
--- lib/readline/readline.c 2014-03-10 14:15:02.000000000 -0400
***************
*** 745,749 ****
RL_CHECK_SIGNALS ();
! if (r == 0) /* success! */
{
_rl_keyseq_chain_dispose ();
--- 745,750 ----
RL_CHECK_SIGNALS ();
! /* We only treat values < 0 specially to simulate recursion. */
! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */
{
_rl_keyseq_chain_dispose ();
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 2
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 3
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,47 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-004
Bug-Reported-by: Daan van Rossum <daan@flash.uchicago.edu>
Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu>
Bug-Reference-URL:
Bug-Description:
The `.' command in vi mode cannot undo multi-key commands beginning with
`c', `d', and `y' (command plus motion specifier).
Patch (apply with `patch -p0'):
*** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400
--- lib/readline/readline.c 2014-03-07 15:20:33.000000000 -0500
***************
*** 965,969 ****
if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
key != ANYOTHERKEY &&
! rl_key_sequence_length == 1 && /* XXX */
_rl_vi_textmod_command (key))
_rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
--- 965,969 ----
if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
key != ANYOTHERKEY &&
! _rl_dispatching_keymap == vi_movement_keymap &&
_rl_vi_textmod_command (key))
_rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 3
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 4
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,63 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-005
Bug-Reported-by: David Sines <dave.gma@googlemail.com>
Bug-Reference-ID: <CAO3BAa_CK_Rgkhdfzs+NJ4KFYdB9qW3pvXQK0xLCi6GMmDU8bw@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00037.html
Bug-Description:
When in Posix mode, bash did not correctly interpret the ANSI-C-style
$'...' quoting mechanism when performing pattern substitution word
expansions within double quotes.
Patch (apply with `patch -p0'):
*** ../bash-4.3/parse.y 2014-02-11 09:42:10.000000000 -0500
--- parse.y 2014-03-07 20:57:15.000000000 -0500
***************
*** 3399,3403 ****
unescaped double-quotes or single-quotes, if any, shall occur." */
/* This was changed in Austin Group Interp 221 */
! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
continue;
--- 3399,3403 ----
unescaped double-quotes or single-quotes, if any, shall occur." */
/* This was changed in Austin Group Interp 221 */
! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
continue;
*** ../bash-4.3/y.tab.c 2014-02-11 10:57:47.000000000 -0500
--- y.tab.c 2014-03-28 10:41:15.000000000 -0400
***************
*** 5711,5715 ****
unescaped double-quotes or single-quotes, if any, shall occur." */
/* This was changed in Austin Group Interp 221 */
! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
continue;
--- 5711,5715 ----
unescaped double-quotes or single-quotes, if any, shall occur." */
/* This was changed in Austin Group Interp 221 */
! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
continue;
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 4
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 5
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,48 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-006
Bug-Reported-by: Eduardo A . Bustamante Lopez <dualbus@gmail.com>
Bug-Reference-ID: <20140228170013.GA16015@dualbus.me>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00091.html
Bug-Description:
A shell that started with job control active but was not interactive left
the terminal in the wrong process group when exiting, causing its parent
shell to get a stop signal when it attempted to read from the terminal.
Patch (apply with `patch -p0'):
*** ../bash-4.3/jobs.c 2014-01-10 09:05:34.000000000 -0500
--- jobs.c 2014-03-02 18:05:09.000000000 -0500
***************
*** 4375,4379 ****
end_job_control ()
{
! if (interactive_shell) /* XXX - should it be interactive? */
{
terminate_stopped_jobs ();
--- 4375,4379 ----
end_job_control ()
{
! if (interactive_shell || job_control) /* XXX - should it be just job_control? */
{
terminate_stopped_jobs ();
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 5
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 6
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,50 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-007
Bug-Reported-by: geir.hauge@gmail.com
Bug-Reference-ID: <20140318093650.B181C1C5B0B@gina.itea.ntnu.no>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00095.html
Bug-Description:
Using compound assignments for associative arrays like
assoc=( [x]= [y]=bar )
left the value corresponding to the key `x' NULL. This caused subsequent
lookups to interpret it as unset.
Patch (apply with `patch -p0'):
*** ../bash-4.3/arrayfunc.c 2013-08-02 16:19:59.000000000 -0400
--- arrayfunc.c 2014-03-18 11:08:15.000000000 -0400
***************
*** 598,601 ****
--- 598,606 ----
{
val = expand_assignment_string_to_string (val, 0);
+ if (val == 0)
+ {
+ val = (char *)xmalloc (1);
+ val[0] = '\0'; /* like do_assignment_internal */
+ }
free_val = 1;
}
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 6
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 7
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,188 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-008
Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
Bug-Reference-ID: <20140318135901.GB22158@chaz.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html
Bug-Description:
Some extended glob patterns incorrectly matched filenames with a leading
dot, regardless of the setting of the `dotglob' option.
Patch (apply with `patch -p0'):
*** ../bash-4.3/lib/glob/gmisc.c 2013-10-28 14:45:25.000000000 -0400
--- lib/glob/gmisc.c 2014-03-19 09:16:08.000000000 -0400
***************
*** 211,214 ****
--- 211,215 ----
case '!':
case '@':
+ case '?':
return (pat[1] == LPAREN);
default:
*** ../bash-4.3/lib/glob/glob.c 2014-01-31 21:43:51.000000000 -0500
--- lib/glob/glob.c 2014-03-20 09:01:26.000000000 -0400
***************
*** 180,202 ****
int flags;
{
! char *pp, *pe, *t;
! int n, r;
pp = pat + 2;
! pe = pp + strlen (pp) - 1; /*(*/
! if (*pe != ')')
! return 0;
! if ((t = strchr (pp, '|')) == 0) /* easy case first */
{
*pe = '\0';
r = skipname (pp, dname, flags); /*(*/
*pe = ')';
return r;
}
while (t = glob_patscan (pp, pe, '|'))
{
n = t[-1];
t[-1] = '\0';
r = skipname (pp, dname, flags);
t[-1] = n;
if (r == 0) /* if any pattern says not skip, we don't skip */
--- 180,215 ----
int flags;
{
! char *pp, *pe, *t, *se;
! int n, r, negate;
+ negate = *pat == '!';
pp = pat + 2;
! se = pp + strlen (pp) - 1; /* end of string */
! pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
! /* we should check for invalid extglob pattern here */
! /* if pe != se we have more of the pattern at the end of the extglob
! pattern. Check the easy case first ( */
! if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
{
*pe = '\0';
+ #if defined (HANDLE_MULTIBYTE)
+ r = mbskipname (pp, dname, flags);
+ #else
r = skipname (pp, dname, flags); /*(*/
+ #endif
*pe = ')';
return r;
}
+
+ /* check every subpattern */
while (t = glob_patscan (pp, pe, '|'))
{
n = t[-1];
t[-1] = '\0';
+ #if defined (HANDLE_MULTIBYTE)
+ r = mbskipname (pp, dname, flags);
+ #else
r = skipname (pp, dname, flags);
+ #endif
t[-1] = n;
if (r == 0) /* if any pattern says not skip, we don't skip */
***************
*** 205,219 ****
} /*(*/
! if (pp == pe) /* glob_patscan might find end of pattern */
return r;
! *pe = '\0';
! # if defined (HANDLE_MULTIBYTE)
! r = mbskipname (pp, dname, flags); /*(*/
! # else
! r = skipname (pp, dname, flags); /*(*/
! # endif
! *pe = ')';
! return r;
}
#endif
--- 218,227 ----
} /*(*/
! /* glob_patscan might find end of pattern */
! if (pp == se)
return r;
! /* but if it doesn't then we didn't match a leading dot */
! return 0;
}
#endif
***************
*** 278,289 ****
{
#if EXTENDED_GLOB
! wchar_t *pp, *pe, *t, n;
! int r;
pp = pat + 2;
! pe = pp + wcslen (pp) - 1; /*(*/
! if (*pe != L')')
! return 0;
! if ((t = wcschr (pp, L'|')) == 0)
{
*pe = L'\0';
--- 286,298 ----
{
#if EXTENDED_GLOB
! wchar_t *pp, *pe, *t, n, *se;
! int r, negate;
+ negate = *pat == L'!';
pp = pat + 2;
! se = pp + wcslen (pp) - 1; /*(*/
! pe = glob_patscan_wc (pp, se, 0);
!
! if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
{
*pe = L'\0';
***************
*** 292,295 ****
--- 301,306 ----
return r;
}
+
+ /* check every subpattern */
while (t = glob_patscan_wc (pp, pe, '|'))
{
***************
*** 306,313 ****
return r;
! *pe = L'\0';
! r = wchkname (pp, dname); /*(*/
! *pe = L')';
! return r;
#else
return (wchkname (pat, dname));
--- 317,322 ----
return r;
! /* but if it doesn't then we didn't match a leading dot */
! return 0;
#else
return (wchkname (pat, dname));
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 7
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 8
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,64 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-009
Bug-Reported-by: Matthias Klose <doko@debian.org>
Bug-Reference-ID: <53346FC8.6090005@debian.org>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00171.html
Bug-Description:
There is a problem with unsigned sign extension when attempting to reallocate
the input line when it is fewer than 3 characters long and there has been a
history expansion. The sign extension causes the shell to not reallocate the
line, which results in a segmentation fault when it writes past the end.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/parse.y 2014-02-11 09:42:10.000000000 -0500
--- parse.y 2014-03-27 16:33:29.000000000 -0400
***************
*** 2425,2429 ****
if (shell_input_line_terminator != EOF)
{
! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
shell_input_line = (char *)xrealloc (shell_input_line,
1 + (shell_input_line_size += 2));
--- 2425,2429 ----
if (shell_input_line_terminator != EOF)
{
! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
shell_input_line = (char *)xrealloc (shell_input_line,
1 + (shell_input_line_size += 2));
*** ../bash-4.3-patched/y.tab.c 2014-03-28 11:17:06.000000000 -0400
--- y.tab.c 2014-04-07 11:48:31.000000000 -0400
***************
*** 4737,4741 ****
if (shell_input_line_terminator != EOF)
{
! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
shell_input_line = (char *)xrealloc (shell_input_line,
1 + (shell_input_line_size += 2));
--- 4737,4741 ----
if (shell_input_line_terminator != EOF)
{
! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
shell_input_line = (char *)xrealloc (shell_input_line,
1 + (shell_input_line_size += 2));
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 8
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 9
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,157 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-010
Bug-Reported-by: Albert Shih <Albert.Shih@obspm.fr>
Bug-Reference-ID: Wed, 5 Mar 2014 23:01:40 +0100
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00028.html
Bug-Description:
Patch (apply with `patch -p0'):
This patch changes the behavior of programmable completion to compensate
for two assumptions made by the bash-completion package. Bash-4.3 changed
to dequote the argument to programmable completion only under certain
circumstances, to make the behavior of compgen more consistent when run
from the command line -- closer to the behavior when run by a shell function
run as part of programmable completion. Bash-completion can pass quoted
arguments to compgen when the original word to be completed was not quoted,
expecting programmable completion to dequote the word before attempting
completion.
This patch fixes two cases:
1. An empty string that bash-completion passes to compgen as a quoted null
string ('').
2. An unquoted word that bash-completion quotes using single quotes or
backslashes before passing it to compgen.
In these cases, since readline did not detect a quote character in the original
word to be completed, bash-4.3
*** ../bash-4.3/externs.h 2014-01-02 14:58:20.000000000 -0500
--- externs.h 2014-03-13 14:42:57.000000000 -0400
***************
*** 325,328 ****
--- 325,329 ----
extern char *sh_backslash_quote_for_double_quotes __P((char *));
extern int sh_contains_shell_metas __P((char *));
+ extern int sh_contains_quotes __P((char *));
/* declarations for functions defined in lib/sh/spell.c */
*** ../bash-4.3/lib/sh/shquote.c 2013-03-31 21:53:32.000000000 -0400
--- lib/sh/shquote.c 2014-03-13 14:42:57.000000000 -0400
***************
*** 312,313 ****
--- 312,327 ----
return (0);
}
+
+ int
+ sh_contains_quotes (string)
+ char *string;
+ {
+ char *s;
+
+ for (s = string; s && *s; s++)
+ {
+ if (*s == '\'' || *s == '"' || *s == '\\')
+ return 1;
+ }
+ return 0;
+ }
*** ../bash-4.3/pcomplete.c 2013-08-26 15:23:45.000000000 -0400
--- pcomplete.c 2014-03-25 17:23:23.000000000 -0400
***************
*** 184,187 ****
--- 184,188 ----
COMPSPEC *pcomp_curcs;
const char *pcomp_curcmd;
+ const char *pcomp_curtxt;
#ifdef DEBUG
***************
*** 754,757 ****
--- 755,784 ----
dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
}
+ /* Intended to solve a mismatched assumption by bash-completion. If
+ the text to be completed is empty, but bash-completion turns it into
+ a quoted string ('') assuming that this code will dequote it before
+ calling readline, do the dequoting. */
+ else if (iscompgen && iscompleting &&
+ pcomp_curtxt && *pcomp_curtxt == 0 &&
+ text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 &&
+ rl_filename_dequoting_function)
+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
+ /* Another mismatched assumption by bash-completion. If compgen is being
+ run as part of bash-completion, and the argument to compgen is not
+ the same as the word originally passed to the programmable completion
+ code, dequote the argument if it has quote characters. It's an
+ attempt to detect when bash-completion is quoting its filename
+ argument before calling compgen. */
+ /* We could check whether gen_shell_function_matches is in the call
+ stack by checking whether the gen-shell-function-matches tag is in
+ the unwind-protect stack, but there's no function to do that yet.
+ We could simply check whether we're executing in a function by
+ checking variable_context, and may end up doing that. */
+ else if (iscompgen && iscompleting && rl_filename_dequoting_function &&
+ pcomp_curtxt && text &&
+ STREQ (pcomp_curtxt, text) == 0 &&
+ variable_context &&
+ sh_contains_quotes (text)) /* guess */
+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
else
dfn = savestring (text);
***************
*** 1523,1527 ****
{
COMPSPEC *cs, *oldcs;
! const char *oldcmd;
STRINGLIST *ret;
--- 1550,1554 ----
{
COMPSPEC *cs, *oldcs;
! const char *oldcmd, *oldtxt;
STRINGLIST *ret;
***************
*** 1546,1552 ****
--- 1573,1581 ----
oldcs = pcomp_curcs;
oldcmd = pcomp_curcmd;
+ oldtxt = pcomp_curtxt;
pcomp_curcs = cs;
pcomp_curcmd = cmd;
+ pcomp_curtxt = word;
ret = gen_compspec_completions (cs, cmd, word, start, end, foundp);
***************
*** 1554,1557 ****
--- 1583,1587 ----
pcomp_curcs = oldcs;
pcomp_curcmd = oldcmd;
+ pcomp_curtxt = oldtxt;
/* We need to conditionally handle setting *retryp here */
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 9
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 10
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,49 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-011
Bug-Reported-by: Egmont Koblinger <egmont@gmail.com>
Bug-Reference-ID: <CAGWcZk+bU5Jo1M+tutGvL-250UBE9DXjpeJVofYJSFcqFEVfMg@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html
Bug-Description:
The signal handling changes to bash and readline (to avoid running any code
in a signal handler context) cause the cursor to be placed on the wrong
line of a multi-line command after a ^C interrupts editing.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/lib/readline/display.c 2013-12-27 13:10:56.000000000 -0500
--- lib/readline/display.c 2014-03-27 11:52:45.000000000 -0400
***************
*** 2678,2682 ****
if (_rl_echoing_p)
{
! _rl_move_vert (_rl_vis_botlin);
_rl_vis_botlin = 0;
fflush (rl_outstream);
--- 2678,2683 ----
if (_rl_echoing_p)
{
! if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */
! _rl_move_vert (_rl_vis_botlin);
_rl_vis_botlin = 0;
fflush (rl_outstream);
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 10
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 11
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,43 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-012
Bug-Reported-by: Eduardo A. Bustamante López<dualbus@gmail.com>
Bug-Reference-ID: <5346B54C.4070205@case.edu>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00051.html
Bug-Description:
When a SIGCHLD trap runs a command containing a shell builtin while
a script is running `wait' to wait for all running children to complete,
the SIGCHLD trap will not be run once for each child that terminates.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/jobs.c 2014-03-28 10:54:19.000000000 -0400
--- jobs.c 2014-04-15 08:47:03.000000000 -0400
***************
*** 3598,3601 ****
--- 3598,3602 ----
unwind_protect_pointer (the_pipeline);
unwind_protect_pointer (subst_assign_varlist);
+ unwind_protect_pointer (this_shell_builtin);
/* We have to add the commands this way because they will be run
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 11
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 12
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,66 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-013
Bug-Reported-by: <Trond.Endrestol@ximalas.info>
Bug-Reference-ID: <alpine.BSF.2.03.1404192114310.1973@enterprise.ximalas.info>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html
Bug-Description:
Using reverse-i-search when horizontal scrolling is enabled does not redisplay
the entire line containing the successful search results.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/lib/readline/display.c 2014-04-08 18:19:36.000000000 -0400
--- lib/readline/display.c 2014-04-20 18:32:52.000000000 -0400
***************
*** 1638,1642 ****
the spot of first difference is before the end of the invisible chars,
lendiff needs to be adjusted. */
! if (current_line == 0 && !_rl_horizontal_scroll_mode &&
current_invis_chars != visible_wrap_offset)
{
--- 1638,1642 ----
the spot of first difference is before the end of the invisible chars,
lendiff needs to be adjusted. */
! if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */
current_invis_chars != visible_wrap_offset)
{
***************
*** 1826,1831 ****
_rl_last_c_pos += bytes_to_insert;
if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
! goto clear_rest_of_line;
}
}
--- 1826,1836 ----
_rl_last_c_pos += bytes_to_insert;
+ /* XXX - we only want to do this if we are at the end of the line
+ so we move there with _rl_move_cursor_relative */
if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
! {
! _rl_move_cursor_relative (ne-new, new);
! goto clear_rest_of_line;
! }
}
}
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 12
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 13
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,102 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-014
Bug-Reported-by: Greg Wooledge <wooledg@eeg.ccf.org>
Bug-Reference-ID: <20140418202123.GB7660@eeg.ccf.org>
Bug-Reference-URL: http://lists.gnu.org/archive/html/help-bash/2014-04/msg00004.html
Bug-Description:
Under certain circumstances, $@ is expanded incorrectly in contexts where
word splitting is not performed.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/subst.c 2014-01-23 16:26:37.000000000 -0500
--- subst.c 2014-04-19 15:41:26.000000000 -0400
***************
*** 3249,3254 ****
--- 3249,3256 ----
return ((char *)NULL);
+ expand_no_split_dollar_star = 1;
w->flags |= W_NOSPLIT2;
l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0);
+ expand_no_split_dollar_star = 0;
if (l)
{
***************
*** 7848,7851 ****
--- 7850,7857 ----
according to POSIX.2, this expands to a list of the positional
parameters no matter what IFS is set to. */
+ /* XXX - what to do when in a context where word splitting is not
+ performed? Even when IFS is not the default, posix seems to imply
+ that we behave like unquoted $* ? Maybe we should use PF_NOSPLIT2
+ here. */
temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted);
***************
*** 8817,8820 ****
--- 8823,8827 ----
{
char *ifs_chars;
+ char *tstring;
ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL;
***************
*** 8831,8834 ****
--- 8838,8865 ----
if (split_on_spaces)
list = list_string (istring, " ", 1); /* XXX quoted == 1? */
+ /* If we have $@ (has_dollar_at != 0) and we are in a context where we
+ don't want to split the result (W_NOSPLIT2), and we are not quoted,
+ we have already separated the arguments with the first character of
+ $IFS. In this case, we want to return a list with a single word
+ with the separator possibly replaced with a space (it's what other
+ shells seem to do).
+ quoted_dollar_at is internal to this function and is set if we are
+ passed an argument that is unquoted (quoted == 0) but we encounter a
+ double-quoted $@ while expanding it. */
+ else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2))
+ {
+ /* Only split and rejoin if we have to */
+ if (*ifs_chars && *ifs_chars != ' ')
+ {
+ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
+ tstring = string_list (list);
+ }
+ else
+ tstring = istring;
+ tword = make_bare_word (tstring);
+ if (tstring != istring)
+ free (tstring);
+ goto set_word_flags;
+ }
else if (has_dollar_at && ifs_chars)
list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
***************
*** 8836,8839 ****
--- 8867,8871 ----
{
tword = make_bare_word (istring);
+ set_word_flags:
if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED))
tword->flags |= W_QUOTED;
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 13
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 14
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,58 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-015
Bug-Reported-by: Clark Wang <dearvoid@gmail.com>
Bug-Reference-ID: <CADv8-og2TOSoabXeNVXVGaXN3tEMHnYVq1rwOLe5meaRPSGRig@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00095.html
Bug-Description:
When completing directory names, the directory name is dequoted twice.
This causes problems for directories with single and double quotes in
their names.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/bashline.c 2014-02-09 19:56:58.000000000 -0500
--- bashline.c 2014-04-25 14:57:52.000000000 -0400
***************
*** 4168,4174 ****
qc = rl_dispatching ? rl_completion_quote_character : 0;
! dfn = bash_dequote_filename ((char *)text, qc);
m1 = rl_completion_matches (dfn, rl_filename_completion_function);
! free (dfn);
if (m1 == 0 || m1[0] == 0)
--- 4209,4222 ----
qc = rl_dispatching ? rl_completion_quote_character : 0;
! /* If rl_completion_found_quote != 0, rl_completion_matches will call the
! filename dequoting function, causing the directory name to be dequoted
! twice. */
! if (rl_dispatching && rl_completion_found_quote == 0)
! dfn = bash_dequote_filename ((char *)text, qc);
! else
! dfn = (char *)text;
m1 = rl_completion_matches (dfn, rl_filename_completion_function);
! if (dfn != text)
! free (dfn);
if (m1 == 0 || m1[0] == 0)
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 14
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 15
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,132 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-016
Bug-Reported-by: Pierre Gaston <pierre.gaston@gmail.com>
Bug-Reference-ID: <CAPSX3sTCD61k1VQLJ5r-LWzEt+e7Xc-fxXmwn2u8EA5gJJej8Q@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00100.html
Bug-Description:
An extended glob pattern containing a slash (`/') causes the globbing code
to misinterpret it as a directory separator.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/lib/glob/glob.c 2014-03-28 10:54:23.000000000 -0400
--- lib/glob/glob.c 2014-05-02 10:24:28.000000000 -0400
***************
*** 124,127 ****
--- 124,129 ----
extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int));
+ extern char *glob_dirscan __P((char *, int));
+
/* Compile `glob_loop.c' for single-byte characters. */
#define CHAR unsigned char
***************
*** 188,191 ****
--- 190,196 ----
pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
/* we should check for invalid extglob pattern here */
+ if (pe == 0)
+ return 0;
+
/* if pe != se we have more of the pattern at the end of the extglob
pattern. Check the easy case first ( */
***************
*** 1016,1020 ****
char **result;
unsigned int result_size;
! char *directory_name, *filename, *dname;
unsigned int directory_len;
int free_dirname; /* flag */
--- 1021,1025 ----
char **result;
unsigned int result_size;
! char *directory_name, *filename, *dname, *fn;
unsigned int directory_len;
int free_dirname; /* flag */
***************
*** 1032,1035 ****
--- 1037,1052 ----
/* Find the filename. */
filename = strrchr (pathname, '/');
+ #if defined (EXTENDED_GLOB)
+ if (filename && extended_glob)
+ {
+ fn = glob_dirscan (pathname, '/');
+ #if DEBUG_MATCHING
+ if (fn != filename)
+ fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename);
+ #endif
+ filename = fn;
+ }
+ #endif
+
if (filename == NULL)
{
*** ../bash-4.3-patched/lib/glob/gmisc.c 2014-03-28 10:54:23.000000000 -0400
--- lib/glob/gmisc.c 2014-05-02 09:35:57.000000000 -0400
***************
*** 43,46 ****
--- 43,48 ----
#define WRPAREN L')'
+ extern char *glob_patscan __P((char *, char *, int));
+
/* Return 1 of the first character of WSTRING could match the first
character of pattern WPAT. Wide character version. */
***************
*** 376,377 ****
--- 378,410 ----
return matlen;
}
+
+ /* Skip characters in PAT and return the final occurrence of DIRSEP. This
+ is only called when extended_glob is set, so we have to skip over extglob
+ patterns x(...) */
+ char *
+ glob_dirscan (pat, dirsep)
+ char *pat;
+ int dirsep;
+ {
+ char *p, *d, *pe, *se;
+
+ d = pe = se = 0;
+ for (p = pat; p && *p; p++)
+ {
+ if (extglob_pattern_p (p))
+ {
+ if (se == 0)
+ se = p + strlen (p) - 1;
+ pe = glob_patscan (p + 2, se, 0);
+ if (pe == 0)
+ continue;
+ else if (*pe == 0)
+ break;
+ p = pe - 1; /* will do increment above */
+ continue;
+ }
+ if (*p == dirsep)
+ d = p;
+ }
+ return d;
+ }
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 15
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 16
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,51 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-017
Bug-Reported-by: Dan Douglas <ormaaj@gmail.com>
Bug-Reference-ID: <7781746.RhfoTROLxF@smorgbox>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00026.html
Bug-Description:
The code that creates local variables should not clear the `invisible'
attribute when returning an existing local variable. Let the code that
actually assigns a value clear it.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/variables.c 2014-02-14 11:55:12.000000000 -0500
--- variables.c 2014-05-07 10:53:57.000000000 -0400
***************
*** 2198,2205 ****
old_var = find_variable (name);
if (old_var && local_p (old_var) && old_var->context == variable_context)
! {
! VUNSETATTR (old_var, att_invisible); /* XXX */
! return (old_var);
! }
was_tmpvar = old_var && tempvar_p (old_var);
--- 2260,2264 ----
old_var = find_variable (name);
if (old_var && local_p (old_var) && old_var->context == variable_context)
! return (old_var);
was_tmpvar = old_var && tempvar_p (old_var);
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 16
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 17
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,44 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-018
Bug-Reported-by: Geir Hauge <geir.hauge@gmail.com>
Bug-Reference-ID: <CAO-BiTLOvfPXDypg61jcBausADrxUKJejakV2WTWP26cW0=rgA@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00040.html
Bug-Description:
When assigning an array variable using the compound assignment syntax,
but using `declare' with the rhs of the compound assignment quoted, the
shell did not mark the variable as visible after successfully performing
the assignment.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/arrayfunc.c 2014-03-28 10:54:21.000000000 -0400
--- arrayfunc.c 2014-05-12 11:19:00.000000000 -0400
***************
*** 180,183 ****
--- 180,184 ----
FREE (newval);
+ VUNSETATTR (entry, att_invisible); /* no longer invisible */
return (entry);
}
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 17
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 18
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,84 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-019
Bug-Reported-by: John Lenton
Bug-Reference-ID:
Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476
Bug-Description:
The -t timeout option to `read' does not work when the -e option is used.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/lib/readline/input.c 2014-01-10 15:07:08.000000000 -0500
--- lib/readline/input.c 2014-05-22 18:40:59.000000000 -0400
***************
*** 535,540 ****
--- 538,551 ----
else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM)
return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF);
+ /* keyboard-generated signals of interest */
else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT)
RL_CHECK_SIGNALS ();
+ /* non-keyboard-generated signals of interest */
+ else if (_rl_caught_signal == SIGALRM
+ #if defined (SIGVTALRM)
+ || _rl_caught_signal == SIGVTALRM
+ #endif
+ )
+ RL_CHECK_SIGNALS ();
if (rl_signal_event_hook)
*** ../bash-4.3-patched/builtins/read.def 2013-09-02 11:54:00.000000000 -0400
--- builtins/read.def 2014-05-08 11:43:35.000000000 -0400
***************
*** 443,447 ****
#if defined (READLINE)
if (edit)
! add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
#endif
falarm (tmsec, tmusec);
--- 443,450 ----
#if defined (READLINE)
if (edit)
! {
! add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
! add_unwind_protect (bashline_reset_event_hook, (char *)NULL);
! }
#endif
falarm (tmsec, tmusec);
***************
*** 1022,1025 ****
--- 1025,1029 ----
old_attempted_completion_function = rl_attempted_completion_function;
rl_attempted_completion_function = (rl_completion_func_t *)NULL;
+ bashline_set_event_hook ();
if (itext)
{
***************
*** 1033,1036 ****
--- 1037,1041 ----
rl_attempted_completion_function = old_attempted_completion_function;
old_attempted_completion_function = (rl_completion_func_t *)NULL;
+ bashline_reset_event_hook ();
if (ret == 0)
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 18
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 19
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,110 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-020
Bug-Reported-by: Jared Yanovich <slovichon@gmail.com>
Bug-Reference-ID: <20140417073654.GB26875@nightderanger.psc.edu>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00065.html
Bug-Description:
When PS2 contains a command substitution, here-documents entered in an
interactive shell can sometimes cause a segmentation fault.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/shell.h 2012-12-25 21:11:01.000000000 -0500
--- shell.h 2014-06-03 09:24:28.000000000 -0400
***************
*** 169,173 ****
int expand_aliases;
int echo_input_at_read;
!
} sh_parser_state_t;
--- 169,174 ----
int expand_aliases;
int echo_input_at_read;
! int need_here_doc;
!
} sh_parser_state_t;
*** ../bash-4.3-patched/parse.y 2014-05-14 09:16:40.000000000 -0400
--- parse.y 2014-04-30 09:27:59.000000000 -0400
***************
*** 2643,2647 ****
r = 0;
! while (need_here_doc)
{
parser_state |= PST_HEREDOC;
--- 2643,2647 ----
r = 0;
! while (need_here_doc > 0)
{
parser_state |= PST_HEREDOC;
***************
*** 6076,6079 ****
--- 6076,6080 ----
ps->expand_aliases = expand_aliases;
ps->echo_input_at_read = echo_input_at_read;
+ ps->need_here_doc = need_here_doc;
ps->token = token;
***************
*** 6124,6127 ****
--- 6125,6129 ----
expand_aliases = ps->expand_aliases;
echo_input_at_read = ps->echo_input_at_read;
+ need_here_doc = ps->need_here_doc;
FREE (token);
*** ../bash-4.3-patched/y.tab.c 2014-04-07 11:56:12.000000000 -0400
--- y.tab.c 2014-07-30 09:55:57.000000000 -0400
***************
*** 4955,4959 ****
r = 0;
! while (need_here_doc)
{
parser_state |= PST_HEREDOC;
--- 5151,5155 ----
r = 0;
! while (need_here_doc > 0)
{
parser_state |= PST_HEREDOC;
***************
*** 8388,8391 ****
--- 8584,8588 ----
ps->expand_aliases = expand_aliases;
ps->echo_input_at_read = echo_input_at_read;
+ ps->need_here_doc = need_here_doc;
ps->token = token;
***************
*** 8436,8439 ****
--- 8633,8637 ----
expand_aliases = ps->expand_aliases;
echo_input_at_read = ps->echo_input_at_read;
+ need_here_doc = ps->need_here_doc;
FREE (token);
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 19
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 20
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,52 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-021
Bug-Reported-by: Jared Yanovich <slovichon@gmail.com>
Bug-Reference-ID: <20140625225019.GJ17044@nightderanger.psc.edu>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00070.html
Bug-Description:
When the readline `revert-all-at-newline' option is set, pressing newline
when the current line is one retrieved from history results in a double free
and a segmentation fault.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/lib/readline/misc.c 2012-09-01 18:03:11.000000000 -0400
--- lib/readline/misc.c 2014-06-30 13:41:19.000000000 -0400
***************
*** 462,465 ****
--- 462,466 ----
/* Set up rl_line_buffer and other variables from history entry */
rl_replace_from_history (entry, 0); /* entry->line is now current */
+ entry->data = 0; /* entry->data is now current undo list */
/* Undo all changes to this history entry */
while (rl_undo_list)
***************
*** 469,473 ****
FREE (entry->line);
entry->line = savestring (rl_line_buffer);
- entry->data = 0;
}
entry = previous_history ();
--- 470,473 ----
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 20
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 21
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,56 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-022
Bug-Reported-by: scorp.dev.null@gmail.com
Bug-Reference-ID: <E1WxXw8-0007iE-Bi@pcm14>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00061.html
Bug-Description:
Using nested pipelines within loops with the `lastpipe' option set can result
in a segmentation fault.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/execute_cmd.c 2014-01-31 10:54:52.000000000 -0500
--- execute_cmd.c 2014-06-19 08:05:49.000000000 -0400
***************
*** 2410,2414 ****
lstdin = wait_for (lastpid);
#if defined (JOB_CONTROL)
! exec_result = job_exit_status (lastpipe_jid);
#endif
unfreeze_jobs_list ();
--- 2425,2438 ----
lstdin = wait_for (lastpid);
#if defined (JOB_CONTROL)
! /* If wait_for removes the job from the jobs table, use result of last
! command as pipeline's exit status as usual. The jobs list can get
! frozen and unfrozen at inconvenient times if there are multiple pipelines
! running simultaneously. */
! if (INVALID_JOB (lastpipe_jid) == 0)
! exec_result = job_exit_status (lastpipe_jid);
! else if (pipefail_opt)
! exec_result = exec_result | lstdin; /* XXX */
! /* otherwise we use exec_result */
!
#endif
unfreeze_jobs_list ();
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 21
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 22
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,104 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-023
Bug-Reported-by: Tim Friske <me@timfriske.com>
Bug-Reference-ID: <CAM1RzOcOR9zzC2i+aeES6LtbHNHoOV+0pZEYPrqxv_QAii-RXA@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00056.html
Bug-Description:
Bash does not correctly parse process substitution constructs that contain
unbalanced parentheses as part of the contained command.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/subst.h 2014-01-11 21:02:27.000000000 -0500
--- subst.h 2014-07-20 17:25:01.000000000 -0400
***************
*** 83,87 ****
Start extracting at (SINDEX) as if we had just seen "<(".
Make (SINDEX) get the position just after the matching ")". */
! extern char *extract_process_subst __P((char *, char *, int *));
#endif /* PROCESS_SUBSTITUTION */
--- 83,87 ----
Start extracting at (SINDEX) as if we had just seen "<(".
Make (SINDEX) get the position just after the matching ")". */
! extern char *extract_process_subst __P((char *, char *, int *, int));
#endif /* PROCESS_SUBSTITUTION */
*** ../bash-4.3-patched/subst.c 2014-05-15 08:26:45.000000000 -0400
--- subst.c 2014-07-20 17:26:44.000000000 -0400
***************
*** 1193,1202 ****
Make (SINDEX) get the position of the matching ")". */ /*))*/
char *
! extract_process_subst (string, starter, sindex)
char *string;
char *starter;
int *sindex;
{
return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
}
#endif /* PROCESS_SUBSTITUTION */
--- 1193,1208 ----
Make (SINDEX) get the position of the matching ")". */ /*))*/
char *
! extract_process_subst (string, starter, sindex, xflags)
char *string;
char *starter;
int *sindex;
+ int xflags;
{
+ #if 0
return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
+ #else
+ xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0);
+ return (xparse_dolparen (string, string+*sindex, sindex, xflags));
+ #endif
}
#endif /* PROCESS_SUBSTITUTION */
***************
*** 1786,1790 ****
if (string[si] == '\0')
CQ_RETURN(si);
! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si);
free (temp); /* no SX_ALLOC here */
i = si;
--- 1792,1796 ----
if (string[si] == '\0')
CQ_RETURN(si);
! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si, 0);
free (temp); /* no SX_ALLOC here */
i = si;
***************
*** 8250,8254 ****
t_index = sindex + 1; /* skip past both '<' and LPAREN */
! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/
sindex = t_index;
--- 8256,8260 ----
t_index = sindex + 1; /* skip past both '<' and LPAREN */
! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index, 0); /*))*/
sindex = t_index;
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 22
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 23
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,54 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-024
Bug-Reported-by: Corentin Peuvrel <cpeuvrel@pom-monitoring.com>
Bug-Reference-ID: <53CE9E5D.6050203@pom-monitoring.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-07/msg00021.html
Bug-Description:
Indirect variable references do not work correctly if the reference
variable expands to an array reference using a subscript other than 0
(e.g., foo='bar[1]' ; echo ${!foo}).
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/subst.c 2014-06-03 09:32:44.000000000 -0400
--- subst.c 2014-07-23 09:58:19.000000000 -0400
***************
*** 7375,7379 ****
if (want_indir)
! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
else
tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
--- 7445,7455 ----
if (want_indir)
! {
! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
! /* Turn off the W_ARRAYIND flag because there is no way for this function
! to return the index we're supposed to be using. */
! if (tdesc && tdesc->flags)
! tdesc->flags &= ~W_ARRAYIND;
! }
else
tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 23
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 24
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,123 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-025
Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
Bug-Reference-ID:
Bug-Reference-URL:
Bug-Description:
Under certain circumstances, bash will execute user code while processing the
environment for exported function definitions.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/builtins/common.h 2013-07-08 16:54:47.000000000 -0400
--- builtins/common.h 2014-09-12 14:25:47.000000000 -0400
***************
*** 34,37 ****
--- 49,54 ----
#define SEVAL_PARSEONLY 0x020
#define SEVAL_NOLONGJMP 0x040
+ #define SEVAL_FUNCDEF 0x080 /* only allow function definitions */
+ #define SEVAL_ONECMD 0x100 /* only allow a single command */
/* Flags for describe_command, shared between type.def and command.def */
*** ../bash-4.3-patched/builtins/evalstring.c 2014-02-11 09:42:10.000000000 -0500
--- builtins/evalstring.c 2014-09-14 14:15:13.000000000 -0400
***************
*** 309,312 ****
--- 313,324 ----
struct fd_bitmap *bitmap;
+ if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
+ {
+ internal_warning ("%s: ignoring function definition attempt", from_file);
+ should_jump_to_top_level = 0;
+ last_result = last_command_exit_value = EX_BADUSAGE;
+ break;
+ }
+
bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
begin_unwind_frame ("pe_dispose");
***************
*** 369,372 ****
--- 381,387 ----
dispose_fd_bitmap (bitmap);
discard_unwind_frame ("pe_dispose");
+
+ if (flags & SEVAL_ONECMD)
+ break;
}
}
*** ../bash-4.3-patched/variables.c 2014-05-15 08:26:50.000000000 -0400
--- variables.c 2014-09-14 14:23:35.000000000 -0400
***************
*** 359,369 ****
strcpy (temp_string + char_index + 1, string);
! if (posixly_correct == 0 || legal_identifier (name))
! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
!
! /* Ancient backwards compatibility. Old versions of bash exported
! functions like name()=() {...} */
! if (name[char_index - 1] == ')' && name[char_index - 2] == '(')
! name[char_index - 2] = '\0';
if (temp_var = find_function (name))
--- 364,372 ----
strcpy (temp_string + char_index + 1, string);
! /* Don't import function names that are invalid identifiers from the
! environment, though we still allow them to be defined as shell
! variables. */
! if (legal_identifier (name))
! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
if (temp_var = find_function (name))
***************
*** 382,389 ****
report_error (_("error importing function definition for `%s'"), name);
}
-
- /* ( */
- if (name[char_index - 1] == ')' && name[char_index - 2] == '\0')
- name[char_index - 2] = '('; /* ) */
}
#if defined (ARRAY_VARS)
--- 385,388 ----
*** ../bash-4.3-patched/subst.c 2014-08-11 11:16:35.000000000 -0400
--- subst.c 2014-09-12 15:31:04.000000000 -0400
***************
*** 8048,8052 ****
goto return0;
}
! else if (var = find_variable_last_nameref (temp1))
{
temp = nameref_cell (var);
--- 8118,8124 ----
goto return0;
}
! else if (var && (invisible_p (var) || var_isset (var) == 0))
! temp = (char *)NULL;
! else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0)
{
temp = nameref_cell (var);
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 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,60 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-026
Bug-Reported-by: Tavis Ormandy <taviso@cmpxchg8b.com>
Bug-Reference-ID:
Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929
Bug-Description:
Under certain circumstances, bash can incorrectly save a lookahead character and
return it on a subsequent call, even when reading a new line.
Patch (apply with `patch -p0'):
*** ../bash-4.3.25/parse.y 2014-07-30 10:14:31.000000000 -0400
--- parse.y 2014-09-25 20:20:21.000000000 -0400
***************
*** 2954,2957 ****
--- 2954,2959 ----
word_desc_to_read = (WORD_DESC *)NULL;
+ eol_ungetc_lookahead = 0;
+
current_token = '\n'; /* XXX */
last_read_token = '\n';
*** ../bash-4.3.25/y.tab.c 2014-07-30 10:14:32.000000000 -0400
--- y.tab.c 2014-09-25 20:21:48.000000000 -0400
***************
*** 5266,5269 ****
--- 5266,5271 ----
word_desc_to_read = (WORD_DESC *)NULL;
+ eol_ungetc_lookahead = 0;
+
current_token = '\n'; /* XXX */
last_read_token = '\n';
***************
*** 8540,8542 ****
}
#endif /* HANDLE_MULTIBYTE */
-
--- 8542,8543 ----
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 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,221 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-027
Bug-Reported-by: Florian Weimer <fweimer@redhat.com>
Bug-Reference-ID:
Bug-Reference-URL:
Bug-Description:
This patch changes the encoding bash uses for exported functions to avoid
clashes with shell variables and to avoid depending only on an environment
variable's contents to determine whether or not to interpret it as a shell
function.
Patch (apply with `patch -p0'):
*** ../bash-4.3.26/variables.c 2014-09-25 23:02:18.000000000 -0400
--- variables.c 2014-09-27 20:52:04.000000000 -0400
***************
*** 84,87 ****
--- 84,92 ----
#define ifsname(s) ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0')
+ #define BASHFUNC_PREFIX "BASH_FUNC_"
+ #define BASHFUNC_PREFLEN 10 /* == strlen(BASHFUNC_PREFIX */
+ #define BASHFUNC_SUFFIX "%%"
+ #define BASHFUNC_SUFFLEN 2 /* == strlen(BASHFUNC_SUFFIX) */
+
extern char **environ;
***************
*** 280,284 ****
static void dispose_temporary_env __P((sh_free_func_t *));
! static inline char *mk_env_string __P((const char *, const char *));
static char **make_env_array_from_var_list __P((SHELL_VAR **));
static char **make_var_export_array __P((VAR_CONTEXT *));
--- 285,289 ----
static void dispose_temporary_env __P((sh_free_func_t *));
! static inline char *mk_env_string __P((const char *, const char *, int));
static char **make_env_array_from_var_list __P((SHELL_VAR **));
static char **make_var_export_array __P((VAR_CONTEXT *));
***************
*** 350,369 ****
/* If exported function, define it now. Don't import functions from
the environment in privileged mode. */
! if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4))
{
string_length = strlen (string);
! temp_string = (char *)xmalloc (3 + string_length + char_index);
! strcpy (temp_string, name);
! temp_string[char_index] = ' ';
! strcpy (temp_string + char_index + 1, string);
/* Don't import function names that are invalid identifiers from the
environment, though we still allow them to be defined as shell
variables. */
! if (legal_identifier (name))
! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
! if (temp_var = find_function (name))
{
VSETATTR (temp_var, (att_exported|att_imported));
--- 355,385 ----
/* If exported function, define it now. Don't import functions from
the environment in privileged mode. */
! if (privmode == 0 && read_but_dont_execute == 0 &&
! STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) &&
! STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) &&
! STREQN ("() {", string, 4))
{
+ size_t namelen;
+ char *tname; /* desired imported function name */
+
+ namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN;
+
+ tname = name + BASHFUNC_PREFLEN; /* start of func name */
+ tname[namelen] = '\0'; /* now tname == func name */
+
string_length = strlen (string);
! temp_string = (char *)xmalloc (namelen + string_length + 2);
! memcpy (temp_string, tname, namelen);
! temp_string[namelen] = ' ';
! memcpy (temp_string + namelen + 1, string, string_length + 1);
/* Don't import function names that are invalid identifiers from the
environment, though we still allow them to be defined as shell
variables. */
! if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname)))
! parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
! if (temp_var = find_function (tname))
{
VSETATTR (temp_var, (att_exported|att_imported));
***************
*** 378,383 ****
}
last_command_exit_value = 1;
! report_error (_("error importing function definition for `%s'"), name);
}
}
#if defined (ARRAY_VARS)
--- 394,402 ----
}
last_command_exit_value = 1;
! report_error (_("error importing function definition for `%s'"), tname);
}
+
+ /* Restore original suffix */
+ tname[namelen] = BASHFUNC_SUFFIX[0];
}
#if defined (ARRAY_VARS)
***************
*** 2955,2959 ****
INVALIDATE_EXPORTSTR (var);
! var->exportstr = mk_env_string (name, value);
array_needs_making = 1;
--- 2974,2978 ----
INVALIDATE_EXPORTSTR (var);
! var->exportstr = mk_env_string (name, value, 0);
array_needs_making = 1;
***************
*** 3853,3871 ****
static inline char *
! mk_env_string (name, value)
const char *name, *value;
{
! int name_len, value_len;
! char *p;
name_len = strlen (name);
value_len = STRLEN (value);
! p = (char *)xmalloc (2 + name_len + value_len);
! strcpy (p, name);
! p[name_len] = '=';
if (value && *value)
! strcpy (p + name_len + 1, value);
else
! p[name_len + 1] = '\0';
return (p);
}
--- 3872,3911 ----
static inline char *
! mk_env_string (name, value, isfunc)
const char *name, *value;
+ int isfunc;
{
! size_t name_len, value_len;
! char *p, *q;
name_len = strlen (name);
value_len = STRLEN (value);
!
! /* If we are exporting a shell function, construct the encoded function
! name. */
! if (isfunc && value)
! {
! p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2);
! q = p;
! memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN);
! q += BASHFUNC_PREFLEN;
! memcpy (q, name, name_len);
! q += name_len;
! memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN);
! q += BASHFUNC_SUFFLEN;
! }
! else
! {
! p = (char *)xmalloc (2 + name_len + value_len);
! memcpy (p, name, name_len);
! q = p + name_len;
! }
!
! q[0] = '=';
if (value && *value)
! memcpy (q + 1, value, value_len + 1);
else
! q[1] = '\0';
!
return (p);
}
***************
*** 3953,3957 ****
using the cached exportstr... */
list[list_index] = USE_EXPORTSTR ? savestring (value)
! : mk_env_string (var->name, value);
if (USE_EXPORTSTR == 0)
--- 3993,3997 ----
using the cached exportstr... */
list[list_index] = USE_EXPORTSTR ? savestring (value)
! : mk_env_string (var->name, value, function_p (var));
if (USE_EXPORTSTR == 0)
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 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_ */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,59 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-029
Bug-Reported-by: Michal Zalewski <lcamtuf@coredump.cx>
Bug-Reference-ID:
Bug-Reference-URL:
Bug-Description:
When bash is parsing a function definition that contains a here-document
delimited by end-of-file (or end-of-string), it leaves the closing delimiter
uninitialized. This can result in an invalid memory access when the parsed
function is later copied.
Patch (apply with `patch -p0'):
*** ../bash-4.3.28/make_cmd.c 2011-12-16 08:08:01.000000000 -0500
--- make_cmd.c 2014-10-02 11:24:23.000000000 -0400
***************
*** 693,696 ****
--- 693,697 ----
temp->redirector = source;
temp->redirectee = dest_and_filename;
+ temp->here_doc_eof = 0;
temp->instruction = instruction;
temp->flags = 0;
*** ../bash-4.3.28/copy_cmd.c 2009-09-11 16:28:02.000000000 -0400
--- copy_cmd.c 2014-10-02 11:24:23.000000000 -0400
***************
*** 127,131 ****
case r_reading_until:
case r_deblank_reading_until:
! new_redirect->here_doc_eof = savestring (redirect->here_doc_eof);
/*FALLTHROUGH*/
case r_reading_string:
--- 127,131 ----
case r_reading_until:
case r_deblank_reading_until:
! new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0;
/*FALLTHROUGH*/
case r_reading_string:
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 28
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 29
#endif /* _PATCHLEVEL_H_ */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,112 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-031
Bug-Reported-by: lolilolicon <lolilolicon@gmail.com>
Bug-Reference-ID: <CAMtVo_Nz=32Oq=zWTb6=+8gUNXOo2rRvud1W4oPnA-cgVk_ZqQ@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00139.html
Bug-Description:
The new nameref assignment functionality introduced in bash-4.3 did not perform
enough validation on the variable value and would create variables with
invalid names.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/subst.h 2014-01-11 21:02:27.000000000 -0500
--- subst.h 2014-09-01 12:16:56.000000000 -0400
***************
*** 48,51 ****
--- 48,52 ----
#define ASS_MKGLOBAL 0x0008 /* force global assignment */
#define ASS_NAMEREF 0x0010 /* assigning to nameref variable */
+ #define ASS_FROMREF 0x0020 /* assigning from value of nameref variable */
/* Flags for the string extraction functions. */
*** ../bash-4.3-patched/variables.c 2014-05-15 08:26:50.000000000 -0400
--- variables.c 2014-09-01 14:37:44.000000000 -0400
***************
*** 2504,2511 ****
int hflags, aflags;
{
! char *newval;
SHELL_VAR *entry;
entry = (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL : hash_lookup (name, table);
/* Follow the nameref chain here if this is the global variables table */
if (entry && nameref_p (entry) && (invisible_p (entry) == 0) && table == global_variables->table)
--- 2566,2590 ----
int hflags, aflags;
{
! char *newname, *newval;
SHELL_VAR *entry;
+ #if defined (ARRAY_VARS)
+ arrayind_t ind;
+ char *subp;
+ int sublen;
+ #endif
+ newname = 0;
+ #if defined (ARRAY_VARS)
+ if ((aflags & ASS_FROMREF) && (hflags & HASH_NOSRCH) == 0 && valid_array_reference (name))
+ {
+ newname = array_variable_name (name, &subp, &sublen);
+ if (newname == 0)
+ return (SHELL_VAR *)NULL; /* XXX */
+ entry = hash_lookup (newname, table);
+ }
+ else
+ #endif
entry = (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL : hash_lookup (name, table);
+
/* Follow the nameref chain here if this is the global variables table */
if (entry && nameref_p (entry) && (invisible_p (entry) == 0) && table == global_variables->table)
***************
*** 2538,2541 ****
--- 2617,2630 ----
}
}
+ #if defined (ARRAY_VARS)
+ else if (entry == 0 && newname)
+ {
+ entry = make_new_array_variable (newname); /* indexed array by default */
+ if (entry == 0)
+ return entry;
+ ind = array_expand_index (name, subp, sublen);
+ bind_array_element (entry, ind, value, aflags);
+ }
+ #endif
else if (entry == 0)
{
***************
*** 2658,2662 ****
if (nameref_cell (nv) == 0)
return (bind_variable_internal (nv->name, value, nvc->table, 0, flags));
! return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags));
}
else
--- 2747,2752 ----
if (nameref_cell (nv) == 0)
return (bind_variable_internal (nv->name, value, nvc->table, 0, flags));
! /* XXX - bug here with ref=array[index] */
! return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags|ASS_FROMREF));
}
else
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 30
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 31
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,51 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-032
Bug-Reported-by: crispusfairbairn@gmail.com
Bug-Reference-ID: <b5e499f7-3b98-408d-9f94-c0387580e73a@googlegroups.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00013.html
Bug-Description:
When bash is running in Posix mode, it allows signals -- including SIGCHLD --
to interrupt the `wait' builtin, as Posix requires. However, the interrupt
causes bash to not run a SIGCHLD trap for all exited children. This patch
fixes the issue and restores the documented behavior in Posix mode.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/jobs.c 2014-05-14 09:20:15.000000000 -0400
--- jobs.c 2014-09-09 11:50:38.000000000 -0400
***************
*** 3340,3344 ****
{
interrupt_immediately = 0;
! trap_handler (SIGCHLD); /* set pending_traps[SIGCHLD] */
wait_signal_received = SIGCHLD;
/* If we're in a signal handler, let CHECK_WAIT_INTR pick it up;
--- 3346,3352 ----
{
interrupt_immediately = 0;
! /* This was trap_handler (SIGCHLD) but that can lose traps if
! children_exited > 1 */
! queue_sigchld_trap (children_exited);
wait_signal_received = SIGCHLD;
/* If we're in a signal handler, let CHECK_WAIT_INTR pick it up;
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 31
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 32
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,225 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-033
Bug-Reported-by: mickael9@gmail.com, Jan Rome <jan.rome@gmail.com>
Bug-Reference-ID: <20140907224046.382ED3610CC@mickael-laptop.localdomain>,
<540D661D.50908@gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00029.html
http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00030.html
Bug-Description:
Bash does not clean up the terminal state in all cases where bash or
readline modifies it and bash is subsequently terminated by a fatal signal.
This happens when the `read' builtin modifies the terminal settings, both
when readline is active and when it is not. It occurs most often when a script
installs a trap that exits on a signal without re-sending the signal to itself.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/shell.c 2014-01-14 08:04:32.000000000 -0500
--- shell.c 2014-12-22 10:27:50.000000000 -0500
***************
*** 74,77 ****
--- 74,78 ----
#if defined (READLINE)
+ # include <readline/readline.h>
# include "bashline.h"
#endif
***************
*** 910,913 ****
--- 912,923 ----
fflush (stderr);
+ /* Clean up the terminal if we are in a state where it's been modified. */
+ #if defined (READLINE)
+ if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function)
+ (*rl_deprep_term_function) ();
+ #endif
+ if (read_tty_modified ())
+ read_tty_cleanup ();
+
/* Do trap[0] if defined. Allow it to override the exit status
passed to us. */
*** ../bash-4.3-patched/builtins/read.def 2014-10-01 12:57:38.000000000 -0400
--- builtins/read.def 2014-12-22 10:48:54.000000000 -0500
***************
*** 141,148 ****
int sigalrm_seen;
! static int reading;
static SigHandler *old_alrm;
static unsigned char delim;
/* In all cases, SIGALRM just sets a flag that we check periodically. This
avoids problems with the semi-tricky stuff we do with the xfree of
--- 141,150 ----
int sigalrm_seen;
! static int reading, tty_modified;
static SigHandler *old_alrm;
static unsigned char delim;
+ static struct ttsave termsave;
+
/* In all cases, SIGALRM just sets a flag that we check periodically. This
avoids problems with the semi-tricky stuff we do with the xfree of
***************
*** 189,193 ****
SHELL_VAR *var;
TTYSTRUCT ttattrs, ttset;
- struct ttsave termsave;
#if defined (ARRAY_VARS)
WORD_LIST *alist;
--- 191,194 ----
***************
*** 222,226 ****
USE_VAR(lastsig);
! sigalrm_seen = reading = 0;
i = 0; /* Index into the string that we are reading. */
--- 223,227 ----
USE_VAR(lastsig);
! sigalrm_seen = reading = tty_modified = 0;
i = 0; /* Index into the string that we are reading. */
***************
*** 439,442 ****
--- 440,445 ----
goto assign_vars;
}
+ if (interactive_shell == 0)
+ initialize_terminating_signals ();
old_alrm = set_signal_handler (SIGALRM, sigalrm);
add_unwind_protect (reset_alarm, (char *)NULL);
***************
*** 483,487 ****
--- 486,493 ----
if (i < 0)
sh_ttyerror (1);
+ tty_modified = 1;
add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
+ if (interactive_shell == 0)
+ initialize_terminating_signals ();
}
}
***************
*** 498,502 ****
--- 504,511 ----
sh_ttyerror (1);
+ tty_modified = 1;
add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
+ if (interactive_shell == 0)
+ initialize_terminating_signals ();
}
***************
*** 589,592 ****
--- 598,603 ----
else
lastsig = 0;
+ if (terminating_signal && tty_modified)
+ ttyrestore (&termsave); /* fix terminal before exiting */
CHECK_TERMSIG;
eof = 1;
***************
*** 979,982 ****
--- 990,1007 ----
{
ttsetattr (ttp->fd, ttp->attrs);
+ tty_modified = 0;
+ }
+
+ void
+ read_tty_cleanup ()
+ {
+ if (tty_modified)
+ ttyrestore (&termsave);
+ }
+
+ int
+ read_tty_modified ()
+ {
+ return (tty_modified);
}
*** ../bash-4.3-patched/builtins/common.h 2014-10-01 12:57:47.000000000 -0400
--- builtins/common.h 2014-12-22 10:10:14.000000000 -0500
***************
*** 123,126 ****
--- 141,148 ----
extern void getopts_reset __P((int));
+ /* Functions from read.def */
+ extern void read_tty_cleanup __P((void));
+ extern int read_tty_modified __P((void));
+
/* Functions from set.def */
extern int minus_o_option_value __P((char *));
*** ../bash-4.3-patched/bashline.c 2014-05-14 09:22:39.000000000 -0400
--- bashline.c 2014-09-08 11:28:56.000000000 -0400
***************
*** 203,206 ****
--- 203,207 ----
extern int array_needs_making;
extern int posixly_correct, no_symbolic_links;
+ extern int sigalrm_seen;
extern char *current_prompt_string, *ps1_prompt;
extern STRING_INT_ALIST word_token_alist[];
***************
*** 4209,4214 ****
/* If we're going to longjmp to top_level, make sure we clean up readline.
check_signals will call QUIT, which will eventually longjmp to top_level,
! calling run_interrupt_trap along the way. */
! if (interrupt_state)
rl_cleanup_after_signal ();
bashline_reset_event_hook ();
--- 4262,4268 ----
/* If we're going to longjmp to top_level, make sure we clean up readline.
check_signals will call QUIT, which will eventually longjmp to top_level,
! calling run_interrupt_trap along the way. The check for sigalrm_seen is
! to clean up the read builtin's state. */
! if (terminating_signal || interrupt_state || sigalrm_seen)
rl_cleanup_after_signal ();
bashline_reset_event_hook ();
*** ../bash-4.3-patched/sig.c 2014-01-10 15:06:06.000000000 -0500
--- sig.c 2014-09-08 11:26:33.000000000 -0400
***************
*** 533,538 ****
/* Set the event hook so readline will call it after the signal handlers
finish executing, so if this interrupted character input we can get
! quick response. */
! if (interactive_shell && interactive && no_line_editing == 0)
bashline_set_event_hook ();
#endif
--- 533,540 ----
/* Set the event hook so readline will call it after the signal handlers
finish executing, so if this interrupted character input we can get
! quick response. If readline is active or has modified the terminal we
! need to set this no matter what the signal is, though the check for
! RL_STATE_TERMPREPPED is possibly redundant. */
! if (RL_ISSTATE (RL_STATE_SIGHANDLER) || RL_ISSTATE (RL_STATE_TERMPREPPED))
bashline_set_event_hook ();
#endif
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 32
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 33
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,90 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-034
Bug-Reported-by: Dreamcat4 <dreamcat4@gmail.com>
Bug-Reference-ID: <CAN39uTpAEs2GFu4ebC_SfSVMRTh-DJ9YanrY4BZZ3OO+CCHjng@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-05/msg00001.html
Bug-Description:
If neither the -f nor -v options is supplied to unset, and a name argument is
found to be a function and unset, subsequent name arguments are not treated as
variables before attempting to unset a function by that name.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/builtins/set.def 2013-04-19 07:20:34.000000000 -0400
--- builtins/set.def 2015-05-05 13:25:36.000000000 -0400
***************
*** 752,758 ****
--- 797,805 ----
{
int unset_function, unset_variable, unset_array, opt, nameref, any_failed;
+ int global_unset_func, global_unset_var;
char *name;
unset_function = unset_variable = unset_array = nameref = any_failed = 0;
+ global_unset_func = global_unset_var = 0;
reset_internal_getopt ();
***************
*** 762,769 ****
{
case 'f':
! unset_function = 1;
break;
case 'v':
! unset_variable = 1;
break;
case 'n':
--- 809,816 ----
{
case 'f':
! global_unset_func = 1;
break;
case 'v':
! global_unset_var = 1;
break;
case 'n':
***************
*** 778,782 ****
list = loptend;
! if (unset_function && unset_variable)
{
builtin_error (_("cannot simultaneously unset a function and a variable"));
--- 825,829 ----
list = loptend;
! if (global_unset_func && global_unset_var)
{
builtin_error (_("cannot simultaneously unset a function and a variable"));
***************
*** 796,799 ****
--- 843,849 ----
name = list->word->word;
+ unset_function = global_unset_func;
+ unset_variable = global_unset_var;
+
#if defined (ARRAY_VARS)
unset_array = 0;
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 33
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 34
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,63 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-035
Bug-Reported-by: <romerox.adrian@gmail.com>
Bug-Reference-ID: <CABV5r3zhPXmSKUe9uedeGc5YFBM2njJ1iVmY2h5neWdQpDBQug@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00045.html
Bug-Description:
A locale with a long name can trigger a buffer overflow and core dump. This
applies on systems that do not have locale_charset in libc, are not using
GNU libiconv, and are not using the libintl that ships with bash in lib/intl.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/lib/sh/unicode.c 2014-01-30 16:47:19.000000000 -0500
--- lib/sh/unicode.c 2015-05-01 08:58:30.000000000 -0400
***************
*** 79,83 ****
if (s)
{
! strcpy (charsetbuf, s+1);
t = strchr (charsetbuf, '@');
if (t)
--- 79,84 ----
if (s)
{
! strncpy (charsetbuf, s+1, sizeof (charsetbuf) - 1);
! charsetbuf[sizeof (charsetbuf) - 1] = '\0';
t = strchr (charsetbuf, '@');
if (t)
***************
*** 85,89 ****
return charsetbuf;
}
! strcpy (charsetbuf, locale);
return charsetbuf;
}
--- 86,91 ----
return charsetbuf;
}
! strncpy (charsetbuf, locale, sizeof (charsetbuf) - 1);
! charsetbuf[sizeof (charsetbuf) - 1] = '\0';
return charsetbuf;
}
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 34
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 35
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,57 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-036
Bug-Reported-by: emanuelczirai@cryptolab.net
Bug-Reference-ID: <f962e4f556da5ebfadaf7afe9c78a8cb@cryptolab.net>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00071.html
Bug-Description:
When evaluating and setting integer variables, and the assignment fails to
create a variable (for example, when performing an operation on an array
variable with an invalid subscript), bash attempts to dereference a null
pointer, causing a segmentation violation.
Patch (apply with `patch -p0'):
*** ../bash-20150206/variables.c 2015-01-23 20:39:27.000000000 -0500
--- variables.c 2015-02-19 13:56:12.000000000 -0500
***************
*** 2834,2841 ****
v = bind_variable (lhs, rhs, 0);
! if (v && isint)
! VSETATTR (v, att_integer);
!
! VUNSETATTR (v, att_invisible);
return (v);
--- 2834,2843 ----
v = bind_variable (lhs, rhs, 0);
! if (v)
! {
! if (isint)
! VSETATTR (v, att_integer);
! VUNSETATTR (v, att_invisible);
! }
return (v);
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 35
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 36
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,43 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-037
Bug-Reported-by: Greg Wooledge <wooledg@eeg.ccf.org>
Bug-Reference-ID: <20150204144240.GN13956@eeg.ccf.org>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00007.html
Bug-Description:
If an associative array uses `@' or `*' as a subscript, `declare -p' produces
output that cannot be reused as input.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/assoc.c 2011-11-05 16:39:05.000000000 -0400
--- assoc.c 2015-02-04 15:28:25.000000000 -0500
***************
*** 437,440 ****
--- 440,445 ----
if (sh_contains_shell_metas (tlist->key))
istr = sh_double_quote (tlist->key);
+ else if (ALL_ELEMENT_SUB (tlist->key[0]) && tlist->key[1] == '\0')
+ istr = sh_double_quote (tlist->key);
else
istr = tlist->key;
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 36
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 37
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,88 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-038
Bug-Reported-by: worley@alum.mit.edu (Dale R. Worley)
Bug-Reference-ID: <201406100051.s5A0pCeB014978@hobgoblin.ariadne.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00028.html
Bug-Description:
There are a number of instances where `time' is not recognized as a reserved
word when the shell grammar says it should be.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/parse.y 2014-04-07 11:56:12.000000000 -0400
--- parse.y 2014-06-11 10:25:53.000000000 -0400
***************
*** 2819,2827 ****
case OR_OR:
case '&':
case DO:
case THEN:
case ELSE:
case '{': /* } */
! case '(': /* ) */
case BANG: /* ! time pipeline */
case TIME: /* time time pipeline */
--- 2819,2832 ----
case OR_OR:
case '&':
+ case WHILE:
case DO:
+ case UNTIL:
+ case IF:
case THEN:
+ case ELIF:
case ELSE:
case '{': /* } */
! case '(': /* )( */
! case ')': /* only valid in case statement */
case BANG: /* ! time pipeline */
case TIME: /* time time pipeline */
*** ../bash-4.3-patched/y.tab.c 2014-10-05 13:52:50.000000000 -0400
--- y.tab.c 2015-05-19 15:08:43.000000000 -0400
***************
*** 5131,5139 ****
case OR_OR:
case '&':
case DO:
case THEN:
case ELSE:
case '{': /* } */
! case '(': /* ) */
case BANG: /* ! time pipeline */
case TIME: /* time time pipeline */
--- 5131,5144 ----
case OR_OR:
case '&':
+ case WHILE:
case DO:
+ case UNTIL:
+ case IF:
case THEN:
+ case ELIF:
case ELSE:
case '{': /* } */
! case '(': /* )( */
! case ')': /* only valid in case statement */
case BANG: /* ! time pipeline */
case TIME: /* time time pipeline */
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 37
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 38
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,57 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-039
Bug-Reported-by: SN <poczta-sn@gazeta.pl>
Bug-Reference-ID: <54E2554C.205@gazeta.pl>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00060.html
Bug-Description:
Using the output of `declare -p' when run in a function can result in variables
that are invisible to `declare -p'. This problem occurs when an assignment
builtin such as `declare' receives a quoted compound array assignment as one of
its arguments.
Patch (apply with `patch -p0'):
*** /usr/src/local/bash/bash-4.3-patched/arrayfunc.c 2014-10-01 13:08:48.000000000 -0400
--- arrayfunc.c 2015-02-19 14:33:05.000000000 -0500
***************
*** 405,408 ****
--- 405,411 ----
else
array_insert (a, i, l->word->word);
+
+ VUNSETATTR (var, att_invisible); /* no longer invisible */
+
return var;
}
***************
*** 635,638 ****
--- 638,645 ----
if (nlist)
dispose_words (nlist);
+
+ if (var)
+ VUNSETATTR (var, att_invisible); /* no longer invisible */
+
return (var);
}
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 38
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 39
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,47 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-040
Bug-Reported-by: Jean Delvare <jdelvare@suse.de>
Bug-Reference-ID: <20150609180231.5f463695@endymion.delvare>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00033.html
Bug-Description:
There is a memory leak that occurs when bash expands an array reference on
the rhs of an assignment statement.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/subst.c 2014-10-01 12:57:47.000000000 -0400
--- subst.c 2015-06-22 09:16:53.000000000 -0400
***************
*** 5783,5787 ****
if (pflags & PF_ASSIGNRHS)
{
! temp = array_variable_name (name, &tt, (int *)0);
if (ALL_ELEMENT_SUB (tt[0]) && tt[1] == ']')
temp = array_value (name, quoted|Q_DOUBLE_QUOTES, 0, &atype, &ind);
--- 5783,5787 ----
if (pflags & PF_ASSIGNRHS)
{
! var = array_variable_part (name, &tt, (int *)0);
if (ALL_ELEMENT_SUB (tt[0]) && tt[1] == ']')
temp = array_value (name, quoted|Q_DOUBLE_QUOTES, 0, &atype, &ind);
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 39
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 40
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,72 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-041
Bug-Reported-by: Hanno Böck <hanno@hboeck.de>
Bug-Reference-ID: <20150623131106.6f111da9@pc1>, <20150707004640.0e61d2f9@pc1>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00089.html,
http://lists.gnu.org/archive/html/bug-bash/2015-07/msg00018.html
Bug-Description:
There are several out-of-bounds read errors that occur when completing command
lines where assignment statements appear before the command name. The first
two appear only when programmable completion is enabled; the last one only
happens when listing possible completions.
Patch (apply with `patch -p0'):
*** ../bash-4.3.40/bashline.c 2014-12-29 14:39:43.000000000 -0500
--- bashline.c 2015-08-12 10:21:58.000000000 -0400
***************
*** 1469,1476 ****
--- 1469,1489 ----
os = start;
n = 0;
+ was_assignment = 0;
s = find_cmd_start (os);
e = find_cmd_end (end);
do
{
+ /* Don't read past the end of rl_line_buffer */
+ if (s > rl_end)
+ {
+ s1 = s = e1;
+ break;
+ }
+ /* Or past point if point is within an assignment statement */
+ else if (was_assignment && s > rl_point)
+ {
+ s1 = s = e1;
+ break;
+ }
/* Skip over assignment statements preceding a command name. If we
don't find a command name at all, we can perform command name
*** ../bash-4.3.40/lib/readline/complete.c 2013-10-14 09:27:10.000000000 -0400
--- lib/readline/complete.c 2015-07-31 09:34:39.000000000 -0400
***************
*** 690,693 ****
--- 690,695 ----
if (temp == 0 || *temp == '\0')
return (pathname);
+ else if (temp[1] == 0 && temp == pathname)
+ return (pathname);
/* If the basename is NULL, we might have a pathname like '/usr/src/'.
Look for a previous slash and, if one is found, return the portion
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 40
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 41
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,55 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-042
Bug-Reported-by: Nathan Neulinger <nneul@neulinger.org>
Bug-Reference-ID: <558EFDF2.7060402@neulinger.org>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00096.html
Bug-Description:
There is a problem when parsing command substitutions containing `case'
commands within pipelines that causes the parser to not correctly identify
the end of the command substitution.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/parse.y 2015-05-18 19:27:05.000000000 -0400
--- parse.y 2015-06-29 10:59:27.000000000 -0400
***************
*** 3709,3712 ****
--- 3709,3714 ----
tflags |= LEX_INWORD;
lex_wlen = 0;
+ if (tflags & LEX_RESWDOK)
+ lex_rwlen = 0;
}
}
*** ../bash-4.3-patched/y.tab.c 2015-05-18 19:27:05.000000000 -0400
--- y.tab.c 2015-06-29 10:59:27.000000000 -0400
***************
*** 6021,6024 ****
--- 6021,6026 ----
tflags |= LEX_INWORD;
lex_wlen = 0;
+ if (tflags & LEX_RESWDOK)
+ lex_rwlen = 0;
}
}
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 41
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 42
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,59 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-043
Bug-Reported-by: lolilolicon <lolilolicon@gmail.com>
Bug-Reference-ID: <CAMtVo_MF16KWanCB4C8WxA88Qt26zWsvV6V7+_U2fM0E6tCDxw@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00040.html
Bug-Description:
When the lastpipe option is enabled, the last component can contain nested
pipelines and cause a segmentation fault under certain circumestances.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/execute_cmd.c 2014-07-30 10:26:52.000000000 -0400
--- execute_cmd.c 2014-08-15 08:55:24.000000000 -0400
***************
*** 2406,2412 ****
{
#if defined (JOB_CONTROL)
! append_process (savestring (the_printed_command), dollar_dollar_pid, exec_result, lastpipe_jid);
! #endif
lstdin = wait_for (lastpid);
#if defined (JOB_CONTROL)
/* If wait_for removes the job from the jobs table, use result of last
--- 2433,2447 ----
{
#if defined (JOB_CONTROL)
! if (INVALID_JOB (lastpipe_jid) == 0)
! {
! append_process (savestring (the_printed_command_except_trap), dollar_dollar_pid, exec_result, lastpipe_jid);
! lstdin = wait_for (lastpid);
! }
! else
! lstdin = wait_for_single_pid (lastpid); /* checks bgpids list */
! #else
lstdin = wait_for (lastpid);
+ #endif
+
#if defined (JOB_CONTROL)
/* If wait_for removes the job from the jobs table, use result of last
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 42
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 43
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,48 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-044
Bug-Reported-by: Ondrej Oprala <ooprala@redhat.com>
Bug-Reference-ID: <539ED55B.2080103@redhat.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00046.html
Bug-Description:
A typo prevents the `compat42' shopt option from working as intended.
Patch (apply with `patch -p0'):
diff -rC 2 bash-4.3.42/builtins/shopt.def bash-4.3.43/builtins/shopt.def
*** bash-4.3.42/builtins/shopt.def 2013-02-27 09:43:20.000000000 -0500
--- builtins/shopt.def 2015-10-16 11:25:28.000000000 -0400
***************
*** 161,165 ****
{ "compat40", &shopt_compat40, set_compatibility_level },
{ "compat41", &shopt_compat41, set_compatibility_level },
! { "compat42", &shopt_compat41, set_compatibility_level },
#if defined (READLINE)
{ "complete_fullquote", &complete_fullquote, (shopt_set_func_t *)NULL},
--- 161,165 ----
{ "compat40", &shopt_compat40, set_compatibility_level },
{ "compat41", &shopt_compat41, set_compatibility_level },
! { "compat42", &shopt_compat42, set_compatibility_level },
#if defined (READLINE)
{ "complete_fullquote", &complete_fullquote, (shopt_set_func_t *)NULL},
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 43
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 44
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,52 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-045
Bug-Reported-by: Basin Ilya <basinilya@gmail.com>
Bug-Reference-ID: <5624C0AC.8070802@gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-10/msg00141.html
Bug-Description:
If a file open attempted as part of a redirection fails because it is interrupted
by a signal, the shell needs to process any pending traps to allow the redirection
to be canceled.
Patch (apply with `patch -p0'):
*** bash-20150109/redir.c 2014-12-03 10:47:38.000000000 -0500
--- redir.c 2015-01-16 10:15:47.000000000 -0500
***************
*** 672,676 ****
e = errno;
if (fd < 0 && e == EINTR)
! QUIT;
errno = e;
}
--- 672,679 ----
e = errno;
if (fd < 0 && e == EINTR)
! {
! QUIT;
! run_pending_traps ();
! }
errno = e;
}
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 44
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 45
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,55 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-046
Bug-Reported-by: Sergey Tselikh <stselikh@gmail.com>
Bug-Reference-ID: <20150816110235.91f3e12e3f20d20cdaad963e@gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-08/msg00080.html
Bug-Description:
An incorrect conversion from an indexed to associative array can result in a
core dump.
Patch (apply with `patch -p0'):
*** /fs2/chet/bash/bash-20150813/subst.c 2015-08-13 11:32:54.000000000 -0400
--- subst.c 2015-08-18 10:13:59.000000000 -0400
***************
*** 9562,9566 ****
opts[opti] = '\0';
if (opti > 0)
! make_internal_declare (tlist->word->word, opts);
t = do_word_assignment (tlist->word, 0);
--- 9562,9573 ----
opts[opti] = '\0';
if (opti > 0)
! {
! t = make_internal_declare (tlist->word->word, opts);
! if (t != EXECUTION_SUCCESS)
! {
! last_command_exit_value = t;
! exp_jump_to_top_level (DISCARD);
! }
! }
t = do_word_assignment (tlist->word, 0);
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 45
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 46
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,150 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-047
Bug-Reported-by: Bernd Dietzel
Bug-Reference-ID:
Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1507025
Bug-Description:
Bash performs word expansions on the prompt strings after the special
escape sequences are expanded. If a malicious user can modify the system
hostname or change the name of the bash executable and coerce a user into
executing it, and the new name contains word expansions (including
command substitution), bash will expand them in prompt strings containing
the \h or \H and \s escape sequences, respectively.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/parse.y 2015-08-13 15:11:54.000000000 -0400
--- parse.y 2016-03-07 15:44:14.000000000 -0500
***************
*** 5259,5263 ****
int result_size, result_index;
int c, n, i;
! char *temp, octal_string[4];
struct tm *tm;
time_t the_time;
--- 5259,5263 ----
int result_size, result_index;
int c, n, i;
! char *temp, *t_host, octal_string[4];
struct tm *tm;
time_t the_time;
***************
*** 5407,5411 ****
case 's':
temp = base_pathname (shell_name);
! temp = savestring (temp);
goto add_string;
--- 5407,5415 ----
case 's':
temp = base_pathname (shell_name);
! /* Try to quote anything the user can set in the file system */
! if (promptvars || posixly_correct)
! temp = sh_backslash_quote_for_double_quotes (temp);
! else
! temp = savestring (temp);
goto add_string;
***************
*** 5497,5503 ****
case 'h':
case 'H':
! temp = savestring (current_host_name);
! if (c == 'h' && (t = (char *)strchr (temp, '.')))
*t = '\0';
goto add_string;
--- 5501,5515 ----
case 'h':
case 'H':
! t_host = savestring (current_host_name);
! if (c == 'h' && (t = (char *)strchr (t_host, '.')))
*t = '\0';
+ if (promptvars || posixly_correct)
+ /* Make sure that expand_prompt_string is called with a
+ second argument of Q_DOUBLE_QUOTES if we use this
+ function here. */
+ temp = sh_backslash_quote_for_double_quotes (t_host);
+ else
+ temp = savestring (t_host);
+ free (t_host);
goto add_string;
*** ../bash-4.3-patched/y.tab.c 2015-08-13 15:11:54.000000000 -0400
--- y.tab.c 2016-03-07 15:44:14.000000000 -0500
***************
*** 7571,7575 ****
int result_size, result_index;
int c, n, i;
! char *temp, octal_string[4];
struct tm *tm;
time_t the_time;
--- 7571,7575 ----
int result_size, result_index;
int c, n, i;
! char *temp, *t_host, octal_string[4];
struct tm *tm;
time_t the_time;
***************
*** 7719,7723 ****
case 's':
temp = base_pathname (shell_name);
! temp = savestring (temp);
goto add_string;
--- 7719,7727 ----
case 's':
temp = base_pathname (shell_name);
! /* Try to quote anything the user can set in the file system */
! if (promptvars || posixly_correct)
! temp = sh_backslash_quote_for_double_quotes (temp);
! else
! temp = savestring (temp);
goto add_string;
***************
*** 7809,7815 ****
case 'h':
case 'H':
! temp = savestring (current_host_name);
! if (c == 'h' && (t = (char *)strchr (temp, '.')))
*t = '\0';
goto add_string;
--- 7813,7827 ----
case 'h':
case 'H':
! t_host = savestring (current_host_name);
! if (c == 'h' && (t = (char *)strchr (t_host, '.')))
*t = '\0';
+ if (promptvars || posixly_correct)
+ /* Make sure that expand_prompt_string is called with a
+ second argument of Q_DOUBLE_QUOTES if we use this
+ function here. */
+ temp = sh_backslash_quote_for_double_quotes (t_host);
+ else
+ temp = savestring (t_host);
+ free (t_host);
goto add_string;
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 46
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 47
#endif /* _PATCHLEVEL_H_ */

View File

@ -0,0 +1,54 @@
BASH PATCH REPORT
=================
Bash-Release: 4.3
Patch-ID: bash43-048
Bug-Reported-by: up201407890@alunos.dcc.fc.up.pt
Bug-Reference-ID: <20151210201649.126444eionzfsam8@webmail.alunos.dcc.fc.up.pt>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-12/msg00054.html
Bug-Description:
If a malicious user can inject a value of $SHELLOPTS containing `xtrace'
and a value for $PS4 that includes a command substitution into a shell
running as root, bash will expand the command substitution as part of
expanding $PS4 when it executes a traced command.
Patch (apply with `patch -p0'):
*** ../bash-4.3-patched/variables.c 2015-11-26 12:31:21.000000000 -0500
--- variables.c 2015-12-23 10:19:01.000000000 -0500
***************
*** 496,500 ****
set_if_not ("PS2", secondary_prompt);
}
! set_if_not ("PS4", "+ ");
/* Don't allow IFS to be imported from the environment. */
--- 496,504 ----
set_if_not ("PS2", secondary_prompt);
}
!
! if (current_user.euid == 0)
! bind_variable ("PS4", "+ ", 0);
! else
! set_if_not ("PS4", "+ ");
/* Don't allow IFS to be imported from the environment. */
*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 47
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 48
#endif /* _PATCHLEVEL_H_ */

View File

@ -28,21 +28,11 @@ alternatives="
sh:sh.1:/usr/share/man/man1/bash.1"
pre_configure() {
local url="${GNU_SITE}/$pkgname/$pkgname-${_bash_distver}-patches"
local ver=$(echo ${_bash_distver}|sed "s|\.||g")
if [ "${_bash_patchlevel}" -gt 000 ]; then
for p in $(seq -w 001 ${_bash_patchlevel}); do
if [ -f bash${ver}-${p} ]; then
continue
fi
msg_normal " Fetching ${url}/bash${ver}-$p ...\n"
$XBPS_FETCH_CMD ${url}/bash${ver}-$p
done
fi
cd ${wrksrc}
for p in $(seq -w 001 ${_bash_patchlevel}); do
patch -sNp0 -i bash${ver}-${p}
patch -sNp0 -i ${FILESDIR}/bash${ver}-${p}
msg_normal " Applying patch bash${ver}-$p.\n"
done
}