Browse Source
random.c:188:1: error: static declaration of ‘getrandom’ follows non-static declaration
getrandom (buf, len, flags)
^~~~~~~~~
In file included from random.c:26:0:
/home/vanhofen/ni/buildsystem/cross/arm-linux-3.10.93/arm-cortex-linux-uclibcgnueabi/sys-root/usr/include/sys/random.h:27:12: note: previous declaration of ‘getrandom’ was here
extern int getrandom(void *__buf, size_t count, unsigned int flags)
^~~~~~~~~
This reverts commit ea817e3f25
.
master
vanhofen
3 years ago
23 changed files with 1947 additions and 115 deletions
@ -0,0 +1,170 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-001 |
|||
|
|||
Signed-off-by: Pascal de Bruijn <p.debruijn@unilogic.nl> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-001 |
|||
|
|||
Bug-Reported-by: axel@freakout.de |
|||
Bug-Reference-ID: <201901082050.x08KoShS006731@bongo.freakout.de> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00079.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Under certain circumstances, the glob expansion code did not remove |
|||
backslashes escaping characters in directory names (or portions of a |
|||
pattern preceding a slash). |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0/bashline.c 2018-11-27 13:20:16.000000000 -0500 |
|||
--- b/bashline.c 2019-01-16 16:06:03.000000000 -0500
|
|||
*************** |
|||
*** 232,235 **** |
|||
--- 232,236 ----
|
|||
static int bash_possible_command_completions __P((int, int)); |
|||
|
|||
+ static int completion_glob_pattern __P((char *));
|
|||
static char *glob_complete_word __P((const char *, int)); |
|||
static int bash_glob_completion_internal __P((int)); |
|||
*************** |
|||
*** 1742,1746 **** |
|||
/* This could be a globbing pattern, so try to expand it using pathname |
|||
expansion. */ |
|||
! if (!matches && glob_pattern_p (text))
|
|||
{ |
|||
matches = rl_completion_matches (text, glob_complete_word); |
|||
--- 1743,1747 ----
|
|||
/* This could be a globbing pattern, so try to expand it using pathname |
|||
expansion. */ |
|||
! if (!matches && completion_glob_pattern ((char *)text))
|
|||
{ |
|||
matches = rl_completion_matches (text, glob_complete_word); |
|||
*************** |
|||
*** 1851,1855 **** |
|||
} |
|||
|
|||
! globpat = glob_pattern_p (hint_text);
|
|||
|
|||
/* If this is an absolute program name, do not check it against |
|||
--- 1852,1856 ----
|
|||
} |
|||
|
|||
! globpat = completion_glob_pattern ((char *)hint_text);
|
|||
|
|||
/* If this is an absolute program name, do not check it against |
|||
*************** |
|||
*** 3714,3717 **** |
|||
--- 3715,3773 ----
|
|||
} |
|||
|
|||
+ static int
|
|||
+ completion_glob_pattern (string)
|
|||
+ char *string;
|
|||
+ {
|
|||
+ register int c;
|
|||
+ char *send;
|
|||
+ int open;
|
|||
+
|
|||
+ DECLARE_MBSTATE;
|
|||
+
|
|||
+ open = 0;
|
|||
+ send = string + strlen (string);
|
|||
+
|
|||
+ while (c = *string++)
|
|||
+ {
|
|||
+ switch (c)
|
|||
+ {
|
|||
+ case '?':
|
|||
+ case '*':
|
|||
+ return (1);
|
|||
+
|
|||
+ case '[':
|
|||
+ open++;
|
|||
+ continue;
|
|||
+
|
|||
+ case ']':
|
|||
+ if (open)
|
|||
+ return (1);
|
|||
+ continue;
|
|||
+
|
|||
+ case '+':
|
|||
+ case '@':
|
|||
+ case '!':
|
|||
+ if (*string == '(') /*)*/
|
|||
+ return (1);
|
|||
+ continue;
|
|||
+
|
|||
+ case '\\':
|
|||
+ if (*string == 0)
|
|||
+ return (0);
|
|||
+ }
|
|||
+
|
|||
+ /* Advance one fewer byte than an entire multibyte character to
|
|||
+ account for the auto-increment in the loop above. */
|
|||
+ #ifdef HANDLE_MULTIBYTE
|
|||
+ string--;
|
|||
+ ADVANCE_CHAR_P (string, send - string);
|
|||
+ string++;
|
|||
+ #else
|
|||
+ ADVANCE_CHAR_P (string, send - string);
|
|||
+ #endif
|
|||
+ }
|
|||
+ return (0);
|
|||
+ }
|
|||
+
|
|||
static char *globtext; |
|||
static char *globorig; |
|||
*************** |
|||
*** 3878,3882 **** |
|||
} |
|||
|
|||
! if (t && glob_pattern_p (t) == 0)
|
|||
rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */ |
|||
FREE (t); |
|||
--- 3934,3938 ----
|
|||
} |
|||
|
|||
! if (t && completion_glob_pattern (t) == 0)
|
|||
rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */ |
|||
FREE (t); |
|||
*** ../bash-5.0/lib/glob/glob_loop.c 2018-12-31 13:35:15.000000000 -0500 |
|||
--- b/lib/glob/glob_loop.c 2019-01-09 09:44:36.000000000 -0500
|
|||
*************** |
|||
*** 55,59 **** |
|||
|
|||
case L('\\'): |
|||
- #if 0
|
|||
/* Don't let the pattern end in a backslash (GMATCH returns no match |
|||
if the pattern ends in a backslash anyway), but otherwise return 1, |
|||
--- 55,58 ----
|
|||
*************** |
|||
*** 61,69 **** |
|||
and it can be removed. */ |
|||
return (*p != L('\0')); |
|||
- #else
|
|||
- /* The pattern may not end with a backslash. */
|
|||
- if (*p++ == L('\0'))
|
|||
- return 0;
|
|||
- #endif
|
|||
} |
|||
|
|||
--- 60,63 ----
|
|||
*** ../bash-5.0/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_ */ |
@ -0,0 +1,117 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-002 |
|||
|
|||
Signed-off-by: Pascal de Bruijn <p.debruijn@unilogic.nl> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-002 |
|||
|
|||
Bug-Reported-by: Ante Peric <synthmeat@gmail.com> |
|||
Bug-Reference-ID: <B7E3B567-2467-4F7B-B6B9-CA4E75A9C93F@gmail.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00095.html |
|||
|
|||
Bug-Description: |
|||
|
|||
When an alias value ends with an unquoted literal tab (not part of a quoted |
|||
string or comment), alias expansion cannot correctly detect the end of the |
|||
alias value after expanding it. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0/parser.h 2018-12-28 19:11:18.000000000 -0500 |
|||
--- b/parser.h 2019-01-11 15:13:03.000000000 -0500
|
|||
*************** |
|||
*** 48,51 **** |
|||
--- 48,52 ----
|
|||
#define PST_REDIRLIST 0x080000 /* parsing a list of redirections preceding a simple command name */ |
|||
#define PST_COMMENT 0x100000 /* parsing a shell comment; used by aliases */ |
|||
+ #define PST_ENDALIAS 0x200000 /* just finished expanding and consuming an alias */
|
|||
|
|||
/* Definition of the delimiter stack. Needed by parse.y and bashhist.c. */ |
|||
*** ../bash-5.0/parse.y 2019-01-02 13:57:34.000000000 -0500 |
|||
--- b/parse.y 2019-01-14 08:23:31.000000000 -0500
|
|||
*************** |
|||
*** 2558,2567 **** |
|||
pushed_string_list->flags != PSH_DPAREN && |
|||
(parser_state & PST_COMMENT) == 0 && |
|||
shell_input_line_index > 0 && |
|||
! shell_input_line[shell_input_line_index-1] != ' ' &&
|
|||
shell_input_line[shell_input_line_index-1] != '\n' && |
|||
shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && |
|||
(current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) |
|||
{ |
|||
return ' '; /* END_ALIAS */ |
|||
} |
|||
--- 2558,2569 ----
|
|||
pushed_string_list->flags != PSH_DPAREN && |
|||
(parser_state & PST_COMMENT) == 0 && |
|||
+ (parser_state & PST_ENDALIAS) == 0 && /* only once */
|
|||
shell_input_line_index > 0 && |
|||
! shellblank (shell_input_line[shell_input_line_index-1]) == 0 &&
|
|||
shell_input_line[shell_input_line_index-1] != '\n' && |
|||
shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && |
|||
(current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) |
|||
{ |
|||
+ parser_state |= PST_ENDALIAS;
|
|||
return ' '; /* END_ALIAS */ |
|||
} |
|||
*************** |
|||
*** 2572,2575 **** |
|||
--- 2574,2578 ----
|
|||
if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE) |
|||
{ |
|||
+ parser_state &= ~PST_ENDALIAS;
|
|||
pop_string (); |
|||
uc = shell_input_line[shell_input_line_index]; |
|||
*** ../bash-5.0/y.tab.c 2019-01-02 13:57:43.000000000 -0500 |
|||
--- b/y.tab.c 2019-01-14 08:39:23.000000000 -0500
|
|||
*************** |
|||
*** 4874,4883 **** |
|||
pushed_string_list->flags != PSH_DPAREN && |
|||
(parser_state & PST_COMMENT) == 0 && |
|||
shell_input_line_index > 0 && |
|||
! shell_input_line[shell_input_line_index-1] != ' ' &&
|
|||
shell_input_line[shell_input_line_index-1] != '\n' && |
|||
shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && |
|||
(current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) |
|||
{ |
|||
return ' '; /* END_ALIAS */ |
|||
} |
|||
--- 4874,4885 ----
|
|||
pushed_string_list->flags != PSH_DPAREN && |
|||
(parser_state & PST_COMMENT) == 0 && |
|||
+ (parser_state & PST_ENDALIAS) == 0 && /* only once */
|
|||
shell_input_line_index > 0 && |
|||
! shellblank (shell_input_line[shell_input_line_index-1]) == 0 &&
|
|||
shell_input_line[shell_input_line_index-1] != '\n' && |
|||
shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && |
|||
(current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) |
|||
{ |
|||
+ parser_state |= PST_ENDALIAS;
|
|||
return ' '; /* END_ALIAS */ |
|||
} |
|||
*************** |
|||
*** 4888,4891 **** |
|||
--- 4890,4894 ----
|
|||
if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE) |
|||
{ |
|||
+ parser_state &= ~PST_ENDALIAS;
|
|||
pop_string (); |
|||
uc = shell_input_line[shell_input_line_index]; |
|||
*** ../bash-5.0/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_ */ |
@ -1,72 +0,0 @@ |
|||
From 3d6b9e18506ad9daf4ec7b7d406b38d58ec88009 Mon Sep 17 00:00:00 2001 |
|||
From: Peter Seiderer <ps.report@gmx.net> |
|||
Date: Thu, 11 Mar 2021 20:48:36 +0100 |
|||
Subject: [PATCH] locale: fix typo local_shiftstates vs. locale_shiftstates |
|||
MIME-Version: 1.0 |
|||
Content-Type: text/plain; charset=UTF-8 |
|||
Content-Transfer-Encoding: 8bit |
|||
|
|||
Fixes: |
|||
|
|||
locale.c:94:3: error: ‘local_shiftstates’ undeclared (first use in this function); did you mean ‘locale_shiftstates’? |
|||
94 | local_shiftstates = 0; |
|||
| ^~~~~~~~~~~~~~~~~ |
|||
| locale_shiftstates |
|||
|
|||
Signed-off-by: Peter Seiderer <ps.report@gmx.net> |
|||
---
|
|||
locale.c | 10 +++++----- |
|||
1 file changed, 5 insertions(+), 5 deletions(-) |
|||
|
|||
diff --git a/locale.c b/locale.c
|
|||
index 17ccc58..d6dd95a 100644
|
|||
--- a/locale.c
|
|||
+++ b/locale.c
|
|||
@@ -91,7 +91,7 @@ set_default_locale ()
|
|||
#if defined (HANDLE_MULTIBYTE) |
|||
locale_shiftstates = mblen ((char *)NULL, 0); |
|||
#else |
|||
- local_shiftstates = 0;
|
|||
+ locale_shiftstates = 0;
|
|||
#endif |
|||
} |
|||
|
|||
@@ -117,7 +117,7 @@ set_default_locale_vars ()
|
|||
# if defined (HANDLE_MULTIBYTE) |
|||
locale_shiftstates = mblen ((char *)NULL, 0); |
|||
# else |
|||
- local_shiftstates = 0;
|
|||
+ locale_shiftstates = 0;
|
|||
# endif |
|||
|
|||
u32reset (); |
|||
@@ -226,7 +226,7 @@ set_locale_var (var, value)
|
|||
# if defined (HANDLE_MULTIBYTE) |
|||
locale_shiftstates = mblen ((char *)NULL, 0); |
|||
# else |
|||
- local_shiftstates = 0;
|
|||
+ locale_shiftstates = 0;
|
|||
# endif |
|||
u32reset (); |
|||
return r; |
|||
@@ -250,7 +250,7 @@ set_locale_var (var, value)
|
|||
#if defined (HANDLE_MULTIBYTE) |
|||
locale_shiftstates = mblen ((char *)NULL, 0); |
|||
#else |
|||
- local_shiftstates = 0;
|
|||
+ locale_shiftstates = 0;
|
|||
#endif |
|||
u32reset (); |
|||
} |
|||
@@ -391,7 +391,7 @@ reset_locale_vars ()
|
|||
# if defined (HANDLE_MULTIBYTE) |
|||
locale_shiftstates = mblen ((char *)NULL, 0); |
|||
# else |
|||
- local_shiftstates = 0;
|
|||
+ locale_shiftstates = 0;
|
|||
# endif |
|||
u32reset (); |
|||
#endif |
|||
--
|
|||
2.30.1 |
|||
|
@ -0,0 +1,243 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-003 |
|||
|
|||
Signed-off-by: Pascal de Bruijn <p.debruijn@unilogic.nl> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-003 |
|||
|
|||
Bug-Reported-by: Andrew Church <achurch+bash@achurch.org> |
|||
Bug-Reference-ID: <5c534aa2.04371@msgid.achurch.org> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00276.html |
|||
|
|||
Bug-Description: |
|||
|
|||
There are several incompatibilities in how bash-5.0 processes pathname |
|||
expansion (globbing) of filename arguments that have backslashes in the |
|||
directory portion. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/lib/glob/glob_loop.c 2019-01-16 16:13:21.000000000 -0500 |
|||
--- b/lib/glob/glob_loop.c 2019-02-01 09:45:11.000000000 -0500
|
|||
*************** |
|||
*** 27,34 **** |
|||
register const GCHAR *p; |
|||
register GCHAR c; |
|||
! int bopen;
|
|||
|
|||
p = pattern; |
|||
! bopen = 0;
|
|||
|
|||
while ((c = *p++) != L('\0')) |
|||
--- 27,34 ----
|
|||
register const GCHAR *p; |
|||
register GCHAR c; |
|||
! int bopen, bsquote;
|
|||
|
|||
p = pattern; |
|||
! bopen = bsquote = 0;
|
|||
|
|||
while ((c = *p++) != L('\0')) |
|||
*************** |
|||
*** 56,66 **** |
|||
case L('\\'): |
|||
/* Don't let the pattern end in a backslash (GMATCH returns no match |
|||
! if the pattern ends in a backslash anyway), but otherwise return 1,
|
|||
! since the matching engine uses backslash as an escape character
|
|||
! and it can be removed. */
|
|||
! return (*p != L('\0'));
|
|||
} |
|||
|
|||
! return 0;
|
|||
} |
|||
|
|||
--- 56,75 ----
|
|||
case L('\\'): |
|||
/* Don't let the pattern end in a backslash (GMATCH returns no match |
|||
! if the pattern ends in a backslash anyway), but otherwise note that
|
|||
! we have seen this, since the matching engine uses backslash as an
|
|||
! escape character and it can be removed. We return 2 later if we
|
|||
! have seen only backslash-escaped characters, so interested callers
|
|||
! know they can shortcut and just dequote the pathname. */
|
|||
! if (*p != L('\0'))
|
|||
! {
|
|||
! p++;
|
|||
! bsquote = 1;
|
|||
! continue;
|
|||
! }
|
|||
! else /* (*p == L('\0')) */
|
|||
! return 0;
|
|||
} |
|||
|
|||
! return bsquote ? 2 : 0;
|
|||
} |
|||
|
|||
*** ../bash-5.0-patched/lib/glob/glob.h 2013-10-28 14:46:12.000000000 -0400 |
|||
--- b/lib/glob/glob.h 2019-03-07 11:06:47.000000000 -0500
|
|||
*************** |
|||
*** 31,34 **** |
|||
--- 31,35 ----
|
|||
#define GX_ADDCURDIR 0x200 /* internal -- add passed directory name */ |
|||
#define GX_GLOBSTAR 0x400 /* turn on special handling of ** */ |
|||
+ #define GX_RECURSE 0x800 /* internal -- glob_filename called recursively */
|
|||
|
|||
extern int glob_pattern_p __P((const char *)); |
|||
*** ../bash-5.0-patched/lib/glob/glob.c 2018-09-20 10:53:23.000000000 -0400 |
|||
--- b/lib/glob/glob.c 2019-03-07 14:23:43.000000000 -0500
|
|||
*************** |
|||
*** 1062,1066 **** |
|||
unsigned int directory_len; |
|||
int free_dirname; /* flag */ |
|||
! int dflags;
|
|||
|
|||
result = (char **) malloc (sizeof (char *)); |
|||
--- 1078,1082 ----
|
|||
unsigned int directory_len; |
|||
int free_dirname; /* flag */ |
|||
! int dflags, hasglob;
|
|||
|
|||
result = (char **) malloc (sizeof (char *)); |
|||
*************** |
|||
*** 1111,1117 **** |
|||
} |
|||
|
|||
/* If directory_name contains globbing characters, then we |
|||
! have to expand the previous levels. Just recurse. */
|
|||
! if (directory_len > 0 && glob_pattern_p (directory_name))
|
|||
{ |
|||
char **directories, *d, *p; |
|||
--- 1127,1136 ----
|
|||
} |
|||
|
|||
+ hasglob = 0;
|
|||
/* If directory_name contains globbing characters, then we |
|||
! have to expand the previous levels. Just recurse.
|
|||
! If glob_pattern_p returns != [0,1] we have a pattern that has backslash
|
|||
! quotes but no unquoted glob pattern characters. We dequote it below. */
|
|||
! if (directory_len > 0 && (hasglob = glob_pattern_p (directory_name)) == 1)
|
|||
{ |
|||
char **directories, *d, *p; |
|||
*************** |
|||
*** 1176,1180 **** |
|||
d[directory_len - 1] = '\0'; |
|||
|
|||
! directories = glob_filename (d, dflags);
|
|||
|
|||
if (free_dirname) |
|||
--- 1195,1199 ----
|
|||
d[directory_len - 1] = '\0'; |
|||
|
|||
! directories = glob_filename (d, dflags|GX_RECURSE);
|
|||
|
|||
if (free_dirname) |
|||
*************** |
|||
*** 1333,1336 **** |
|||
--- 1352,1369 ----
|
|||
return (NULL); |
|||
} |
|||
+ /* If we have a directory name with quoted characters, and we are
|
|||
+ being called recursively to glob the directory portion of a pathname,
|
|||
+ we need to dequote the directory name before returning it so the
|
|||
+ caller can read the directory */
|
|||
+ if (directory_len > 0 && hasglob == 2 && (flags & GX_RECURSE) != 0)
|
|||
+ {
|
|||
+ dequote_pathname (directory_name);
|
|||
+ directory_len = strlen (directory_name);
|
|||
+ }
|
|||
+
|
|||
+ /* We could check whether or not the dequoted directory_name is a
|
|||
+ directory and return it here, returning the original directory_name
|
|||
+ if not, but we don't do that yet. I'm not sure it matters. */
|
|||
+
|
|||
/* Handle GX_MARKDIRS here. */ |
|||
result[0] = (char *) malloc (directory_len + 1); |
|||
*** ../bash-5.0-patched/pathexp.c 2018-04-29 17:44:48.000000000 -0400 |
|||
--- b/pathexp.c 2019-01-31 20:19:41.000000000 -0500
|
|||
*************** |
|||
*** 66,74 **** |
|||
register int c; |
|||
char *send; |
|||
! int open;
|
|||
|
|||
DECLARE_MBSTATE; |
|||
|
|||
! open = 0;
|
|||
send = string + strlen (string); |
|||
|
|||
--- 66,74 ----
|
|||
register int c; |
|||
char *send; |
|||
! int open, bsquote;
|
|||
|
|||
DECLARE_MBSTATE; |
|||
|
|||
! open = bsquote = 0;
|
|||
send = string + strlen (string); |
|||
|
|||
*************** |
|||
*** 101,105 **** |
|||
globbing. */ |
|||
case '\\': |
|||
! return (*string != 0);
|
|||
|
|||
case CTLESC: |
|||
--- 101,112 ----
|
|||
globbing. */ |
|||
case '\\': |
|||
! if (*string != '\0' && *string != '/')
|
|||
! {
|
|||
! bsquote = 1;
|
|||
! string++;
|
|||
! continue;
|
|||
! }
|
|||
! else if (*string == 0)
|
|||
! return (0);
|
|||
|
|||
case CTLESC: |
|||
*************** |
|||
*** 118,122 **** |
|||
#endif |
|||
} |
|||
! return (0);
|
|||
} |
|||
|
|||
--- 125,130 ----
|
|||
#endif |
|||
} |
|||
!
|
|||
! return (bsquote ? 2 : 0);
|
|||
} |
|||
|
|||
*** ../bash-5.0-patched/bashline.c 2019-01-16 16:13:21.000000000 -0500 |
|||
--- b/bashline.c 2019-02-22 09:29:08.000000000 -0500
|
|||
*************** |
|||
*** 3753,3757 **** |
|||
|
|||
case '\\': |
|||
! if (*string == 0)
|
|||
return (0); |
|||
} |
|||
--- 3766,3770 ----
|
|||
|
|||
case '\\': |
|||
! if (*string++ == 0)
|
|||
return (0); |
|||
} |
|||
*** ../bash-5.0/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_ */ |
@ -1,40 +0,0 @@ |
|||
From a60ab1e5e88863acf9b0e9bcaa7919bbf093da05 Mon Sep 17 00:00:00 2001 |
|||
From: Peter Seiderer <ps.report@gmx.net> |
|||
Date: Thu, 11 Mar 2021 20:55:52 +0100 |
|||
Subject: [PATCH] glob: fix dequote_pathname vs. udequote_pathname |
|||
MIME-Version: 1.0 |
|||
Content-Type: text/plain; charset=UTF-8 |
|||
Content-Transfer-Encoding: 8bit |
|||
|
|||
Fixes: |
|||
|
|||
glob.c:123:28: error: static declaration of ‘udequote_pathname’ follows non-static declaration |
|||
123 | # define dequote_pathname udequote_pathname |
|||
| ^~~~~~~~~~~~~~~~~ |
|||
glob.c:125:13: note: in expansion of macro ‘dequote_pathname’ |
|||
125 | static void dequote_pathname PARAMS((char *)); |
|||
| ^~~~~~~~~~~~~~~~ |
|||
glob.c:118:6: note: previous declaration of ‘udequote_pathname’ was here |
|||
118 | void udequote_pathname PARAMS((char *)); |
|||
| ^~~~~~~~~~~~~~~~~ |
|||
|
|||
Signed-off-by: Peter Seiderer <ps.report@gmx.net> |
|||
---
|
|||
lib/glob/glob.c | 3 +-- |
|||
1 file changed, 1 insertion(+), 2 deletions(-) |
|||
|
|||
diff --git a/lib/glob/glob.c b/lib/glob/glob.c
|
|||
index eb6277f..c903b15 100644
|
|||
--- a/lib/glob/glob.c
|
|||
+++ b/lib/glob/glob.c
|
|||
@@ -117,6 +117,5 @@ static int mbskipname PARAMS((char *, char *, int));
|
|||
#else |
|||
# define dequote_pathname udequote_pathname |
|||
#endif |
|||
-static void dequote_pathname PARAMS((char *));
|
|||
static int glob_testdir PARAMS((char *, int)); |
|||
static char **glob_dir_to_array PARAMS((char *, char **, int)); |
|||
|
|||
--
|
|||
2.30.1 |
|||
|
@ -0,0 +1,57 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-004 |
|||
|
|||
Signed-off-by: Pascal de Bruijn <p.debruijn@unilogic.nl> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-004 |
|||
|
|||
Bug-Reported-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net> |
|||
Bug-Reference-ID: <87lg0g8aiw.fsf@fifthhorseman.net> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-04/msg00076.html |
|||
|
|||
Bug-Description: |
|||
|
|||
In bash-5.0, the `wait' builtin without arguments waits for all children of the |
|||
shell. This includes children it `inherited' at shell invocation time. This |
|||
patch modifies the behavior to not wait for these inherited children, some |
|||
of which might be long-lived. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/jobs.c 2018-12-06 11:44:34.000000000 -0500 |
|||
--- b/jobs.c 2019-04-12 15:15:10.000000000 -0400
|
|||
*************** |
|||
*** 2489,2496 **** |
|||
wait_procsubs (); |
|||
reap_procsubs (); |
|||
! #if 1
|
|||
/* We don't want to wait indefinitely if we have stopped children. */ |
|||
- /* XXX - should add a loop that goes through the list of process
|
|||
- substitutions and waits for each proc in turn before this code. */
|
|||
if (any_stopped == 0) |
|||
{ |
|||
--- 2490,2495 ----
|
|||
wait_procsubs (); |
|||
reap_procsubs (); |
|||
! #if 0
|
|||
/* We don't want to wait indefinitely if we have stopped children. */ |
|||
if (any_stopped == 0) |
|||
{ |
|||
*** ../bash-5.0/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_ */ |
@ -0,0 +1,114 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-005 |
|||
|
|||
Signed-off-by: Pascal de Bruijn <p.debruijn@unilogic.nl> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-005 |
|||
|
|||
Bug-Reported-by: Brad Spencer <bspencer@blackberry.com> |
|||
Bug-Reference-ID: <1b993ff2-ce4f-662a-6be4-393457362e47@blackberry.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00250.html |
|||
|
|||
Bug-Description: |
|||
|
|||
In certain cases, bash optimizes out a fork() call too early and prevents |
|||
traps from running. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/command.h 2018-07-20 21:16:31.000000000 -0400 |
|||
--- b/command.h 2019-02-20 11:09:36.000000000 -0500
|
|||
*************** |
|||
*** 187,190 **** |
|||
--- 188,192 ----
|
|||
#define CMD_LASTPIPE 0x2000 |
|||
#define CMD_STDPATH 0x4000 /* use standard path for command lookup */ |
|||
+ #define CMD_TRY_OPTIMIZING 0x8000 /* try to optimize this simple command */
|
|||
|
|||
/* What a command looks like. */ |
|||
*** ../bash-5.0-patched/builtins/evalstring.c 2018-12-26 11:19:21.000000000 -0500 |
|||
--- b/builtins/evalstring.c 2019-01-29 14:15:19.000000000 -0500
|
|||
*************** |
|||
*** 101,104 **** |
|||
--- 101,113 ----
|
|||
} |
|||
|
|||
+ int
|
|||
+ can_optimize_connection (command)
|
|||
+ COMMAND *command;
|
|||
+ {
|
|||
+ return (*bash_input.location.string == '\0' &&
|
|||
+ (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') &&
|
|||
+ command->value.Connection->second->type == cm_simple);
|
|||
+ }
|
|||
+
|
|||
void |
|||
optimize_fork (command) |
|||
*************** |
|||
*** 106,110 **** |
|||
{ |
|||
if (command->type == cm_connection && |
|||
! (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR) &&
|
|||
should_suppress_fork (command->value.Connection->second)) |
|||
{ |
|||
--- 115,120 ----
|
|||
{ |
|||
if (command->type == cm_connection && |
|||
! (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') &&
|
|||
! (command->value.Connection->second->flags & CMD_TRY_OPTIMIZING) &&
|
|||
should_suppress_fork (command->value.Connection->second)) |
|||
{ |
|||
*************** |
|||
*** 413,418 **** |
|||
command->value.Simple->flags |= CMD_NO_FORK; |
|||
} |
|||
! else if (command->type == cm_connection)
|
|||
! optimize_fork (command);
|
|||
#endif /* ONESHOT */ |
|||
|
|||
--- 423,438 ----
|
|||
command->value.Simple->flags |= CMD_NO_FORK; |
|||
} |
|||
!
|
|||
! /* Can't optimize forks out here execept for simple commands.
|
|||
! This knows that the parser sets up commands as left-side heavy
|
|||
! (&& and || are left-associative) and after the single parse,
|
|||
! if we are at the end of the command string, the last in a
|
|||
! series of connection commands is
|
|||
! command->value.Connection->second. */
|
|||
! else if (command->type == cm_connection && can_optimize_connection (command))
|
|||
! {
|
|||
! command->value.Connection->second->flags |= CMD_TRY_OPTIMIZING;
|
|||
! command->value.Connection->second->value.Simple->flags |= CMD_TRY_OPTIMIZING;
|
|||
! }
|
|||
#endif /* ONESHOT */ |
|||
|
|||
*** ../bash-5.0-patched/execute_cmd.c 2018-12-05 09:05:14.000000000 -0500 |
|||
--- b/execute_cmd.c 2019-01-25 15:59:00.000000000 -0500
|
|||
*************** |
|||
*** 2768,2771 **** |
|||
--- 2768,2773 ----
|
|||
(exec_result != EXECUTION_SUCCESS))) |
|||
{ |
|||
+ optimize_fork (command);
|
|||
+
|
|||
second = command->value.Connection->second; |
|||
if (ignore_return && second) |
|||
*** ../bash-5.0/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_ */ |
@ -0,0 +1,51 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-006 |
|||
|
|||
Signed-off-by: Pascal de Bruijn <p.debruijn@unilogic.nl> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-006 |
|||
|
|||
Bug-Reported-by: Tomas Mozes <hydrapolic@gmail.com> |
|||
Bug-Reference-ID: <CAG6MAzQumLU2vhnmr1UrYAUQAFW5Yo8hfM_sEibX9RJQWJkRrA@mail.gmail.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-03/msg00037.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Bash-5.0 did not build successfully if SYSLOG_HISTORY was defined without |
|||
also defining SYSLOG_SHOPT. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/builtins/shopt.def 2018-10-05 14:49:02.000000000 -0400 |
|||
--- b/builtins/shopt.def 2019-01-23 09:55:22.000000000 -0500
|
|||
*************** |
|||
*** 123,127 **** |
|||
#endif |
|||
|
|||
! #if defined (SYSLOG_HISTORY) && defined (SYSLOG_SHOPT)
|
|||
extern int syslog_history; |
|||
#endif |
|||
--- 123,127 ----
|
|||
#endif |
|||
|
|||
! #if defined (SYSLOG_HISTORY)
|
|||
extern int syslog_history; |
|||
#endif |
|||
*** ../bash-5.0/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_ */ |
|||
--- 26,30 ----
|
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 6
|
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,66 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-007 |
|||
|
|||
Signed-off-by: Pascal de Bruijn <p.debruijn@unilogic.nl> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-007 |
|||
|
|||
Bug-Reported-by: Grisha Levit <grishalevit@gmail.com> |
|||
Bug-Reference-ID: <CAMu=BroHapG1AS3xB5SQaCX2XKu=-E2Ob9uW6LNuHvd=YohrDw@mail.gmail.com> |
|||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-02/msg00067.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Running `exec' when job control was disabled, even temporarily, but after it |
|||
had been initialized, could leave the terminal in the wrong process group for |
|||
the executed process. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/jobs.c 2018-12-06 11:44:34.000000000 -0500 |
|||
--- b/jobs.c 2019-04-12 15:15:10.000000000 -0400
|
|||
*************** |
|||
*** 4838,4850 **** |
|||
{ |
|||
if (job_control) |
|||
! {
|
|||
! terminate_stopped_jobs ();
|
|||
|
|||
! if (original_pgrp >= 0)
|
|||
! give_terminal_to (original_pgrp, 1);
|
|||
! }
|
|||
|
|||
! if (original_pgrp >= 0)
|
|||
! setpgid (0, original_pgrp);
|
|||
} |
|||
|
|||
--- 4838,4848 ----
|
|||
{ |
|||
if (job_control) |
|||
! terminate_stopped_jobs ();
|
|||
|
|||
! if (original_pgrp >= 0 && terminal_pgrp != original_pgrp)
|
|||
! give_terminal_to (original_pgrp, 1);
|
|||
|
|||
! if (original_pgrp >= 0 && setpgid (0, original_pgrp) == 0)
|
|||
! shell_pgrp = original_pgrp;
|
|||
} |
|||
|
|||
*** ../bash-5.0/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_ */ |
|||
--- 26,30 ----
|
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 7
|
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,72 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-008 |
|||
|
|||
Signed-off-by: Pascal de Bruijn <p.debruijn@unilogic.nl> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-008 |
|||
|
|||
Bug-Reported-by: Michael Albinus <michael.albinus@gmx.de> |
|||
Bug-Reference-ID: <87bm36k3kz.fsf@gmx.de> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-02/msg00111.html |
|||
|
|||
Bug-Description: |
|||
|
|||
When HISTSIZE is set to 0, history expansion can leave the history length |
|||
set to an incorrect value, leading to subsequent attempts to access invalid |
|||
memory. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/bashhist.c 2018-07-05 22:41:14.000000000 -0400 |
|||
--- b/bashhist.c 2019-02-20 16:20:04.000000000 -0500
|
|||
*************** |
|||
*** 561,573 **** |
|||
if (!history_expansion_inhibited && history_expansion && history_expansion_p (line)) |
|||
{ |
|||
/* If we are expanding the second or later line of a multi-line |
|||
command, decrease history_length so references to history expansions |
|||
in these lines refer to the previous history entry and not the |
|||
current command. */ |
|||
if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) |
|||
history_length--; |
|||
expanded = history_expand (line, &history_value); |
|||
if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) |
|||
! history_length++;
|
|||
|
|||
if (expanded) |
|||
--- 561,576 ----
|
|||
if (!history_expansion_inhibited && history_expansion && history_expansion_p (line)) |
|||
{ |
|||
+ int old_len;
|
|||
+
|
|||
/* If we are expanding the second or later line of a multi-line |
|||
command, decrease history_length so references to history expansions |
|||
in these lines refer to the previous history entry and not the |
|||
current command. */ |
|||
+ old_len = history_length;
|
|||
if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) |
|||
history_length--; |
|||
expanded = history_expand (line, &history_value); |
|||
if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) |
|||
! history_length = old_len;
|
|||
|
|||
if (expanded) |
|||
|
|||
*** ../bash-5.0/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_ */ |
|||
--- 26,30 ----
|
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 8
|
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,46 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-009 |
|||
|
|||
Signed-off-by: Pascal de Bruijn <p.debruijn@unilogic.nl> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-009 |
|||
|
|||
Bug-Reported-by: chet.ramey@case.edu |
|||
Bug-Reference-ID: |
|||
Bug-Reference-URL: |
|||
|
|||
Bug-Description: |
|||
|
|||
The history file reading code doesn't close the file descriptor open to |
|||
the history file when it encounters a zero-length file. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/lib/readline/histfile.c 2018-06-11 09:14:52.000000000 -0400 |
|||
--- b/lib/readline/histfile.c 2019-05-16 15:55:57.000000000 -0400
|
|||
*************** |
|||
*** 306,309 **** |
|||
--- 312,316 ----
|
|||
{ |
|||
free (input); |
|||
+ close (file);
|
|||
return 0; /* don't waste time if we don't have to */ |
|||
} |
|||
*** ../bash-5.0/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_ */ |
|||
--- 26,30 ----
|
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 9
|
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,176 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-010 |
|||
|
|||
Signed-off-by: Pascal de Bruijn <p.debruijn@unilogic.nl> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-010 |
|||
|
|||
Bug-Reported-by: Thorsten Glaser <tg@mirbsd.de> |
|||
Bug-Reference-ID: <156622962831.19438.16374961114836556294.reportbug@tglase.lan.tarent.de> |
|||
Bug-Reference-URL: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=935115 |
|||
|
|||
Bug-Description: |
|||
|
|||
Bash-5.0 changed the way assignment statements preceding special builtins |
|||
and shell functions were handled in posix mode. They automatically created |
|||
or modified global variables instead of modifying existing local variables |
|||
as in bash-4.4. |
|||
|
|||
The bash-4.4 posix-mode semantics were buggy, and resulted in creating |
|||
local variables where they were not intended and modifying global variables |
|||
and local variables simultaneously. |
|||
|
|||
The bash-5.0 changes were intended to fix this issue, but did not preserve |
|||
enough backwards compatibility. The posix standard also changed what it |
|||
required in these cases, so bash-5.0 is not bound by the strict conformance |
|||
requirements that existed in previous issues of the standard. |
|||
|
|||
This patch modifies the bash-5.0 posix mode behavior in an effort to restore |
|||
some backwards compatibility and rationalize the behavior in the presence of |
|||
local variables. It |
|||
|
|||
1. Changes the assignment semantics to be more similar to standalone assignment |
|||
statements: assignments preceding a function call or special builtin while |
|||
executing in a shell function will modify the value of a local variable |
|||
with the same name for the duration of the function's execution; |
|||
|
|||
2. Changes assignments preceding shell function calls or special builtins |
|||
from within a shell function to no longer create or modify global variables |
|||
in the presence of a local variable with the same name; |
|||
|
|||
3. Assignment statements preceding a shell function call or special builtin |
|||
at the global scope continue to modify the (global) calling environment, |
|||
but are unaffected by assignments preceding function calls or special |
|||
builtins within a function, as described in item 2. This is also similar |
|||
to the behavior of a standalone assignment statement. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/variables.c 2018-12-18 11:07:21.000000000 -0500 |
|||
--- b/variables.c 2019-08-22 10:53:44.000000000 -0400
|
|||
*************** |
|||
*** 4461,4467 **** |
|||
|
|||
/* Take a variable from an assignment statement preceding a posix special |
|||
! builtin (including `return') and create a global variable from it. This
|
|||
! is called from merge_temporary_env, which is only called when in posix
|
|||
! mode. */
|
|||
static void |
|||
push_posix_temp_var (data) |
|||
--- 4461,4467 ----
|
|||
|
|||
/* Take a variable from an assignment statement preceding a posix special |
|||
! builtin (including `return') and create a variable from it as if a
|
|||
! standalone assignment statement had been performed. This is called from
|
|||
! merge_temporary_env, which is only called when in posix mode. */
|
|||
static void |
|||
push_posix_temp_var (data) |
|||
*************** |
|||
*** 4473,4486 **** |
|||
var = (SHELL_VAR *)data; |
|||
|
|||
! binding_table = global_variables->table;
|
|||
! if (binding_table == 0)
|
|||
! binding_table = global_variables->table = hash_create (VARIABLES_HASH_BUCKETS);
|
|||
!
|
|||
! v = bind_variable_internal (var->name, value_cell (var), binding_table, 0, ASS_FORCE|ASS_NOLONGJMP);
|
|||
|
|||
/* global variables are no longer temporary and don't need propagating. */ |
|||
! var->attributes &= ~(att_tempvar|att_propagate);
|
|||
if (v) |
|||
! v->attributes |= var->attributes;
|
|||
|
|||
if (find_special_var (var->name) >= 0) |
|||
--- 4473,4497 ----
|
|||
var = (SHELL_VAR *)data; |
|||
|
|||
! /* Just like do_assignment_internal(). This makes assignments preceding
|
|||
! special builtins act like standalone assignment statements when in
|
|||
! posix mode, satisfying the posix requirement that this affect the
|
|||
! "current execution environment." */
|
|||
! v = bind_variable (var->name, value_cell (var), ASS_FORCE|ASS_NOLONGJMP);
|
|||
!
|
|||
! /* If this modifies an existing local variable, v->context will be non-zero.
|
|||
! If it comes back with v->context == 0, we bound at the global context.
|
|||
! Set binding_table appropriately. It doesn't matter whether it's correct
|
|||
! if the variable is local, only that it's not global_variables->table */
|
|||
! binding_table = v->context ? shell_variables->table : global_variables->table;
|
|||
|
|||
/* global variables are no longer temporary and don't need propagating. */ |
|||
! if (binding_table == global_variables->table)
|
|||
! var->attributes &= ~(att_tempvar|att_propagate);
|
|||
!
|
|||
if (v) |
|||
! {
|
|||
! v->attributes |= var->attributes;
|
|||
! v->attributes &= ~att_tempvar; /* not a temp var now */
|
|||
! }
|
|||
|
|||
if (find_special_var (var->name) >= 0) |
|||
*************** |
|||
*** 4576,4587 **** |
|||
{ |
|||
int i; |
|||
|
|||
tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1); |
|||
tempvar_list[tvlist_ind = 0] = 0; |
|||
!
|
|||
! hash_flush (temporary_env, pushf);
|
|||
! hash_dispose (temporary_env);
|
|||
temporary_env = (HASH_TABLE *)NULL; |
|||
|
|||
tempvar_list[tvlist_ind] = 0; |
|||
|
|||
--- 4587,4601 ----
|
|||
{ |
|||
int i; |
|||
+ HASH_TABLE *disposer;
|
|||
|
|||
tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1); |
|||
tempvar_list[tvlist_ind = 0] = 0; |
|||
!
|
|||
! disposer = temporary_env;
|
|||
temporary_env = (HASH_TABLE *)NULL; |
|||
|
|||
+ hash_flush (disposer, pushf);
|
|||
+ hash_dispose (disposer);
|
|||
+
|
|||
tempvar_list[tvlist_ind] = 0; |
|||
|
|||
*** ../bash-5.0-patched/tests/varenv.right 2018-12-17 15:39:48.000000000 -0500 |
|||
--- b/tests/varenv.right 2019-08-22 16:05:25.000000000 -0400
|
|||
*************** |
|||
*** 147,153 **** |
|||
outside: declare -- var="one" |
|||
inside: declare -x var="value" |
|||
! outside: declare -x var="value"
|
|||
! inside: declare -- var="local"
|
|||
! outside: declare -x var="global"
|
|||
foo=<unset> environment foo= |
|||
foo=foo environment foo=foo |
|||
--- 147,153 ----
|
|||
outside: declare -- var="one" |
|||
inside: declare -x var="value" |
|||
! outside: declare -- var="outside"
|
|||
! inside: declare -x var="global"
|
|||
! outside: declare -- var="outside"
|
|||
foo=<unset> environment foo= |
|||
foo=foo environment foo=foo |
|||
*** ../bash-5.0/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_ */ |
|||
--- 26,30 ----
|
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 10
|
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,63 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-011 |
|||
|
|||
Signed-off-by: Pascal de Bruijn <p.debruijn@unilogic.nl> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-011 |
|||
|
|||
Bug-Reported-by: Matt Whitlock |
|||
Bug-Reference-ID: |
|||
Bug-Reference-URL: https://savannah.gnu.org/support/?109671 |
|||
|
|||
Bug-Description: |
|||
|
|||
The conditional command did not perform appropriate quoted null character |
|||
removal on its arguments, causing syntax errors and attempts to stat |
|||
invalid pathnames. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/subst.c 2018-12-22 17:43:37.000000000 -0500 |
|||
--- b/subst.c 2019-04-14 13:25:41.000000000 -0400
|
|||
*************** |
|||
*** 3626,3630 **** |
|||
SPECIAL is 2, this is an rhs argument for the =~ operator, and should |
|||
be quoted appropriately for regcomp/regexec. The caller is responsible |
|||
! for removing the backslashes if the unquoted word is needed later. */
|
|||
char * |
|||
cond_expand_word (w, special) |
|||
--- 3642,3648 ----
|
|||
SPECIAL is 2, this is an rhs argument for the =~ operator, and should |
|||
be quoted appropriately for regcomp/regexec. The caller is responsible |
|||
! for removing the backslashes if the unquoted word is needed later. In
|
|||
! any case, since we don't perform word splitting, we need to do quoted
|
|||
! null character removal. */
|
|||
char * |
|||
cond_expand_word (w, special) |
|||
*************** |
|||
*** 3647,3650 **** |
|||
--- 3665,3670 ----
|
|||
if (special == 0) /* LHS */ |
|||
{ |
|||
+ if (l->word)
|
|||
+ word_list_remove_quoted_nulls (l);
|
|||
dequote_list (l); |
|||
r = string_list (l); |
|||
*** ../bash-5.0/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_ */ |
|||
--- 26,30 ----
|
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 11
|
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,68 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-012 |
|||
|
|||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-012 |
|||
|
|||
Bug-Reported-by: lessbug@qq.com |
|||
Bug-Reference-ID: <tencent_6AA531D9A5CC4121D86BD5CDA2E0DA98C605@qq.com> |
|||
Bug-Reference-URL: |
|||
|
|||
Bug-Description: |
|||
|
|||
When using previous-history to go back beyond the beginning of the history list, |
|||
it's possible to move to an incorrect partial line. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/lib/readline/misc.c 2017-07-07 17:30:12.000000000 -0400 |
|||
--- b/lib/readline/misc.c 2019-05-16 11:43:46.000000000 -0400
|
|||
*************** |
|||
*** 577,580 **** |
|||
--- 590,594 ----
|
|||
{ |
|||
HIST_ENTRY *old_temp, *temp; |
|||
+ int had_saved_line;
|
|||
|
|||
if (count < 0) |
|||
*************** |
|||
*** 589,592 **** |
|||
--- 603,607 ----
|
|||
|
|||
/* If we don't have a line saved, then save this one. */ |
|||
+ had_saved_line = _rl_saved_line_for_history != 0;
|
|||
rl_maybe_save_line (); |
|||
|
|||
*************** |
|||
*** 612,616 **** |
|||
if (temp == 0) |
|||
{ |
|||
! rl_maybe_unsave_line ();
|
|||
rl_ding (); |
|||
} |
|||
--- 627,632 ----
|
|||
if (temp == 0) |
|||
{ |
|||
! if (had_saved_line == 0)
|
|||
! _rl_free_saved_history_line ();
|
|||
rl_ding (); |
|||
} |
|||
*** ../bash-5.0/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_ */ |
|||
--- 26,30 ----
|
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 12
|
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,77 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-013 |
|||
|
|||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-013 |
|||
|
|||
Bug-Reported-by: HIROSE Masaaki <hirose31@gmail.com> |
|||
Bug-Reference-ID: <CAGSOfA-RqiTe=+GsXsDKyZrrMWH4bDbXgMVVegMa6OjqC5xbnQ@mail.gmail.com> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-05/msg00038.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Reading history entries with timestamps can result in history entries joined |
|||
by linefeeds. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/lib/readline/histfile.c 2018-06-11 09:14:52.000000000 -0400 |
|||
--- b/lib/readline/histfile.c 2019-05-16 15:55:57.000000000 -0400
|
|||
*************** |
|||
*** 370,376 **** |
|||
|
|||
has_timestamps = HIST_TIMESTAMP_START (buffer); |
|||
! history_multiline_entries += has_timestamps && history_write_timestamps;
|
|||
|
|||
/* Skip lines until we are at FROM. */ |
|||
for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++) |
|||
if (*line_end == '\n') |
|||
--- 370,378 ----
|
|||
|
|||
has_timestamps = HIST_TIMESTAMP_START (buffer); |
|||
! history_multiline_entries += has_timestamps && history_write_timestamps;
|
|||
|
|||
/* Skip lines until we are at FROM. */ |
|||
+ if (has_timestamps)
|
|||
+ last_ts = buffer;
|
|||
for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++) |
|||
if (*line_end == '\n') |
|||
*************** |
|||
*** 381,385 **** |
|||
--- 383,398 ----
|
|||
if (HIST_TIMESTAMP_START(p) == 0) |
|||
current_line++; |
|||
+ else
|
|||
+ last_ts = p;
|
|||
line_start = p; |
|||
+ /* If we are at the last line (current_line == from) but we have
|
|||
+ timestamps (has_timestamps), then line_start points to the
|
|||
+ text of the last command, and we need to skip to its end. */
|
|||
+ if (current_line >= from && has_timestamps)
|
|||
+ {
|
|||
+ for (line_end = p; line_end < bufend && *line_end != '\n'; line_end++)
|
|||
+ ;
|
|||
+ line_start = (*line_end == '\n') ? line_end + 1 : line_end;
|
|||
+ }
|
|||
} |
|||
|
|||
|
|||
*** ../bash-5.0/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 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,56 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-014 |
|||
|
|||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-014 |
|||
|
|||
Bug-Reported-by: Johannes Hielscher <jhielscher@posteo.de> |
|||
Bug-Reference-ID: <20190208205048.77c25a83@hordevm> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-02/msg00032.html |
|||
|
|||
Bug-Description: |
|||
|
|||
If the current line is empty, using the emacs C-xC-e binding to enter the |
|||
editor will edit the previous command instead of the current (empty) one. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/bashline.c 2019-01-16 16:13:21.000000000 -0500 |
|||
--- b/bashline.c 2019-02-11 11:18:57.000000000 -0500
|
|||
*************** |
|||
*** 962,970 **** |
|||
finished with the command, so we should not ignore the last command */ |
|||
using_history (); |
|||
! if (rl_line_buffer[0])
|
|||
! {
|
|||
! current_command_line_count++; /* for rl_newline above */
|
|||
! bash_add_history (rl_line_buffer);
|
|||
! }
|
|||
current_command_line_count = 0; /* for dummy history entry */ |
|||
bash_add_history (""); |
|||
--- 965,970 ----
|
|||
finished with the command, so we should not ignore the last command */ |
|||
using_history (); |
|||
! current_command_line_count++; /* for rl_newline above */
|
|||
! bash_add_history (rl_line_buffer);
|
|||
current_command_line_count = 0; /* for dummy history entry */ |
|||
bash_add_history (""); |
|||
*** ../bash-5.0/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 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,82 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-015 |
|||
|
|||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-015 |
|||
|
|||
Bug-Reported-by: Yu Kou <ckyoog@gmail.com> |
|||
Bug-Reference-ID: <CAAqoF9Ko3nAShJXGzucafs-ByUagzZ4nbQonwEkwC7s9UqfWKw@mail.gmail.com> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-05/msg00032.html |
|||
|
|||
Bug-Description: |
|||
|
|||
If alias expansion is enabled when processing the command argument to the |
|||
`-c' option, an alias is defined in that command, and the command ends with |
|||
the invocation of that alias, the shell's command parser can prematurely |
|||
terminate before the entire command is executed. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-20190426/builtins/evalstring.c 2019-01-29 14:15:19.000000000 -0500 |
|||
--- b/builtins/evalstring.c 2019-05-15 14:19:36.000000000 -0400
|
|||
*************** |
|||
*** 92,95 **** |
|||
--- 92,96 ----
|
|||
running_trap == 0 && |
|||
*bash_input.location.string == '\0' && |
|||
+ parser_expanding_alias () == 0 &&
|
|||
command->type == cm_simple && |
|||
signal_is_trapped (EXIT_TRAP) == 0 && |
|||
*************** |
|||
*** 106,109 **** |
|||
--- 107,111 ----
|
|||
{ |
|||
return (*bash_input.location.string == '\0' && |
|||
+ parser_expanding_alias () == 0 &&
|
|||
(command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') && |
|||
command->value.Connection->second->type == cm_simple); |
|||
*************** |
|||
*** 291,295 **** |
|||
with_input_from_string (string, from_file); |
|||
clear_shell_input_line (); |
|||
! while (*(bash_input.location.string))
|
|||
{ |
|||
command = (COMMAND *)NULL; |
|||
--- 293,297 ----
|
|||
with_input_from_string (string, from_file); |
|||
clear_shell_input_line (); |
|||
! while (*(bash_input.location.string) || parser_expanding_alias ())
|
|||
{ |
|||
command = (COMMAND *)NULL; |
|||
*************** |
|||
*** 546,550 **** |
|||
|
|||
with_input_from_string (string, from_file); |
|||
! while (*(bash_input.location.string))
|
|||
{ |
|||
command = (COMMAND *)NULL; |
|||
--- 548,552 ----
|
|||
|
|||
with_input_from_string (string, from_file); |
|||
! while (*(bash_input.location.string)) /* XXX - parser_expanding_alias () ? */
|
|||
{ |
|||
command = (COMMAND *)NULL; |
|||
*** ../bash-5.0/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 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,62 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-016 |
|||
|
|||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-016 |
|||
|
|||
Bug-Reported-by: sunnycemetery@gmail.com |
|||
Bug-Reference-ID: <20190316041534.GB22884@midnight> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-03/msg00070.html |
|||
|
|||
Bug-Description: |
|||
|
|||
Bash waits too long to reap /dev/fd process substitutions used as redirections |
|||
with loops and group commands, which can lead to file descriptor exhaustion. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** ../bash-5.0-patched/execute_cmd.c 2019-04-19 15:46:36.000000000 -0400 |
|||
--- b/execute_cmd.c 2019-07-01 16:45:49.000000000 -0400
|
|||
*************** |
|||
*** 1104,1107 **** |
|||
--- 1085,1104 ----
|
|||
discard_unwind_frame ("internal_fifos"); |
|||
} |
|||
+ # if defined (HAVE_DEV_FD)
|
|||
+ /* Reap process substitutions at the end of loops */
|
|||
+ switch (command->type)
|
|||
+ {
|
|||
+ case cm_while:
|
|||
+ case cm_until:
|
|||
+ case cm_for:
|
|||
+ case cm_group:
|
|||
+ # if defined (ARITH_FOR_COMMAND)
|
|||
+ case cm_arith_for:
|
|||
+ # endif
|
|||
+ reap_procsubs ();
|
|||
+ default:
|
|||
+ break;
|
|||
+ }
|
|||
+ # endif /* HAVE_DEV_FD */
|
|||
#endif |
|||
|
|||
|
|||
*** ../bash-5.0/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 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,293 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash55-017 |
|||
|
|||
Signed-off-by: Peter Korsgaard <peter@korsgaard.com> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-017 |
|||
|
|||
Bug-Reported-by: Valentin Lab <valentin.lab@kalysto.org> |
|||
Bug-Reference-ID: <ab981b9c-60a5-46d0-b7e6-a6d88b80df50@kalysto.org> |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-03/msg00062.html |
|||
|
|||
Bug-Description: |
|||
|
|||
There were cases where patch 16 reaped process substitution file descriptors |
|||
(or FIFOs) and processes to early. This is a better fix for the problem that |
|||
bash50-016 attempted to solve. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** bash-5.0-patched/subst.c 2019-08-29 11:16:49.000000000 -0400 |
|||
--- b/subst.c 2020-04-02 16:24:19.000000000 -0400
|
|||
*************** |
|||
*** 5337,5341 **** |
|||
} |
|||
|
|||
! char *
|
|||
copy_fifo_list (sizep) |
|||
int *sizep; |
|||
--- b/5337,5341 ----
|
|||
} |
|||
|
|||
! void *
|
|||
copy_fifo_list (sizep) |
|||
int *sizep; |
|||
*************** |
|||
*** 5343,5347 **** |
|||
if (sizep) |
|||
*sizep = 0; |
|||
! return (char *)NULL;
|
|||
} |
|||
|
|||
--- b/5343,5347 ----
|
|||
if (sizep) |
|||
*sizep = 0; |
|||
! return (void *)NULL;
|
|||
} |
|||
|
|||
*************** |
|||
*** 5409,5414 **** |
|||
if (fifo_list[i].file) |
|||
{ |
|||
! fifo_list[j].file = fifo_list[i].file;
|
|||
! fifo_list[j].proc = fifo_list[i].proc;
|
|||
j++; |
|||
} |
|||
--- b/5409,5419 ----
|
|||
if (fifo_list[i].file) |
|||
{ |
|||
! if (i != j)
|
|||
! {
|
|||
! fifo_list[j].file = fifo_list[i].file;
|
|||
! fifo_list[j].proc = fifo_list[i].proc;
|
|||
! fifo_list[i].file = (char *)NULL;
|
|||
! fifo_list[i].proc = 0;
|
|||
! }
|
|||
j++; |
|||
} |
|||
*************** |
|||
*** 5426,5433 **** |
|||
void |
|||
close_new_fifos (list, lsize) |
|||
! char *list;
|
|||
int lsize; |
|||
{ |
|||
int i; |
|||
|
|||
if (list == 0) |
|||
--- b/5431,5439 ----
|
|||
void |
|||
close_new_fifos (list, lsize) |
|||
! void *list;
|
|||
int lsize; |
|||
{ |
|||
int i; |
|||
+ char *plist;
|
|||
|
|||
if (list == 0) |
|||
*************** |
|||
*** 5437,5442 **** |
|||
} |
|||
|
|||
! for (i = 0; i < lsize; i++)
|
|||
! if (list[i] == 0 && i < fifo_list_size && fifo_list[i].proc != -1)
|
|||
unlink_fifo (i); |
|||
|
|||
--- b/5443,5448 ----
|
|||
} |
|||
|
|||
! for (plist = (char *)list, i = 0; i < lsize; i++)
|
|||
! if (plist[i] == 0 && i < fifo_list_size && fifo_list[i].proc != -1)
|
|||
unlink_fifo (i); |
|||
|
|||
*************** |
|||
*** 5560,5568 **** |
|||
} |
|||
|
|||
! char *
|
|||
copy_fifo_list (sizep) |
|||
int *sizep; |
|||
{ |
|||
! char *ret;
|
|||
|
|||
if (nfds == 0 || totfds == 0) |
|||
--- b/5566,5574 ----
|
|||
} |
|||
|
|||
! void *
|
|||
copy_fifo_list (sizep) |
|||
int *sizep; |
|||
{ |
|||
! void *ret;
|
|||
|
|||
if (nfds == 0 || totfds == 0) |
|||
*************** |
|||
*** 5570,5579 **** |
|||
if (sizep) |
|||
*sizep = 0; |
|||
! return (char *)NULL;
|
|||
} |
|||
|
|||
if (sizep) |
|||
*sizep = totfds; |
|||
! ret = (char *)xmalloc (totfds * sizeof (pid_t));
|
|||
return (memcpy (ret, dev_fd_list, totfds * sizeof (pid_t))); |
|||
} |
|||
--- b/5576,5585 ----
|
|||
if (sizep) |
|||
*sizep = 0; |
|||
! return (void *)NULL;
|
|||
} |
|||
|
|||
if (sizep) |
|||
*sizep = totfds; |
|||
! ret = xmalloc (totfds * sizeof (pid_t));
|
|||
return (memcpy (ret, dev_fd_list, totfds * sizeof (pid_t))); |
|||
} |
|||
*************** |
|||
*** 5648,5655 **** |
|||
void |
|||
close_new_fifos (list, lsize) |
|||
! char *list;
|
|||
int lsize; |
|||
{ |
|||
int i; |
|||
|
|||
if (list == 0) |
|||
--- b/5654,5662 ----
|
|||
void |
|||
close_new_fifos (list, lsize) |
|||
! void *list;
|
|||
int lsize; |
|||
{ |
|||
int i; |
|||
+ pid_t *plist;
|
|||
|
|||
if (list == 0) |
|||
*************** |
|||
*** 5659,5664 **** |
|||
} |
|||
|
|||
! for (i = 0; i < lsize; i++)
|
|||
! if (list[i] == 0 && i < totfds && dev_fd_list[i])
|
|||
unlink_fifo (i); |
|||
|
|||
--- b/5666,5671 ----
|
|||
} |
|||
|
|||
! for (plist = (pid_t *)list, i = 0; i < lsize; i++)
|
|||
! if (plist[i] == 0 && i < totfds && dev_fd_list[i])
|
|||
unlink_fifo (i); |
|||
|
|||
*** bash-5.0-patched/subst.h 2018-10-21 18:46:09.000000000 -0400 |
|||
--- b/subst.h 2020-04-02 16:29:28.000000000 -0400
|
|||
*************** |
|||
*** 274,280 **** |
|||
extern void unlink_fifo __P((int)); |
|||
|
|||
! extern char *copy_fifo_list __P((int *));
|
|||
! extern void unlink_new_fifos __P((char *, int));
|
|||
! extern void close_new_fifos __P((char *, int));
|
|||
|
|||
extern void clear_fifo_list __P((void)); |
|||
--- b/274,279 ----
|
|||
extern void unlink_fifo __P((int)); |
|||
|
|||
! extern void *copy_fifo_list __P((int *));
|
|||
! extern void close_new_fifos __P((void *, int));
|
|||
|
|||
extern void clear_fifo_list __P((void)); |
|||
*** bash-5.0-patched/execute_cmd.c 2020-02-06 20:16:48.000000000 -0500 |
|||
--- b/execute_cmd.c 2020-04-02 17:00:10.000000000 -0400
|
|||
*************** |
|||
*** 565,569 **** |
|||
#if defined (PROCESS_SUBSTITUTION) |
|||
volatile int ofifo, nfifo, osize, saved_fifo; |
|||
! volatile char *ofifo_list;
|
|||
#endif |
|||
|
|||
--- b/565,569 ----
|
|||
#if defined (PROCESS_SUBSTITUTION) |
|||
volatile int ofifo, nfifo, osize, saved_fifo; |
|||
! volatile void *ofifo_list;
|
|||
#endif |
|||
|
|||
*************** |
|||
*** 751,760 **** |
|||
# endif |
|||
|
|||
! if (variable_context != 0) /* XXX - also if sourcelevel != 0? */
|
|||
{ |
|||
ofifo = num_fifos (); |
|||
ofifo_list = copy_fifo_list ((int *)&osize); |
|||
begin_unwind_frame ("internal_fifos"); |
|||
! add_unwind_protect (xfree, ofifo_list);
|
|||
saved_fifo = 1; |
|||
} |
|||
--- b/751,762 ----
|
|||
# endif |
|||
|
|||
! /* XXX - also if sourcelevel != 0? */
|
|||
! if (variable_context != 0)
|
|||
{ |
|||
ofifo = num_fifos (); |
|||
ofifo_list = copy_fifo_list ((int *)&osize); |
|||
begin_unwind_frame ("internal_fifos"); |
|||
! if (ofifo_list)
|
|||
! add_unwind_protect (xfree, ofifo_list);
|
|||
saved_fifo = 1; |
|||
} |
|||
*************** |
|||
*** 1100,1123 **** |
|||
nfifo = num_fifos (); |
|||
if (nfifo > ofifo) |
|||
! close_new_fifos ((char *)ofifo_list, osize);
|
|||
free ((void *)ofifo_list); |
|||
discard_unwind_frame ("internal_fifos"); |
|||
} |
|||
- # if defined (HAVE_DEV_FD)
|
|||
- /* Reap process substitutions at the end of loops */
|
|||
- switch (command->type)
|
|||
- {
|
|||
- case cm_while:
|
|||
- case cm_until:
|
|||
- case cm_for:
|
|||
- case cm_group:
|
|||
- # if defined (ARITH_FOR_COMMAND)
|
|||
- case cm_arith_for:
|
|||
- # endif
|
|||
- reap_procsubs ();
|
|||
- default:
|
|||
- break;
|
|||
- }
|
|||
- # endif /* HAVE_DEV_FD */
|
|||
#endif |
|||
|
|||
--- b/1102,1109 ----
|
|||
nfifo = num_fifos (); |
|||
if (nfifo > ofifo) |
|||
! close_new_fifos ((void *)ofifo_list, osize);
|
|||
free ((void *)ofifo_list); |
|||
discard_unwind_frame ("internal_fifos"); |
|||
} |
|||
#endif |
|||
|
|||
|
|||
*** bash-5.0/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 16
|
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- b/26,30 ----
|
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 17
|
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,49 @@ |
|||
From https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash55-018 |
|||
|
|||
Signed-off-by: Peter Korsgaard <peter@korsgaard.com> |
|||
|
|||
BASH PATCH REPORT |
|||
================= |
|||
|
|||
Bash-Release: 5.0 |
|||
Patch-ID: bash50-018 |
|||
|
|||
Bug-Reported-by: oguzismailuysal@gmail.com |
|||
Bug-Reference-ID: |
|||
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-10/msg00098.html |
|||
|
|||
Bug-Description: |
|||
|
|||
In certain cases, bash does not perform quoted null removal on patterns |
|||
that are used as part of word expansions such as ${parameter##pattern}, so |
|||
empty patterns are treated as non-empty. |
|||
|
|||
Patch (apply with `patch -p0'): |
|||
|
|||
*** bash-5.0.17/subst.c 2020-04-02 17:14:58.000000000 -0400 |
|||
--- b/subst.c 2020-07-09 15:28:19.000000000 -0400
|
|||
*************** |
|||
*** 5113,5116 **** |
|||
--- b/5113,5118 ----
|
|||
(int *)NULL, (int *)NULL) |
|||
: (WORD_LIST *)0; |
|||
+ if (l)
|
|||
+ word_list_remove_quoted_nulls (l);
|
|||
pat = string_list (l); |
|||
dispose_words (l); |
|||
|
|||
*** bash-5.0/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 17
|
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
|||
--- b/26,30 ----
|
|||
looks for to find the patch level (for the sccs version string). */ |
|||
|
|||
! #define PATCHLEVEL 18
|
|||
|
|||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,84 @@ |
|||
From 73ca494c60d46103f806325e6ccbe9e400238008 Mon Sep 17 00:00:00 2001 |
|||
From: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
|||
Date: Sun, 23 Feb 2020 11:41:09 +0100 |
|||
Subject: [PATCH] locale.c: fix build without wchar |
|||
|
|||
bash unconditionally builds locale.c which depends on mblen since |
|||
version 5.0 and |
|||
https://github.com/bminor/bash/commit/d233b485e83c3a784b803fb894280773f16f2deb |
|||
|
|||
This results in the following build failure if wchar is not available: |
|||
|
|||
/home/buildroot/autobuild/run/instance-0/output-1/host/bin/microblazeel-buildroot-linux-uclibc-gcc -L./builtins -L/home/buildroot/autobuild/run/instance-0/output-1/host/microblazeel-buildroot-linux-uclibc/sysroot/lib -L/home/buildroot/autobuild/run/instance-0/output-1/host/microblazeel-buildroot-linux-uclibc/sysroot/lib -L./lib/glob -L./lib/tilde -L./lib/sh -rdynamic -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -Wno-parentheses -Wno-format-security -o bash shell.o eval.o y.tab.o general.o make_cmd.o print_cmd.o dispose_cmd.o execute_cmd.o variables.o copy_cmd.o error.o expr.o flags.o jobs.o subst.o hashcmd.o hashlib.o mailcheck.o trap.o input.o unwind_prot.o pathexp.o sig.o test.o version.o alias.o array.o arrayfunc.o assoc.o braces.o bracecomp.o bashhist.o bashline.o list.o stringlib.o locale.o findcmd.o redir.o pcomplete.o pcomplib.o syntax.o xmalloc.o signames.o -lbuiltins -lglob -lsh -lreadline -lhistory -lcurses -ltilde -ldl |
|||
/home/buildroot/autobuild/run/instance-0/output-1/host/lib/gcc/microblazeel-buildroot-linux-uclibc/8.3.0/../../../../microblazeel-buildroot-linux-uclibc/bin/ld: locale.o: in function `set_default_locale': |
|||
(.text+0x260): undefined reference to `mblen' |
|||
|
|||
To fix this issue, don't use mblen if HANDLE_MULTIBYTE is not defined, |
|||
an other possibility would be to use MBLEN wrapper defined in shmbutil.h |
|||
|
|||
Fixes: |
|||
- http://autobuild.buildroot.org/results/298fb9c785e137bff432dd304eb56986e54ce3ed |
|||
|
|||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
|||
[Upstream status: https://savannah.gnu.org/support/index.php?110200] |
|||
---
|
|||
locale.c | 10 ++++++++++ |
|||
1 file changed, 10 insertions(+) |
|||
|
|||
diff --git a/locale.c b/locale.c
|
|||
index d62547f6..a64c5b4b 100644
|
|||
--- a/locale.c
|
|||
+++ b/locale.c
|
|||
@@ -86,7 +86,9 @@ set_default_locale ()
|
|||
|
|||
locale_mb_cur_max = MB_CUR_MAX; |
|||
locale_utf8locale = locale_isutf8 (default_locale); |
|||
+#if defined (HANDLE_MULTIBYTE)
|
|||
locale_shiftstates = mblen ((char *)NULL, 0); |
|||
+#endif
|
|||
} |
|||
|
|||
/* Set default values for LC_CTYPE, LC_COLLATE, LC_MESSAGES, LC_NUMERIC and |
|||
@@ -107,7 +109,9 @@ set_default_locale_vars ()
|
|||
locale_setblanks (); |
|||
locale_mb_cur_max = MB_CUR_MAX; |
|||
locale_utf8locale = locale_isutf8 (lc_all); |
|||
+# if defined (HANDLE_MULTIBYTE)
|
|||
locale_shiftstates = mblen ((char *)NULL, 0); |
|||
+# endif
|
|||
u32reset (); |
|||
} |
|||
# endif |
|||
@@ -211,7 +215,9 @@ set_locale_var (var, value)
|
|||
/* if LC_ALL == "", reset_locale_vars has already called this */ |
|||
if (*lc_all && x) |
|||
locale_utf8locale = locale_isutf8 (lc_all); |
|||
+# if defined (HANDLE_MULTIBYTE)
|
|||
locale_shiftstates = mblen ((char *)NULL, 0); |
|||
+# endif
|
|||
u32reset (); |
|||
return r; |
|||
#else |
|||
@@ -231,7 +237,9 @@ set_locale_var (var, value)
|
|||
/* if setlocale() returns NULL, the locale is not changed */ |
|||
if (x) |
|||
locale_utf8locale = locale_isutf8 (x); |
|||
+# if defined (HANDLE_MULTIBYTE)
|
|||
locale_shiftstates = mblen ((char *)NULL, 0); |
|||
+# endif
|
|||
u32reset (); |
|||
} |
|||
# endif |
|||
@@ -368,7 +376,9 @@ reset_locale_vars ()
|
|||
locale_mb_cur_max = MB_CUR_MAX; |
|||
if (x) |
|||
locale_utf8locale = locale_isutf8 (x); |
|||
+# if defined (HANDLE_MULTIBYTE)
|
|||
locale_shiftstates = mblen ((char *)NULL, 0); |
|||
+# endif
|
|||
u32reset (); |
|||
#endif |
|||
return 1; |
|||
--
|
|||
2.25.0 |
|||
|
Loading…
Reference in new issue