Bump buildroot to version 2017-02

TG-3 #closed
This commit is contained in:
jbnadal
2017-03-28 18:29:16 +02:00
parent 93b7fd91d2
commit 42c92a6bcb
3010 changed files with 41289 additions and 46428 deletions

View File

@@ -1,116 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-031
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
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'):
*** a/bash-4.3-patched/subst.h 2014-01-11 21:02:27.000000000 -0500
--- b/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. */
*** a/bash-4.3-patched/variables.c 2014-05-15 08:26:50.000000000 -0400
--- b/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
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 30
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 31
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,55 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-032
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
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'):
*** a/bash-4.3-patched/jobs.c 2014-05-14 09:20:15.000000000 -0400
--- b/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;
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 31
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 32
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,229 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-033
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
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'):
*** a/bash-4.3-patched/shell.c 2014-01-14 08:04:32.000000000 -0500
--- b/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. */
*** a/bash-4.3-patched/builtins/read.def 2014-10-01 12:57:38.000000000 -0400
--- b/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
--- b/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 *));
*** a/bash-4.3-patched/bashline.c 2014-05-14 09:22:39.000000000 -0400
--- b/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 ();
*** a/bash-4.3-patched/sig.c 2014-01-10 15:06:06.000000000 -0500
--- b/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
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 32
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 33
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,94 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-034
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
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'):
*** a/bash-4.3-patched/builtins/set.def 2013-04-19 07:20:34.000000000 -0400
--- b/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;
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 33
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 34
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,67 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-035
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
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'):
*** a/bash-4.3-patched/lib/sh/unicode.c 2014-01-30 16:47:19.000000000 -0500
--- b/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;
}
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 34
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 35
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,61 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-036
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
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'):
*** a/bash-20150206/variables.c 2015-01-23 20:39:27.000000000 -0500
--- b/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);
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 35
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 36
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,47 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-037
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
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'):
*** a/bash-4.3-patched/assoc.c 2011-11-05 16:39:05.000000000 -0400
--- b/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;
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 36
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 37
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,92 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-038
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
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'):
*** a/bash-4.3-patched/parse.y 2014-04-07 11:56:12.000000000 -0400
--- b/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 */
*** a/bash-4.3-patched/y.tab.c 2014-10-05 13:52:50.000000000 -0400
--- b/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 */
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 37
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 38
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,61 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-039
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
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'):
*** a/bash-4.3-patched/arrayfunc.c 2014-10-01 13:08:48.000000000 -0400
--- b/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);
}
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 38
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 39
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,51 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-040
Signed-off-by: Gustavo Zacarias <gustavo@zacrias.com.ar>
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'):
*** a/bash-4.3-patched/subst.c 2014-10-01 12:57:47.000000000 -0400
--- b/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);
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 39
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 40
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,76 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-041
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
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'):
*** a/bash-4.3.40/bashline.c 2014-12-29 14:39:43.000000000 -0500
--- b/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
*** a/bash-4.3.40/lib/readline/complete.c 2013-10-14 09:27:10.000000000 -0400
--- b/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
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 40
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 41
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,59 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-042
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
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'):
*** a/bash-4.3-patched/parse.y 2015-05-18 19:27:05.000000000 -0400
--- b/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;
}
}
*** a/bash-4.3-patched/y.tab.c 2015-05-18 19:27:05.000000000 -0400
--- b/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;
}
}
*** a/bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 41
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 42
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,63 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-043
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
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'):
*** a/execute_cmd.c 2014-07-30 10:26:52.000000000 -0400
--- b/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
*** a/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 42
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 43
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,52 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-044
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
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
*** a/builtins/shopt.def 2013-02-27 09:43:20.000000000 -0500
--- b/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},
*** a/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 43
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 44
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,56 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-045
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
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'):
*** a/redir.c 2014-12-03 10:47:38.000000000 -0500
--- b/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;
}
*** a/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 44
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 45
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,59 +0,0 @@
From http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-046
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
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'):
*** a/subst.c 2015-08-13 11:32:54.000000000 -0400
--- b/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);
*** a/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
--- b/patchlevel.h 2014-03-20 20:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 45
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 46
#endif /* _PATCHLEVEL_H_ */

