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:
parent
c0212721d2
commit
318df1f24f
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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
|
@ -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
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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_ */
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue