Signed-off-by: Marcel Denia <naoir@gmx.net>lilik-openwrt-22.03
@ -0,0 +1,74 @@ | |||||
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/builtins/set.def | |||||
+++ b/builtins/set.def | |||||
@@ -751,9 +751,11 @@ unset_builtin (list) | |||||
WORD_LIST *list; | |||||
{ | |||||
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 (); | |||||
while ((opt = internal_getopt (list, "fnv")) != -1) | |||||
@@ -761,10 +763,10 @@ unset_builtin (list) | |||||
switch (opt) | |||||
{ | |||||
case 'f': | |||||
- unset_function = 1; | |||||
+ global_unset_func = 1; | |||||
break; | |||||
case 'v': | |||||
- unset_variable = 1; | |||||
+ global_unset_var = 1; | |||||
break; | |||||
case 'n': | |||||
nameref = 1; | |||||
@@ -777,7 +779,7 @@ unset_builtin (list) | |||||
list = loptend; | |||||
- if (unset_function && unset_variable) | |||||
+ if (global_unset_func && global_unset_var) | |||||
{ | |||||
builtin_error (_("cannot simultaneously unset a function and a variable")); | |||||
return (EXECUTION_FAILURE); | |||||
@@ -795,6 +797,9 @@ unset_builtin (list) | |||||
name = list->word->word; | |||||
+ unset_function = global_unset_func; | |||||
+ unset_variable = global_unset_var; | |||||
+ | |||||
#if defined (ARRAY_VARS) | |||||
unset_array = 0; | |||||
if (!unset_function && valid_array_reference (name)) | |||||
--- a/patchlevel.h | |||||
+++ b/patchlevel.h | |||||
@@ -25,6 +25,6 @@ | |||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh | |||||
looks for to find the patch level (for the sccs version string). */ | |||||
-#define PATCHLEVEL 33 | |||||
+#define PATCHLEVEL 34 | |||||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,48 @@ | |||||
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/lib/sh/unicode.c | |||||
+++ b/lib/sh/unicode.c | |||||
@@ -78,13 +78,15 @@ stub_charset () | |||||
s = strrchr (locale, '.'); | |||||
if (s) | |||||
{ | |||||
- strcpy (charsetbuf, s+1); | |||||
+ strncpy (charsetbuf, s+1, sizeof (charsetbuf) - 1); | |||||
+ charsetbuf[sizeof (charsetbuf) - 1] = '\0'; | |||||
t = strchr (charsetbuf, '@'); | |||||
if (t) | |||||
*t = 0; | |||||
return charsetbuf; | |||||
} | |||||
- strcpy (charsetbuf, locale); | |||||
+ strncpy (charsetbuf, locale, sizeof (charsetbuf) - 1); | |||||
+ charsetbuf[sizeof (charsetbuf) - 1] = '\0'; | |||||
return charsetbuf; | |||||
} | |||||
#endif | |||||
--- a/patchlevel.h | |||||
+++ b/patchlevel.h | |||||
@@ -25,6 +25,6 @@ | |||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh | |||||
looks for to find the patch level (for the sccs version string). */ | |||||
-#define PATCHLEVEL 34 | |||||
+#define PATCHLEVEL 35 | |||||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,48 @@ | |||||
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/variables.c | |||||
+++ b/variables.c | |||||
@@ -2833,10 +2833,12 @@ bind_int_variable (lhs, rhs) | |||||
#endif | |||||
v = bind_variable (lhs, rhs, 0); | |||||
- if (v && isint) | |||||
- VSETATTR (v, att_integer); | |||||
- | |||||
- VUNSETATTR (v, att_invisible); | |||||
+ if (v) | |||||
+ { | |||||
+ if (isint) | |||||
+ VSETATTR (v, att_integer); | |||||
+ VUNSETATTR (v, att_invisible); | |||||
+ } | |||||
return (v); | |||||
} | |||||
--- a/patchlevel.h | |||||
+++ b/patchlevel.h | |||||
@@ -25,6 +25,6 @@ | |||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh | |||||
looks for to find the patch level (for the sccs version string). */ | |||||
-#define PATCHLEVEL 35 | |||||
+#define PATCHLEVEL 36 | |||||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,38 @@ | |||||
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/assoc.c | |||||
+++ b/assoc.c | |||||
@@ -436,6 +436,8 @@ assoc_to_assign (hash, quoted) | |||||
#if 1 | |||||
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; | |||||
#else | |||||
--- a/patchlevel.h | |||||
+++ b/patchlevel.h | |||||
@@ -25,6 +25,6 @@ | |||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh | |||||
looks for to find the patch level (for the sccs version string). */ | |||||
-#define PATCHLEVEL 36 | |||||
+#define PATCHLEVEL 37 | |||||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,67 @@ | |||||
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/parse.y | |||||
+++ b/parse.y | |||||
@@ -2818,11 +2818,16 @@ time_command_acceptable () | |||||
case AND_AND: | |||||
case OR_OR: | |||||
case '&': | |||||
+ case WHILE: | |||||
case DO: | |||||
+ case UNTIL: | |||||
+ case IF: | |||||
case THEN: | |||||
+ case ELIF: | |||||
case ELSE: | |||||
case '{': /* } */ | |||||
- case '(': /* ) */ | |||||
+ case '(': /* )( */ | |||||
+ case ')': /* only valid in case statement */ | |||||
case BANG: /* ! time pipeline */ | |||||
case TIME: /* time time pipeline */ | |||||
case TIMEOPT: /* time -p time pipeline */ | |||||
--- a/y.tab.c | |||||
+++ b/y.tab.c | |||||
@@ -5130,11 +5130,16 @@ time_command_acceptable () | |||||
case AND_AND: | |||||
case OR_OR: | |||||
case '&': | |||||
+ case WHILE: | |||||
case DO: | |||||
+ case UNTIL: | |||||
+ case IF: | |||||
case THEN: | |||||
+ case ELIF: | |||||
case ELSE: | |||||
case '{': /* } */ | |||||
- case '(': /* ) */ | |||||
+ case '(': /* )( */ | |||||
+ case ')': /* only valid in case statement */ | |||||
case BANG: /* ! time pipeline */ | |||||
case TIME: /* time time pipeline */ | |||||
case TIMEOPT: /* time -p time pipeline */ | |||||
--- a/patchlevel.h | |||||
+++ b/patchlevel.h | |||||
@@ -25,6 +25,6 @@ | |||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh | |||||
looks for to find the patch level (for the sccs version string). */ | |||||
-#define PATCHLEVEL 37 | |||||
+#define PATCHLEVEL 38 | |||||
#endif /* _PATCHLEVEL_H_ */ |
@ -0,0 +1,52 @@ | |||||
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/arrayfunc.c | |||||
+++ b/arrayfunc.c | |||||
@@ -404,6 +404,9 @@ assign_array_var_from_word_list (var, li | |||||
(*var->assign_func) (var, l->word->word, i, 0); | |||||
else | |||||
array_insert (a, i, l->word->word); | |||||
+ | |||||
+ VUNSETATTR (var, att_invisible); /* no longer invisible */ | |||||
+ | |||||
return var; | |||||
} | |||||
@@ -634,6 +637,10 @@ assign_array_var_from_string (var, value | |||||
if (nlist) | |||||
dispose_words (nlist); | |||||
+ | |||||
+ if (var) | |||||
+ VUNSETATTR (var, att_invisible); /* no longer invisible */ | |||||
+ | |||||
return (var); | |||||
} | |||||
--- a/patchlevel.h | |||||
+++ b/patchlevel.h | |||||
@@ -25,6 +25,6 @@ | |||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh | |||||
looks for to find the patch level (for the sccs version string). */ | |||||
-#define PATCHLEVEL 38 | |||||
+#define PATCHLEVEL 39 | |||||
#endif /* _PATCHLEVEL_H_ */ |