View File

@@ -1,2 +1,2 @@
# Locally calculated after checking pgp signature
sha256 317881019bbf2262fb814b7dd8e40632d13c3608d2f237800a8828fbb8a640dd bash-4.3.30.tar.gz
sha256 d86b3392c1202e8ff5a423b302e6284db7f8f435ea9f39b5b1b20fd3ac36dfcb bash-4.4.tar.gz

View File

@@ -4,7 +4,7 @@
#
################################################################################
BASH_VERSION = 4.3.30
BASH_VERSION = 4.4
BASH_SITE = $(BR2_GNU_MIRROR)/bash
# Build after since bash is better than busybox shells
BASH_DEPENDENCIES = ncurses readline host-bison \

View File

@@ -0,0 +1,64 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-001
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-001
Bug-Reported-by: Sean Zha <freeman_cha@hotmail.com>
Bug-Reference-ID: <BN3PR01MB13657D9303EB94BF6E54216E8CCA0@BN3PR01MB1365.prod.exchangelabs.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-09/msg00107.html
Bug-Description:
Bash-4.4 changed the way the history list is initially allocated to reduce
the number of reallocations and copies. Users who set HISTSIZE to a very
large number to essentially unlimit the size of the history list will get
memory allocation errors
Patch (apply with `patch -p0'):
*** a/bash-4.4/lib/readline/history.c 2015-12-28 13:50:31.000000000 -0500
--- b/lib/readline/history.c 2016-09-30 14:28:40.000000000 -0400
***************
*** 58,61 ****
--- 58,63 ----
#define DEFAULT_HISTORY_INITIAL_SIZE 502
+ #define MAX_HISTORY_INITIAL_SIZE 8192
+
/* The number of slots to increase the_history by. */
#define DEFAULT_HISTORY_GROW_SIZE 50
***************
*** 308,312 ****
{
if (history_stifled && history_max_entries > 0)
! history_size = history_max_entries + 2;
else
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
--- 310,316 ----
{
if (history_stifled && history_max_entries > 0)
! history_size = (history_max_entries > MAX_HISTORY_INITIAL_SIZE)
! ? MAX_HISTORY_INITIAL_SIZE
! : history_max_entries + 2;
else
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
*** a/bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 0
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 1
#endif /* _PATCHLEVEL_H_ */

View File

@@ -0,0 +1,73 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-002
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-002
Bug-Reported-by: Eric Pruitt <eric.pruitt@gmail.com>
Bug-Reference-ID: <20160916055120.GA28272@sinister.codevat.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-09/msg00015.html
Bug-Description:
Bash-4.4 warns when discarding NUL bytes in command substitution output
instead of silently dropping them. This patch changes the warnings from
one per NUL byte encountered to one warning per command substitution.
Patch (apply with `patch -p0'):
*** a/bash-4.4/subst.c 2016-08-30 16:46:38.000000000 -0400
--- b/subst.c 2016-09-26 10:20:19.000000000 -0400
***************
*** 5932,5935 ****
--- 5933,5937 ----
int istring_index, istring_size, c, tflag, skip_ctlesc, skip_ctlnul;
ssize_t bufn;
+ int nullbyte;
istring = (char *)NULL;
***************
*** 5939,5942 ****
--- 5941,5946 ----
skip_ctlesc |= *s == CTLESC, skip_ctlnul |= *s == CTLNUL;
+ nullbyte = 0;
+
/* Read the output of the command through the pipe. This may need to be
changed to understand multibyte characters in the future. */
***************
*** 5957,5961 ****
{
#if 1
! internal_warning ("%s", _("command substitution: ignored null byte in input"));
#endif
continue;
--- 5961,5969 ----
{
#if 1
! if (nullbyte == 0)
! {
! internal_warning ("%s", _("command substitution: ignored null byte in input"));
! nullbyte = 1;
! }
#endif
continue;
*** a/bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 1
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 2
#endif /* _PATCHLEVEL_H_ */

View File

@@ -0,0 +1,62 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-003
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-003
Bug-Reported-by: op7ic \x00 <op7ica@gmail.com>
Bug-Reference-ID: <CAFHyJTopWC5Jx+U7WcvxSZKu+KrqSf+_3sHPiRWo=VzXSiPq=w@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00005.html
Bug-Description:
Specially-crafted input, in this case an incomplete pathname expansion
bracket expression containing an invalid collating symbol, can cause the
shell to crash.
Patch (apply with `patch -p0'):
*** a/bash-4.4/lib/glob/sm_loop.c 2016-04-10 11:23:21.000000000 -0400
--- b/lib/glob/sm_loop.c 2016-11-02 14:03:34.000000000 -0400
***************
*** 331,334 ****
--- 331,340 ----
if (p[pc] == L('.') && p[pc+1] == L(']'))
break;
+ if (p[pc] == 0)
+ {
+ if (vp)
+ *vp = INVALID;
+ return (p + pc);
+ }
val = COLLSYM (p, pc);
if (vp)
***************
*** 484,487 ****
--- 490,496 ----
c = FOLD (c);
+ if (c == L('\0'))
+ return ((test == L('[')) ? savep : (CHAR *)0);
+
if ((flags & FNM_PATHNAME) && c == L('/'))
/* [/] can never match when matching a pathname. */
*** a/bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 2
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 3
#endif /* _PATCHLEVEL_H_ */

View File

@@ -0,0 +1,88 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-004
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-004
Bug-Reported-by: Christian Weisgerber <naddy@mips.inka.de>
Bug-Reference-ID: <20161101160302.GB54856@lorvorc.mips.inka.de>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00004.html
Bug-Description:
There is a race condition that can result in bash referencing freed memory
when freeing data associated with the last process substitution.
Patch (apply with `patch -p0'):
*** a/bash-4.4/jobs.c 2016-08-23 16:38:44.000000000 -0400
--- b/jobs.c 2016-11-02 18:24:45.000000000 -0400
***************
*** 454,457 ****
--- 454,472 ----
}
+ void
+ discard_last_procsub_child ()
+ {
+ PROCESS *disposer;
+ sigset_t set, oset;
+
+ BLOCK_CHILD (set, oset);
+ disposer = last_procsub_child;
+ last_procsub_child = (PROCESS *)NULL;
+ UNBLOCK_CHILD (oset);
+
+ if (disposer)
+ discard_pipeline (disposer);
+ }
+
struct pipeline_saver *
alloc_pipeline_saver ()
*** a/bash-4.4/jobs.h 2016-04-27 10:35:51.000000000 -0400
--- b/jobs.h 2016-11-02 18:25:08.000000000 -0400
***************
*** 191,194 ****
--- 191,195 ----
extern void stop_making_children __P((void));
extern void cleanup_the_pipeline __P((void));
+ extern void discard_last_procsub_child __P((void));
extern void save_pipeline __P((int));
extern PROCESS *restore_pipeline __P((int));
*** a/bash-4.4/subst.c 2016-08-30 16:46:38.000000000 -0400
--- b/subst.c 2016-11-02 18:23:24.000000000 -0400
***************
*** 5809,5816 ****
#if defined (JOB_CONTROL)
if (last_procsub_child)
! {
! discard_pipeline (last_procsub_child);
! last_procsub_child = (PROCESS *)NULL;
! }
last_procsub_child = restore_pipeline (0);
#endif
--- 5834,5838 ----
#if defined (JOB_CONTROL)
if (last_procsub_child)
! discard_last_procsub_child ();
last_procsub_child = restore_pipeline (0);
#endif
*** a/bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 3
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 4
#endif /* _PATCHLEVEL_H_ */

View File

@@ -0,0 +1,51 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-005
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-005
Bug-Reported-by: Dr. Werner Fink <werner@suse.de>
Bug-Reference-ID: <20161107100936.ajnojd7dspirdflf@noether.suse.de>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00054.html
Bug-Description:
Under certain circumstances, a simple command is optimized to eliminate a
fork, resulting in an EXIT trap not being executed.
Patch (apply with `patch -p0'):
*** a/bash-4.4/builtins/evalstring.c 2016-08-11 14:18:51.000000000 -0400
--- b/builtins/evalstring.c 2016-11-08 15:05:07.000000000 -0500
***************
*** 105,114 ****
*bash_input.location.string == '\0' &&
command->type == cm_simple &&
- #if 0
signal_is_trapped (EXIT_TRAP) == 0 &&
signal_is_trapped (ERROR_TRAP) == 0 &&
- #else
any_signals_trapped () < 0 &&
- #endif
command->redirects == 0 && command->value.Simple->redirects == 0 &&
((command->flags & CMD_TIME_PIPELINE) == 0) &&
--- 105,111 ----
*** a/bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 4
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 5
#endif /* _PATCHLEVEL_H_ */

View File

@@ -0,0 +1,63 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-006
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-006
Bug-Reported-by: <fernando@null-life.com>
Bug-Reference-ID: <CAEr-gPFPvqheiAeENmMkEwWRd4U=1iqCsYmR3sLdULOqL++_tQ@mail.gmail.com>
Bug-Reference-URL:
Bug-Description:
Out-of-range negative offsets to popd can cause the shell to crash attempting
to free an invalid memory block.
Patch (apply with `patch -p0'):
*** bash-4.4-patched/builtins/pushd.def 2016-01-25 13:31:49.000000000 -0500
--- b/builtins/pushd.def 2016-10-28 10:46:49.000000000 -0400
***************
*** 366,370 ****
}
! if (which > directory_list_offset || (directory_list_offset == 0 && which == 0))
{
pushd_error (directory_list_offset, which_word ? which_word : "");
--- b/366,370 ----
}
! if (which > directory_list_offset || (which < -directory_list_offset) || (directory_list_offset == 0 && which == 0))
{
pushd_error (directory_list_offset, which_word ? which_word : "");
***************
*** 388,391 ****
--- b/388,396 ----
of the list into place. */
i = (direction == '+') ? directory_list_offset - which : which;
+ if (i < 0 || i > directory_list_offset)
+ {
+ pushd_error (directory_list_offset, which_word ? which_word : "");
+ return (EXECUTION_FAILURE);
+ }
free (pushd_directory_list[i]);
directory_list_offset--;
*** bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 5
#endif /* _PATCHLEVEL_H_ */
--- b/26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 6
#endif /* _PATCHLEVEL_H_ */

View File

@@ -0,0 +1,155 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-007
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-007
Bug-Reported-by: Jens Heyens <jens.heyens@cispa.saarland>
Bug-Reference-ID:
Bug-Reference-URL: https://savannah.gnu.org/support/?109224
Bug-Description:
When performing filename completion, bash dequotes the directory name being
completed, which can result in match failures and potential unwanted
expansion.
Patch (apply with `patch -p0'):
*** bash-4.4-patched/bashline.c 2016-08-05 21:44:05.000000000 -0400
--- b/bashline.c 2017-01-19 13:15:51.000000000 -0500
***************
*** 143,147 ****
static void restore_directory_hook __P((rl_icppfunc_t));
! static int directory_exists __P((const char *));
static void cleanup_expansion_error __P((void));
--- b/144,148 ----
static void restore_directory_hook __P((rl_icppfunc_t));
! static int directory_exists __P((const char *, int));
static void cleanup_expansion_error __P((void));
***************
*** 3103,3111 ****
}
! /* Check whether not the (dequoted) version of DIRNAME, with any trailing slash
! removed, exists. */
static int
! directory_exists (dirname)
const char *dirname;
{
char *new_dirname;
--- b/3107,3116 ----
}
! /* Check whether not DIRNAME, with any trailing slash removed, exists. If
! SHOULD_DEQUOTE is non-zero, we dequote the directory name first. */
static int
! directory_exists (dirname, should_dequote)
const char *dirname;
+ int should_dequote;
{
char *new_dirname;
***************
*** 3113,3118 ****
struct stat sb;
! /* First, dequote the directory name */
! new_dirname = bash_dequote_filename ((char *)dirname, rl_completion_quote_character);
dirlen = STRLEN (new_dirname);
if (new_dirname[dirlen - 1] == '/')
--- b/3118,3124 ----
struct stat sb;
! /* We save the string and chop the trailing slash because stat/lstat behave
! inconsistently if one is present. */
! new_dirname = should_dequote ? bash_dequote_filename ((char *)dirname, rl_completion_quote_character) : savestring (dirname);
dirlen = STRLEN (new_dirname);
if (new_dirname[dirlen - 1] == '/')
***************
*** 3146,3150 ****
should_expand_dirname = '`';
! if (should_expand_dirname && directory_exists (local_dirname))
should_expand_dirname = 0;
--- b/3152,3156 ----
should_expand_dirname = '`';
! if (should_expand_dirname && directory_exists (local_dirname, 0))
should_expand_dirname = 0;
***************
*** 3156,3160 ****
global_nounset = unbound_vars_is_error;
unbound_vars_is_error = 0;
! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */
unbound_vars_is_error = global_nounset;
if (wl)
--- b/3162,3166 ----
global_nounset = unbound_vars_is_error;
unbound_vars_is_error = 0;
! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */
unbound_vars_is_error = global_nounset;
if (wl)
***************
*** 3245,3249 ****
}
! if (should_expand_dirname && directory_exists (local_dirname))
should_expand_dirname = 0;
--- b/3262,3266 ----
}
! if (should_expand_dirname && directory_exists (local_dirname, 1))
should_expand_dirname = 0;
***************
*** 3251,3255 ****
{
new_dirname = savestring (local_dirname);
! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */
if (wl)
{
--- b/3268,3272 ----
{
new_dirname = savestring (local_dirname);
! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */
if (wl)
{
*** bash-4.4/subst.c 2016-08-30 16:46:38.000000000 -0400
--- b/subst.c 2017-01-19 07:09:57.000000000 -0500
***************
*** 9459,9462 ****
--- b/9459,9466 ----
if (word->flags & W_COMPLETE)
tword->flags |= W_COMPLETE; /* for command substitutions */
+ if (word->flags & W_NOCOMSUB)
+ tword->flags |= W_NOCOMSUB;
+ if (word->flags & W_NOPROCSUB)
+ tword->flags |= W_NOPROCSUB;
temp = (char *)NULL;
*** bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 6
#endif /* _PATCHLEVEL_H_ */
--- b/26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 7
#endif /* _PATCHLEVEL_H_ */

View File

@@ -0,0 +1,88 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-008
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-008
Bug-Reported-by: Koichi MURASE <myoga.murase@gmail.com>
Bug-Reference-ID: <CAFLRLk-V+1AeQ2k=pY7ih6V+MfQ_w8EF3YWL2E+wmLfgKBtzXA@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00050.html
Bug-Description:
Under certain circumstances, bash will evaluate arithmetic expressions as
part of reading an expression token even when evaluation is suppressed. This
happens while evaluating a conditional expression and skipping over the
failed branch of the expression.
Patch (apply with `patch -p0'):
*** bash-4.4-patched/expr.c 2015-10-11 14:46:36.000000000 -0400
--- b/expr.c 2016-11-08 11:55:46.000000000 -0500
***************
*** 579,585 ****
if (curtok == QUES) /* found conditional expr */
{
- readtok ();
- if (curtok == 0 || curtok == COL)
- evalerror (_("expression expected"));
if (cval == 0)
{
--- b/579,582 ----
***************
*** 588,591 ****
--- b/585,592 ----
}
+ readtok ();
+ if (curtok == 0 || curtok == COL)
+ evalerror (_("expression expected"));
+
val1 = EXP_HIGHEST ();
***************
*** 594,600 ****
if (curtok != COL)
evalerror (_("`:' expected for conditional expression"));
! readtok ();
! if (curtok == 0)
! evalerror (_("expression expected"));
set_noeval = 0;
if (cval)
--- b/595,599 ----
if (curtok != COL)
evalerror (_("`:' expected for conditional expression"));
!
set_noeval = 0;
if (cval)
***************
*** 604,608 ****
--- b/603,611 ----
}
+ readtok ();
+ if (curtok == 0)
+ evalerror (_("expression expected"));
val2 = expcond ();
+
if (set_noeval)
noeval--;
*** bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 7
#endif /* _PATCHLEVEL_H_ */
--- b/26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 8
#endif /* _PATCHLEVEL_H_ */

View File

@@ -0,0 +1,111 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-009
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-009
Bug-Reported-by: Hong Cho <hong.cho@citrix.com>
Bug-Reference-ID: <c30b5fe62b2543af8297e47ca487c29c@SJCPEX02CL02.citrite.net>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-12/msg00043.html
Bug-Description:
There is a race condition in add_history() that can be triggered by a fatal
signal arriving between the time the history length is updated and the time
the history list update is completed. A later attempt to reference an
invalid history entry can cause a crash.
Patch (apply with `patch -p0'):
*** bash-4.4-patched/lib/readline/history.c 2016-11-11 13:42:49.000000000 -0500
--- b/lib/readline/history.c 2016-12-05 10:37:51.000000000 -0500
***************
*** 280,283 ****
--- b/280,284 ----
{
HIST_ENTRY *temp;
+ int new_length;
if (history_stifled && (history_length == history_max_entries))
***************
*** 296,306 ****
/* Copy the rest of the entries, moving down one slot. Copy includes
trailing NULL. */
- #if 0
- for (i = 0; i < history_length; i++)
- the_history[i] = the_history[i + 1];
- #else
memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *));
- #endif
history_base++;
}
--- b/297,303 ----
/* Copy the rest of the entries, moving down one slot. Copy includes
trailing NULL. */
memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *));
+ new_length = history_length;
history_base++;
}
***************
*** 316,320 ****
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *));
! history_length = 1;
}
else
--- b/313,317 ----
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *));
! new_length = 1;
}
else
***************
*** 326,330 ****
xrealloc (the_history, history_size * sizeof (HIST_ENTRY *));
}
! history_length++;
}
}
--- b/323,327 ----
xrealloc (the_history, history_size * sizeof (HIST_ENTRY *));
}
! new_length = history_length + 1;
}
}
***************
*** 332,337 ****
temp = alloc_history_entry ((char *)string, hist_inittime ());
! the_history[history_length] = (HIST_ENTRY *)NULL;
! the_history[history_length - 1] = temp;
}
--- b/329,335 ----
temp = alloc_history_entry ((char *)string, hist_inittime ());
! the_history[new_length] = (HIST_ENTRY *)NULL;
! the_history[new_length - 1] = temp;
! history_length = new_length;
}
*** bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 8
#endif /* _PATCHLEVEL_H_ */
--- b/26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 9
#endif /* _PATCHLEVEL_H_ */

View File

@@ -0,0 +1,53 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-010
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-010
Bug-Reported-by: Clark Wang <dearvoid@gmail.com>
Bug-Reference-ID: <CADv8-og092RvvUUHy46=BPKChCXw5g=GOOqgN0V3f4a3TpLebQ@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00104.html
Bug-Description:
Depending on compiler optimizations and behavior, the `read' builtin may not
save partial input when a timeout occurs.
Patch (apply with `patch -p0'):
*** bash-4.4-patched/builtins/read.def 2016-05-16 14:24:56.000000000 -0400
--- b/builtins/read.def 2016-11-25 12:37:56.000000000 -0500
***************
*** 182,186 ****
{
register char *varname;
! int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul;
int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, t_errno;
--- b/182,187 ----
{
register char *varname;
! int size, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
! volatile int i;
int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul;
int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, t_errno;
*** bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 9
#endif /* _PATCHLEVEL_H_ */
--- b/26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 10
#endif /* _PATCHLEVEL_H_ */

View File

@@ -0,0 +1,54 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-011
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-011
Bug-Reported-by: Russell King <rmk@armlinux.org.uk>
Bug-Reference-ID: <E1cNnFx-0007G2-S2@flint.armlinux.org.uk>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2017-01/msg00000.html
Bug-Description:
Subshells begun to run command and process substitutions may attempt to
set the terminal's process group to an incorrect value if they receive
a fatal signal. This depends on the behavior of the process that starts
the shell.
Patch (apply with `patch -p0'):
*** bash-4.4-patched/sig.c 2016-02-11 15:02:45.000000000 -0500
--- b/sig.c 2017-01-04 09:09:47.000000000 -0500
***************
*** 586,590 ****
if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB))))
hangup_all_jobs ();
! end_job_control ();
#endif /* JOB_CONTROL */
--- b/571,576 ----
if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB))))
hangup_all_jobs ();
! if ((subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)) == 0)
! end_job_control ();
#endif /* JOB_CONTROL */
*** bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 10
#endif /* _PATCHLEVEL_H_ */
--- b/26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 11
#endif /* _PATCHLEVEL_H_ */

View File

@@ -0,0 +1,165 @@
From https://ftp.gnu.org/gnu/bash/bash-4.4-patches/bash44-012
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
BASH PATCH REPORT
=================
Bash-Release: 4.4
Patch-ID: bash44-012
Bug-Reported-by: Clark Wang <dearvoid@gmail.com>
Bug-Reference-ID: <CADv8-ojttPUFOZXqbjsvy83LfaJtQKZ5qejGdF6j0VJ3vtrYOA@mail.gmail.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00106.html
Bug-Description:
When -N is used, the input is not supposed to be split using $IFS, but
leading and trailing IFS whitespace was still removed.
Patch (apply with `patch -p0'):
*** bash-4.4-patched/subst.c 2017-01-20 14:22:01.000000000 -0500
--- b/subst.c 2017-01-25 13:43:22.000000000 -0500
***************
*** 2826,2834 ****
/* Parse a single word from STRING, using SEPARATORS to separate fields.
ENDPTR is set to the first character after the word. This is used by
! the `read' builtin. This is never called with SEPARATORS != $IFS;
! it should be simplified.
XXX - this function is very similar to list_string; they should be
combined - XXX */
char *
get_word_from_string (stringp, separators, endptr)
--- b/2826,2838 ----
/* Parse a single word from STRING, using SEPARATORS to separate fields.
ENDPTR is set to the first character after the word. This is used by
! the `read' builtin.
!
! This is never called with SEPARATORS != $IFS, and takes advantage of that.
XXX - this function is very similar to list_string; they should be
combined - XXX */
+
+ #define islocalsep(c) (local_cmap[(unsigned char)(c)] != 0)
+
char *
get_word_from_string (stringp, separators, endptr)
***************
*** 2838,2841 ****
--- b/2842,2846 ----
char *current_word;
int sindex, sh_style_split, whitesep, xflags;
+ unsigned char local_cmap[UCHAR_MAX+1]; /* really only need single-byte chars here */
size_t slen;
***************
*** 2847,2854 ****
separators[2] == '\n' &&
separators[3] == '\0';
! for (xflags = 0, s = ifs_value; s && *s; s++)
{
if (*s == CTLESC) xflags |= SX_NOCTLESC;
if (*s == CTLNUL) xflags |= SX_NOESCCTLNUL;
}
--- b/2852,2861 ----
separators[2] == '\n' &&
separators[3] == '\0';
! memset (local_cmap, '\0', sizeof (local_cmap));
! for (xflags = 0, s = separators; s && *s; s++)
{
if (*s == CTLESC) xflags |= SX_NOCTLESC;
if (*s == CTLNUL) xflags |= SX_NOESCCTLNUL;
+ local_cmap[(unsigned char)*s] = 1; /* local charmap of separators */
}
***************
*** 2857,2864 ****
/* Remove sequences of whitespace at the beginning of STRING, as
! long as those characters appear in IFS. */
! if (sh_style_split || !separators || !*separators)
{
! for (; *s && spctabnl (*s) && isifs (*s); s++);
/* If the string is nothing but whitespace, update it and return. */
--- b/2864,2872 ----
/* Remove sequences of whitespace at the beginning of STRING, as
! long as those characters appear in SEPARATORS. This happens if
! SEPARATORS == $' \t\n' or if IFS is unset. */
! if (sh_style_split || separators == 0)
{
! for (; *s && spctabnl (*s) && islocalsep (*s); s++);
/* If the string is nothing but whitespace, update it and return. */
***************
*** 2879,2885 ****
This obeys the field splitting rules in Posix.2. */
sindex = 0;
! /* Don't need string length in ADVANCE_CHAR or string_extract_verbatim
! unless multibyte chars are possible. */
! slen = (MB_CUR_MAX > 1) ? STRLEN (s) : 1;
current_word = string_extract_verbatim (s, slen, &sindex, separators, xflags);
--- b/2887,2893 ----
This obeys the field splitting rules in Posix.2. */
sindex = 0;
! /* Don't need string length in ADVANCE_CHAR unless multibyte chars are
! possible, but need it in string_extract_verbatim for bounds checking */
! slen = STRLEN (s);
current_word = string_extract_verbatim (s, slen, &sindex, separators, xflags);
***************
*** 2900,2904 ****
/* Now skip sequences of space, tab, or newline characters if they are
in the list of separators. */
! while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex]))
sindex++;
--- b/2908,2912 ----
/* Now skip sequences of space, tab, or newline characters if they are
in the list of separators. */
! while (s[sindex] && spctabnl (s[sindex]) && islocalsep (s[sindex]))
sindex++;
***************
*** 2907,2916 ****
delimiter, not a separate delimiter that would result in an empty field.
Look at POSIX.2, 3.6.5, (3)(b). */
! if (s[sindex] && whitesep && isifs (s[sindex]) && !spctabnl (s[sindex]))
{
sindex++;
/* An IFS character that is not IFS white space, along with any adjacent
IFS white space, shall delimit a field. */
! while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex]))
sindex++;
}
--- b/2915,2924 ----
delimiter, not a separate delimiter that would result in an empty field.
Look at POSIX.2, 3.6.5, (3)(b). */
! if (s[sindex] && whitesep && islocalsep (s[sindex]) && !spctabnl (s[sindex]))
{
sindex++;
/* An IFS character that is not IFS white space, along with any adjacent
IFS white space, shall delimit a field. */
! while (s[sindex] && spctabnl (s[sindex]) && islocalsep(s[sindex]))
sindex++;
}
*** bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
--- b/patchlevel.h 2016-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 11
#endif /* _PATCHLEVEL_H_ */
--- b/26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 12
#endif /* _PATCHLEVEL_H_ */