Compare commits
No commits in common. "c10s" and "c8" have entirely different histories.
1
.bash.metadata
Normal file
1
.bash.metadata
Normal file
@ -0,0 +1 @@
|
|||||||
|
8de012df1e4f3e91f571c3eb8ec45b43d7c747eb SOURCES/bash-4.4.tar.gz
|
@ -1 +0,0 @@
|
|||||||
1
|
|
10
.gitignore
vendored
10
.gitignore
vendored
@ -1,9 +1 @@
|
|||||||
bash-4.1.tar.gz
|
SOURCES/bash-4.4.tar.gz
|
||||||
/bash-4.2-rc2.tar.gz
|
|
||||||
/bash-4.2.tar.gz
|
|
||||||
/bash-4.3.tar.gz
|
|
||||||
/bash-4.4.tar.gz
|
|
||||||
/bash-5.0.tar.gz
|
|
||||||
/bash-5.1.tar.gz
|
|
||||||
/bash-5.2.tar.gz
|
|
||||||
/bash-5.2.tar.gz.sig
|
|
||||||
|
11
SOURCES/bash-2.02-security.patch
Normal file
11
SOURCES/bash-2.02-security.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- bash-2.02-orig/parse.y Wed Mar 25 18:16:23 1998
|
||||||
|
+++ bash-2.02/parse.y Sun Apr 19 16:46:34 1998
|
||||||
|
@@ -923,7 +923,7 @@
|
||||||
|
|
||||||
|
#if defined (READLINE)
|
||||||
|
char *current_readline_prompt = (char *)NULL;
|
||||||
|
-char *current_readline_line = (char *)NULL;
|
||||||
|
+unsigned char *current_readline_line = (unsigned char *)NULL;
|
||||||
|
int current_readline_line_index = 0;
|
||||||
|
|
||||||
|
static int
|
11
SOURCES/bash-2.03-paths.patch
Normal file
11
SOURCES/bash-2.03-paths.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- bash-3.0/config-top.h.paths 2003-08-05 15:36:12.000000000 +0100
|
||||||
|
+++ bash-3.0/config-top.h 2004-07-28 09:36:27.117205637 +0100
|
||||||
|
@@ -66,7 +66,7 @@
|
||||||
|
the Posix.2 confstr () function, or CS_PATH define are not present. */
|
||||||
|
#ifndef STANDARD_UTILS_PATH
|
||||||
|
#define STANDARD_UTILS_PATH \
|
||||||
|
- "/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/etc"
|
||||||
|
+ "/bin:/usr/bin:/usr/sbin:/sbin"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Default primary and secondary prompt strings. */
|
@ -1,8 +1,8 @@
|
|||||||
diff --git a/config.h.in b/config.h.in
|
diff --git a/config.h.in b/config.h.in
|
||||||
index ab316d4..11d1d68 100644
|
index a5ad9e7..62a6b32 100644
|
||||||
--- a/config.h.in
|
--- a/config.h.in
|
||||||
+++ b/config.h.in
|
+++ b/config.h.in
|
||||||
@@ -775,6 +775,9 @@
|
@@ -748,6 +748,9 @@
|
||||||
/* Define if you have the pselect function. */
|
/* Define if you have the pselect function. */
|
||||||
#undef HAVE_PSELECT
|
#undef HAVE_PSELECT
|
||||||
|
|
||||||
@ -12,7 +12,7 @@ index ab316d4..11d1d68 100644
|
|||||||
/* Define if you have the putenv function. */
|
/* Define if you have the putenv function. */
|
||||||
#undef HAVE_PUTENV
|
#undef HAVE_PUTENV
|
||||||
|
|
||||||
@@ -981,6 +984,9 @@
|
@@ -946,6 +949,9 @@
|
||||||
/* Define if you have the <dlfcn.h> header file. */
|
/* Define if you have the <dlfcn.h> header file. */
|
||||||
#undef HAVE_DLFCN_H
|
#undef HAVE_DLFCN_H
|
||||||
|
|
||||||
@ -23,20 +23,29 @@ index ab316d4..11d1d68 100644
|
|||||||
#undef HAVE_GRP_H
|
#undef HAVE_GRP_H
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
diff --git a/configure.ac b/configure.ac
|
||||||
index 2fe3e7d..f1b7f1b 100644
|
index ce4e9b6..eda95d6 100644
|
||||||
--- a/configure.ac
|
--- a/configure.ac
|
||||||
+++ b/configure.ac
|
+++ b/configure.ac
|
||||||
@@ -827,7 +827,7 @@ dnl checks for system calls
|
@@ -700,7 +700,7 @@ BASH_HEADER_INTTYPES
|
||||||
AC_CHECK_FUNCS(dup2 eaccess fcntl getdtablesize getentropy getgroups \
|
AC_CHECK_HEADERS(unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \
|
||||||
gethostname getpagesize getpeername getrandom getrlimit \
|
memory.h locale.h termcap.h termio.h termios.h dlfcn.h \
|
||||||
getrusage gettimeofday kill killpg lstat pselect readlink \
|
stdbool.h stddef.h stdint.h netdb.h pwd.h grp.h strings.h \
|
||||||
- select setdtablesize setitimer tcgetpgrp uname ulimit waitpid)
|
- regex.h syslog.h ulimit.h)
|
||||||
+ select setdtablesize setitimer tcgetpgrp uname ulimit waitpid pread)
|
+ regex.h syslog.h ulimit.h elf.h)
|
||||||
|
AC_CHECK_HEADERS(sys/pte.h sys/stream.h sys/select.h sys/file.h sys/ioctl.h \
|
||||||
|
sys/param.h sys/socket.h sys/stat.h \
|
||||||
|
sys/time.h sys/times.h sys/types.h sys/wait.h)
|
||||||
|
@@ -771,7 +771,7 @@ dnl checks for system calls
|
||||||
|
AC_CHECK_FUNCS(dup2 eaccess fcntl getdtablesize getgroups gethostname \
|
||||||
|
getpagesize getpeername getrlimit getrusage gettimeofday \
|
||||||
|
kill killpg lstat pselect readlink sbrk select setdtablesize \
|
||||||
|
- setitimer tcgetpgrp uname ulimit waitpid)
|
||||||
|
+ setitimer tcgetpgrp uname ulimit waitpid pread)
|
||||||
AC_REPLACE_FUNCS(rename)
|
AC_REPLACE_FUNCS(rename)
|
||||||
|
|
||||||
dnl checks for c library functions
|
dnl checks for c library functions
|
||||||
diff --git a/execute_cmd.c b/execute_cmd.c
|
diff --git a/execute_cmd.c b/execute_cmd.c
|
||||||
index d2a0dd7..d2555ad 100644
|
index 2a3df6d..b5cd405 100644
|
||||||
--- a/execute_cmd.c
|
--- a/execute_cmd.c
|
||||||
+++ b/execute_cmd.c
|
+++ b/execute_cmd.c
|
||||||
@@ -41,6 +41,10 @@
|
@@ -41,6 +41,10 @@
|
||||||
@ -50,7 +59,7 @@ index d2a0dd7..d2555ad 100644
|
|||||||
#include "posixtime.h"
|
#include "posixtime.h"
|
||||||
|
|
||||||
#if defined (HAVE_SYS_RESOURCE_H) && !defined (RLIMTYPE)
|
#if defined (HAVE_SYS_RESOURCE_H) && !defined (RLIMTYPE)
|
||||||
@@ -5832,6 +5836,14 @@ shell_execve (command, args, env)
|
@@ -5486,6 +5490,14 @@ shell_execve (command, args, env)
|
||||||
{
|
{
|
||||||
/* The file has the execute bits set, but the kernel refuses to
|
/* The file has the execute bits set, but the kernel refuses to
|
||||||
run it for some reason. See why. */
|
run it for some reason. See why. */
|
||||||
@ -65,7 +74,7 @@ index d2a0dd7..d2555ad 100644
|
|||||||
#if defined (HAVE_HASH_BANG_EXEC)
|
#if defined (HAVE_HASH_BANG_EXEC)
|
||||||
READ_SAMPLE_BUF (command, sample, sample_len);
|
READ_SAMPLE_BUF (command, sample, sample_len);
|
||||||
if (sample_len > 0)
|
if (sample_len > 0)
|
||||||
@@ -5841,6 +5853,7 @@ shell_execve (command, args, env)
|
@@ -5495,6 +5507,7 @@ shell_execve (command, args, env)
|
||||||
char *interp;
|
char *interp;
|
||||||
int ilen;
|
int ilen;
|
||||||
|
|
||||||
@ -73,11 +82,10 @@ index d2a0dd7..d2555ad 100644
|
|||||||
interp = getinterp (sample, sample_len, (int *)NULL);
|
interp = getinterp (sample, sample_len, (int *)NULL);
|
||||||
ilen = strlen (interp);
|
ilen = strlen (interp);
|
||||||
errno = i;
|
errno = i;
|
||||||
@@ -5856,7 +5869,138 @@ shell_execve (command, args, env)
|
@@ -5510,6 +5523,136 @@ shell_execve (command, args, env)
|
||||||
return (EX_NOEXEC);
|
return (EX_NOEXEC);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
- errno = i;
|
|
||||||
+#if defined (HAVE_ELF_H)
|
+#if defined (HAVE_ELF_H)
|
||||||
+ if (i == ENOENT
|
+ if (i == ENOENT
|
||||||
+ && sample_len > EI_NIDENT
|
+ && sample_len > EI_NIDENT
|
||||||
@ -208,8 +216,9 @@ index d2a0dd7..d2555ad 100644
|
|||||||
+#if defined (HAVE_HASH_BANG_EXEC) || defined (HAVE_ELF_H)
|
+#if defined (HAVE_HASH_BANG_EXEC) || defined (HAVE_ELF_H)
|
||||||
+ close (fd);
|
+ close (fd);
|
||||||
+#endif
|
+#endif
|
||||||
+
|
errno = i;
|
||||||
+ errno = i;
|
|
||||||
file_error (command);
|
file_error (command);
|
||||||
}
|
}
|
||||||
return (last_command_exit_value);
|
--
|
||||||
|
2.9.3
|
||||||
|
|
10
SOURCES/bash-2.05b-manso.patch
Normal file
10
SOURCES/bash-2.05b-manso.patch
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
--- bash-2.05b/doc/builtins.1.manso 2003-02-10 18:58:21.000000000 +0000
|
||||||
|
+++ bash-2.05b/doc/builtins.1 2003-02-10 18:58:28.000000000 +0000
|
||||||
|
@@ -10,6 +10,6 @@
|
||||||
|
ulimit, umask, unalias, unset, wait \- bash built-in commands, see \fBbash\fR(1)
|
||||||
|
.SH BASH BUILTIN COMMANDS
|
||||||
|
.nr zZ 1
|
||||||
|
-.so bash.1
|
||||||
|
+.so man1/bash.1
|
||||||
|
.SH SEE ALSO
|
||||||
|
bash(1), sh(1)
|
11
SOURCES/bash-2.05b-pgrp_sync.patch
Normal file
11
SOURCES/bash-2.05b-pgrp_sync.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- bash-2.05b/aclocal.m4.pgrp_sync 2002-06-25 14:45:43.000000000 +0100
|
||||||
|
+++ bash-2.05b/aclocal.m4 2003-01-15 18:17:35.000000000 +0000
|
||||||
|
@@ -1255,7 +1255,7 @@
|
||||||
|
wait(&status);
|
||||||
|
exit(ok ? 0 : 5);
|
||||||
|
}
|
||||||
|
-], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes,
|
||||||
|
+], bash_cv_pgrp_pipe=yes,bash_cv_pgrp_pipe=yes,
|
||||||
|
[AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no)
|
||||||
|
bash_cv_pgrp_pipe=no])
|
||||||
|
])
|
19
SOURCES/bash-2.05b-xcc.patch
Normal file
19
SOURCES/bash-2.05b-xcc.patch
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
--- bash-3.1/Makefile.in.xcc 2005-10-25 19:37:52.000000000 +0100
|
||||||
|
+++ bash-3.1/Makefile.in 2005-12-23 16:11:09.000000000 +0000
|
||||||
|
@@ -68,6 +68,7 @@
|
||||||
|
ARFLAGS = @ARFLAGS@
|
||||||
|
RANLIB = @RANLIB@
|
||||||
|
SIZE = @SIZE@
|
||||||
|
+STRIP = strip
|
||||||
|
|
||||||
|
INSTALL = @INSTALL@
|
||||||
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
|
@@ -535,7 +536,7 @@
|
||||||
|
@chmod a+rx bashbug
|
||||||
|
|
||||||
|
strip: $(Program) .made
|
||||||
|
- strip $(Program)
|
||||||
|
+ $(STRIP) $(Program)
|
||||||
|
ls -l $(Program)
|
||||||
|
-$(SIZE) $(Program)
|
||||||
|
|
@ -1,13 +1,12 @@
|
|||||||
diff --git a/config-top.h b/config-top.h
|
diff -up bash-4.0/config-top.h.ssh_source_bash bash-4.0/config-top.h
|
||||||
index e5cc147..f5e0a52 100644
|
--- bash-4.0/config-top.h.ssh_source_bash 2009-01-21 15:20:06.000000000 +0100
|
||||||
--- a/config-top.h
|
+++ bash-4.0/config-top.h 2009-01-21 15:25:46.000000000 +0100
|
||||||
+++ b/config-top.h
|
@@ -90,7 +90,7 @@
|
||||||
@@ -106,7 +106,7 @@
|
|
||||||
sshd and source the .bashrc if so (like the rshd behavior). This checks
|
sshd and source the .bashrc if so (like the rshd behavior). This checks
|
||||||
for the presence of SSH_CLIENT or SSH2_CLIENT in the initial environment,
|
for the presence of SSH_CLIENT or SSH2_CLIENT in the initial environment,
|
||||||
which can be fooled under certain not-uncommon circumstances. */
|
which can be fooled under certain not-uncommon circumstances. */
|
||||||
-/* #define SSH_SOURCE_BASHRC */
|
-/* #define SSH_SOURCE_BASHRC */
|
||||||
+#define SSH_SOURCE_BASHRC
|
+#define SSH_SOURCE_BASHRC
|
||||||
|
|
||||||
/* Define if you want the case-toggling operators (~[~]) and the
|
/* Define if you want the case-capitalizing operators (~[~]) and the
|
||||||
`capcase' variable attribute (declare -c). */
|
`capcase' variable attribute (declare -c). */
|
11
SOURCES/bash-4.1-defer-sigchld-trap.patch
Normal file
11
SOURCES/bash-4.1-defer-sigchld-trap.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
diff -pruN bash-4.1/jobs.c bash-4.1.patched/jobs.c
|
||||||
|
--- bash-4.1/jobs.c 2009-11-30 03:42:05.000000000 +0530
|
||||||
|
+++ bash-4.1.patched/jobs.c 2012-03-06 16:44:15.706595703 +0530
|
||||||
|
@@ -3037,6 +3037,7 @@ waitchld (wpid, block)
|
||||||
|
pid_t pid;
|
||||||
|
|
||||||
|
int call_set_current, last_stopped_job, job, children_exited, waitpid_flags;
|
||||||
|
+ int called_from_sighand = sigchld;
|
||||||
|
static int wcontinued = WCONTINUED; /* run-time fix for glibc problem */
|
||||||
|
|
||||||
|
call_set_current = children_exited = 0;
|
24
SOURCES/bash-4.1-examples.patch
Normal file
24
SOURCES/bash-4.1-examples.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
diff -up bash-4.1/examples/loadables/Makefile.in.examples bash-4.1/examples/loadables/Makefile.in
|
||||||
|
--- bash-4.1/examples/loadables/Makefile.in.examples 2010-06-22 16:20:02.000000000 +0200
|
||||||
|
+++ bash-4.1/examples/loadables/Makefile.in 2010-06-22 16:20:41.000000000 +0200
|
||||||
|
@@ -43,7 +43,7 @@ host_os = @host_os@
|
||||||
|
host_cpu = @host_cpu@
|
||||||
|
host_vendor = @host_vendor@
|
||||||
|
|
||||||
|
-CFLAGS = @CFLAGS@
|
||||||
|
+CFLAGS = -O2 -g
|
||||||
|
LOCAL_CFLAGS = @LOCAL_CFLAGS@
|
||||||
|
DEFS = @DEFS@
|
||||||
|
LOCAL_DEFS = @LOCAL_DEFS@
|
||||||
|
diff -up bash-4.1/examples/loadables/perl/Makefile.in.examples bash-4.1/examples/loadables/perl/Makefile.in
|
||||||
|
--- bash-4.1/examples/loadables/perl/Makefile.in.examples 2010-06-22 16:20:46.000000000 +0200
|
||||||
|
+++ bash-4.1/examples/loadables/perl/Makefile.in 2010-06-22 16:21:04.000000000 +0200
|
||||||
|
@@ -42,7 +42,7 @@ SHELL = @MAKE_SHELL@
|
||||||
|
|
||||||
|
PERL5 = perl5
|
||||||
|
|
||||||
|
-CFLAGS = @CFLAGS@
|
||||||
|
+CFLAGS = -O2 -g
|
||||||
|
|
||||||
|
#
|
||||||
|
# These values are generated for configure by ${topdir}/support/shobj-conf.
|
@ -1,8 +1,7 @@
|
|||||||
diff --git a/execute_cmd.c b/execute_cmd.c
|
diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c
|
||||||
index a988400..412128c 100644
|
--- bash-4.2/execute_cmd.c.coverity 2011-02-24 13:04:35.000000000 +0100
|
||||||
--- a/execute_cmd.c
|
+++ bash-4.2/execute_cmd.c 2011-02-24 13:49:13.000000000 +0100
|
||||||
+++ b/execute_cmd.c
|
@@ -5036,7 +5036,7 @@ shell_execve (command, args, env)
|
||||||
@@ -5760,7 +5760,7 @@ shell_execve (command, args, env)
|
|
||||||
Elf32_Ehdr ehdr;
|
Elf32_Ehdr ehdr;
|
||||||
Elf32_Phdr *phdr;
|
Elf32_Phdr *phdr;
|
||||||
Elf32_Shdr *shdr;
|
Elf32_Shdr *shdr;
|
||||||
@ -11,7 +10,7 @@ index a988400..412128c 100644
|
|||||||
|
|
||||||
/* We have to copy the data since the sample buffer
|
/* We have to copy the data since the sample buffer
|
||||||
might not be aligned correctly to be accessed as
|
might not be aligned correctly to be accessed as
|
||||||
@@ -5768,12 +5768,12 @@ shell_execve (command, args, env)
|
@@ -5044,12 +5044,12 @@ shell_execve (command, args, env)
|
||||||
memcpy (&ehdr, sample, sizeof (Elf32_Ehdr));
|
memcpy (&ehdr, sample, sizeof (Elf32_Ehdr));
|
||||||
|
|
||||||
nshdr = ehdr.e_shnum;
|
nshdr = ehdr.e_shnum;
|
||||||
@ -26,7 +25,7 @@ index a988400..412128c 100644
|
|||||||
ehdr.e_shoff);
|
ehdr.e_shoff);
|
||||||
#else
|
#else
|
||||||
if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1)
|
if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1)
|
||||||
@@ -5815,11 +5815,11 @@ shell_execve (command, args, env)
|
@@ -5091,11 +5091,11 @@ shell_execve (command, args, env)
|
||||||
}
|
}
|
||||||
|
|
||||||
nphdr = ehdr.e_phnum;
|
nphdr = ehdr.e_phnum;
|
||||||
@ -40,7 +39,7 @@ index a988400..412128c 100644
|
|||||||
ehdr.e_phoff);
|
ehdr.e_phoff);
|
||||||
#else
|
#else
|
||||||
if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1)
|
if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1)
|
||||||
@@ -5844,7 +5844,7 @@ shell_execve (command, args, env)
|
@@ -5120,7 +5120,7 @@ shell_execve (command, args, env)
|
||||||
Elf64_Ehdr ehdr;
|
Elf64_Ehdr ehdr;
|
||||||
Elf64_Phdr *phdr;
|
Elf64_Phdr *phdr;
|
||||||
Elf64_Shdr *shdr;
|
Elf64_Shdr *shdr;
|
||||||
@ -49,7 +48,7 @@ index a988400..412128c 100644
|
|||||||
|
|
||||||
/* We have to copy the data since the sample buffer
|
/* We have to copy the data since the sample buffer
|
||||||
might not be aligned correctly to be accessed as
|
might not be aligned correctly to be accessed as
|
||||||
@@ -5852,11 +5852,11 @@ shell_execve (command, args, env)
|
@@ -5128,11 +5128,11 @@ shell_execve (command, args, env)
|
||||||
memcpy (&ehdr, sample, sizeof (Elf64_Ehdr));
|
memcpy (&ehdr, sample, sizeof (Elf64_Ehdr));
|
||||||
|
|
||||||
nshdr = ehdr.e_shnum;
|
nshdr = ehdr.e_shnum;
|
||||||
@ -63,7 +62,7 @@ index a988400..412128c 100644
|
|||||||
ehdr.e_shoff);
|
ehdr.e_shoff);
|
||||||
#else
|
#else
|
||||||
if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1)
|
if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1)
|
||||||
@@ -5898,11 +5898,11 @@ shell_execve (command, args, env)
|
@@ -5174,11 +5174,11 @@ shell_execve (command, args, env)
|
||||||
}
|
}
|
||||||
|
|
||||||
nphdr = ehdr.e_phnum;
|
nphdr = ehdr.e_phnum;
|
||||||
@ -77,7 +76,7 @@ index a988400..412128c 100644
|
|||||||
ehdr.e_phoff);
|
ehdr.e_phoff);
|
||||||
#else
|
#else
|
||||||
if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1)
|
if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1)
|
||||||
@@ -5924,8 +5924,8 @@ shell_execve (command, args, env)
|
@@ -5200,8 +5200,8 @@ shell_execve (command, args, env)
|
||||||
|
|
||||||
if (offset != -1)
|
if (offset != -1)
|
||||||
{
|
{
|
||||||
@ -88,7 +87,7 @@ index a988400..412128c 100644
|
|||||||
char *interp = NULL;
|
char *interp = NULL;
|
||||||
|
|
||||||
do
|
do
|
||||||
@@ -5974,7 +5974,8 @@ shell_execve (command, args, env)
|
@@ -5250,7 +5250,8 @@ shell_execve (command, args, env)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined (HAVE_HASH_BANG_EXEC) || defined (HAVE_ELF_H)
|
#if defined (HAVE_HASH_BANG_EXEC) || defined (HAVE_ELF_H)
|
||||||
@ -96,8 +95,5 @@ index a988400..412128c 100644
|
|||||||
+ if (fd >= 0)
|
+ if (fd >= 0)
|
||||||
+ close (fd);
|
+ close (fd);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
errno = i;
|
errno = i;
|
||||||
--
|
file_error (command);
|
||||||
2.17.2
|
|
||||||
|
|
12
SOURCES/bash-4.3-memleak-lc_all.patch
Normal file
12
SOURCES/bash-4.3-memleak-lc_all.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -up bash-4.3/locale.c.old bash-4.3/locale.c
|
||||||
|
--- bash-4.3/locale.c.old 2015-07-15 11:55:00.002857301 +0200
|
||||||
|
+++ bash-4.3/locale.c 2015-07-15 11:48:36.698086257 +0200
|
||||||
|
@@ -77,8 +77,6 @@ set_default_locale ()
|
||||||
|
{
|
||||||
|
#if defined (HAVE_SETLOCALE)
|
||||||
|
default_locale = setlocale (LC_ALL, "");
|
||||||
|
- if (default_locale)
|
||||||
|
- default_locale = savestring (default_locale);
|
||||||
|
#endif /* HAVE_SETLOCALE */
|
||||||
|
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||||
|
textdomain (PACKAGE);
|
@ -1,28 +1,29 @@
|
|||||||
diff --git a/parse.y b/parse.y
|
diff --git a/parse.y b/parse.y
|
||||||
|
index 30425a5..85f1c4f 100644
|
||||||
--- a/parse.y
|
--- a/parse.y
|
||||||
+++ b/parse.y
|
+++ b/parse.y
|
||||||
@@ -4255,7 +4255,8 @@ xparse_dolparen (base, string, indp, flags)
|
@@ -4228,6 +4228,8 @@ xparse_dolparen (base, string, indp, flags)
|
||||||
|
|
||||||
save_parser_state (&ps);
|
save_parser_state (&ps);
|
||||||
save_input_line_state (&ls);
|
save_input_line_state (&ls);
|
||||||
-
|
orig_eof_token = shell_eof_token;
|
||||||
+ /* avoid echoing every substitution again */
|
+ /* avoid echoing every substitution again */
|
||||||
+ echo_input_at_read = 0;
|
+ echo_input_at_read = 0;
|
||||||
#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
|
|
||||||
pushed_string_list = (STRING_SAVER *)NULL;
|
/*(*/
|
||||||
#endif
|
parser_state |= PST_CMDSUBST|PST_EOFTOKEN; /* allow instant ')' */ /*(*/
|
||||||
diff --git a/subst.c b/subst.c
|
diff --git a/subst.c b/subst.c
|
||||||
|
index f1a4df1..a93a4ce 100644
|
||||||
--- a/subst.c
|
--- a/subst.c
|
||||||
+++ b/subst.c
|
+++ b/subst.c
|
||||||
@@ -10222,6 +10222,7 @@ param_expand (string, sindex, quoted, expanded_something,
|
@@ -8513,6 +8513,7 @@ param_expand (string, sindex, quoted, expanded_something,
|
||||||
WORD_LIST *list, *l;
|
WORD_LIST *list;
|
||||||
WORD_DESC *tdesc, *ret;
|
WORD_DESC *tdesc, *ret;
|
||||||
int tflag, nullarg;
|
int tflag;
|
||||||
+ int old_echo_input;
|
+ int old_echo_input;
|
||||||
|
|
||||||
/*itrace("param_expand: `%s' pflags = %d", string+*sindex, pflags);*/
|
/*itrace("param_expand: `%s' pflags = %d", string+*sindex, pflags);*/
|
||||||
zindex = *sindex;
|
zindex = *sindex;
|
||||||
@@ -10614,6 +10615,9 @@ arithsub:
|
@@ -8831,6 +8832,9 @@ arithsub:
|
||||||
}
|
}
|
||||||
|
|
||||||
comsub:
|
comsub:
|
||||||
@ -32,7 +33,7 @@ diff --git a/subst.c b/subst.c
|
|||||||
if (pflags & PF_NOCOMSUB)
|
if (pflags & PF_NOCOMSUB)
|
||||||
/* we need zindex+1 because string[zindex] == RPAREN */
|
/* we need zindex+1 because string[zindex] == RPAREN */
|
||||||
temp1 = substring (string, *sindex, zindex+1);
|
temp1 = substring (string, *sindex, zindex+1);
|
||||||
@@ -10626,6 +10630,7 @@ comsub:
|
@@ -8843,6 +8847,7 @@ comsub:
|
||||||
}
|
}
|
||||||
FREE (temp);
|
FREE (temp);
|
||||||
temp = temp1;
|
temp = temp1;
|
||||||
@ -40,3 +41,6 @@ diff --git a/subst.c b/subst.c
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
/* Do POSIX.2d9-style arithmetic substitution. This will probably go
|
/* Do POSIX.2d9-style arithmetic substitution. This will probably go
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
31
SOURCES/bash-4.4-assignment-error.patch
Normal file
31
SOURCES/bash-4.4-assignment-error.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
diff --git a/execute_cmd.h b/execute_cmd.h
|
||||||
|
--- a/execute_cmd.h
|
||||||
|
+++ b/execute_cmd.h
|
||||||
|
@@ -37,6 +37,9 @@ struct func_array_state
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Variables delared in execute_cmd.c, used by many other files */
|
||||||
|
+extern int executing_command_builtin;
|
||||||
|
+
|
||||||
|
extern struct fd_bitmap *new_fd_bitmap __P((int));
|
||||||
|
extern void dispose_fd_bitmap __P((struct fd_bitmap *));
|
||||||
|
extern void close_fd_bitmap __P((struct fd_bitmap *));
|
||||||
|
diff --git a/subst.c b/subst.c
|
||||||
|
--- a/subst.c
|
||||||
|
+++ b/subst.c
|
||||||
|
@@ -10676,11 +10676,12 @@ expand_word_list_internal (list, eflags)
|
||||||
|
tint = do_word_assignment (temp_list->word, 0);
|
||||||
|
this_command_name = savecmd;
|
||||||
|
/* Variable assignment errors in non-interactive shells
|
||||||
|
- running in Posix.2 mode cause the shell to exit. */
|
||||||
|
+ running in Posix.2 mode cause the shell to exit, unless
|
||||||
|
+ they are being run by the `command' builtin. */
|
||||||
|
if (tint == 0)
|
||||||
|
{
|
||||||
|
last_command_exit_value = EXECUTION_FAILURE;
|
||||||
|
- if (interactive_shell == 0 && posixly_correct)
|
||||||
|
+ if (interactive_shell == 0 && posixly_correct && executing_command_builtin == 0)
|
||||||
|
exp_jump_to_top_level (FORCE_EOF);
|
||||||
|
else
|
||||||
|
exp_jump_to_top_level (DISCARD);
|
18
SOURCES/bash-4.4-case-in-command-subst.patch
Normal file
18
SOURCES/bash-4.4-case-in-command-subst.patch
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
diff --git a/parse.y b/parse.y
|
||||||
|
--- a/parse.y
|
||||||
|
+++ b/parse.y
|
||||||
|
@@ -4011,11 +4011,13 @@ eof_error:
|
||||||
|
tflags |= LEX_RESWDOK;
|
||||||
|
lex_rwlen = 0;
|
||||||
|
}
|
||||||
|
- else
|
||||||
|
+ else if (shellmeta (ch) == 0)
|
||||||
|
{
|
||||||
|
tflags &= ~LEX_RESWDOK;
|
||||||
|
/*itrace("parse_comsub:%d: found `%.4s', lex_reswdok -> 0", line_number, ret+retind-4);*/
|
||||||
|
}
|
||||||
|
+ else /* can't be in a reserved word any more */
|
||||||
|
+ lex_rwlen = 0;
|
||||||
|
}
|
||||||
|
else if MBTEST((tflags & LEX_CKCOMMENT) && ch == '#' && (lex_rwlen == 0 || ((tflags & LEX_INWORD) && lex_wlen == 0)))
|
||||||
|
; /* don't modify LEX_RESWDOK if we're starting a comment */
|
203
SOURCES/bash-4.4-coverity.patch
Normal file
203
SOURCES/bash-4.4-coverity.patch
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
diff --git a/builtins/fc.def b/builtins/fc.def
|
||||||
|
index fe16471..98c53db 100644
|
||||||
|
--- a/builtins/fc.def
|
||||||
|
+++ b/builtins/fc.def
|
||||||
|
@@ -423,6 +423,7 @@ fc_builtin (list)
|
||||||
|
{
|
||||||
|
sh_wrerror ();
|
||||||
|
fclose (stream);
|
||||||
|
+ FREE (fn);
|
||||||
|
return (EXECUTION_FAILURE);
|
||||||
|
}
|
||||||
|
fclose (stream);
|
||||||
|
diff --git a/execute_cmd.c b/execute_cmd.c
|
||||||
|
index 63a332a..15b5e19 100644
|
||||||
|
--- a/execute_cmd.c
|
||||||
|
+++ b/execute_cmd.c
|
||||||
|
@@ -2196,8 +2196,10 @@ coproc_setvars (cp)
|
||||||
|
if (v == 0)
|
||||||
|
{
|
||||||
|
v = find_variable_nameref_for_create (cp->c_name, 1);
|
||||||
|
- if (v == INVALID_NAMEREF_VALUE)
|
||||||
|
- return;
|
||||||
|
+ if (v == INVALID_NAMEREF_VALUE) {
|
||||||
|
+ free (namevar);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
if (v && nameref_p (v))
|
||||||
|
{
|
||||||
|
free (cp->c_name);
|
||||||
|
@@ -2210,6 +2212,7 @@ coproc_setvars (cp)
|
||||||
|
{
|
||||||
|
if (readonly_p (v))
|
||||||
|
err_readonly (cp->c_name);
|
||||||
|
+ free (namevar);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (v == 0)
|
||||||
|
@@ -5528,7 +5531,6 @@ shell_execve (command, args, env)
|
||||||
|
char *interp;
|
||||||
|
int ilen;
|
||||||
|
|
||||||
|
- close (fd);
|
||||||
|
interp = getinterp (sample, sample_len, (int *)NULL);
|
||||||
|
ilen = strlen (interp);
|
||||||
|
errno = i;
|
||||||
|
diff --git a/expr.c b/expr.c
|
||||||
|
index 172964a..5dc57c0 100644
|
||||||
|
--- a/expr.c
|
||||||
|
+++ b/expr.c
|
||||||
|
@@ -207,7 +207,8 @@ static intmax_t exp5 __P((void));
|
||||||
|
static intmax_t exp4 __P((void));
|
||||||
|
static intmax_t expshift __P((void));
|
||||||
|
static intmax_t exp3 __P((void));
|
||||||
|
-static intmax_t exp2 __P((void));
|
||||||
|
+/* Avoid name clash with standard exp2 */
|
||||||
|
+static intmax_t bash_exp2 __P((void));
|
||||||
|
static intmax_t exppower __P((void));
|
||||||
|
static intmax_t exp1 __P((void));
|
||||||
|
static intmax_t exp0 __P((void));
|
||||||
|
@@ -809,14 +810,14 @@ exp3 ()
|
||||||
|
{
|
||||||
|
register intmax_t val1, val2;
|
||||||
|
|
||||||
|
- val1 = exp2 ();
|
||||||
|
+ val1 = bash_exp2 ();
|
||||||
|
|
||||||
|
while ((curtok == PLUS) || (curtok == MINUS))
|
||||||
|
{
|
||||||
|
int op = curtok;
|
||||||
|
|
||||||
|
readtok ();
|
||||||
|
- val2 = exp2 ();
|
||||||
|
+ val2 = bash_exp2 ();
|
||||||
|
|
||||||
|
if (op == PLUS)
|
||||||
|
val1 += val2;
|
||||||
|
@@ -828,7 +829,7 @@ exp3 ()
|
||||||
|
}
|
||||||
|
|
||||||
|
static intmax_t
|
||||||
|
-exp2 ()
|
||||||
|
+bash_exp2 ()
|
||||||
|
{
|
||||||
|
register intmax_t val1, val2;
|
||||||
|
#if defined (HAVE_IMAXDIV)
|
||||||
|
diff --git a/lib/glob/glob.c b/lib/glob/glob.c
|
||||||
|
index 7f6eafe..c018e29 100644
|
||||||
|
--- a/lib/glob/glob.c
|
||||||
|
+++ b/lib/glob/glob.c
|
||||||
|
@@ -576,7 +576,7 @@ glob_vector (pat, dir, flags)
|
||||||
|
register char *nextname, *npat, *subdir;
|
||||||
|
unsigned int count;
|
||||||
|
int lose, skip, ndirs, isdir, sdlen, add_current, patlen;
|
||||||
|
- register char **name_vector;
|
||||||
|
+ register char **name_vector = NULL;
|
||||||
|
register unsigned int i;
|
||||||
|
int mflags; /* Flags passed to strmatch (). */
|
||||||
|
int pflags; /* flags passed to sh_makepath () */
|
||||||
|
@@ -894,7 +894,7 @@ glob_vector (pat, dir, flags)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Don't call QUIT; here; let higher layers deal with it. */
|
||||||
|
-
|
||||||
|
+ FREE (name_vector);
|
||||||
|
return ((char **)NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/lib/sh/pathcanon.c b/lib/sh/pathcanon.c
|
||||||
|
index f19bd55..2a565d6 100644
|
||||||
|
--- a/lib/sh/pathcanon.c
|
||||||
|
+++ b/lib/sh/pathcanon.c
|
||||||
|
@@ -227,7 +227,7 @@ sh_canonpath (path, flags)
|
||||||
|
if (result[2] == '\0') /* short-circuit for bare `//' */
|
||||||
|
result[1] = '\0';
|
||||||
|
else
|
||||||
|
- strcpy (result, result + 1);
|
||||||
|
+ memmove(result, result + 1, strlen(result + 1) + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (result);
|
||||||
|
diff --git a/lib/sh/pathphys.c b/lib/sh/pathphys.c
|
||||||
|
index 26016b7..b64c4cd 100644
|
||||||
|
--- a/lib/sh/pathphys.c
|
||||||
|
+++ b/lib/sh/pathphys.c
|
||||||
|
@@ -245,7 +245,7 @@ error:
|
||||||
|
if (result[2] == '\0') /* short-circuit for bare `//' */
|
||||||
|
result[1] = '\0';
|
||||||
|
else
|
||||||
|
- strcpy (result, result + 1);
|
||||||
|
+ memmove(result, result + 1, strlen(result + 1) + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (result);
|
||||||
|
diff --git a/shell.c b/shell.c
|
||||||
|
index b43de50..4aae182 100644
|
||||||
|
--- a/shell.c
|
||||||
|
+++ b/shell.c
|
||||||
|
@@ -1948,8 +1948,10 @@ show_shell_usage (fp, extra)
|
||||||
|
fputs (_("\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"), fp);
|
||||||
|
|
||||||
|
for (i = 0, set_opts = 0; shell_builtins[i].name; i++)
|
||||||
|
- if (STREQ (shell_builtins[i].name, "set"))
|
||||||
|
+ if (STREQ (shell_builtins[i].name, "set")) {
|
||||||
|
set_opts = savestring (shell_builtins[i].short_doc);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
if (set_opts)
|
||||||
|
{
|
||||||
|
s = strchr (set_opts, '[');
|
||||||
|
diff --git a/subst.c b/subst.c
|
||||||
|
index 5f3e41e..7574617 100644
|
||||||
|
--- a/subst.c
|
||||||
|
+++ b/subst.c
|
||||||
|
@@ -5182,8 +5182,11 @@ parameter_list_transform (xc, itype, quoted)
|
||||||
|
list = list_rest_of_args ();
|
||||||
|
if (list == 0)
|
||||||
|
return ((char *)NULL);
|
||||||
|
- if (xc == 'A')
|
||||||
|
- return (pos_params_assignment (list, itype, quoted));
|
||||||
|
+ if (xc == 'A') {
|
||||||
|
+ ret = pos_params_assignment (list, itype, quoted);
|
||||||
|
+ dispose_words (list);
|
||||||
|
+ return (ret);
|
||||||
|
+ }
|
||||||
|
ret = list_transform (xc, (SHELL_VAR *)0, list, itype, quoted);
|
||||||
|
dispose_words (list);
|
||||||
|
return (ret);
|
||||||
|
@@ -6813,6 +6816,7 @@ parameter_brace_expand_rhs (name, value, c, quoted, pflags, qdollaratp, hasdolla
|
||||||
|
{
|
||||||
|
report_error (_("%s: invalid indirect expansion"), name);
|
||||||
|
free (vname);
|
||||||
|
+ free (t1);
|
||||||
|
dispose_word (w);
|
||||||
|
return &expand_wdesc_error;
|
||||||
|
}
|
||||||
|
@@ -6820,6 +6824,7 @@ parameter_brace_expand_rhs (name, value, c, quoted, pflags, qdollaratp, hasdolla
|
||||||
|
{
|
||||||
|
report_error (_("%s: invalid variable name"), vname);
|
||||||
|
free (vname);
|
||||||
|
+ free (t1);
|
||||||
|
dispose_word (w);
|
||||||
|
return &expand_wdesc_error;
|
||||||
|
}
|
||||||
|
diff --git a/support/man2html.c b/support/man2html.c
|
||||||
|
index 6ba5061..1d9e376 100644
|
||||||
|
--- a/support/man2html.c
|
||||||
|
+++ b/support/man2html.c
|
||||||
|
@@ -522,6 +522,7 @@ read_man_page(char *filename)
|
||||||
|
man_buf[buf_size] = '\n';
|
||||||
|
man_buf[buf_size + 1] = man_buf[buf_size + 2] = '\0';
|
||||||
|
} else {
|
||||||
|
+ free (man_buf);
|
||||||
|
man_buf = NULL;
|
||||||
|
}
|
||||||
|
fclose(man_stream);
|
||||||
|
@@ -2562,7 +2563,6 @@ scan_request(char *c)
|
||||||
|
h = name;
|
||||||
|
if (stat(h, &stbuf) != -1)
|
||||||
|
l = stbuf.st_size;
|
||||||
|
- buf = stralloc(l + 4);
|
||||||
|
#if NOCGI
|
||||||
|
if (!out_length) {
|
||||||
|
char *t, *s;
|
23
SOURCES/bash-4.4-fix-buffered_getchar-crash.patch
Normal file
23
SOURCES/bash-4.4-fix-buffered_getchar-crash.patch
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
diff -up bash-4.4/input.c.orig bash-4.4/input.c
|
||||||
|
--- bash-4.4/input.c.orig 2022-03-10 10:50:40.046490589 -0300
|
||||||
|
+++ bash-4.4/input.c 2022-03-10 10:51:48.659491601 -0300
|
||||||
|
@@ -530,7 +530,7 @@ bufstream_ungetc(c, bp)
|
||||||
|
int c;
|
||||||
|
BUFFERED_STREAM *bp;
|
||||||
|
{
|
||||||
|
- if (c == EOF || bp->b_inputp == 0)
|
||||||
|
+ if (c == EOF || bp == 0 || bp->b_inputp == 0)
|
||||||
|
return (EOF);
|
||||||
|
|
||||||
|
bp->b_buffer[--bp->b_inputp] = c;
|
||||||
|
@@ -561,6 +561,10 @@ buffered_getchar ()
|
||||||
|
{
|
||||||
|
CHECK_TERMSIG;
|
||||||
|
|
||||||
|
+ if (bash_input.location.buffered_fd < 0 ||
|
||||||
|
+ buffers[bash_input.location.buffered_fd] == 0)
|
||||||
|
+ return EOF;
|
||||||
|
+
|
||||||
|
#if !defined (DJGPP)
|
||||||
|
return (bufstream_getc (buffers[bash_input.location.buffered_fd]));
|
||||||
|
#else
|
49
SOURCES/bash-4.4-patch-1.patch
Normal file
49
SOURCES/bash-4.4-patch-1.patch
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
From 8ddc8d6e3a3d85eec6d4ba9b9ed2bc36bce56716 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Mon, 14 Nov 2016 14:26:51 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 1
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/readline/history.c | 6 +++++-
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 6 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/readline/history.c b/lib/readline/history.c
|
||||||
|
index 3b8dbc5..9ff25a7 100644
|
||||||
|
--- a/lib/readline/history.c
|
||||||
|
+++ b/lib/readline/history.c
|
||||||
|
@@ -57,6 +57,8 @@ extern int errno;
|
||||||
|
/* How big to make the_history when we first allocate it. */
|
||||||
|
#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
|
||||||
|
|
||||||
|
@@ -307,7 +309,9 @@ add_history (string)
|
||||||
|
if (history_size == 0)
|
||||||
|
{
|
||||||
|
if (history_stifled && history_max_entries > 0)
|
||||||
|
- history_size = history_max_entries + 2;
|
||||||
|
+ history_size = (history_max_entries > MAX_HISTORY_INITIAL_SIZE)
|
||||||
|
+ ? MAX_HISTORY_INITIAL_SIZE
|
||||||
|
+ : history_max_entries + 2;
|
||||||
|
else
|
||||||
|
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
|
||||||
|
the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *));
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 1cd7c96..40db1a3 100644
|
||||||
|
--- 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 0
|
||||||
|
+#define PATCHLEVEL 1
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
39
SOURCES/bash-4.4-patch-10.patch
Normal file
39
SOURCES/bash-4.4-patch-10.patch
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
From 5b9762d6f0cd36ff1b88bde22efa30ad0ed27ec6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Fri, 20 Jan 2017 15:38:38 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 10
|
||||||
|
|
||||||
|
---
|
||||||
|
builtins/read.def | 3 ++-
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/builtins/read.def b/builtins/read.def
|
||||||
|
index 48fda33..33821f3 100644
|
||||||
|
--- a/builtins/read.def
|
||||||
|
+++ b/builtins/read.def
|
||||||
|
@@ -181,7 +181,8 @@ read_builtin (list)
|
||||||
|
WORD_LIST *list;
|
||||||
|
{
|
||||||
|
register char *varname;
|
||||||
|
- int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
|
||||||
|
+ 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;
|
||||||
|
unsigned int tmsec, tmusec;
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 02f1d60..8002af7 100644
|
||||||
|
--- 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 9
|
||||||
|
+#define PATCHLEVEL 10
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
39
SOURCES/bash-4.4-patch-11.patch
Normal file
39
SOURCES/bash-4.4-patch-11.patch
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
From 76bb456d8fcd870cd31b7bf9d90798cd97cee2ab Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Fri, 20 Jan 2017 15:38:49 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 11
|
||||||
|
|
||||||
|
---
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
sig.c | 3 ++-
|
||||||
|
2 files changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 8002af7..772676c 100644
|
||||||
|
--- 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 10
|
||||||
|
+#define PATCHLEVEL 11
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
diff --git a/sig.c b/sig.c
|
||||||
|
index ad01631..e5bb739 100644
|
||||||
|
--- a/sig.c
|
||||||
|
+++ b/sig.c
|
||||||
|
@@ -585,7 +585,8 @@ termsig_handler (sig)
|
||||||
|
#if defined (JOB_CONTROL)
|
||||||
|
if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB))))
|
||||||
|
hangup_all_jobs ();
|
||||||
|
- end_job_control ();
|
||||||
|
+ if ((subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)) == 0)
|
||||||
|
+ end_job_control ();
|
||||||
|
#endif /* JOB_CONTROL */
|
||||||
|
|
||||||
|
#if defined (PROCESS_SUBSTITUTION)
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
119
SOURCES/bash-4.4-patch-12.patch
Normal file
119
SOURCES/bash-4.4-patch-12.patch
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
From bc007799f0e1362100375bb95d952d28de4c62fb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Fri, 27 Jan 2017 11:25:44 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 12
|
||||||
|
|
||||||
|
---
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
subst.c | 32 ++++++++++++++++++++------------
|
||||||
|
2 files changed, 21 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 772676c..93dbe0d 100644
|
||||||
|
--- 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 11
|
||||||
|
+#define PATCHLEVEL 12
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
diff --git a/subst.c b/subst.c
|
||||||
|
index 027a13e..dbf0157 100644
|
||||||
|
--- a/subst.c
|
||||||
|
+++ b/subst.c
|
||||||
|
@@ -2825,11 +2825,15 @@ list_string (string, separators, quoted)
|
||||||
|
|
||||||
|
/* 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.
|
||||||
|
+ 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)
|
||||||
|
char **stringp, *separators, **endptr;
|
||||||
|
@@ -2837,6 +2841,7 @@ get_word_from_string (stringp, separators, endptr)
|
||||||
|
register char *s;
|
||||||
|
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;
|
||||||
|
|
||||||
|
if (!stringp || !*stringp || !**stringp)
|
||||||
|
@@ -2846,20 +2851,23 @@ get_word_from_string (stringp, separators, endptr)
|
||||||
|
separators[1] == '\t' &&
|
||||||
|
separators[2] == '\n' &&
|
||||||
|
separators[3] == '\0';
|
||||||
|
- for (xflags = 0, s = ifs_value; s && *s; s++)
|
||||||
|
+ 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 */
|
||||||
|
}
|
||||||
|
|
||||||
|
s = *stringp;
|
||||||
|
slen = 0;
|
||||||
|
|
||||||
|
/* Remove sequences of whitespace at the beginning of STRING, as
|
||||||
|
- long as those characters appear in IFS. */
|
||||||
|
- if (sh_style_split || !separators || !*separators)
|
||||||
|
+ 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) && isifs (*s); s++);
|
||||||
|
+ for (; *s && spctabnl (*s) && islocalsep (*s); s++);
|
||||||
|
|
||||||
|
/* If the string is nothing but whitespace, update it and return. */
|
||||||
|
if (!*s)
|
||||||
|
@@ -2878,9 +2886,9 @@ get_word_from_string (stringp, separators, endptr)
|
||||||
|
|
||||||
|
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;
|
||||||
|
+ /* 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);
|
||||||
|
|
||||||
|
/* Set ENDPTR to the first character after the end of the word. */
|
||||||
|
@@ -2899,19 +2907,19 @@ get_word_from_string (stringp, separators, endptr)
|
||||||
|
|
||||||
|
/* 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]))
|
||||||
|
+ while (s[sindex] && spctabnl (s[sindex]) && islocalsep (s[sindex]))
|
||||||
|
sindex++;
|
||||||
|
|
||||||
|
/* If the first separator was IFS whitespace and the current character is
|
||||||
|
a non-whitespace IFS character, it should be part of the current field
|
||||||
|
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]))
|
||||||
|
+ 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]) && isifs (s[sindex]))
|
||||||
|
+ while (s[sindex] && spctabnl (s[sindex]) && islocalsep(s[sindex]))
|
||||||
|
sindex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
38
SOURCES/bash-4.4-patch-13.patch
Normal file
38
SOURCES/bash-4.4-patch-13.patch
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
From 1aef9c7b55dcef4af239caf93e01419e1c8e04ad Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Mon, 29 Jan 2018 16:03:33 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 13
|
||||||
|
|
||||||
|
---
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
redir.c | 2 ++
|
||||||
|
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 93dbe0db..779671cd 100644
|
||||||
|
--- 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 12
|
||||||
|
+#define PATCHLEVEL 13
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
diff --git a/redir.c b/redir.c
|
||||||
|
index 25488eaf..1858b0b0 100644
|
||||||
|
--- a/redir.c
|
||||||
|
+++ b/redir.c
|
||||||
|
@@ -469,6 +469,8 @@ here_document_to_fd (redirectee, ri)
|
||||||
|
return (fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ SET_CLOSE_ON_EXEC (fd);
|
||||||
|
+
|
||||||
|
errno = r = 0; /* XXX */
|
||||||
|
/* write_here_document returns 0 on success, errno on failure. */
|
||||||
|
if (redirectee->word)
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
85
SOURCES/bash-4.4-patch-14.patch
Normal file
85
SOURCES/bash-4.4-patch-14.patch
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
From 2fb21d75bfddd724b0e45d4a51455a166467e496 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Mon, 29 Jan 2018 16:03:47 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 14
|
||||||
|
|
||||||
|
---
|
||||||
|
execute_cmd.c | 19 ++++++++++++++++---
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 17 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/execute_cmd.c b/execute_cmd.c
|
||||||
|
index 2a3df6d6..76a80766 100644
|
||||||
|
--- a/execute_cmd.c
|
||||||
|
+++ b/execute_cmd.c
|
||||||
|
@@ -726,6 +726,8 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
|
||||||
|
{
|
||||||
|
ofifo = num_fifos ();
|
||||||
|
ofifo_list = copy_fifo_list ((int *)&osize);
|
||||||
|
+ begin_unwind_frame ("internal_fifos");
|
||||||
|
+ add_unwind_protect (xfree, ofifo_list);
|
||||||
|
saved_fifo = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
@@ -741,7 +743,10 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
|
||||||
|
dispose_exec_redirects ();
|
||||||
|
#if defined (PROCESS_SUBSTITUTION)
|
||||||
|
if (saved_fifo)
|
||||||
|
- free ((void *)ofifo_list);
|
||||||
|
+ {
|
||||||
|
+ free ((void *)ofifo_list);
|
||||||
|
+ discard_unwind_frame ("internal_fifos");
|
||||||
|
+ }
|
||||||
|
#endif
|
||||||
|
return (last_command_exit_value = EXECUTION_FAILURE);
|
||||||
|
}
|
||||||
|
@@ -1060,6 +1065,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
|
||||||
|
if (nfifo > ofifo)
|
||||||
|
close_new_fifos ((char *)ofifo_list, osize);
|
||||||
|
free ((void *)ofifo_list);
|
||||||
|
+ discard_unwind_frame ("internal_fifos");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@@ -4977,9 +4983,14 @@ execute_builtin_or_function (words, builtin, var, redirects,
|
||||||
|
char *ofifo_list;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#if defined (PROCESS_SUBSTITUTION)
|
||||||
|
+#if defined (PROCESS_SUBSTITUTION)
|
||||||
|
+ begin_unwind_frame ("saved_fifos");
|
||||||
|
+ /* If we return, we longjmp and don't get a chance to restore the old
|
||||||
|
+ fifo list, so we add an unwind protect to free it */
|
||||||
|
ofifo = num_fifos ();
|
||||||
|
ofifo_list = copy_fifo_list (&osize);
|
||||||
|
+ if (ofifo_list)
|
||||||
|
+ add_unwind_protect (xfree, ofifo_list);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (do_redirections (redirects, RX_ACTIVE|RX_UNDOABLE) != 0)
|
||||||
|
@@ -5063,7 +5074,9 @@ execute_builtin_or_function (words, builtin, var, redirects,
|
||||||
|
nfifo = num_fifos ();
|
||||||
|
if (nfifo > ofifo)
|
||||||
|
close_new_fifos (ofifo_list, osize);
|
||||||
|
- free (ofifo_list);
|
||||||
|
+ if (ofifo_list)
|
||||||
|
+ free (ofifo_list);
|
||||||
|
+ discard_unwind_frame ("saved_fifos");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return (result);
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 779671cd..09a3cc84 100644
|
||||||
|
--- 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 13
|
||||||
|
+#define PATCHLEVEL 14
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
38
SOURCES/bash-4.4-patch-15.patch
Normal file
38
SOURCES/bash-4.4-patch-15.patch
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
From 9cce630e80008e74fa9a1d9408367341caf363f2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Mon, 29 Jan 2018 16:04:01 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 15
|
||||||
|
|
||||||
|
---
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
subst.c | 2 ++
|
||||||
|
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 09a3cc84..6e9ed3fc 100644
|
||||||
|
--- 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 14
|
||||||
|
+#define PATCHLEVEL 15
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
diff --git a/subst.c b/subst.c
|
||||||
|
index dbf0157e..fc00cab0 100644
|
||||||
|
--- a/subst.c
|
||||||
|
+++ b/subst.c
|
||||||
|
@@ -5906,6 +5906,8 @@ process_substitute (string, open_for_read_in_child)
|
||||||
|
parent. */
|
||||||
|
expanding_redir = 0;
|
||||||
|
|
||||||
|
+ remove_quoted_escapes (string);
|
||||||
|
+
|
||||||
|
subshell_level++;
|
||||||
|
result = parse_and_execute (string, "process substitution", (SEVAL_NONINT|SEVAL_NOHIST));
|
||||||
|
subshell_level--;
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
68
SOURCES/bash-4.4-patch-16.patch
Normal file
68
SOURCES/bash-4.4-patch-16.patch
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
From c9f1b04651dae16e33f0aa8974c5122e26b362ae Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Mon, 29 Jan 2018 16:04:20 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 16
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/sh/zread.c | 23 +++++++++--------------
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 10 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/sh/zread.c b/lib/sh/zread.c
|
||||||
|
index 868f9705..496f20b8 100644
|
||||||
|
--- a/lib/sh/zread.c
|
||||||
|
+++ b/lib/sh/zread.c
|
||||||
|
@@ -37,7 +37,10 @@ extern int errno;
|
||||||
|
# define SEEK_CUR 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+extern int executing_builtin;
|
||||||
|
+
|
||||||
|
extern void check_signals_and_traps (void);
|
||||||
|
+extern void check_signals (void);
|
||||||
|
extern int signal_is_trapped (int);
|
||||||
|
|
||||||
|
/* Read LEN bytes from FD into BUF. Retry the read on EINTR. Any other
|
||||||
|
@@ -50,21 +53,13 @@ zread (fd, buf, len)
|
||||||
|
{
|
||||||
|
ssize_t r;
|
||||||
|
|
||||||
|
-#if 0
|
||||||
|
-#if defined (HAVE_SIGINTERRUPT)
|
||||||
|
- if (signal_is_trapped (SIGCHLD))
|
||||||
|
- siginterrupt (SIGCHLD, 1);
|
||||||
|
-#endif
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
while ((r = read (fd, buf, len)) < 0 && errno == EINTR)
|
||||||
|
- check_signals_and_traps (); /* XXX - should it be check_signals()? */
|
||||||
|
-
|
||||||
|
-#if 0
|
||||||
|
-#if defined (HAVE_SIGINTERRUPT)
|
||||||
|
- siginterrupt (SIGCHLD, 0);
|
||||||
|
-#endif
|
||||||
|
-#endif
|
||||||
|
+ /* XXX - bash-5.0 */
|
||||||
|
+ /* We check executing_builtin and run traps here for backwards compatibility */
|
||||||
|
+ if (executing_builtin)
|
||||||
|
+ check_signals_and_traps (); /* XXX - should it be check_signals()? */
|
||||||
|
+ else
|
||||||
|
+ check_signals ();
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 6e9ed3fc..9074f4dd 100644
|
||||||
|
--- 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 15
|
||||||
|
+#define PATCHLEVEL 16
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
41
SOURCES/bash-4.4-patch-17.patch
Normal file
41
SOURCES/bash-4.4-patch-17.patch
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
From b3a5ec8dd510a68dc850f3f516c0cf9afd87451f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Mon, 29 Jan 2018 16:04:37 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 17
|
||||||
|
|
||||||
|
---
|
||||||
|
builtins/read.def | 5 +++++
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/builtins/read.def b/builtins/read.def
|
||||||
|
index 33821f3f..803bea35 100644
|
||||||
|
--- a/builtins/read.def
|
||||||
|
+++ b/builtins/read.def
|
||||||
|
@@ -690,6 +690,11 @@ add_char:
|
||||||
|
input_string[i] = '\0';
|
||||||
|
CHECK_ALRM;
|
||||||
|
|
||||||
|
+#if defined (READLINE)
|
||||||
|
+ if (edit)
|
||||||
|
+ free (rlbuf);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
if (retval < 0)
|
||||||
|
{
|
||||||
|
t_errno = errno;
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 9074f4dd..98e714da 100644
|
||||||
|
--- 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 16
|
||||||
|
+#define PATCHLEVEL 17
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
38
SOURCES/bash-4.4-patch-18.patch
Normal file
38
SOURCES/bash-4.4-patch-18.patch
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
From eb78197af36bb0fb95493ebf8fce104be6832ec9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Mon, 29 Jan 2018 16:04:56 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 18
|
||||||
|
|
||||||
|
---
|
||||||
|
builtins/read.def | 2 +-
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/builtins/read.def b/builtins/read.def
|
||||||
|
index 803bea35..b54b3af6 100644
|
||||||
|
--- a/builtins/read.def
|
||||||
|
+++ b/builtins/read.def
|
||||||
|
@@ -610,7 +610,7 @@ read_builtin (list)
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK_ALRM;
|
||||||
|
-
|
||||||
|
+ QUIT; /* in case we didn't call check_signals() */
|
||||||
|
#if defined (READLINE)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 98e714da..f0ee56e4 100644
|
||||||
|
--- 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 17
|
||||||
|
+#define PATCHLEVEL 18
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
40
SOURCES/bash-4.4-patch-19.patch
Normal file
40
SOURCES/bash-4.4-patch-19.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
From b0776d8c49ab4310fa056ce1033985996c5b9807 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Tue, 6 Feb 2018 16:22:34 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 19
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/readline/display.c | 4 +++-
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/readline/display.c b/lib/readline/display.c
|
||||||
|
index 41fb0531..2d2e768a 100644
|
||||||
|
--- a/lib/readline/display.c
|
||||||
|
+++ b/lib/readline/display.c
|
||||||
|
@@ -771,7 +771,9 @@ rl_redisplay ()
|
||||||
|
appear in the first and last lines of the prompt */
|
||||||
|
wadjust = (newlines == 0)
|
||||||
|
? prompt_invis_chars_first_line
|
||||||
|
- : ((newlines == prompt_lines_estimate) ? wrap_offset : prompt_invis_chars_first_line);
|
||||||
|
+ : ((newlines == prompt_lines_estimate)
|
||||||
|
+ ? (wrap_offset - prompt_invis_chars_first_line)
|
||||||
|
+ : 0);
|
||||||
|
|
||||||
|
/* fix from Darin Johnson <darin@acuson.com> for prompt string with
|
||||||
|
invisible characters that is longer than the screen width. The
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index f0ee56e4..a711c495 100644
|
||||||
|
--- 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 18
|
||||||
|
+#define PATCHLEVEL 19
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
59
SOURCES/bash-4.4-patch-2.patch
Normal file
59
SOURCES/bash-4.4-patch-2.patch
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
From 280bd77d8d3e7f7c90c9fa07de3d1e8f8e18ac29 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Mon, 14 Nov 2016 14:27:06 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 2
|
||||||
|
|
||||||
|
---
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
subst.c | 9 ++++++++-
|
||||||
|
2 files changed, 9 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 40db1a3..a988d85 100644
|
||||||
|
--- 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 1
|
||||||
|
+#define PATCHLEVEL 2
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
diff --git a/subst.c b/subst.c
|
||||||
|
index f1a4df1..4d498ef 100644
|
||||||
|
--- a/subst.c
|
||||||
|
+++ b/subst.c
|
||||||
|
@@ -5931,6 +5931,7 @@ read_comsub (fd, quoted, rflag)
|
||||||
|
char *istring, buf[128], *bufp, *s;
|
||||||
|
int istring_index, istring_size, c, tflag, skip_ctlesc, skip_ctlnul;
|
||||||
|
ssize_t bufn;
|
||||||
|
+ int nullbyte;
|
||||||
|
|
||||||
|
istring = (char *)NULL;
|
||||||
|
istring_index = istring_size = bufn = tflag = 0;
|
||||||
|
@@ -5938,6 +5939,8 @@ read_comsub (fd, quoted, rflag)
|
||||||
|
for (skip_ctlesc = skip_ctlnul = 0, s = ifs_value; s && *s; s++)
|
||||||
|
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. */
|
||||||
|
while (1)
|
||||||
|
@@ -5956,7 +5959,11 @@ read_comsub (fd, quoted, rflag)
|
||||||
|
if (c == 0)
|
||||||
|
{
|
||||||
|
#if 1
|
||||||
|
- internal_warning ("%s", _("command substitution: ignored null byte in input"));
|
||||||
|
+ if (nullbyte == 0)
|
||||||
|
+ {
|
||||||
|
+ internal_warning ("%s", _("command substitution: ignored null byte in input"));
|
||||||
|
+ nullbyte = 1;
|
||||||
|
+ }
|
||||||
|
#endif
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
136
SOURCES/bash-4.4-patch-20.patch
Normal file
136
SOURCES/bash-4.4-patch-20.patch
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
From 354efb96f1e4574f458e994163bbe31c76769573 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Fri, 1 Jun 2018 10:19:56 -0400
|
||||||
|
Subject: [PATCH] saved background process status hash table loop fixes
|
||||||
|
|
||||||
|
---
|
||||||
|
jobs.c | 62 +++++++++++++++++++++++++++++++++++++++++-----------
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 50 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/jobs.c b/jobs.c
|
||||||
|
index fc966036..2684632d 100644
|
||||||
|
--- a/jobs.c
|
||||||
|
+++ b/jobs.c
|
||||||
|
@@ -812,8 +812,22 @@ bgp_add (pid, status)
|
||||||
|
ps_index_t *bucket, psi;
|
||||||
|
struct pidstat *ps;
|
||||||
|
|
||||||
|
- bucket = pshash_getbucket (pid);
|
||||||
|
- psi = bgp_getindex ();
|
||||||
|
+ /* bucket == existing chain of pids hashing to same value
|
||||||
|
+ psi = where were going to put this pid/status */
|
||||||
|
+
|
||||||
|
+ bucket = pshash_getbucket (pid); /* index into pidstat_table */
|
||||||
|
+ psi = bgp_getindex (); /* bgpids.head, index into storage */
|
||||||
|
+
|
||||||
|
+ /* XXX - what if psi == *bucket? */
|
||||||
|
+ if (psi == *bucket)
|
||||||
|
+ {
|
||||||
|
+#ifdef DEBUG
|
||||||
|
+ internal_warning ("hashed pid %d (pid %d) collides with bgpids.head, skipping", psi, pid);
|
||||||
|
+#endif
|
||||||
|
+ bgpids.storage[psi].pid = NO_PID; /* make sure */
|
||||||
|
+ psi = bgp_getindex (); /* skip to next one */
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
ps = &bgpids.storage[psi];
|
||||||
|
|
||||||
|
ps->pid = pid;
|
||||||
|
@@ -841,32 +855,47 @@ pshash_delindex (psi)
|
||||||
|
ps_index_t psi;
|
||||||
|
{
|
||||||
|
struct pidstat *ps;
|
||||||
|
+ ps_index_t *bucket;
|
||||||
|
|
||||||
|
ps = &bgpids.storage[psi];
|
||||||
|
if (ps->pid == NO_PID)
|
||||||
|
return;
|
||||||
|
|
||||||
|
- if (ps->bucket_next != NO_PID)
|
||||||
|
+ if (ps->bucket_next != NO_PIDSTAT)
|
||||||
|
bgpids.storage[ps->bucket_next].bucket_prev = ps->bucket_prev;
|
||||||
|
- if (ps->bucket_prev != NO_PID)
|
||||||
|
+ if (ps->bucket_prev != NO_PIDSTAT)
|
||||||
|
bgpids.storage[ps->bucket_prev].bucket_next = ps->bucket_next;
|
||||||
|
else
|
||||||
|
- *(pshash_getbucket (ps->pid)) = ps->bucket_next;
|
||||||
|
+ {
|
||||||
|
+ bucket = pshash_getbucket (ps->pid);
|
||||||
|
+ *bucket = ps->bucket_next; /* deleting chain head in hash table */
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* clear out this cell, just in case */
|
||||||
|
+ ps->pid = NO_PID;
|
||||||
|
+ ps->bucket_next = ps->bucket_prev = NO_PIDSTAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
bgp_delete (pid)
|
||||||
|
pid_t pid;
|
||||||
|
{
|
||||||
|
- ps_index_t psi;
|
||||||
|
+ ps_index_t psi, orig_psi;
|
||||||
|
|
||||||
|
if (bgpids.storage == 0 || bgpids.nalloc == 0 || bgpids.npid == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Search chain using hash to find bucket in pidstat_table */
|
||||||
|
- for (psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next)
|
||||||
|
- if (bgpids.storage[psi].pid == pid)
|
||||||
|
- break;
|
||||||
|
+ for (orig_psi = psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next)
|
||||||
|
+ {
|
||||||
|
+ if (bgpids.storage[psi].pid == pid)
|
||||||
|
+ break;
|
||||||
|
+ if (orig_psi == bgpids.storage[psi].bucket_next) /* catch reported bug */
|
||||||
|
+ {
|
||||||
|
+ internal_warning ("bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next", psi);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (psi == NO_PIDSTAT)
|
||||||
|
return 0; /* not found */
|
||||||
|
@@ -904,15 +933,22 @@ static int
|
||||||
|
bgp_search (pid)
|
||||||
|
pid_t pid;
|
||||||
|
{
|
||||||
|
- ps_index_t psi;
|
||||||
|
+ ps_index_t psi, orig_psi;
|
||||||
|
|
||||||
|
if (bgpids.storage == 0 || bgpids.nalloc == 0 || bgpids.npid == 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* Search chain using hash to find bucket in pidstat_table */
|
||||||
|
- for (psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next)
|
||||||
|
- if (bgpids.storage[psi].pid == pid)
|
||||||
|
- return (bgpids.storage[psi].status);
|
||||||
|
+ for (orig_psi = psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next)
|
||||||
|
+ {
|
||||||
|
+ if (bgpids.storage[psi].pid == pid)
|
||||||
|
+ return (bgpids.storage[psi].status);
|
||||||
|
+ if (orig_psi == bgpids.storage[psi].bucket_next) /* catch reported bug */
|
||||||
|
+ {
|
||||||
|
+ internal_warning ("bgp_search: LOOP: psi (%d) == storage[psi].bucket_next", psi);
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index a711c495..4a65dc0f 100644
|
||||||
|
--- 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 19
|
||||||
|
+#define PATCHLEVEL 20
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
52
SOURCES/bash-4.4-patch-3.patch
Normal file
52
SOURCES/bash-4.4-patch-3.patch
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
From 4f59a8babc53a9f975078c4a003bdc8831c5ee22 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Mon, 14 Nov 2016 14:27:23 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 3
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/glob/sm_loop.c | 9 +++++++++
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/lib/glob/sm_loop.c b/lib/glob/sm_loop.c
|
||||||
|
index c3a2aa3..65179e2 100644
|
||||||
|
--- a/lib/glob/sm_loop.c
|
||||||
|
+++ b/lib/glob/sm_loop.c
|
||||||
|
@@ -330,6 +330,12 @@ PARSE_COLLSYM (p, vp)
|
||||||
|
for (pc = 0; p[pc]; pc++)
|
||||||
|
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)
|
||||||
|
*vp = val;
|
||||||
|
@@ -483,6 +489,9 @@ BRACKMATCH (p, test, flags)
|
||||||
|
c = *p++;
|
||||||
|
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. */
|
||||||
|
return (CHAR *)0;
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index a988d85..e7e960c 100644
|
||||||
|
--- 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 2
|
||||||
|
+#define PATCHLEVEL 3
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
81
SOURCES/bash-4.4-patch-4.patch
Normal file
81
SOURCES/bash-4.4-patch-4.patch
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
From 2965eca924466a48c5597ac5c6c86d470e718908 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Mon, 14 Nov 2016 14:27:35 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 4
|
||||||
|
|
||||||
|
---
|
||||||
|
jobs.c | 15 +++++++++++++++
|
||||||
|
jobs.h | 1 +
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
subst.c | 5 +----
|
||||||
|
4 files changed, 18 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/jobs.c b/jobs.c
|
||||||
|
index cef3c79..fc96603 100644
|
||||||
|
--- a/jobs.c
|
||||||
|
+++ b/jobs.c
|
||||||
|
@@ -453,6 +453,21 @@ cleanup_the_pipeline ()
|
||||||
|
discard_pipeline (disposer);
|
||||||
|
}
|
||||||
|
|
||||||
|
+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 ()
|
||||||
|
{
|
||||||
|
diff --git a/jobs.h b/jobs.h
|
||||||
|
index 4ba3513..6df0607 100644
|
||||||
|
--- a/jobs.h
|
||||||
|
+++ b/jobs.h
|
||||||
|
@@ -190,6 +190,7 @@ extern JOB **jobs;
|
||||||
|
extern void making_children __P((void));
|
||||||
|
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));
|
||||||
|
extern void start_pipeline __P((void));
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index e7e960c..c059f0b 100644
|
||||||
|
--- 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 3
|
||||||
|
+#define PATCHLEVEL 4
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
diff --git a/subst.c b/subst.c
|
||||||
|
index 4d498ef..298187d 100644
|
||||||
|
--- a/subst.c
|
||||||
|
+++ b/subst.c
|
||||||
|
@@ -5808,10 +5808,7 @@ process_substitute (string, open_for_read_in_child)
|
||||||
|
{
|
||||||
|
#if defined (JOB_CONTROL)
|
||||||
|
if (last_procsub_child)
|
||||||
|
- {
|
||||||
|
- discard_pipeline (last_procsub_child);
|
||||||
|
- last_procsub_child = (PROCESS *)NULL;
|
||||||
|
- }
|
||||||
|
+ discard_last_procsub_child ();
|
||||||
|
last_procsub_child = restore_pipeline (0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
42
SOURCES/bash-4.4-patch-5.patch
Normal file
42
SOURCES/bash-4.4-patch-5.patch
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
From f459cbd8be37b28be1dc90315e0ab51d7f211301 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Mon, 14 Nov 2016 14:27:55 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 5
|
||||||
|
|
||||||
|
---
|
||||||
|
builtins/evalstring.c | 3 ---
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/builtins/evalstring.c b/builtins/evalstring.c
|
||||||
|
index e221591..6dc756c 100644
|
||||||
|
--- a/builtins/evalstring.c
|
||||||
|
+++ b/builtins/evalstring.c
|
||||||
|
@@ -104,12 +104,9 @@ should_suppress_fork (command)
|
||||||
|
running_trap == 0 &&
|
||||||
|
*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) &&
|
||||||
|
((command->flags & CMD_INVERT_RETURN) == 0));
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index c059f0b..1bc098b 100644
|
||||||
|
--- 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 4
|
||||||
|
+#define PATCHLEVEL 5
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
50
SOURCES/bash-4.4-patch-6.patch
Normal file
50
SOURCES/bash-4.4-patch-6.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From 44bfefc553993613c0aff992bc4f3078d738ee1d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Fri, 20 Jan 2017 11:47:31 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 6
|
||||||
|
|
||||||
|
---
|
||||||
|
builtins/pushd.def | 7 ++++++-
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 7 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/builtins/pushd.def b/builtins/pushd.def
|
||||||
|
index 82653c4..6579e4c 100644
|
||||||
|
--- a/builtins/pushd.def
|
||||||
|
+++ b/builtins/pushd.def
|
||||||
|
@@ -365,7 +365,7 @@ popd_builtin (list)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (which > directory_list_offset || (directory_list_offset == 0 && which == 0))
|
||||||
|
+ if (which > directory_list_offset || (which < -directory_list_offset) || (directory_list_offset == 0 && which == 0))
|
||||||
|
{
|
||||||
|
pushd_error (directory_list_offset, which_word ? which_word : "");
|
||||||
|
return (EXECUTION_FAILURE);
|
||||||
|
@@ -387,6 +387,11 @@ popd_builtin (list)
|
||||||
|
remove that directory from the list and shift the remainder
|
||||||
|
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--;
|
||||||
|
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 1bc098b..14bff9f 100644
|
||||||
|
--- 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 5
|
||||||
|
+#define PATCHLEVEL 6
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
114
SOURCES/bash-4.4-patch-7.patch
Normal file
114
SOURCES/bash-4.4-patch-7.patch
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
From 4f747edc625815f449048579f6e65869914dd715 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Fri, 20 Jan 2017 11:47:55 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 7
|
||||||
|
|
||||||
|
---
|
||||||
|
bashline.c | 22 ++++++++++++----------
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
subst.c | 4 ++++
|
||||||
|
3 files changed, 17 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/bashline.c b/bashline.c
|
||||||
|
index f4fe9f1..0275844 100644
|
||||||
|
--- a/bashline.c
|
||||||
|
+++ b/bashline.c
|
||||||
|
@@ -142,7 +142,7 @@ static int executable_completion __P((const char *, int));
|
||||||
|
static rl_icppfunc_t *save_directory_hook __P((void));
|
||||||
|
static void restore_directory_hook __P((rl_icppfunc_t));
|
||||||
|
|
||||||
|
-static int directory_exists __P((const char *));
|
||||||
|
+static int directory_exists __P((const char *, int));
|
||||||
|
|
||||||
|
static void cleanup_expansion_error __P((void));
|
||||||
|
static void maybe_make_readline_line __P((char *));
|
||||||
|
@@ -3102,18 +3102,20 @@ restore_directory_hook (hookf)
|
||||||
|
rl_directory_rewrite_hook = hookf;
|
||||||
|
}
|
||||||
|
|
||||||
|
-/* Check whether not the (dequoted) version of DIRNAME, with any trailing slash
|
||||||
|
- removed, exists. */
|
||||||
|
+/* 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)
|
||||||
|
+directory_exists (dirname, should_dequote)
|
||||||
|
const char *dirname;
|
||||||
|
+ int should_dequote;
|
||||||
|
{
|
||||||
|
char *new_dirname;
|
||||||
|
int dirlen, r;
|
||||||
|
struct stat sb;
|
||||||
|
|
||||||
|
- /* First, dequote the directory name */
|
||||||
|
- new_dirname = bash_dequote_filename ((char *)dirname, rl_completion_quote_character);
|
||||||
|
+ /* 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] == '/')
|
||||||
|
new_dirname[dirlen - 1] = '\0';
|
||||||
|
@@ -3145,7 +3147,7 @@ bash_filename_stat_hook (dirname)
|
||||||
|
else if (t = mbschr (local_dirname, '`')) /* XXX */
|
||||||
|
should_expand_dirname = '`';
|
||||||
|
|
||||||
|
- if (should_expand_dirname && directory_exists (local_dirname))
|
||||||
|
+ if (should_expand_dirname && directory_exists (local_dirname, 0))
|
||||||
|
should_expand_dirname = 0;
|
||||||
|
|
||||||
|
if (should_expand_dirname)
|
||||||
|
@@ -3155,7 +3157,7 @@ bash_filename_stat_hook (dirname)
|
||||||
|
have to worry about restoring this setting. */
|
||||||
|
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 */
|
||||||
|
+ 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)
|
||||||
|
{
|
||||||
|
@@ -3244,13 +3246,13 @@ bash_directory_completion_hook (dirname)
|
||||||
|
should_expand_dirname = '`';
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (should_expand_dirname && directory_exists (local_dirname))
|
||||||
|
+ if (should_expand_dirname && directory_exists (local_dirname, 1))
|
||||||
|
should_expand_dirname = 0;
|
||||||
|
|
||||||
|
if (should_expand_dirname)
|
||||||
|
{
|
||||||
|
new_dirname = savestring (local_dirname);
|
||||||
|
- wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */
|
||||||
|
+ wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */
|
||||||
|
if (wl)
|
||||||
|
{
|
||||||
|
*dirname = string_list (wl);
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 14bff9f..deb9c5b 100644
|
||||||
|
--- 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 6
|
||||||
|
+#define PATCHLEVEL 7
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
diff --git a/subst.c b/subst.c
|
||||||
|
index 298187d..027a13e 100644
|
||||||
|
--- a/subst.c
|
||||||
|
+++ b/subst.c
|
||||||
|
@@ -9458,6 +9458,10 @@ add_twochars:
|
||||||
|
tword->flags |= word->flags & (W_ASSIGNARG|W_ASSIGNRHS); /* affects $@ */
|
||||||
|
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;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
71
SOURCES/bash-4.4-patch-8.patch
Normal file
71
SOURCES/bash-4.4-patch-8.patch
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
From b9f81c2977b82490cd4dc70b0bb292bfbf86bd2c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Fri, 20 Jan 2017 15:38:10 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 8
|
||||||
|
|
||||||
|
---
|
||||||
|
expr.c | 15 +++++++++------
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 10 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/expr.c b/expr.c
|
||||||
|
index 1ddb693..172964a 100644
|
||||||
|
--- a/expr.c
|
||||||
|
+++ b/expr.c
|
||||||
|
@@ -578,24 +578,23 @@ expcond ()
|
||||||
|
rval = cval = explor ();
|
||||||
|
if (curtok == QUES) /* found conditional expr */
|
||||||
|
{
|
||||||
|
- readtok ();
|
||||||
|
- if (curtok == 0 || curtok == COL)
|
||||||
|
- evalerror (_("expression expected"));
|
||||||
|
if (cval == 0)
|
||||||
|
{
|
||||||
|
set_noeval = 1;
|
||||||
|
noeval++;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ readtok ();
|
||||||
|
+ if (curtok == 0 || curtok == COL)
|
||||||
|
+ evalerror (_("expression expected"));
|
||||||
|
+
|
||||||
|
val1 = EXP_HIGHEST ();
|
||||||
|
|
||||||
|
if (set_noeval)
|
||||||
|
noeval--;
|
||||||
|
if (curtok != COL)
|
||||||
|
evalerror (_("`:' expected for conditional expression"));
|
||||||
|
- readtok ();
|
||||||
|
- if (curtok == 0)
|
||||||
|
- evalerror (_("expression expected"));
|
||||||
|
+
|
||||||
|
set_noeval = 0;
|
||||||
|
if (cval)
|
||||||
|
{
|
||||||
|
@@ -603,7 +602,11 @@ expcond ()
|
||||||
|
noeval++;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ readtok ();
|
||||||
|
+ if (curtok == 0)
|
||||||
|
+ evalerror (_("expression expected"));
|
||||||
|
val2 = expcond ();
|
||||||
|
+
|
||||||
|
if (set_noeval)
|
||||||
|
noeval--;
|
||||||
|
rval = cval ? val1 : val2;
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index deb9c5b..16c8740 100644
|
||||||
|
--- 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 7
|
||||||
|
+#define PATCHLEVEL 8
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
80
SOURCES/bash-4.4-patch-9.patch
Normal file
80
SOURCES/bash-4.4-patch-9.patch
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
From e59fb114e9c0436890d110cfdda4d794a63496e7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Fri, 20 Jan 2017 15:38:29 -0500
|
||||||
|
Subject: [PATCH] Bash-4.4 patch 9
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/readline/history.c | 16 +++++++---------
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
2 files changed, 8 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/readline/history.c b/lib/readline/history.c
|
||||||
|
index 9ff25a7..129c57a 100644
|
||||||
|
--- a/lib/readline/history.c
|
||||||
|
+++ b/lib/readline/history.c
|
||||||
|
@@ -279,6 +279,7 @@ add_history (string)
|
||||||
|
const char *string;
|
||||||
|
{
|
||||||
|
HIST_ENTRY *temp;
|
||||||
|
+ int new_length;
|
||||||
|
|
||||||
|
if (history_stifled && (history_length == history_max_entries))
|
||||||
|
{
|
||||||
|
@@ -295,13 +296,9 @@ add_history (string)
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
+ new_length = history_length;
|
||||||
|
history_base++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
@@ -315,7 +312,7 @@ add_history (string)
|
||||||
|
else
|
||||||
|
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
|
||||||
|
the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *));
|
||||||
|
- history_length = 1;
|
||||||
|
+ new_length = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@@ -325,14 +322,15 @@ add_history (string)
|
||||||
|
the_history = (HIST_ENTRY **)
|
||||||
|
xrealloc (the_history, history_size * sizeof (HIST_ENTRY *));
|
||||||
|
}
|
||||||
|
- history_length++;
|
||||||
|
+ new_length = history_length + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
temp = alloc_history_entry ((char *)string, hist_inittime ());
|
||||||
|
|
||||||
|
- the_history[history_length] = (HIST_ENTRY *)NULL;
|
||||||
|
- the_history[history_length - 1] = temp;
|
||||||
|
+ the_history[new_length] = (HIST_ENTRY *)NULL;
|
||||||
|
+ the_history[new_length - 1] = temp;
|
||||||
|
+ history_length = new_length;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Change the time stamp of the most recent history entry to STRING. */
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 16c8740..02f1d60 100644
|
||||||
|
--- 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 8
|
||||||
|
+#define PATCHLEVEL 9
|
||||||
|
|
||||||
|
#endif /* _PATCHLEVEL_H_ */
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
11
SOURCES/bash-4.4-unset-nonblock-stdin.patch
Normal file
11
SOURCES/bash-4.4-unset-nonblock-stdin.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
diff --git a/parse.y b/parse.y
|
||||||
|
index 85f1c4f..9d1cdf8 100644
|
||||||
|
--- a/parse.y
|
||||||
|
+++ b/parse.y
|
||||||
|
@@ -1453,6 +1453,7 @@ yy_readline_get ()
|
||||||
|
old_sigint = (SigHandler *)set_signal_handler (SIGINT, sigint_sighandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ sh_unset_nodelay_mode (fileno (rl_instream)); /* just in case */
|
||||||
|
current_readline_line = readline (current_readline_prompt ?
|
||||||
|
current_readline_prompt : "");
|
11
SOURCES/bash-4.5-test-modification-time.patch
Normal file
11
SOURCES/bash-4.5-test-modification-time.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
diff --git a/config.h.in b/config.h.in
|
||||||
|
--- a/config.h.in
|
||||||
|
+++ b/config.h.in
|
||||||
|
@@ -449,6 +449,7 @@
|
||||||
|
#undef SYS_TIME_H_DEFINES_STRUCT_TIMESPEC
|
||||||
|
#undef PTHREAD_H_DEFINES_STRUCT_TIMESPEC
|
||||||
|
|
||||||
|
+#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
|
||||||
|
#undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC
|
||||||
|
#undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
|
||||||
|
#undef HAVE_STRUCT_STAT_ST_ATIMENSEC
|
95
SOURCES/bash-5.0-bgp-resize.patch
Normal file
95
SOURCES/bash-5.0-bgp-resize.patch
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
diff --git a/include/typemax.h b/include/typemax.h
|
||||||
|
--- a/include/typemax.h
|
||||||
|
+++ b/include/typemax.h
|
||||||
|
@@ -35,14 +35,23 @@
|
||||||
|
# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifndef TYPE_SIGNED_MAGNITUDE
|
||||||
|
+# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#ifndef TYPE_WIDTH
|
||||||
|
+# define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT)
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#ifndef TYPE_MINIMUM
|
||||||
|
-# define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
|
||||||
|
- ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \
|
||||||
|
- : (t) 0))
|
||||||
|
+# define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef TYPE_MAXIMUM
|
||||||
|
-# define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
|
||||||
|
+# define TYPE_MAXIMUM(t) \
|
||||||
|
+ ((t) (! TYPE_SIGNED (t) \
|
||||||
|
+ ? (t) -1 \
|
||||||
|
+ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
diff --git a/jobs.c b/jobs.c
|
||||||
|
--- a/jobs.c
|
||||||
|
+++ b/jobs.c
|
||||||
|
@@ -72,6 +72,8 @@
|
||||||
|
#include "execute_cmd.h"
|
||||||
|
#include "flags.h"
|
||||||
|
|
||||||
|
+#include "typemax.h"
|
||||||
|
+
|
||||||
|
#include "builtins/builtext.h"
|
||||||
|
#include "builtins/common.h"
|
||||||
|
|
||||||
|
@@ -92,7 +94,7 @@ extern int killpg __P((pid_t, int));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !MAX_CHILD_MAX
|
||||||
|
-# define MAX_CHILD_MAX 8192
|
||||||
|
+# define MAX_CHILD_MAX 32768
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined (DEBUG)
|
||||||
|
@@ -751,7 +753,7 @@ stop_pipeline (async, deferred)
|
||||||
|
static void
|
||||||
|
bgp_resize ()
|
||||||
|
{
|
||||||
|
- ps_index_t nsize;
|
||||||
|
+ ps_index_t nsize, nsize_cur, nsize_max;
|
||||||
|
ps_index_t psi;
|
||||||
|
|
||||||
|
if (bgpids.nalloc == 0)
|
||||||
|
@@ -765,11 +767,20 @@ bgp_resize ()
|
||||||
|
else
|
||||||
|
nsize = bgpids.nalloc;
|
||||||
|
|
||||||
|
- while (nsize < js.c_childmax)
|
||||||
|
- nsize *= 2;
|
||||||
|
+ nsize_max = TYPE_MAXIMUM (ps_index_t);
|
||||||
|
+ nsize_cur = (ps_index_t)js.c_childmax;
|
||||||
|
+ if (nsize_cur < 0) /* overflow */
|
||||||
|
+ nsize_cur = MAX_CHILD_MAX;
|
||||||
|
|
||||||
|
- if (bgpids.nalloc < js.c_childmax)
|
||||||
|
- {
|
||||||
|
+ while (nsize > 0 && nsize < nsize_cur) /* > 0 should catch overflow */
|
||||||
|
+ nsize <<= 1;
|
||||||
|
+ if (nsize > nsize_max || nsize <= 0) /* overflow? */
|
||||||
|
+ nsize = nsize_max;
|
||||||
|
+ if (nsize > MAX_CHILD_MAX)
|
||||||
|
+ nsize = nsize_max = MAX_CHILD_MAX; /* hard cap */
|
||||||
|
+
|
||||||
|
+ if (bgpids.nalloc < nsize_cur && bgpids.nalloc < nsize_max)
|
||||||
|
+ {
|
||||||
|
bgpids.storage = (struct pidstat *)xrealloc (bgpids.storage, nsize * sizeof (struct pidstat));
|
||||||
|
|
||||||
|
for (psi = bgpids.nalloc; psi < nsize; psi++)
|
||||||
|
@@ -787,7 +798,7 @@ bgp_getindex ()
|
||||||
|
{
|
||||||
|
ps_index_t psi;
|
||||||
|
|
||||||
|
- if (bgpids.nalloc < js.c_childmax || bgpids.head >= bgpids.nalloc)
|
||||||
|
+ if (bgpids.nalloc < (ps_index_t)js.c_childmax || bgpids.head >= bgpids.nalloc)
|
||||||
|
bgp_resize ();
|
||||||
|
|
||||||
|
pshash_delindex (bgpids.head); /* XXX - clear before reusing */
|
41
SOURCES/bash-5.0-cve-2019-18276-2.patch
Normal file
41
SOURCES/bash-5.0-cve-2019-18276-2.patch
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index e5162c4..b82a33b 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -799,10 +799,13 @@ AC_CHECK_DECLS([confstr])
|
||||||
|
AC_CHECK_DECLS([printf])
|
||||||
|
AC_CHECK_DECLS([sbrk])
|
||||||
|
AC_CHECK_DECLS([setregid])
|
||||||
|
-AC_CHECK_DECLS[(setresuid, setresgid])
|
||||||
|
+dnl AC_CHECK_DECLS[(setresuid])
|
||||||
|
+dnl AC_CHECK_DECLS[(setresgid])
|
||||||
|
AC_CHECK_DECLS([strcpy])
|
||||||
|
AC_CHECK_DECLS([strsignal])
|
||||||
|
|
||||||
|
+AC_CHECK_FUNCS(setresuid setresgid)
|
||||||
|
+
|
||||||
|
dnl Extra test to detect the horribly broken HP/UX 11.00 strtold(3)
|
||||||
|
AC_CHECK_DECLS([strtold], [
|
||||||
|
AC_MSG_CHECKING([for broken strtold])
|
||||||
|
diff --git a/shell.c b/shell.c
|
||||||
|
index 484d8a9..5c24922 100644
|
||||||
|
--- a/shell.c
|
||||||
|
+++ b/shell.c
|
||||||
|
@@ -1286,7 +1286,7 @@ disable_priv_mode ()
|
||||||
|
{
|
||||||
|
int e;
|
||||||
|
|
||||||
|
-#if HAVE_DECL_SETRESUID
|
||||||
|
+#if HAVE_SETRESUID
|
||||||
|
if (setresuid (current_user.uid, current_user.uid, current_user.uid) < 0)
|
||||||
|
#else
|
||||||
|
if (setuid (current_user.uid) < 0)
|
||||||
|
@@ -1299,7 +1299,7 @@ disable_priv_mode ()
|
||||||
|
exit (e);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
-#if HAVE_DECL_SETRESGID
|
||||||
|
+#if HAVE_SETRESGID
|
||||||
|
if (setresgid (current_user.gid, current_user.gid, current_user.gid) < 0)
|
||||||
|
#else
|
||||||
|
if (setgid (current_user.gid) < 0)
|
61
SOURCES/bash-5.0-cve-2019-18276.patch
Normal file
61
SOURCES/bash-5.0-cve-2019-18276.patch
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
diff --git a/config.h.in b/config.h.in
|
||||||
|
index 1a89e85..2df4786 100644
|
||||||
|
--- a/config.h.in
|
||||||
|
+++ b/config.h.in
|
||||||
|
@@ -801,6 +801,14 @@
|
||||||
|
#undef HAVE_SETREGID
|
||||||
|
#undef HAVE_DECL_SETREGID
|
||||||
|
|
||||||
|
+/* Define if you have the setregid function. */
|
||||||
|
+#undef HAVE_SETRESGID
|
||||||
|
+#undef HAVE_DECL_SETRESGID
|
||||||
|
+
|
||||||
|
+/* Define if you have the setresuid function. */
|
||||||
|
+#undef HAVE_SETRESUID
|
||||||
|
+#undef HAVE_DECL_SETRESUID
|
||||||
|
+
|
||||||
|
/* Define if you have the setvbuf function. */
|
||||||
|
#undef HAVE_SETVBUF
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index a3f6d8f..e5162c4 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -799,6 +799,7 @@ AC_CHECK_DECLS([confstr])
|
||||||
|
AC_CHECK_DECLS([printf])
|
||||||
|
AC_CHECK_DECLS([sbrk])
|
||||||
|
AC_CHECK_DECLS([setregid])
|
||||||
|
+AC_CHECK_DECLS[(setresuid, setresgid])
|
||||||
|
AC_CHECK_DECLS([strcpy])
|
||||||
|
AC_CHECK_DECLS([strsignal])
|
||||||
|
|
||||||
|
diff --git a/shell.c b/shell.c
|
||||||
|
index 4aae182..484d8a9 100644
|
||||||
|
--- a/shell.c
|
||||||
|
+++ b/shell.c
|
||||||
|
@@ -1286,7 +1286,11 @@ disable_priv_mode ()
|
||||||
|
{
|
||||||
|
int e;
|
||||||
|
|
||||||
|
+#if HAVE_DECL_SETRESUID
|
||||||
|
+ if (setresuid (current_user.uid, current_user.uid, current_user.uid) < 0)
|
||||||
|
+#else
|
||||||
|
if (setuid (current_user.uid) < 0)
|
||||||
|
+#endif
|
||||||
|
{
|
||||||
|
e = errno;
|
||||||
|
sys_error (_("cannot set uid to %d: effective uid %d"), current_user.uid, current_user.euid);
|
||||||
|
@@ -1295,7 +1299,11 @@ disable_priv_mode ()
|
||||||
|
exit (e);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
+#if HAVE_DECL_SETRESGID
|
||||||
|
+ if (setresgid (current_user.gid, current_user.gid, current_user.gid) < 0)
|
||||||
|
+#else
|
||||||
|
if (setgid (current_user.gid) < 0)
|
||||||
|
+#endif
|
||||||
|
sys_error (_("cannot set gid to %d: effective gid %d"), current_user.gid, current_user.egid);
|
||||||
|
|
||||||
|
current_user.euid = current_user.uid;
|
||||||
|
--
|
||||||
|
2.25.4
|
19
SOURCES/bash-5.0-histtimeformat-segfault.patch
Normal file
19
SOURCES/bash-5.0-histtimeformat-segfault.patch
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
diff --git a/builtins/history.def b/builtins/history.def
|
||||||
|
--- a/builtins/history.def
|
||||||
|
+++ b/builtins/history.def
|
||||||
|
@@ -256,10 +256,13 @@ histtime (hlist, histtimefmt)
|
||||||
|
{
|
||||||
|
static char timestr[128];
|
||||||
|
time_t t;
|
||||||
|
+ struct tm *tm;
|
||||||
|
|
||||||
|
t = history_get_time (hlist);
|
||||||
|
- if (t)
|
||||||
|
- strftime (timestr, sizeof (timestr), histtimefmt, localtime (&t));
|
||||||
|
+
|
||||||
|
+ tm = t ? localtime (&t) : 0;
|
||||||
|
+ if (t && tm)
|
||||||
|
+ strftime (timestr, sizeof (timestr), histtimefmt, tm);
|
||||||
|
else if (hlist->timestamp && hlist->timestamp[0])
|
||||||
|
snprintf (timestr, sizeof (timestr), _("%s: invalid timestamp"),
|
||||||
|
(hlist->timestamp[0] == '#') ? hlist->timestamp + 1: hlist->timestamp);
|
12
SOURCES/bash-5.0-shellpid-subshell.patch
Normal file
12
SOURCES/bash-5.0-shellpid-subshell.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff --git a/parse.y b/parse.y
|
||||||
|
--- a/parse.y
|
||||||
|
+++ b/parse.y
|
||||||
|
@@ -4193,7 +4193,7 @@ eof_error:
|
||||||
|
|
||||||
|
FREE (nestret);
|
||||||
|
}
|
||||||
|
- if MBTEST(ch == '$')
|
||||||
|
+ if MBTEST(ch == '$' && (tflags & LEX_WASDOL) == 0)
|
||||||
|
tflags |= LEX_WASDOL;
|
||||||
|
else
|
||||||
|
tflags &= ~LEX_WASDOL;
|
84
SOURCES/bash-5.0-syslog-history.patch
Normal file
84
SOURCES/bash-5.0-syslog-history.patch
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
diff --git a/bashhist.c b/bashhist.c
|
||||||
|
index 9979f99..793c81f 100644
|
||||||
|
--- a/bashhist.c
|
||||||
|
+++ b/bashhist.c
|
||||||
|
@@ -754,6 +754,12 @@ extern char *shell_name;
|
||||||
|
#define OPENLOG_OPTS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#if defined (SYSLOG_SHOPT)
|
||||||
|
+int syslog_history = SYSLOG_SHOPT;
|
||||||
|
+#else
|
||||||
|
+int syslog_history = 1;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
void
|
||||||
|
bash_syslog_history (line)
|
||||||
|
const char *line;
|
||||||
|
@@ -851,7 +857,8 @@ bash_add_history (line)
|
||||||
|
really_add_history (line);
|
||||||
|
|
||||||
|
#if defined (SYSLOG_HISTORY)
|
||||||
|
- bash_syslog_history (line);
|
||||||
|
+ if (syslog_history)
|
||||||
|
+ bash_syslog_history (line);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using_history ();
|
||||||
|
diff --git a/builtins/shopt.def b/builtins/shopt.def
|
||||||
|
index 2febb7e..38c398e 100644
|
||||||
|
--- a/builtins/shopt.def
|
||||||
|
+++ b/builtins/shopt.def
|
||||||
|
@@ -118,6 +118,10 @@ extern char *shell_name;
|
||||||
|
extern int debugging_mode;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#if defined (SYSLOG_HISTORY) && defined (SYSLOG_SHOPT)
|
||||||
|
+extern int syslog_history;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
static void shopt_error __P((char *));
|
||||||
|
|
||||||
|
static int set_shellopts_after_change __P((char *, int));
|
||||||
|
@@ -223,6 +227,9 @@ static struct {
|
||||||
|
#endif
|
||||||
|
{ "shift_verbose", &print_shift_error, (shopt_set_func_t *)NULL },
|
||||||
|
{ "sourcepath", &source_uses_path, (shopt_set_func_t *)NULL },
|
||||||
|
+#if defined (SYSLOG_HISTORY) && defined (SYSLOG_SHOPT)
|
||||||
|
+ { "syslog_history", &syslog_history, (shopt_set_func_t *)NULL },
|
||||||
|
+#endif
|
||||||
|
{ "xpg_echo", &xpg_echo, (shopt_set_func_t *)NULL },
|
||||||
|
{ (char *)0, (int *)0, (shopt_set_func_t *)NULL }
|
||||||
|
};
|
||||||
|
diff --git a/config-top.h b/config-top.h
|
||||||
|
index cb0e002..39cf6b5 100644
|
||||||
|
--- a/config-top.h
|
||||||
|
+++ b/config-top.h
|
||||||
|
@@ -122,6 +122,13 @@
|
||||||
|
# define OPENLOG_OPTS LOG_PID
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Define if you want syslogging history to be controllable at runtime via a
|
||||||
|
+ shell option; if defined, the value is the default for the syslog_history
|
||||||
|
+ shopt option */
|
||||||
|
+#if defined (SYSLOG_HISTORY)
|
||||||
|
+#define SYSLOG_SHOPT 0
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/* Define if you want to include code in shell.c to support wordexp(3) */
|
||||||
|
/* #define WORDEXP_OPTION */
|
||||||
|
|
||||||
|
diff --git a/doc/bash.1 b/doc/bash.1
|
||||||
|
index d6cee1d..9dfa0b3 100644
|
||||||
|
--- a/doc/bash.1
|
||||||
|
+++ b/doc/bash.1
|
||||||
|
@@ -9889,6 +9889,9 @@ If set, the
|
||||||
|
to find the directory containing the file supplied as an argument.
|
||||||
|
This option is enabled by default.
|
||||||
|
.TP 8
|
||||||
|
+.B syslog_history
|
||||||
|
+If set, command history is logged to syslog.
|
||||||
|
+.TP 8
|
||||||
|
.B xpg_echo
|
||||||
|
If set, the \fBecho\fP builtin expands backslash-escape sequences
|
||||||
|
by default.
|
26
SOURCES/bash-infotags.patch
Normal file
26
SOURCES/bash-infotags.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
diff --git a/doc/Makefile.in b/doc/Makefile.in
|
||||||
|
index 5f0756c..a5fa5a0 100644
|
||||||
|
--- a/doc/Makefile.in
|
||||||
|
+++ b/doc/Makefile.in
|
||||||
|
@@ -74,7 +74,6 @@ TEXI2DVI = ${SUPPORT_SRCDIR}/texi2dvi
|
||||||
|
TEXI2HTML = ${SUPPORT_SRCDIR}/texi2html
|
||||||
|
MAN2HTML = ${BUILD_DIR}/support/man2html
|
||||||
|
HTMLPOST = ${srcdir}/htmlpost.sh
|
||||||
|
-INFOPOST = ${srcdir}/infopost.sh
|
||||||
|
QUIETPS = #set this to -q to shut up dvips
|
||||||
|
PAPERSIZE = letter # change to a4 for A4-size paper
|
||||||
|
PSDPI = 600 # could be 300 if you like
|
||||||
|
@@ -188,8 +187,8 @@ bashref.pdf: $(BASHREF_FILES) $(HSUSER) $(RLUSER)
|
||||||
|
bashref.html: $(BASHREF_FILES) $(HSUSER) $(RLUSER)
|
||||||
|
$(MAKEINFO) --html --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi
|
||||||
|
|
||||||
|
-bash.info: bashref.info
|
||||||
|
- ${SHELL} ${INFOPOST} < $(srcdir)/bashref.info > $@ ; \
|
||||||
|
+bash.info: $(BASHREF_FILES) $(HSUSER) $(RLUSER)
|
||||||
|
+ $(MAKEINFO) --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi -o $@
|
||||||
|
|
||||||
|
bash.txt: bash.1
|
||||||
|
bash.ps: bash.1
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
@ -1,18 +1,20 @@
|
|||||||
diff --git a/builtins.h b/builtins.h
|
diff --git a/builtins.h b/builtins.h
|
||||||
|
index 0cfea18..a6ef958 100644
|
||||||
--- a/builtins.h
|
--- a/builtins.h
|
||||||
+++ b/builtins.h
|
+++ b/builtins.h
|
||||||
@@ -46,6 +46,7 @@
|
@@ -42,6 +42,7 @@
|
||||||
|
#define ASSIGNMENT_BUILTIN 0x10 /* This builtin takes assignment statements. */
|
||||||
#define POSIX_BUILTIN 0x20 /* This builtins is special in the Posix command search order. */
|
#define POSIX_BUILTIN 0x20 /* This builtins is special in the Posix command search order. */
|
||||||
#define LOCALVAR_BUILTIN 0x40 /* This builtin creates local variables */
|
#define LOCALVAR_BUILTIN 0x40 /* This builtin creates local variables */
|
||||||
#define ARRAYREF_BUILTIN 0x80 /* This builtin takes array references as arguments */
|
+#define REQUIRES_BUILTIN 0x80 /* This builtin requires other files. */
|
||||||
+#define REQUIRES_BUILTIN 0x100 /* This builtin requires other files. */
|
|
||||||
|
|
||||||
#define BASE_INDENT 4
|
#define BASE_INDENT 4
|
||||||
|
|
||||||
diff --git a/builtins/mkbuiltins.c b/builtins/mkbuiltins.c
|
diff --git a/builtins/mkbuiltins.c b/builtins/mkbuiltins.c
|
||||||
|
index 4f51201..283bfea 100644
|
||||||
--- a/builtins/mkbuiltins.c
|
--- a/builtins/mkbuiltins.c
|
||||||
+++ b/builtins/mkbuiltins.c
|
+++ b/builtins/mkbuiltins.c
|
||||||
@@ -69,11 +69,16 @@ extern char *strcpy ();
|
@@ -69,10 +69,15 @@ extern char *strcpy ();
|
||||||
#define whitespace(c) (((c) == ' ') || ((c) == '\t'))
|
#define whitespace(c) (((c) == ' ') || ((c) == '\t'))
|
||||||
|
|
||||||
/* Flag values that builtins can have. */
|
/* Flag values that builtins can have. */
|
||||||
@ -24,61 +26,58 @@ diff --git a/builtins/mkbuiltins.c b/builtins/mkbuiltins.c
|
|||||||
#define BUILTIN_FLAG_ASSIGNMENT 0x02
|
#define BUILTIN_FLAG_ASSIGNMENT 0x02
|
||||||
#define BUILTIN_FLAG_LOCALVAR 0x04
|
#define BUILTIN_FLAG_LOCALVAR 0x04
|
||||||
#define BUILTIN_FLAG_POSIX_BUILTIN 0x08
|
#define BUILTIN_FLAG_POSIX_BUILTIN 0x08
|
||||||
#define BUILTIN_FLAG_ARRAYREF_ARG 0x10
|
+#define BUILTIN_FLAG_REQUIRES 0x10
|
||||||
+#define BUILTIN_FLAG_REQUIRES 0x20
|
|
||||||
|
|
||||||
#define BASE_INDENT 4
|
#define BASE_INDENT 4
|
||||||
|
|
||||||
@@ -189,13 +194,21 @@ char *arrayvar_builtins[] =
|
@@ -173,11 +178,20 @@ char *posix_builtins[] =
|
||||||
"typeset", "unset", "wait", /*]*/
|
|
||||||
(char *)NULL
|
(char *)NULL
|
||||||
};
|
};
|
||||||
-
|
|
||||||
+
|
|
||||||
+/* The builtin commands that cause requirements on other files. */
|
+/* The builtin commands that cause requirements on other files. */
|
||||||
+static char *requires_builtins[] =
|
+static char *requires_builtins[] =
|
||||||
+{
|
+{
|
||||||
+ ".", "command", "exec", "source", "inlib",
|
+ ".", "command", "exec", "source", "inlib",
|
||||||
+ (char *)NULL
|
+ (char *)NULL
|
||||||
+};
|
+};
|
||||||
|
+
|
||||||
+
|
+
|
||||||
/* Forward declarations. */
|
/* Forward declarations. */
|
||||||
static int is_special_builtin ();
|
static int is_special_builtin ();
|
||||||
static int is_assignment_builtin ();
|
static int is_assignment_builtin ();
|
||||||
static int is_localvar_builtin ();
|
static int is_localvar_builtin ();
|
||||||
static int is_posix_builtin ();
|
static int is_posix_builtin ();
|
||||||
static int is_arrayvar_builtin ();
|
|
||||||
+static int is_requires_builtin ();
|
+static int is_requires_builtin ();
|
||||||
|
|
||||||
#if !defined (HAVE_RENAME)
|
#if !defined (HAVE_RENAME)
|
||||||
static int rename ();
|
static int rename ();
|
||||||
@@ -856,6 +869,8 @@ builtin_handler (self, defs, arg)
|
@@ -831,6 +845,9 @@ builtin_handler (self, defs, arg)
|
||||||
|
new->flags |= BUILTIN_FLAG_LOCALVAR;
|
||||||
|
if (is_posix_builtin (name))
|
||||||
new->flags |= BUILTIN_FLAG_POSIX_BUILTIN;
|
new->flags |= BUILTIN_FLAG_POSIX_BUILTIN;
|
||||||
if (is_arrayvar_builtin (name))
|
|
||||||
new->flags |= BUILTIN_FLAG_ARRAYREF_ARG;
|
|
||||||
+ if (is_requires_builtin (name))
|
+ if (is_requires_builtin (name))
|
||||||
+ new->flags |= BUILTIN_FLAG_REQUIRES;
|
+ new->flags |= BUILTIN_FLAG_REQUIRES;
|
||||||
|
+
|
||||||
|
|
||||||
array_add ((char *)new, defs->builtins);
|
array_add ((char *)new, defs->builtins);
|
||||||
building_builtin = 1;
|
building_builtin = 1;
|
||||||
@@ -1275,13 +1290,14 @@ write_builtins (defs, structfile, externfile)
|
@@ -1250,12 +1267,13 @@ write_builtins (defs, structfile, externfile)
|
||||||
else
|
else
|
||||||
fprintf (structfile, "(sh_builtin_func_t *)0x0, ");
|
fprintf (structfile, "(sh_builtin_func_t *)0x0, ");
|
||||||
|
|
||||||
- fprintf (structfile, "%s%s%s%s%s%s, %s_doc,\n",
|
- fprintf (structfile, "%s%s%s%s%s, %s_doc,\n",
|
||||||
+ fprintf (structfile, "%s%s%s%s%s%s%s, %s_doc,\n",
|
+ fprintf (structfile, "%s%s%s%s%s%s, %s_doc,\n",
|
||||||
"BUILTIN_ENABLED | STATIC_BUILTIN",
|
"BUILTIN_ENABLED | STATIC_BUILTIN",
|
||||||
(builtin->flags & BUILTIN_FLAG_SPECIAL) ? " | SPECIAL_BUILTIN" : "",
|
(builtin->flags & BUILTIN_FLAG_SPECIAL) ? " | SPECIAL_BUILTIN" : "",
|
||||||
(builtin->flags & BUILTIN_FLAG_ASSIGNMENT) ? " | ASSIGNMENT_BUILTIN" : "",
|
(builtin->flags & BUILTIN_FLAG_ASSIGNMENT) ? " | ASSIGNMENT_BUILTIN" : "",
|
||||||
(builtin->flags & BUILTIN_FLAG_LOCALVAR) ? " | LOCALVAR_BUILTIN" : "",
|
(builtin->flags & BUILTIN_FLAG_LOCALVAR) ? " | LOCALVAR_BUILTIN" : "",
|
||||||
(builtin->flags & BUILTIN_FLAG_POSIX_BUILTIN) ? " | POSIX_BUILTIN" : "",
|
(builtin->flags & BUILTIN_FLAG_POSIX_BUILTIN) ? " | POSIX_BUILTIN" : "",
|
||||||
(builtin->flags & BUILTIN_FLAG_ARRAYREF_ARG) ? " | ARRAYREF_BUILTIN" : "",
|
|
||||||
+ (builtin->flags & BUILTIN_FLAG_REQUIRES) ? " | REQUIRES_BUILTIN" : "",
|
+ (builtin->flags & BUILTIN_FLAG_REQUIRES) ? " | REQUIRES_BUILTIN" : "",
|
||||||
document_name (builtin));
|
document_name (builtin));
|
||||||
|
|
||||||
/* Don't translate short document summaries that are identical
|
/* Don't translate short document summaries that are identical
|
||||||
@@ -1678,6 +1694,13 @@ is_arrayvar_builtin (name)
|
@@ -1645,6 +1663,13 @@ is_posix_builtin (name)
|
||||||
return (_find_in_table (name, arrayvar_builtins));
|
return (_find_in_table (name, posix_builtins));
|
||||||
}
|
}
|
||||||
|
|
||||||
+static int
|
+static int
|
||||||
@ -92,9 +91,10 @@ diff --git a/builtins/mkbuiltins.c b/builtins/mkbuiltins.c
|
|||||||
static int
|
static int
|
||||||
rename (from, to)
|
rename (from, to)
|
||||||
diff --git a/doc/bash.1 b/doc/bash.1
|
diff --git a/doc/bash.1 b/doc/bash.1
|
||||||
|
index c21e877..04ce845 100644
|
||||||
--- a/doc/bash.1
|
--- a/doc/bash.1
|
||||||
+++ b/doc/bash.1
|
+++ b/doc/bash.1
|
||||||
@@ -239,6 +239,14 @@ The shell becomes restricted (see
|
@@ -238,6 +238,14 @@ The shell becomes restricted (see
|
||||||
.B "RESTRICTED SHELL"
|
.B "RESTRICTED SHELL"
|
||||||
below).
|
below).
|
||||||
.TP
|
.TP
|
||||||
@ -110,9 +110,10 @@ diff --git a/doc/bash.1 b/doc/bash.1
|
|||||||
Equivalent to \fB\-v\fP.
|
Equivalent to \fB\-v\fP.
|
||||||
.TP
|
.TP
|
||||||
diff --git a/doc/bashref.texi b/doc/bashref.texi
|
diff --git a/doc/bashref.texi b/doc/bashref.texi
|
||||||
|
index 06957b6..e3fe925 100644
|
||||||
--- a/doc/bashref.texi
|
--- a/doc/bashref.texi
|
||||||
+++ b/doc/bashref.texi
|
+++ b/doc/bashref.texi
|
||||||
@@ -6927,6 +6927,13 @@ standard. @xref{Bash POSIX Mode}, for a description of the Bash
|
@@ -6243,6 +6243,13 @@ standard. @xref{Bash POSIX Mode}, for a description of the Bash
|
||||||
@item --restricted
|
@item --restricted
|
||||||
Make the shell a restricted shell (@pxref{The Restricted Shell}).
|
Make the shell a restricted shell (@pxref{The Restricted Shell}).
|
||||||
|
|
||||||
@ -127,22 +128,31 @@ diff --git a/doc/bashref.texi b/doc/bashref.texi
|
|||||||
Equivalent to @option{-v}. Print shell input lines as they're read.
|
Equivalent to @option{-v}. Print shell input lines as they're read.
|
||||||
|
|
||||||
diff --git a/eval.c b/eval.c
|
diff --git a/eval.c b/eval.c
|
||||||
|
index db863e7..5a5af32 100644
|
||||||
--- a/eval.c
|
--- a/eval.c
|
||||||
+++ b/eval.c
|
+++ b/eval.c
|
||||||
@@ -138,7 +138,8 @@ reader_loop ()
|
@@ -56,6 +56,7 @@ extern int need_here_doc;
|
||||||
|
extern int current_command_number, current_command_line_count, line_number;
|
||||||
|
extern int expand_aliases;
|
||||||
|
extern char *ps0_prompt;
|
||||||
|
+extern int rpm_requires;
|
||||||
|
|
||||||
|
#if defined (HAVE_POSIX_SIGNALS)
|
||||||
|
extern sigset_t top_level_mask;
|
||||||
|
@@ -148,7 +149,7 @@ reader_loop ()
|
||||||
|
|
||||||
if (read_command () == 0)
|
if (read_command () == 0)
|
||||||
{
|
{
|
||||||
- if (interactive_shell == 0 && read_but_dont_execute)
|
- if (interactive_shell == 0 && read_but_dont_execute)
|
||||||
+
|
|
||||||
+ if (interactive_shell == 0 && (read_but_dont_execute && !rpm_requires))
|
+ if (interactive_shell == 0 && (read_but_dont_execute && !rpm_requires))
|
||||||
{
|
{
|
||||||
set_exit_status (last_command_exit_value);
|
last_command_exit_value = EXECUTION_SUCCESS;
|
||||||
dispose_command (global_command);
|
dispose_command (global_command);
|
||||||
diff --git a/execute_cmd.c b/execute_cmd.c
|
diff --git a/execute_cmd.c b/execute_cmd.c
|
||||||
|
index b5cd405..88c7a5c 100644
|
||||||
--- a/execute_cmd.c
|
--- a/execute_cmd.c
|
||||||
+++ b/execute_cmd.c
|
+++ b/execute_cmd.c
|
||||||
@@ -561,6 +561,8 @@ async_redirect_stdin ()
|
@@ -533,6 +533,8 @@ async_redirect_stdin ()
|
||||||
|
|
||||||
#define DESCRIBE_PID(pid) do { if (interactive) describe_pid (pid); } while (0)
|
#define DESCRIBE_PID(pid) do { if (interactive) describe_pid (pid); } while (0)
|
||||||
|
|
||||||
@ -150,12 +160,12 @@ diff --git a/execute_cmd.c b/execute_cmd.c
|
|||||||
+
|
+
|
||||||
/* Execute the command passed in COMMAND, perhaps doing it asynchronously.
|
/* Execute the command passed in COMMAND, perhaps doing it asynchronously.
|
||||||
COMMAND is exactly what read_command () places into GLOBAL_COMMAND.
|
COMMAND is exactly what read_command () places into GLOBAL_COMMAND.
|
||||||
ASYNCHRONOUS, if non-zero, says to do this command in the background.
|
ASYNCHROUNOUS, if non-zero, says to do this command in the background.
|
||||||
@@ -592,7 +594,13 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
|
@@ -565,7 +567,13 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
|
||||||
|
|
||||||
if (breaking || continuing)
|
if (breaking || continuing)
|
||||||
return (last_command_exit_value);
|
return (last_command_exit_value);
|
||||||
- if (read_but_dont_execute)
|
- if (command == 0 || read_but_dont_execute)
|
||||||
+ if (command == 0 || (read_but_dont_execute && !rpm_requires))
|
+ if (command == 0 || (read_but_dont_execute && !rpm_requires))
|
||||||
+ return (EXECUTION_SUCCESS);
|
+ return (EXECUTION_SUCCESS);
|
||||||
+ if (rpm_requires && command->type == cm_function_def)
|
+ if (rpm_requires && command->type == cm_function_def)
|
||||||
@ -163,12 +173,12 @@ diff --git a/execute_cmd.c b/execute_cmd.c
|
|||||||
+ execute_intern_function (command->value.Function_def->name,
|
+ execute_intern_function (command->value.Function_def->name,
|
||||||
+ command->value.Function_def);
|
+ command->value.Function_def);
|
||||||
+ if (read_but_dont_execute)
|
+ if (read_but_dont_execute)
|
||||||
return (last_command_exit_value);
|
|
||||||
if (command == 0)
|
|
||||||
return (EXECUTION_SUCCESS);
|
return (EXECUTION_SUCCESS);
|
||||||
@@ -2883,7 +2891,7 @@ execute_for_command (for_command)
|
|
||||||
save_line_number = line_number;
|
QUIT;
|
||||||
if (check_identifier (for_command->name, 1) == 0)
|
@@ -5752,7 +5760,7 @@ execute_intern_function (name, funcdef)
|
||||||
|
|
||||||
|
if (check_identifier (name, posixly_correct) == 0)
|
||||||
{
|
{
|
||||||
- if (posixly_correct && interactive_shell == 0)
|
- if (posixly_correct && interactive_shell == 0)
|
||||||
+ if (posixly_correct && interactive_shell == 0 && rpm_requires == 0)
|
+ if (posixly_correct && interactive_shell == 0 && rpm_requires == 0)
|
||||||
@ -176,31 +186,50 @@ diff --git a/execute_cmd.c b/execute_cmd.c
|
|||||||
last_command_exit_value = EX_BADUSAGE;
|
last_command_exit_value = EX_BADUSAGE;
|
||||||
jump_to_top_level (ERREXIT);
|
jump_to_top_level (ERREXIT);
|
||||||
diff --git a/execute_cmd.h b/execute_cmd.h
|
diff --git a/execute_cmd.h b/execute_cmd.h
|
||||||
|
index 62bec82..d42dc85 100644
|
||||||
--- a/execute_cmd.h
|
--- a/execute_cmd.h
|
||||||
+++ b/execute_cmd.h
|
+++ b/execute_cmd.h
|
||||||
@@ -22,6 +22,9 @@
|
@@ -22,6 +22,8 @@
|
||||||
#define _EXECUTE_CMD_H_
|
#define _EXECUTE_CMD_H_
|
||||||
|
|
||||||
#include "stdc.h"
|
#include "stdc.h"
|
||||||
+#include "variables.h"
|
+#include "variables.h"
|
||||||
+#include "command.h"
|
+#include "command.h"
|
||||||
+
|
|
||||||
|
|
||||||
#if defined (ARRAY_VARS)
|
#if defined (ARRAY_VARS)
|
||||||
struct func_array_state
|
struct func_array_state
|
||||||
diff --git a/make_cmd.c b/make_cmd.c
|
diff --git a/make_cmd.c b/make_cmd.c
|
||||||
|
index b42e9ff..a982fe0 100644
|
||||||
--- a/make_cmd.c
|
--- a/make_cmd.c
|
||||||
+++ b/make_cmd.c
|
+++ b/make_cmd.c
|
||||||
@@ -35,6 +35,8 @@
|
@@ -42,11 +42,15 @@
|
||||||
#include "bashintl.h"
|
|
||||||
|
|
||||||
#include "shell.h"
|
|
||||||
+#include "builtins.h"
|
|
||||||
+#include "builtins/common.h"
|
|
||||||
#include "execute_cmd.h"
|
|
||||||
#include "parser.h"
|
|
||||||
#include "flags.h"
|
#include "flags.h"
|
||||||
@@ -839,6 +841,30 @@ make_coproc_command (name, command)
|
#include "make_cmd.h"
|
||||||
|
#include "dispose_cmd.h"
|
||||||
|
+#include "execute_cmd.h"
|
||||||
|
#include "variables.h"
|
||||||
|
#include "subst.h"
|
||||||
|
#include "input.h"
|
||||||
|
#include "ocache.h"
|
||||||
|
#include "externs.h"
|
||||||
|
+#include "builtins.h"
|
||||||
|
+
|
||||||
|
+#include "builtins/common.h"
|
||||||
|
|
||||||
|
#if defined (JOB_CONTROL)
|
||||||
|
#include "jobs.h"
|
||||||
|
@@ -57,6 +61,10 @@
|
||||||
|
extern int line_number, current_command_line_count, parser_state;
|
||||||
|
extern int last_command_exit_value;
|
||||||
|
extern int shell_initialized;
|
||||||
|
+extern int rpm_requires;
|
||||||
|
+
|
||||||
|
+static char *alphabet_set = "abcdefghijklmnopqrstuvwxyz"
|
||||||
|
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
|
|
||||||
|
int here_doc_first_line = 0;
|
||||||
|
|
||||||
|
@@ -839,6 +847,27 @@ make_coproc_command (name, command)
|
||||||
return (make_command (cm_coproc, (SIMPLE_COM *)temp));
|
return (make_command (cm_coproc, (SIMPLE_COM *)temp));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,9 +238,6 @@ diff --git a/make_cmd.c b/make_cmd.c
|
|||||||
+const char *deptype;
|
+const char *deptype;
|
||||||
+char *filename;
|
+char *filename;
|
||||||
+{
|
+{
|
||||||
+ static char *alphabet_set = "abcdefghijklmnopqrstuvwxyz"
|
|
||||||
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
||||||
+
|
|
||||||
+ if (strchr(filename, '$') || (filename[0] != '/' && strchr(filename, '/')))
|
+ if (strchr(filename, '$') || (filename[0] != '/' && strchr(filename, '/')))
|
||||||
+ return;
|
+ return;
|
||||||
+
|
+
|
||||||
@ -231,7 +257,7 @@ diff --git a/make_cmd.c b/make_cmd.c
|
|||||||
/* Reverse the word list and redirection list in the simple command
|
/* Reverse the word list and redirection list in the simple command
|
||||||
has just been parsed. It seems simpler to do this here the one
|
has just been parsed. It seems simpler to do this here the one
|
||||||
time then by any other method that I can think of. */
|
time then by any other method that I can think of. */
|
||||||
@@ -856,6 +882,28 @@ clean_simple_command (command)
|
@@ -856,6 +885,27 @@ clean_simple_command (command)
|
||||||
REVERSE_LIST (command->value.Simple->redirects, REDIRECT *);
|
REVERSE_LIST (command->value.Simple->redirects, REDIRECT *);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,15 +281,15 @@ diff --git a/make_cmd.c b/make_cmd.c
|
|||||||
+ output_requirement (find_function(cmd0) ? "function" : "executable", cmd0);
|
+ output_requirement (find_function(cmd0) ? "function" : "executable", cmd0);
|
||||||
+ }
|
+ }
|
||||||
+ } /*rpm_requires*/
|
+ } /*rpm_requires*/
|
||||||
+
|
|
||||||
+
|
+
|
||||||
parser_state &= ~PST_REDIRLIST;
|
parser_state &= ~PST_REDIRLIST;
|
||||||
return (command);
|
return (command);
|
||||||
}
|
}
|
||||||
diff --git a/shell.c b/shell.c
|
diff --git a/shell.c b/shell.c
|
||||||
|
index 7f63969..a0fb7ce 100644
|
||||||
--- a/shell.c
|
--- a/shell.c
|
||||||
+++ b/shell.c
|
+++ b/shell.c
|
||||||
@@ -196,6 +196,9 @@ int have_devfd = 0;
|
@@ -201,6 +201,9 @@ int have_devfd = 0;
|
||||||
/* The name of the .(shell)rc file. */
|
/* The name of the .(shell)rc file. */
|
||||||
static char *bashrc_file = DEFAULT_BASHRC;
|
static char *bashrc_file = DEFAULT_BASHRC;
|
||||||
|
|
||||||
@ -273,7 +299,7 @@ diff --git a/shell.c b/shell.c
|
|||||||
/* Non-zero means to act more like the Bourne shell on startup. */
|
/* Non-zero means to act more like the Bourne shell on startup. */
|
||||||
static int act_like_sh;
|
static int act_like_sh;
|
||||||
|
|
||||||
@@ -266,6 +269,7 @@ static const struct {
|
@@ -264,6 +267,7 @@ static const struct {
|
||||||
{ "protected", Int, &protected_mode, (char **)0x0 },
|
{ "protected", Int, &protected_mode, (char **)0x0 },
|
||||||
#endif
|
#endif
|
||||||
{ "rcfile", Charp, (int *)0x0, &bashrc_file },
|
{ "rcfile", Charp, (int *)0x0, &bashrc_file },
|
||||||
@ -281,9 +307,9 @@ diff --git a/shell.c b/shell.c
|
|||||||
#if defined (RESTRICTED_SHELL)
|
#if defined (RESTRICTED_SHELL)
|
||||||
{ "restricted", Int, &restricted, (char **)0x0 },
|
{ "restricted", Int, &restricted, (char **)0x0 },
|
||||||
#endif
|
#endif
|
||||||
@@ -510,6 +514,12 @@ main (argc, argv, env)
|
@@ -500,6 +504,12 @@ main (argc, argv, env)
|
||||||
|
if (dump_translatable_strings)
|
||||||
read_but_dont_execute = 1;
|
read_but_dont_execute = 1;
|
||||||
#endif
|
|
||||||
|
|
||||||
+ if (rpm_requires)
|
+ if (rpm_requires)
|
||||||
+ {
|
+ {
|
||||||
@ -294,14 +320,6 @@ diff --git a/shell.c b/shell.c
|
|||||||
if (running_setuid && privileged_mode == 0)
|
if (running_setuid && privileged_mode == 0)
|
||||||
disable_priv_mode ();
|
disable_priv_mode ();
|
||||||
|
|
||||||
diff --git a/shell.h b/shell.h
|
--
|
||||||
--- a/shell.h
|
2.9.3
|
||||||
+++ b/shell.h
|
|
||||||
@@ -100,6 +100,7 @@ extern int interactive, interactive_shell;
|
|
||||||
extern int startup_state;
|
|
||||||
extern int reading_shell_script;
|
|
||||||
extern int shell_initialized;
|
|
||||||
+extern int rpm_requires;
|
|
||||||
extern int bash_argv_initialized;
|
|
||||||
extern int subshell_environment;
|
|
||||||
extern int current_command_number;
|
|
@ -1,7 +1,8 @@
|
|||||||
diff --git a/tests/exec.right b/tests/exec.right
|
diff --git a/tests/exec.right b/tests/exec.right
|
||||||
|
index 81224fa..ff77f09 100644
|
||||||
--- a/tests/exec.right
|
--- a/tests/exec.right
|
||||||
+++ b/tests/exec.right
|
+++ b/tests/exec.right
|
||||||
@@ -60,7 +60,6 @@ this is ohio-state
|
@@ -51,7 +51,6 @@ this is ohio-state
|
||||||
0
|
0
|
||||||
1
|
1
|
||||||
testb
|
testb
|
||||||
@ -10,42 +11,42 @@ diff --git a/tests/exec.right b/tests/exec.right
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
diff --git a/tests/execscript b/tests/execscript
|
diff --git a/tests/execscript b/tests/execscript
|
||||||
|
index 3415ae3..75c48a4 100644
|
||||||
--- a/tests/execscript
|
--- a/tests/execscript
|
||||||
+++ b/tests/execscript
|
+++ b/tests/execscript
|
||||||
@@ -108,8 +108,6 @@ ${THIS_SH} ./exec6.sub
|
@@ -108,8 +108,6 @@ ${THIS_SH} ./exec6.sub
|
||||||
# checks for properly deciding what constitutes an executable file
|
# checks for properly deciding what constitutes an executable file
|
||||||
${THIS_SH} ./exec7.sub
|
${THIS_SH} ./exec7.sub
|
||||||
|
|
||||||
-${THIS_SH} -i ${PWD}/exec8.sub
|
-${THIS_SH} -i ./exec8.sub
|
||||||
-
|
-
|
||||||
${THIS_SH} ./exec9.sub
|
${THIS_SH} ./exec9.sub
|
||||||
|
|
||||||
${THIS_SH} ./exec10.sub
|
${THIS_SH} ./exec10.sub
|
||||||
diff --git a/tests/read.right b/tests/read.right
|
diff --git a/tests/read.right b/tests/read.right
|
||||||
|
index 73cb704..a92fe7f 100644
|
||||||
--- a/tests/read.right
|
--- a/tests/read.right
|
||||||
+++ b/tests/read.right
|
+++ b/tests/read.right
|
||||||
@@ -34,17 +34,6 @@ xyz
|
@@ -33,14 +33,6 @@ a = abcdefg
|
||||||
a = xyz
|
a = xyz
|
||||||
a = -xyz 123-
|
a = -xyz 123-
|
||||||
a = abc
|
a = abc
|
||||||
-timeout 1: ok
|
-timeout 1: ok
|
||||||
-unset or null 1
|
-
|
||||||
-timeout 2: ok
|
-timeout 2: ok
|
||||||
-unset or null 2
|
-
|
||||||
-timeout 3: ok
|
-./read2.sub: line 23: read: -3: invalid timeout specification
|
||||||
-unset or null 3
|
|
||||||
-./read2.sub: line 45: read: -3: invalid timeout specification
|
|
||||||
-1
|
-1
|
||||||
-
|
-
|
||||||
-abcde
|
-abcde
|
||||||
-abcde
|
./read3.sub: line 4: read: -1: invalid number
|
||||||
./read3.sub: line 17: read: -1: invalid number
|
|
||||||
abc
|
abc
|
||||||
defg
|
ab
|
||||||
diff --git a/tests/read.tests b/tests/read.tests
|
diff --git a/tests/read.tests b/tests/read.tests
|
||||||
|
index fe27dae..10346f7 100644
|
||||||
--- a/tests/read.tests
|
--- a/tests/read.tests
|
||||||
+++ b/tests/read.tests
|
+++ b/tests/read.tests
|
||||||
@@ -95,9 +95,6 @@ echo " foo" | { IFS=$':' ; read line; recho "$line"; }
|
@@ -82,9 +82,6 @@ echo " foo" | { IFS=$':' ; read line; recho "$line"; }
|
||||||
# test read -d delim behavior
|
# test read -d delim behavior
|
||||||
${THIS_SH} ./read1.sub
|
${THIS_SH} ./read1.sub
|
||||||
|
|
||||||
@ -55,3 +56,6 @@ diff --git a/tests/read.tests b/tests/read.tests
|
|||||||
# test read -n nchars behavior
|
# test read -n nchars behavior
|
||||||
${THIS_SH} ./read3.sub
|
${THIS_SH} ./read3.sub
|
||||||
|
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
@ -6,7 +6,8 @@ if [ -f /etc/bashrc ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# User specific environment
|
# User specific environment
|
||||||
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]; then
|
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
|
||||||
|
then
|
||||||
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
|
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
|
||||||
fi
|
fi
|
||||||
export PATH
|
export PATH
|
||||||
@ -15,11 +16,3 @@ export PATH
|
|||||||
# export SYSTEMD_PAGER=
|
# export SYSTEMD_PAGER=
|
||||||
|
|
||||||
# User specific aliases and functions
|
# User specific aliases and functions
|
||||||
if [ -d ~/.bashrc.d ]; then
|
|
||||||
for rc in ~/.bashrc.d/*; do
|
|
||||||
if [ -f "$rc" ]; then
|
|
||||||
. "$rc"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
unset rc
|
|
@ -1,50 +1,42 @@
|
|||||||
#% define beta_tag rc2
|
#% define beta_tag rc2
|
||||||
%define patchlevel 26
|
%global _hardened_build 1
|
||||||
%define baseversion 5.2
|
%define patchleveltag .20
|
||||||
|
%define baseversion 4.4
|
||||||
%bcond_without tests
|
%bcond_without tests
|
||||||
|
|
||||||
Version: %{baseversion}.%{patchlevel}
|
Version: %{baseversion}%{patchleveltag}
|
||||||
Name: bash
|
Name: bash
|
||||||
Summary: The GNU Bourne Again shell
|
Summary: The GNU Bourne Again shell
|
||||||
Release: 6%{?dist}
|
Release: 5%{?dist}
|
||||||
License: GPL-3.0-or-later
|
License: GPLv3+
|
||||||
Url: https://www.gnu.org/software/bash
|
Url: https://www.gnu.org/software/bash
|
||||||
Source0: https://ftp.gnu.org/gnu/bash/bash-%{baseversion}.tar.gz
|
Source0: https://ftp.gnu.org/gnu/bash/bash-%{baseversion}.tar.gz
|
||||||
|
|
||||||
# For now there isn't any doc
|
# For now there isn't any doc
|
||||||
#Source2: ftp://ftp.gnu.org/gnu/bash/bash-doc-%%{version}.tar.gz
|
#Source2: ftp://ftp.gnu.org/gnu/bash/bash-doc-%{version}.tar.gz
|
||||||
|
|
||||||
Source1: dot-bashrc
|
Source1: dot-bashrc
|
||||||
Source2: dot-bash_profile
|
Source2: dot-bash_profile
|
||||||
Source3: dot-bash_logout
|
Source3: dot-bash_logout
|
||||||
Source4: https://ftp.gnu.org/gnu/bash/bash-%{baseversion}.tar.gz.sig
|
|
||||||
# Retreived from https://tiswww.cwru.edu/~chet/gpgkey.asc
|
|
||||||
# which is the https version of the link on http://tiswww.case.edu/php/chet/bash/bashtop.html
|
|
||||||
Source5: chet-gpgkey.asc
|
|
||||||
|
|
||||||
# Official upstream patches
|
# Official upstream patches
|
||||||
# Patches are converted to apply with '-p1'
|
# Patches are converted to apply with '-p1'
|
||||||
%{lua:for i=1,rpm.expand('%{patchlevel}') do
|
%{lua:for i=1,20 do print(string.format("Patch%u: bash-4.4-patch-%u.patch\n", i, i)) end}
|
||||||
print(string.format('Patch%u: bash-%s-patch-%u.patch\n', i, rpm.expand('%{baseversion}'), i))
|
|
||||||
end}
|
|
||||||
|
|
||||||
# Other patches
|
# Other patches
|
||||||
# Non-interactive shells beginning with argv[0][0] == '-' should run the startup files when not in posix mode.
|
Patch101: bash-2.02-security.patch
|
||||||
Patch102: bash-2.03-profile.patch
|
Patch102: bash-2.03-paths.patch
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=60870
|
Patch103: bash-2.03-profile.patch
|
||||||
Patch103: bash-2.05a-interpreter.patch
|
Patch104: bash-2.05a-interpreter.patch
|
||||||
# Generate info for debuginfo files.
|
Patch105: bash-2.05b-debuginfo.patch
|
||||||
Patch104: bash-2.05b-debuginfo.patch
|
Patch106: bash-2.05b-manso.patch
|
||||||
# Pid passed to setpgrp() can not be pid of a zombie process.
|
Patch107: bash-2.05b-pgrp_sync.patch
|
||||||
Patch105: bash-2.05b-pgrp_sync.patch
|
Patch108: bash-2.05b-xcc.patch
|
||||||
# Source bashrc file when bash is run under ssh.
|
Patch110: bash-3.2-ssh_source_bash.patch
|
||||||
Patch107: bash-3.2-ssh_source_bash.patch
|
Patch112: bash-infotags.patch
|
||||||
# Use makeinfo to generate .texi file
|
Patch113: bash-requires.patch
|
||||||
# Patch108: bash-infotags.patch
|
Patch114: bash-setlocale.patch
|
||||||
# Try to pick up latest `--rpm-requires` patch from http://git.altlinux.org/gears/b/bash4.git
|
Patch115: bash-tty-tests.patch
|
||||||
Patch109: bash-requires.patch
|
|
||||||
Patch110: bash-setlocale.patch
|
|
||||||
# Disable tty tests while doing bash builds
|
|
||||||
Patch111: bash-tty-tests.patch
|
|
||||||
|
|
||||||
# 484809, check if interp section is NOBITS
|
# 484809, check if interp section is NOBITS
|
||||||
Patch116: bash-4.0-nobits.patch
|
Patch116: bash-4.0-nobits.patch
|
||||||
@ -62,16 +54,16 @@ Patch119: bash-4.2-rc2-logout.patch
|
|||||||
# Static analyzis shows some issues in bash-2.05a-interpreter.patch
|
# Static analyzis shows some issues in bash-2.05a-interpreter.patch
|
||||||
Patch120: bash-4.2-coverity.patch
|
Patch120: bash-4.2-coverity.patch
|
||||||
|
|
||||||
|
# Don't call malloc in signal handler
|
||||||
|
Patch121: bash-4.1-defer-sigchld-trap.patch
|
||||||
|
|
||||||
# 799958, updated info about trap
|
# 799958, updated info about trap
|
||||||
# This patch should be upstreamed.
|
|
||||||
Patch122: bash-4.2-manpage_trap.patch
|
Patch122: bash-4.2-manpage_trap.patch
|
||||||
|
|
||||||
# https://www.securecoding.cert.org/confluence/display/seccode/INT32-C.+Ensure+that+operations+on+signed+integers+do+not+result+in+overflow
|
# https://www.securecoding.cert.org/confluence/display/seccode/INT32-C.+Ensure+that+operations+on+signed+integers+do+not+result+in+overflow
|
||||||
# This patch should be upstreamed.
|
|
||||||
Patch123: bash-4.2-size_type.patch
|
Patch123: bash-4.2-size_type.patch
|
||||||
|
|
||||||
# 1112710 - mention ulimit -c and -f POSIX block size
|
# 1112710 - mention ulimit -c and -f POSIX block size
|
||||||
# This patch should be upstreamed.
|
|
||||||
Patch124: bash-4.3-man-ulimit.patch
|
Patch124: bash-4.3-man-ulimit.patch
|
||||||
|
|
||||||
# 1102815 - fix double echoes in vi visual mode
|
# 1102815 - fix double echoes in vi visual mode
|
||||||
@ -84,26 +76,53 @@ Patch126: bash-4.3-memleak-lc_all.patch
|
|||||||
# this patch disables it
|
# this patch disables it
|
||||||
Patch127: bash-4.4-no-loadable-builtins.patch
|
Patch127: bash-4.4-no-loadable-builtins.patch
|
||||||
|
|
||||||
# 2020528 - Add a runtime option to enable history logging to syslog
|
# 1068697 - Explicitly unset nonblocking mode while reading from stdin
|
||||||
# This option is undocumented in upstream and is documented by this patch
|
# This should be dropped while rebasing to bash-4.5
|
||||||
Patch128: bash-5.0-syslog-history.patch
|
Patch128: bash-4.4-unset-nonblock-stdin.patch
|
||||||
Patch129: bash-configure-c99.patch
|
|
||||||
Patch130: bash-configure-c99-2.patch
|
# 1389838 - command builtin should not abort on variable assignment errors
|
||||||
|
# This should be dropped while rebasing to bash-4.5
|
||||||
|
Patch129: bash-4.4-assignment-error.patch
|
||||||
|
|
||||||
|
# 1458008 - test builtin ignores subsecond while comparing file modification times
|
||||||
|
# This should be dropped while rebasing to bash-4.5
|
||||||
|
Patch130: bash-4.5-test-modification-time.patch
|
||||||
|
|
||||||
|
# 1556867 - case in a for loop inside subshell causes syntax error
|
||||||
|
# This should be dropped while rebasing to bash-4.5
|
||||||
|
Patch131: bash-4.4-case-in-command-subst.patch
|
||||||
|
|
||||||
|
Patch132: bash-4.4-coverity.patch
|
||||||
|
|
||||||
|
# 1687835 - [RFE] Add a runtime option to enable history logging to syslog
|
||||||
|
# This should be dropped while rebasing to bash-5.0
|
||||||
|
Patch133: bash-5.0-syslog-history.patch
|
||||||
|
|
||||||
|
# 1727952 - Parsing commands break when using $$ in command substitution $(..)
|
||||||
|
# https://lists.gnu.org/archive/html/bug-bash/2017-01/msg00065.html
|
||||||
|
Patch134: bash-5.0-shellpid-subshell.patch
|
||||||
|
|
||||||
|
# 1793943 - CVE-2019-18276: when effective UID is not equal to its real UID the saved UID is
|
||||||
|
# not dropped
|
||||||
|
Patch135: bash-5.0-cve-2019-18276.patch
|
||||||
|
Patch136: bash-5.0-cve-2019-18276-2.patch
|
||||||
|
|
||||||
|
# 1890888 - Took long time to return when bash -c 'exit 2 & wait $!' run in the big size LimitNPROC
|
||||||
|
# values
|
||||||
|
Patch137: bash-5.0-bgp-resize.patch
|
||||||
|
|
||||||
|
# 1794884 - HISTTIMEFORMAT causes Segmentation fault under certain conditions
|
||||||
|
Patch138: bash-5.0-histtimeformat-segfault.patch
|
||||||
|
|
||||||
|
#2062291 - Segfault in 'buffered_getchar()' function in bash
|
||||||
|
Patch139: bash-4.4-fix-buffered_getchar-crash.patch
|
||||||
|
|
||||||
# Enable audit logs
|
# Enable audit logs
|
||||||
Patch131: bash-4.3-audit.patch
|
Patch140: bash-4.3-audit.patch
|
||||||
|
|
||||||
# Fixes for issues found by OpenScanHub
|
|
||||||
Patch132: bash-5.3-sast.patch
|
|
||||||
|
|
||||||
BuildRequires: gcc
|
|
||||||
BuildRequires: texinfo bison
|
BuildRequires: texinfo bison
|
||||||
BuildRequires: ncurses-devel
|
BuildRequires: ncurses-devel
|
||||||
BuildRequires: autoconf, gettext
|
BuildRequires: autoconf, gettext
|
||||||
BuildRequires: gnupg2
|
|
||||||
# Required for bash tests
|
|
||||||
BuildRequires: glibc-all-langpacks
|
|
||||||
BuildRequires: make
|
|
||||||
BuildRequires: audit-libs-devel
|
BuildRequires: audit-libs-devel
|
||||||
Requires: filesystem >= 3
|
Requires: filesystem >= 3
|
||||||
Provides: /bin/sh
|
Provides: /bin/sh
|
||||||
@ -117,7 +136,8 @@ incorporates useful features from the Korn shell (ksh) and the C shell
|
|||||||
|
|
||||||
%package devel
|
%package devel
|
||||||
Summary: Development headers for %{name}
|
Summary: Development headers for %{name}
|
||||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
Requires: pkgconf-pkg-config
|
||||||
|
|
||||||
%description devel
|
%description devel
|
||||||
This package contains development headers for %{name}.
|
This package contains development headers for %{name}.
|
||||||
@ -130,7 +150,6 @@ Requires: %{name} = %{version}-%{release}
|
|||||||
This package contains documentation files for %{name}.
|
This package contains documentation files for %{name}.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%{gpgverify} --keyring='%{SOURCE5}' --signature='%{SOURCE4}' --data='%{SOURCE0}'
|
|
||||||
%autosetup -n %{name}-%{baseversion} -p1
|
%autosetup -n %{name}-%{baseversion} -p1
|
||||||
|
|
||||||
echo %{version} > _distribution
|
echo %{version} > _distribution
|
||||||
@ -146,12 +165,7 @@ autoconf
|
|||||||
# Recycles pids is neccessary. When bash's last fork's pid was X
|
# Recycles pids is neccessary. When bash's last fork's pid was X
|
||||||
# and new fork's pid is also X, bash has to wait for this same pid.
|
# and new fork's pid is also X, bash has to wait for this same pid.
|
||||||
# Without Recycles pids bash will not wait.
|
# Without Recycles pids bash will not wait.
|
||||||
MFLAGS="CPPFLAGS=-D_GNU_SOURCE -DRECYCLES_PIDS -DDEFAULT_PATH_VALUE='\"/usr/local/bin:/usr/bin\"' -DSTANDARD_UTILS_PATH='\"/bin:/usr/bin:/usr/sbin:/sbin\"' `getconf LFS_CFLAGS` -DSYSLOG_HISTORY -DSYSLOG_SHOPT=0"
|
make "CPPFLAGS=-D_GNU_SOURCE -DRECYCLES_PIDS -DDEFAULT_PATH_VALUE='\"/usr/local/bin:/usr/bin\"' `getconf LFS_CFLAGS` -DSYSLOG_HISTORY" %{?_smp_mflags}
|
||||||
|
|
||||||
# work around missing deps in Makefiles
|
|
||||||
make "$MFLAGS" version.h
|
|
||||||
make "$MFLAGS" %{?_smp_mflags} -C builtins
|
|
||||||
make "$MFLAGS" %{?_smp_mflags}
|
|
||||||
|
|
||||||
%install
|
%install
|
||||||
if [ -e autoconf ]; then
|
if [ -e autoconf ]; then
|
||||||
@ -164,7 +178,7 @@ sed -i -e 's,bashref\.info,bash.info,' doc/bashref.info
|
|||||||
|
|
||||||
%make_install install-headers
|
%make_install install-headers
|
||||||
|
|
||||||
mkdir -p %{buildroot}/%{_sysconfdir}
|
mkdir -p %{buildroot}/etc
|
||||||
|
|
||||||
# make manpages for bash builtins as per suggestion in DOC/README
|
# make manpages for bash builtins as per suggestion in DOC/README
|
||||||
pushd doc
|
pushd doc
|
||||||
@ -201,7 +215,7 @@ rm -f %{buildroot}/%{_mandir}/man1/false.1
|
|||||||
|
|
||||||
ln -sf bash %{buildroot}%{_bindir}/sh
|
ln -sf bash %{buildroot}%{_bindir}/sh
|
||||||
rm -f %{buildroot}%{_infodir}/dir
|
rm -f %{buildroot}%{_infodir}/dir
|
||||||
mkdir -p %{buildroot}%{_sysconfdir}/skel
|
mkdir -p %{buildroot}/etc/skel
|
||||||
install -p -m644 %SOURCE1 %{buildroot}/etc/skel/.bashrc
|
install -p -m644 %SOURCE1 %{buildroot}/etc/skel/.bashrc
|
||||||
install -p -m644 %SOURCE2 %{buildroot}/etc/skel/.bash_profile
|
install -p -m644 %SOURCE2 %{buildroot}/etc/skel/.bash_profile
|
||||||
install -p -m644 %SOURCE3 %{buildroot}/etc/skel/.bash_logout
|
install -p -m644 %SOURCE3 %{buildroot}/etc/skel/.bash_logout
|
||||||
@ -244,7 +258,7 @@ mkdir -p %{buildroot}/%{_pkgdocdir}/doc
|
|||||||
rm -rf examples/loadables
|
rm -rf examples/loadables
|
||||||
for file in CHANGES COMPAT NEWS NOTES POSIX RBASH README examples
|
for file in CHANGES COMPAT NEWS NOTES POSIX RBASH README examples
|
||||||
do
|
do
|
||||||
cp -rp "$file" %{buildroot}%{_pkgdocdir}/"$file"
|
cp -rp "$file" %{buildroot}/%{_pkgdocdir}/"$file"
|
||||||
echo "%%doc %{_pkgdocdir}/$file" >> %{name}-doc.files
|
echo "%%doc %{_pkgdocdir}/$file" >> %{name}-doc.files
|
||||||
done
|
done
|
||||||
echo "%%doc %{_pkgdocdir}/doc" >> %{name}-doc.files
|
echo "%%doc %{_pkgdocdir}/doc" >> %{name}-doc.files
|
||||||
@ -274,7 +288,7 @@ end
|
|||||||
|
|
||||||
%postun -p <lua>
|
%postun -p <lua>
|
||||||
-- Run it only if we are uninstalling
|
-- Run it only if we are uninstalling
|
||||||
if arg[2] == 0
|
if arg[2] == "0"
|
||||||
then
|
then
|
||||||
t={}
|
t={}
|
||||||
for line in io.lines("/etc/shells")
|
for line in io.lines("/etc/shells")
|
||||||
@ -330,174 +344,72 @@ end
|
|||||||
%{_libdir}/pkgconfig/%{name}.pc
|
%{_libdir}/pkgconfig/%{name}.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 5.2.26-6
|
* Fri Feb 09 2024 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.20-5
|
||||||
- Bump release for October 2024 mass rebuild:
|
- Restore audit logs in bash-4.3 or newer versions
|
||||||
Resolves: RHEL-64018
|
Resolves: RHEL-24990
|
||||||
|
|
||||||
* Thu Aug 29 2024 Siteshwar Vashisht <svashisht@redhat.com> - 5.2.26-5
|
* Tue Apr 05 2022 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.20-4
|
||||||
- Fix issues identified by OpenScanHub
|
- Fix a crash in buffered_getchar() function
|
||||||
Resolves: RHEL-44649
|
Resolves: #2062291
|
||||||
|
|
||||||
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 5.2.26-4
|
* Thu Sep 30 2021 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.20-3
|
||||||
- Bump release for June 2024 mass rebuild
|
|
||||||
|
|
||||||
* Fri Feb 09 2024 Siteshwar Vashisht <svashisht@redhat.com> - 5.2.26-3
|
|
||||||
- Update patch for audit logs
|
|
||||||
Resolves: RHEL-22619
|
|
||||||
|
|
||||||
* Tue Jan 23 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.26-2
|
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
|
||||||
|
|
||||||
* Mon Jan 22 2024 Siteshwar Vashisht <svashisht@redhat.com> - 5.2.26-1
|
|
||||||
- Update to bash-5.2 patchlevel 26
|
|
||||||
Resolves: #2259619
|
|
||||||
|
|
||||||
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.21-3
|
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
|
||||||
|
|
||||||
* Mon Nov 20 2023 Florian Weimer <fweimer@redhat.com> - 5.2.21-2
|
|
||||||
- Fix another C compatibility issue in the configure script
|
|
||||||
|
|
||||||
* Fri Nov 10 2023 Siteshwar Vashisht <svashisht@redhat.com> - 5.2.21-1
|
|
||||||
- Update to bash-5.2 patchlevel 21
|
|
||||||
Resolves: #2248970
|
|
||||||
|
|
||||||
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.15-5
|
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
|
||||||
|
|
||||||
* Tue Apr 11 2023 Lukáš Zaoral <lzaoral@redhat.com> - 5.2.15-4
|
|
||||||
- migrate to SPDX license format
|
|
||||||
|
|
||||||
* Mon Feb 06 2023 Florian Weimer <fweimer@redhat.com> - 5.2.15-3
|
|
||||||
- Fix C99 compatibility issue on configure script
|
|
||||||
|
|
||||||
* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.15-2
|
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
|
||||||
|
|
||||||
* Mon Jan 02 2023 Siteshwar Vashisht <svashisht@redhat.com> - 5.2.15-1
|
|
||||||
- Update to bash-5.2 patchlevel 15
|
|
||||||
Resolves: #2152991
|
|
||||||
|
|
||||||
* Fri Nov 18 2022 Debarshi Ray <rishi@fedoraproject.org> - 5.2.9-3
|
|
||||||
- Override STANDARD_UTILS_PATH in the same way as DEFAULT_PATH_VALUE
|
|
||||||
Related: #2132363
|
|
||||||
|
|
||||||
* Fri Nov 18 2022 Siteshwar Vashisht <svashisht@redhat.com> - 5.2.9-2
|
|
||||||
- Fix binary file detection
|
|
||||||
Resolves: #2135537
|
|
||||||
|
|
||||||
* Fri Nov 18 2022 Siteshwar Vashisht <svashisht@redhat.com> - 5.2.9-1
|
|
||||||
- Update to bash-5.2 patchlevel 9
|
|
||||||
Resolves: #2140722
|
|
||||||
|
|
||||||
* Mon Oct 10 2022 Siteshwar Vashisht <svashisht@redhat.com> - 5.2.2-2
|
|
||||||
- Fix an issue with nested expansions
|
|
||||||
Resolves: #2133097
|
|
||||||
|
|
||||||
* Thu Oct 06 2022 Siteshwar Vashisht <svashisht@redhat.com> - 5.2.2-1
|
|
||||||
- Update to bash-5.2 patchlevel 2
|
|
||||||
|
|
||||||
* Wed Oct 05 2022 Siteshwar Vashisht <svashisht@redhat.com> - 5.2.0-2
|
|
||||||
- Bump version number
|
- Bump version number
|
||||||
Related: #2129927
|
Resolves: #2004189
|
||||||
|
|
||||||
* Tue Oct 04 2022 Siteshwar Vashisht <svashisht@redhat.com> - 5.2.0-1
|
* Mon Jul 26 2021 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.20-2
|
||||||
- Update to bash-5.2
|
- Fix crash if a timestamp in a history file overflowed a time_t
|
||||||
Resolves: #2129927
|
Resolves: #1794884
|
||||||
|
|
||||||
* Mon Sep 26 2022 Siteshwar Vashisht <svashisht@redhat.com> - 5.1.16-4
|
* Fri Mar 26 2021 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.20-1
|
||||||
- Add a null check in parameter_brace_transform() function
|
- Fix infinite loop in long running scripts
|
||||||
Resolves: #2122331
|
Resolves: #1943495
|
||||||
|
|
||||||
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.1.16-3
|
* Wed Nov 04 2020 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-14
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
- Fix hang when limit for nproc is very high
|
||||||
|
Resolves: #1890888
|
||||||
|
|
||||||
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.1.16-2
|
* Fri Oct 09 2020 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-13
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
- Correctly drop saved UID when effective UID is not equal to its real UID
|
||||||
|
Resolves: #1793943
|
||||||
|
|
||||||
* Mon Jan 17 2022 Siteshwar Vashisht <svashisht@redhat.com> - 5.1.16-1
|
* Mon Jun 22 2020 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-12
|
||||||
- Update to bash-5.1 patchlevel 16
|
|
||||||
Resolves: #2037042
|
|
||||||
|
|
||||||
* Fri Nov 26 2021 Siteshwar Vashisht <svashisht@redhat.com> - 5.1.12-1
|
|
||||||
- Update to bash-5.1 patchlevel 12
|
|
||||||
|
|
||||||
* Fri Nov 05 2021 Siteshwar Vashisht <svashisht@redhat.com> - 5.1.8-3
|
|
||||||
- Add a runtime option to enable history logging to syslog
|
|
||||||
Resolves: #2020528
|
|
||||||
|
|
||||||
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 5.1.8-2
|
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
|
||||||
|
|
||||||
* Sat May 29 2021 Siteshwar Vashisht <svashisht@redhat.com> - 5.1.8-1
|
|
||||||
- Update to bash-5.1 patchlevel 8
|
|
||||||
|
|
||||||
* Wed Feb 17 2021 Siteshwar Vashisht <svashisht@redhat.com> - 5.1.4-1
|
|
||||||
- Update to bash-5.1 patchlevel 4
|
|
||||||
|
|
||||||
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 5.1.0-2
|
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
|
||||||
|
|
||||||
* Wed Jan 6 10:40:25 CET 2021 Siteshwar Vashisht <svashisht@redhat.com> - 5.1.0-1
|
|
||||||
- Rebase to bash 5.1
|
|
||||||
Resolves: #1904866
|
|
||||||
|
|
||||||
* Fri Dec 4 14:44:06 CET 2020 Siteshwar Vashisht <svashisht@redhat.com> - 5.0.17-3
|
|
||||||
- Enable sourcing files from ~/.bashrc.d
|
|
||||||
Resolves: #1726397
|
|
||||||
|
|
||||||
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.17-2
|
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
|
||||||
|
|
||||||
* Mon Jun 01 2020 Siteshwar Vashisht <svashisht@redhat.com> - 5.0.17-1
|
|
||||||
- Update to bash-5.0 patchlevel 17
|
|
||||||
|
|
||||||
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.11-2
|
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
|
||||||
|
|
||||||
* Fri Dec 06 2019 Siteshwar Vashisht <svashisht@redhat.com> - 5.0.11-1
|
|
||||||
- Update to bash-5.0 patchlevel 11
|
|
||||||
Resolves: #1745602
|
|
||||||
|
|
||||||
* Fri Aug 02 2019 Kamil Dudka <kdudka@redhat.com> - 5.0.7-3
|
|
||||||
- Sanitize public header file <shell.h>
|
|
||||||
Resolves: #1736676
|
|
||||||
|
|
||||||
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.7-2
|
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
|
||||||
|
|
||||||
* Tue May 07 2019 Siteshwar Vashisht <svashisht@redhat.com> - 5.0.7-1
|
|
||||||
- Update to bash-5.0 patchlevel 7
|
|
||||||
|
|
||||||
* Thu Feb 14 2019 Siteshwar Vashisht <svashisht@redhat.com> - 5.0.2-1
|
|
||||||
- Rebase to bash 5.0
|
|
||||||
Resolves: #1675080
|
|
||||||
|
|
||||||
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 4.4.23-7
|
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
|
||||||
|
|
||||||
* Thu Jan 10 2019 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.23-6
|
|
||||||
- Avoid duplicating user path entries
|
- Avoid duplicating user path entries
|
||||||
Resolves: #1652639
|
Resolves: #1667008
|
||||||
|
|
||||||
* Mon Oct 08 2018 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.23-5
|
* Mon Jun 22 2020 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-11
|
||||||
- Fix some issues identified by coverity
|
- Drop saved UID when effective UID is not equal to its real UID
|
||||||
|
Resolves: #1793943
|
||||||
|
|
||||||
* Mon Sep 10 2018 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.23-4
|
* Thu Aug 22 2019 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-10
|
||||||
|
- Fix runtime option to enable history logging to syslog
|
||||||
|
Related: #1687835
|
||||||
|
|
||||||
|
* Wed Jul 10 2019 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-9
|
||||||
|
- Fix `$$` expansion in subshell
|
||||||
|
Resolves: #1727952
|
||||||
|
|
||||||
|
* Mon May 27 2019 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-8
|
||||||
|
- Add a runtime option to enable history logging to syslog
|
||||||
|
Resolves: #1687835
|
||||||
|
|
||||||
|
* Mon Jan 14 2019 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-7
|
||||||
|
- Bump version number
|
||||||
|
Resolves: #1650059
|
||||||
|
|
||||||
|
* Tue Oct 09 2018 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-6
|
||||||
- Set custom PATH in non-login shells
|
- Set custom PATH in non-login shells
|
||||||
Resolves: #1615131
|
Resolves: #1627074
|
||||||
|
|
||||||
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 4.4.23-3
|
* Thu Sep 20 2018 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-5
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
- Fix some issues identified by coverity
|
||||||
|
Resolves: #1602450
|
||||||
|
|
||||||
* Mon Jun 25 2018 Miro Hrončok <mhroncok@redhat.com> - 4.4.23-2
|
* Mon Aug 06 2018 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-4
|
||||||
|
- Bump version number
|
||||||
|
|
||||||
|
* Tue Jun 26 2018 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-3
|
||||||
- Move user bin directories in front of the PATH
|
- Move user bin directories in front of the PATH
|
||||||
See: https://fedoraproject.org/wiki/Changes/UserPathPrioritization
|
Resolves: #1595223
|
||||||
Resolves: #1595098
|
|
||||||
|
|
||||||
* Tue Jun 12 2018 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.23-1
|
|
||||||
- Update to bash-4.4 patchlevel 23
|
|
||||||
Resolves: #1585510
|
|
||||||
|
|
||||||
* Thu Mar 15 2018 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-2
|
* Thu Mar 15 2018 Siteshwar Vashisht <svashisht@redhat.com> - 4.4.19-2
|
||||||
- Fix handling case statement in command subsitution
|
- Fix handling case statement in command subsitution
|
16
STAGE1-bash
16
STAGE1-bash
@ -1,16 +0,0 @@
|
|||||||
srpm bash
|
|
||||||
mcd $BUILDDIR/bash
|
|
||||||
cat <<EOF > config.cache
|
|
||||||
bash_cv_func_ctype_nonascii=yes
|
|
||||||
bash_cv_opendir_not_robust=no
|
|
||||||
bash_cv_ulimit_maxfds=yes
|
|
||||||
bash_cv_func_sigsetjmp=present
|
|
||||||
bash_cv_printf_a_format=yes
|
|
||||||
bash_cv_job_control_missing=present
|
|
||||||
bash_cv_sys_named_pipes=present
|
|
||||||
bash_cv_unusable_rtsigs=no
|
|
||||||
EOF
|
|
||||||
$SRC/bash-*/configure --prefix=/ --cache-file=config.cache --build=$BUILD --host=$TARGET
|
|
||||||
make $J
|
|
||||||
make $J install DESTDIR=${ROOTFS}
|
|
||||||
(cd $ROOTFS/bin; ln -sf bash sh)
|
|
@ -1,12 +0,0 @@
|
|||||||
diff --git a/aclocal.m4 b/aclocal.m4
|
|
||||||
--- a/aclocal.m4
|
|
||||||
+++ b/aclocal.m4
|
|
||||||
@@ -1324,7 +1324,7 @@ main()
|
|
||||||
wait(&status);
|
|
||||||
exit(ok ? 0 : 5);
|
|
||||||
}
|
|
||||||
-]])], [bash_cv_pgrp_pipe=no], [bash_cv_pgrp_pipe=yes],
|
|
||||||
+]])], [bash_cv_pgrp_pipe=yes], [bash_cv_pgrp_pipe=yes],
|
|
||||||
[AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no)
|
|
||||||
bash_cv_pgrp_pipe=no]
|
|
||||||
)])
|
|
@ -1,24 +0,0 @@
|
|||||||
diff --git a/examples/loadables/Makefile.in b/examples/loadables/Makefile.in
|
|
||||||
--- a/examples/loadables/Makefile.in
|
|
||||||
+++ b/examples/loadables/Makefile.in
|
|
||||||
@@ -59,7 +59,7 @@ host_cpu = @host_cpu@
|
|
||||||
host_vendor = @host_vendor@
|
|
||||||
|
|
||||||
STYLE_CFLAGS = @STYLE_CFLAGS@
|
|
||||||
-CFLAGS = @CFLAGS@
|
|
||||||
++CFLAGS = -O2 -g
|
|
||||||
LOCAL_CFLAGS = @LOCAL_CFLAGS@
|
|
||||||
DEFS = @DEFS@
|
|
||||||
LOCAL_DEFS = @LOCAL_DEFS@
|
|
||||||
diff --git a/examples/loadables/perl/Makefile.in b/examples/loadables/perl/Makefile.in
|
|
||||||
--- a/examples/loadables/perl/Makefile.in
|
|
||||||
+++ b/examples/loadables/perl/Makefile.in
|
|
||||||
@@ -42,7 +42,7 @@ SHELL = @MAKE_SHELL@
|
|
||||||
|
|
||||||
PERL5 = perl5
|
|
||||||
|
|
||||||
-CFLAGS = @CFLAGS@
|
|
||||||
+CFLAGS = -O2 -g
|
|
||||||
|
|
||||||
#
|
|
||||||
# These values are generated for configure by ${topdir}/support/shobj-conf.
|
|
@ -1,13 +0,0 @@
|
|||||||
diff --git a/locale.c b/locale.c
|
|
||||||
index 17ccc58..a6c07a3 100644
|
|
||||||
--- a/locale.c
|
|
||||||
+++ b/locale.c
|
|
||||||
@@ -78,8 +78,6 @@ set_default_locale ()
|
|
||||||
{
|
|
||||||
#if defined (HAVE_SETLOCALE)
|
|
||||||
default_locale = setlocale (LC_ALL, "");
|
|
||||||
- if (default_locale)
|
|
||||||
- default_locale = savestring (default_locale);
|
|
||||||
#else
|
|
||||||
default_locale = savestring ("C");
|
|
||||||
#endif /* HAVE_SETLOCALE */
|
|
@ -1,13 +0,0 @@
|
|||||||
diff --git a/doc/bash.1 b/doc/bash.1
|
|
||||||
--- a/doc/bash.1
|
|
||||||
+++ b/doc/bash.1
|
|
||||||
@@ -10726,6 +10726,9 @@ If set, the shell automatically closes file descriptors assigned using the
|
|
||||||
.el above)
|
|
||||||
instead of leaving them open when the command completes.
|
|
||||||
.TP 8
|
|
||||||
+.B syslog_history
|
|
||||||
+If set, command history is logged to syslog.
|
|
||||||
+.TP 8
|
|
||||||
.B xpg_echo
|
|
||||||
If set, the \fBecho\fP builtin expands backslash-escape sequences
|
|
||||||
by default.
|
|
@ -1,12 +0,0 @@
|
|||||||
diff --git a/subst.c b/subst.c
|
|
||||||
--- a/subst.c
|
|
||||||
+++ b/subst.c
|
|
||||||
@@ -7962,7 +7962,7 @@ parameter_brace_transform (varname, value, ind, xform, rtype, quoted, pflags, fl
|
|
||||||
return ((char *)NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (valid_parameter_transform (xform) == 0)
|
|
||||||
+ if (xform[0] == 0 || valid_parameter_transform (xform) == 0)
|
|
||||||
{
|
|
||||||
this_command_name = oname;
|
|
||||||
#if 0 /* TAG: bash-5.2 Martin Schulte <gnu@schrader-schulte.de> 10/2020 */
|
|
@ -1,24 +0,0 @@
|
|||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 0
|
|
||||||
+#define PATCHLEVEL 1
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/subst.c b/subst.c
|
|
||||||
index d9feabca..93b91606 100644
|
|
||||||
--- a/subst.c
|
|
||||||
+++ b/subst.c
|
|
||||||
@@ -10857,7 +10857,7 @@ expand_array_subscript (string, sindex, quoted, flags)
|
|
||||||
exp = substring (string, si+1, ni);
|
|
||||||
t = expand_subscript_string (exp, quoted & ~(Q_ARITH|Q_DOUBLE_QUOTES));
|
|
||||||
free (exp);
|
|
||||||
- exp = sh_backslash_quote (t, abstab, 0);
|
|
||||||
+ exp = t ? sh_backslash_quote (t, abstab, 0) : savestring ("");
|
|
||||||
free (t);
|
|
||||||
|
|
||||||
slen = STRLEN (exp);
|
|
@ -1,41 +0,0 @@
|
|||||||
diff --git a/general.c b/general.c
|
|
||||||
--- a/general.c
|
|
||||||
+++ b/general.c
|
|
||||||
@@ -683,21 +683,20 @@ check_binary_file (sample, sample_len)
|
|
||||||
int sample_len;
|
|
||||||
{
|
|
||||||
register int i;
|
|
||||||
+ int nline;
|
|
||||||
unsigned char c;
|
|
||||||
|
|
||||||
if (sample_len >= 4 && sample[0] == 0x7f && sample[1] == 'E' && sample[2] == 'L' && sample[3] == 'F')
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* Generally we check the first line for NULs. If the first line looks like
|
|
||||||
- a `#!' interpreter specifier, we just look for NULs anywhere in the
|
|
||||||
- buffer. */
|
|
||||||
- if (sample[0] == '#' && sample[1] == '!')
|
|
||||||
- return (memchr (sample, '\0', sample_len) != NULL);
|
|
||||||
+ a `#!' interpreter specifier, we look for NULs in the first two lines. */
|
|
||||||
+ nline = (sample[0] == '#' && sample[1] == '!') ? 2 : 1;
|
|
||||||
|
|
||||||
for (i = 0; i < sample_len; i++)
|
|
||||||
{
|
|
||||||
c = sample[i];
|
|
||||||
- if (c == '\n')
|
|
||||||
+ if (c == '\n' && --nline == 0)
|
|
||||||
return (0);
|
|
||||||
if (c == '\0')
|
|
||||||
return (1);
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
index e59027ac..9ddc79f7 100644
|
|
||||||
--- 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 9
|
|
||||||
+#define PATCHLEVEL 10
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
@ -1,25 +0,0 @@
|
|||||||
diff --git a/builtins/read.def b/builtins/read.def
|
|
||||||
--- a/builtins/read.def
|
|
||||||
+++ b/builtins/read.def
|
|
||||||
@@ -167,6 +167,9 @@ reset_timeout ()
|
|
||||||
/* Cancel alarm before restoring signal handler. */
|
|
||||||
if (read_timeout)
|
|
||||||
shtimer_clear (read_timeout);
|
|
||||||
+#if defined (READLINE)
|
|
||||||
+ rl_clear_timeout ();
|
|
||||||
+#endif
|
|
||||||
read_timeout = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
index 9ddc79f7..9ff902a0 100644
|
|
||||||
--- 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 10
|
|
||||||
+#define PATCHLEVEL 11
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
@ -1,268 +0,0 @@
|
|||||||
diff --git a/builtins/common.h b/builtins/common.h
|
|
||||||
--- a/builtins/common.h
|
|
||||||
+++ b/builtins/common.h
|
|
||||||
@@ -257,6 +257,10 @@ extern int print_shift_error;
|
|
||||||
extern int expand_once_flag;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if defined (EXTENDED_GLOB)
|
|
||||||
+extern int extglob_flag;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
extern int expaliases_flag;
|
|
||||||
|
|
||||||
/* variables from source.def */
|
|
||||||
diff --git a/builtins/shopt.def b/builtins/shopt.def
|
|
||||||
--- a/builtins/shopt.def
|
|
||||||
+++ b/builtins/shopt.def
|
|
||||||
@@ -149,6 +149,11 @@ static int shopt_set_complete_direxpand PARAMS((char *, int));
|
|
||||||
static int set_assoc_expand PARAMS((char *, int));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if defined (EXTENDED_GLOB)
|
|
||||||
+int extglob_flag = EXTGLOB_DEFAULT;
|
|
||||||
+static int shopt_set_extglob PARAMS((char *, int));
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
int expaliases_flag = 0;
|
|
||||||
static int shopt_set_expaliases PARAMS((char *, int));
|
|
||||||
|
|
||||||
@@ -206,7 +211,7 @@ static struct {
|
|
||||||
{ "extdebug", &debugging_mode, shopt_set_debug_mode },
|
|
||||||
#endif
|
|
||||||
#if defined (EXTENDED_GLOB)
|
|
||||||
- { "extglob", &extended_glob, (shopt_set_func_t *)NULL },
|
|
||||||
+ { "extglob", &extglob_flag, shopt_set_extglob },
|
|
||||||
#endif
|
|
||||||
{ "extquote", &extended_quote, (shopt_set_func_t *)NULL },
|
|
||||||
{ "failglob", &fail_glob_expansion, (shopt_set_func_t *)NULL },
|
|
||||||
@@ -377,7 +382,7 @@ reset_shopt_options ()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (EXTENDED_GLOB)
|
|
||||||
- extended_glob = EXTGLOB_DEFAULT;
|
|
||||||
+ extended_glob = extglob_flag = EXTGLOB_DEFAULT;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (ARRAY_VARS)
|
|
||||||
@@ -643,6 +648,17 @@ shopt_set_expaliases (option_name, mode)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if defined (EXTENDED_GLOB)
|
|
||||||
+static int
|
|
||||||
+shopt_set_extglob (option_name, mode)
|
|
||||||
+ char *option_name;
|
|
||||||
+ int mode;
|
|
||||||
+{
|
|
||||||
+ extended_glob = extglob_flag;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#if defined (READLINE)
|
|
||||||
static int
|
|
||||||
shopt_enable_hostname_completion (option_name, mode)
|
|
||||||
diff --git a/execute_cmd.c b/execute_cmd.c
|
|
||||||
--- a/execute_cmd.c
|
|
||||||
+++ b/execute_cmd.c
|
|
||||||
@@ -3990,13 +3990,11 @@ execute_cond_node (cond)
|
|
||||||
else
|
|
||||||
#endif /* COND_REGEXP */
|
|
||||||
{
|
|
||||||
- int oe;
|
|
||||||
- oe = extended_glob;
|
|
||||||
extended_glob = 1;
|
|
||||||
result = binary_test (cond->op->word, arg1, arg2, TEST_PATMATCH|TEST_ARITHEXP|TEST_LOCALE)
|
|
||||||
? EXECUTION_SUCCESS
|
|
||||||
: EXECUTION_FAILURE;
|
|
||||||
- extended_glob = oe;
|
|
||||||
+ extended_glob = extglob_flag;
|
|
||||||
}
|
|
||||||
if (arg1 != nullstr)
|
|
||||||
free (arg1);
|
|
||||||
diff --git a/parse.y b/parse.y
|
|
||||||
--- a/parse.y
|
|
||||||
+++ b/parse.y
|
|
||||||
@@ -125,7 +125,7 @@ do { \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#if defined (EXTENDED_GLOB)
|
|
||||||
-extern int extended_glob;
|
|
||||||
+extern int extended_glob, extglob_flag;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (TRANSLATABLE_STRINGS)
|
|
||||||
@@ -3304,7 +3304,7 @@ reset_parser ()
|
|
||||||
#if defined (EXTENDED_GLOB)
|
|
||||||
/* Reset to global value of extended glob */
|
|
||||||
if (parser_state & (PST_EXTPAT|PST_CMDSUBST))
|
|
||||||
- extended_glob = global_extglob;
|
|
||||||
+ extended_glob = extglob_flag;
|
|
||||||
#endif
|
|
||||||
if (parser_state & (PST_CMDSUBST|PST_STRING))
|
|
||||||
expand_aliases = expaliases_flag;
|
|
||||||
@@ -4124,10 +4124,10 @@ parse_comsub (qc, open, close, lenp, flags)
|
|
||||||
expand_aliases = posixly_correct != 0;
|
|
||||||
#if defined (EXTENDED_GLOB)
|
|
||||||
/* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a
|
|
||||||
- conditional command and have already set global_extglob appropriately. */
|
|
||||||
+ conditional command and have already set extended_glob appropriately. */
|
|
||||||
if (shell_compatibility_level <= 51 && was_extpat == 0)
|
|
||||||
{
|
|
||||||
- local_extglob = global_extglob = extended_glob;
|
|
||||||
+ local_extglob = extended_glob;
|
|
||||||
extended_glob = 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@@ -4235,7 +4235,7 @@ xparse_dolparen (base, string, indp, flags)
|
|
||||||
{
|
|
||||||
sh_parser_state_t ps;
|
|
||||||
sh_input_line_state_t ls;
|
|
||||||
- int orig_ind, nc, sflags, start_lineno;
|
|
||||||
+ int orig_ind, nc, sflags, start_lineno, local_extglob;
|
|
||||||
char *ret, *ep, *ostring;
|
|
||||||
|
|
||||||
/*debug_parser(1);*/
|
|
||||||
@@ -4278,7 +4278,7 @@ xparse_dolparen (base, string, indp, flags)
|
|
||||||
old value will be restored by restore_parser_state(). */
|
|
||||||
expand_aliases = 0;
|
|
||||||
#if defined (EXTENDED_GLOB)
|
|
||||||
- global_extglob = extended_glob; /* for reset_parser() */
|
|
||||||
+ local_extglob = extended_glob;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
token_to_read = DOLPAREN; /* let's trick the parser */
|
|
||||||
@@ -4296,6 +4296,9 @@ xparse_dolparen (base, string, indp, flags)
|
|
||||||
restore_input_line_state (&ls);
|
|
||||||
restore_parser_state (&ps);
|
|
||||||
|
|
||||||
+#if defined (EXTENDED_GLOB)
|
|
||||||
+ extended_glob = local_extglob;
|
|
||||||
+#endif
|
|
||||||
token_to_read = 0;
|
|
||||||
|
|
||||||
/* If parse_string returns < 0, we need to jump to top level with the
|
|
||||||
@@ -4731,12 +4734,16 @@ cond_term ()
|
|
||||||
}
|
|
||||||
|
|
||||||
/* rhs */
|
|
||||||
+#if defined (EXTENDED_GLOB)
|
|
||||||
local_extglob = extended_glob;
|
|
||||||
if (parser_state & PST_EXTPAT)
|
|
||||||
extended_glob = 1;
|
|
||||||
+#endif
|
|
||||||
tok = read_token (READ);
|
|
||||||
+#if defined (EXTENDED_GLOB)
|
|
||||||
if (parser_state & PST_EXTPAT)
|
|
||||||
extended_glob = local_extglob;
|
|
||||||
+#endif
|
|
||||||
parser_state &= ~(PST_REGEXP|PST_EXTPAT);
|
|
||||||
|
|
||||||
if (tok == WORD)
|
|
||||||
@@ -4783,7 +4790,6 @@ parse_cond_command ()
|
|
||||||
{
|
|
||||||
COND_COM *cexp;
|
|
||||||
|
|
||||||
- global_extglob = extended_glob;
|
|
||||||
cexp = cond_expr ();
|
|
||||||
return (make_cond_command (cexp));
|
|
||||||
}
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 11
|
|
||||||
+#define PATCHLEVEL 12
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/y.tab.c b/y.tab.c
|
|
||||||
--- a/y.tab.c
|
|
||||||
+++ b/y.tab.c
|
|
||||||
@@ -175,7 +175,7 @@ do { \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#if defined (EXTENDED_GLOB)
|
|
||||||
-extern int extended_glob;
|
|
||||||
+extern int extended_glob, extglob_flag;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (TRANSLATABLE_STRINGS)
|
|
||||||
@@ -5615,7 +5615,7 @@ reset_parser ()
|
|
||||||
#if defined (EXTENDED_GLOB)
|
|
||||||
/* Reset to global value of extended glob */
|
|
||||||
if (parser_state & (PST_EXTPAT|PST_CMDSUBST))
|
|
||||||
- extended_glob = global_extglob;
|
|
||||||
+ extended_glob = extglob_flag;
|
|
||||||
#endif
|
|
||||||
if (parser_state & (PST_CMDSUBST|PST_STRING))
|
|
||||||
expand_aliases = expaliases_flag;
|
|
||||||
@@ -6435,10 +6435,10 @@ parse_comsub (qc, open, close, lenp, flags)
|
|
||||||
expand_aliases = posixly_correct != 0;
|
|
||||||
#if defined (EXTENDED_GLOB)
|
|
||||||
/* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a
|
|
||||||
- conditional command and have already set global_extglob appropriately. */
|
|
||||||
+ conditional command and have already set extended_glob appropriately. */
|
|
||||||
if (shell_compatibility_level <= 51 && was_extpat == 0)
|
|
||||||
{
|
|
||||||
- local_extglob = global_extglob = extended_glob;
|
|
||||||
+ local_extglob = extended_glob;
|
|
||||||
extended_glob = 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@@ -6546,7 +6546,7 @@ xparse_dolparen (base, string, indp, flags)
|
|
||||||
{
|
|
||||||
sh_parser_state_t ps;
|
|
||||||
sh_input_line_state_t ls;
|
|
||||||
- int orig_ind, nc, sflags, start_lineno;
|
|
||||||
+ int orig_ind, nc, sflags, start_lineno, local_extglob;
|
|
||||||
char *ret, *ep, *ostring;
|
|
||||||
|
|
||||||
/*debug_parser(1);*/
|
|
||||||
@@ -6589,7 +6589,7 @@ xparse_dolparen (base, string, indp, flags)
|
|
||||||
old value will be restored by restore_parser_state(). */
|
|
||||||
expand_aliases = 0;
|
|
||||||
#if defined (EXTENDED_GLOB)
|
|
||||||
- global_extglob = extended_glob; /* for reset_parser() */
|
|
||||||
+ local_extglob = extended_glob;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
token_to_read = DOLPAREN; /* let's trick the parser */
|
|
||||||
@@ -6607,6 +6607,9 @@ xparse_dolparen (base, string, indp, flags)
|
|
||||||
restore_input_line_state (&ls);
|
|
||||||
restore_parser_state (&ps);
|
|
||||||
|
|
||||||
+#if defined (EXTENDED_GLOB)
|
|
||||||
+ extended_glob = local_extglob;
|
|
||||||
+#endif
|
|
||||||
token_to_read = 0;
|
|
||||||
|
|
||||||
/* If parse_string returns < 0, we need to jump to top level with the
|
|
||||||
@@ -7042,12 +7045,16 @@ cond_term ()
|
|
||||||
}
|
|
||||||
|
|
||||||
/* rhs */
|
|
||||||
+#if defined (EXTENDED_GLOB)
|
|
||||||
local_extglob = extended_glob;
|
|
||||||
if (parser_state & PST_EXTPAT)
|
|
||||||
extended_glob = 1;
|
|
||||||
+#endif
|
|
||||||
tok = read_token (READ);
|
|
||||||
+#if defined (EXTENDED_GLOB)
|
|
||||||
if (parser_state & PST_EXTPAT)
|
|
||||||
extended_glob = local_extglob;
|
|
||||||
+#endif
|
|
||||||
parser_state &= ~(PST_REGEXP|PST_EXTPAT);
|
|
||||||
|
|
||||||
if (tok == WORD)
|
|
||||||
@@ -7094,7 +7101,6 @@ parse_cond_command ()
|
|
||||||
{
|
|
||||||
COND_COM *cexp;
|
|
||||||
|
|
||||||
- global_extglob = extended_glob;
|
|
||||||
cexp = cond_expr ();
|
|
||||||
return (make_cond_command (cexp));
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 12
|
|
||||||
+#define PATCHLEVEL 13
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/subst.c b/subst.c
|
|
||||||
--- a/subst.c
|
|
||||||
+++ b/subst.c
|
|
||||||
@@ -7497,8 +7497,6 @@ expand_arrayref:
|
|
||||||
? quote_string (temp)
|
|
||||||
: quote_escapes (temp);
|
|
||||||
rflags |= W_ARRAYIND;
|
|
||||||
- if (estatep)
|
|
||||||
- *estatep = es; /* structure copy */
|
|
||||||
}
|
|
||||||
/* Note that array[*] and array[@] expanded to a quoted null string by
|
|
||||||
returning the W_HASQUOTEDNULL flag to the caller in addition to TEMP. */
|
|
||||||
@@ -7507,7 +7505,9 @@ expand_arrayref:
|
|
||||||
else if (es.subtype == 2 && temp && QUOTED_NULL (temp) && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
|
|
||||||
rflags |= W_HASQUOTEDNULL;
|
|
||||||
|
|
||||||
- if (estatep == 0)
|
|
||||||
+ if (estatep)
|
|
||||||
+ *estatep = es; /* structure copy */
|
|
||||||
+ else
|
|
||||||
flush_eltstate (&es);
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -1,93 +0,0 @@
|
|||||||
diff --git a/execute_cmd.c b/execute_cmd.c
|
|
||||||
--- a/execute_cmd.c
|
|
||||||
+++ b/execute_cmd.c
|
|
||||||
@@ -3624,6 +3624,7 @@ execute_case_command (case_command)
|
|
||||||
free (pattern);
|
|
||||||
|
|
||||||
dispose_words (es);
|
|
||||||
+ QUIT;
|
|
||||||
|
|
||||||
if (match)
|
|
||||||
{
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 13
|
|
||||||
+#define PATCHLEVEL 14
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/sig.c b/sig.c
|
|
||||||
--- a/sig.c
|
|
||||||
+++ b/sig.c
|
|
||||||
@@ -94,6 +94,7 @@ static SigHandler *old_winch = (SigHandler *)SIG_DFL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void initialize_shell_signals PARAMS((void));
|
|
||||||
+static void kill_shell PARAMS((int));
|
|
||||||
|
|
||||||
void
|
|
||||||
initialize_signals (reinit)
|
|
||||||
@@ -486,6 +487,8 @@ restore_sigmask ()
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int handling_termsig = 0;
|
|
||||||
+
|
|
||||||
sighandler
|
|
||||||
termsig_sighandler (sig)
|
|
||||||
int sig;
|
|
||||||
@@ -532,6 +535,14 @@ termsig_sighandler (sig)
|
|
||||||
sig == terminating_signal)
|
|
||||||
terminate_immediately = 1;
|
|
||||||
|
|
||||||
+ /* If we are currently handling a terminating signal, we have a couple of
|
|
||||||
+ choices here. We can ignore this second terminating signal and let the
|
|
||||||
+ shell exit from the first one, or we can exit immediately by killing
|
|
||||||
+ the shell with this signal. This code implements the latter; to implement
|
|
||||||
+ the former, replace the kill_shell(sig) with return. */
|
|
||||||
+ if (handling_termsig)
|
|
||||||
+ kill_shell (sig); /* just short-circuit now */
|
|
||||||
+
|
|
||||||
terminating_signal = sig;
|
|
||||||
|
|
||||||
if (terminate_immediately)
|
|
||||||
@@ -564,16 +575,13 @@ void
|
|
||||||
termsig_handler (sig)
|
|
||||||
int sig;
|
|
||||||
{
|
|
||||||
- static int handling_termsig = 0;
|
|
||||||
- int i, core;
|
|
||||||
- sigset_t mask;
|
|
||||||
-
|
|
||||||
/* Simple semaphore to keep this function from being executed multiple
|
|
||||||
times. Since we no longer are running as a signal handler, we don't
|
|
||||||
block multiple occurrences of the terminating signals while running. */
|
|
||||||
if (handling_termsig)
|
|
||||||
return;
|
|
||||||
- handling_termsig = 1;
|
|
||||||
+
|
|
||||||
+ handling_termsig = terminating_signal; /* for termsig_sighandler */
|
|
||||||
terminating_signal = 0; /* keep macro from re-testing true. */
|
|
||||||
|
|
||||||
/* I don't believe this condition ever tests true. */
|
|
||||||
@@ -613,6 +621,16 @@ termsig_handler (sig)
|
|
||||||
|
|
||||||
run_exit_trap (); /* XXX - run exit trap possibly in signal context? */
|
|
||||||
|
|
||||||
+ kill_shell (sig);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+kill_shell (sig)
|
|
||||||
+ int sig;
|
|
||||||
+{
|
|
||||||
+ int i, core;
|
|
||||||
+ sigset_t mask;
|
|
||||||
+
|
|
||||||
/* We don't change the set of blocked signals. If a user starts the shell
|
|
||||||
with a terminating signal blocked, we won't get here (and if by some
|
|
||||||
magic chance we do, we'll exit below). What we do is to restore the
|
|
@ -1,163 +0,0 @@
|
|||||||
diff --git a/builtins/common.h b/builtins/common.h
|
|
||||||
--- a/builtins/common.h
|
|
||||||
+++ b/builtins/common.h
|
|
||||||
@@ -51,6 +51,7 @@ do { \
|
|
||||||
#define SEVAL_FUNCDEF 0x080 /* only allow function definitions */
|
|
||||||
#define SEVAL_ONECMD 0x100 /* only allow a single command */
|
|
||||||
#define SEVAL_NOHISTEXP 0x200 /* inhibit history expansion */
|
|
||||||
+#define SEVAL_NOOPTIMIZE 0x400 /* don't try to set optimization flags */
|
|
||||||
|
|
||||||
/* Flags for describe_command, shared between type.def and command.def */
|
|
||||||
#define CDESC_ALL 0x001 /* type -a */
|
|
||||||
diff --git a/builtins/eval.def b/builtins/eval.def
|
|
||||||
--- a/builtins/eval.def
|
|
||||||
+++ b/builtins/eval.def
|
|
||||||
@@ -53,5 +53,5 @@ eval_builtin (list)
|
|
||||||
return (EX_USAGE);
|
|
||||||
list = loptend; /* skip over possible `--' */
|
|
||||||
|
|
||||||
- return (list ? evalstring (string_list (list), "eval", SEVAL_NOHIST) : EXECUTION_SUCCESS);
|
|
||||||
+ return (list ? evalstring (string_list (list), "eval", SEVAL_NOHIST|SEVAL_NOOPTIMIZE) : EXECUTION_SUCCESS);
|
|
||||||
}
|
|
||||||
diff --git a/builtins/evalstring.c b/builtins/evalstring.c
|
|
||||||
--- a/builtins/evalstring.c
|
|
||||||
+++ b/builtins/evalstring.c
|
|
||||||
@@ -132,8 +132,8 @@ optimize_connection_fork (command)
|
|
||||||
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) &&
|
|
||||||
- ((startup_state == 2 && should_suppress_fork (command->value.Connection->second)) ||
|
|
||||||
- ((subshell_environment & SUBSHELL_PAREN) && should_optimize_fork (command->value.Connection->second, 0))))
|
|
||||||
+ (should_suppress_fork (command->value.Connection->second) ||
|
|
||||||
+ ((subshell_environment & SUBSHELL_PAREN) && should_optimize_fork (command->value.Connection->second, 0))))
|
|
||||||
{
|
|
||||||
command->value.Connection->second->flags |= CMD_NO_FORK;
|
|
||||||
command->value.Connection->second->value.Simple->flags |= CMD_NO_FORK;
|
|
||||||
@@ -290,6 +290,7 @@ parse_prologue (string, flags, tag)
|
|
||||||
(flags & SEVAL_NOFREE) -> don't free STRING when finished
|
|
||||||
(flags & SEVAL_RESETLINE) -> reset line_number to 1
|
|
||||||
(flags & SEVAL_NOHISTEXP) -> history_expansion_inhibited -> 1
|
|
||||||
+ (flags & SEVAL_NOOPTIMIZE) -> don't try to turn on optimizing flags
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
@@ -502,7 +503,9 @@ parse_and_execute (string, from_file, flags)
|
|
||||||
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))
|
|
||||||
+ else if (command->type == cm_connection &&
|
|
||||||
+ (flags & SEVAL_NOOPTIMIZE) == 0 &&
|
|
||||||
+ can_optimize_connection (command))
|
|
||||||
{
|
|
||||||
command->value.Connection->second->flags |= CMD_TRY_OPTIMIZING;
|
|
||||||
command->value.Connection->second->value.Simple->flags |= CMD_TRY_OPTIMIZING;
|
|
||||||
diff --git a/execute_cmd.c b/execute_cmd.c
|
|
||||||
--- a/execute_cmd.c
|
|
||||||
+++ b/execute_cmd.c
|
|
||||||
@@ -1654,7 +1654,8 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
|
||||||
subshell sets an exit trap, so we set CMD_NO_FORK for simple commands
|
|
||||||
and set CMD_TRY_OPTIMIZING for simple commands on the right side of an
|
|
||||||
and-or or `;' list to test for optimizing forks when they are executed. */
|
|
||||||
- if (user_subshell && command->type == cm_subshell)
|
|
||||||
+ if (user_subshell && command->type == cm_subshell &&
|
|
||||||
+ (command->flags & (CMD_TIME_PIPELINE|CMD_INVERT_RETURN)) == 0)
|
|
||||||
optimize_subshell_command (command->value.Subshell->command);
|
|
||||||
|
|
||||||
/* Do redirections, then dispose of them before recursive call. */
|
|
||||||
diff --git a/jobs.c b/jobs.c
|
|
||||||
--- a/jobs.c
|
|
||||||
+++ b/jobs.c
|
|
||||||
@@ -4220,7 +4220,7 @@ run_sigchld_trap (nchild)
|
|
||||||
jobs_list_frozen = 1;
|
|
||||||
for (i = 0; i < nchild; i++)
|
|
||||||
{
|
|
||||||
- parse_and_execute (savestring (trap_command), "trap", SEVAL_NOHIST|SEVAL_RESETLINE);
|
|
||||||
+ parse_and_execute (savestring (trap_command), "trap", SEVAL_NOHIST|SEVAL_RESETLINE|SEVAL_NOOPTIMIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
run_unwind_frame ("SIGCHLD trap");
|
|
||||||
diff --git a/parse.y b/parse.y
|
|
||||||
--- a/parse.y
|
|
||||||
+++ b/parse.y
|
|
||||||
@@ -2827,7 +2827,7 @@ execute_variable_command (command, vname)
|
|
||||||
if (last_lastarg)
|
|
||||||
last_lastarg = savestring (last_lastarg);
|
|
||||||
|
|
||||||
- parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST);
|
|
||||||
+ parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE);
|
|
||||||
|
|
||||||
restore_parser_state (&ps);
|
|
||||||
bind_variable ("_", last_lastarg, 0);
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 14
|
|
||||||
+#define PATCHLEVEL 15
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/trap.c b/trap.c
|
|
||||||
--- a/trap.c
|
|
||||||
+++ b/trap.c
|
|
||||||
@@ -304,6 +304,7 @@ run_pending_traps ()
|
|
||||||
sh_parser_state_t pstate;
|
|
||||||
volatile int save_return_catch_flag, function_code;
|
|
||||||
procenv_t save_return_catch;
|
|
||||||
+ char *trap_command, *old_trap;
|
|
||||||
#if defined (ARRAY_VARS)
|
|
||||||
ARRAY *ps;
|
|
||||||
#endif
|
|
||||||
@@ -419,6 +420,9 @@ run_pending_traps ()
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
+ old_trap = trap_list[sig];
|
|
||||||
+ trap_command = savestring (old_trap);
|
|
||||||
+
|
|
||||||
save_parser_state (&pstate);
|
|
||||||
save_subst_varlist = subst_assign_varlist;
|
|
||||||
subst_assign_varlist = 0;
|
|
||||||
@@ -441,7 +445,8 @@ run_pending_traps ()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (function_code == 0)
|
|
||||||
- x = parse_and_execute (savestring (trap_list[sig]), "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE);
|
|
||||||
+ /* XXX is x always last_command_exit_value? */
|
|
||||||
+ x = parse_and_execute (trap_command, "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE|SEVAL_NOOPTIMIZE);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
parse_and_execute_cleanup (sig + 1); /* XXX - could use -1 */
|
|
||||||
@@ -1002,7 +1007,7 @@ run_exit_trap ()
|
|
||||||
if (code == 0 && function_code == 0)
|
|
||||||
{
|
|
||||||
reset_parser ();
|
|
||||||
- parse_and_execute (trap_command, "exit trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE);
|
|
||||||
+ parse_and_execute (trap_command, "exit trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE|SEVAL_NOOPTIMIZE);
|
|
||||||
}
|
|
||||||
else if (code == ERREXIT)
|
|
||||||
retval = last_command_exit_value;
|
|
||||||
@@ -1109,7 +1114,7 @@ _run_trap_internal (sig, tag)
|
|
||||||
function_code = setjmp_nosigs (return_catch);
|
|
||||||
}
|
|
||||||
|
|
||||||
- flags = SEVAL_NONINT|SEVAL_NOHIST;
|
|
||||||
+ flags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE;
|
|
||||||
if (sig != DEBUG_TRAP && sig != RETURN_TRAP && sig != ERROR_TRAP)
|
|
||||||
flags |= SEVAL_RESETLINE;
|
|
||||||
evalnest++;
|
|
||||||
diff --git a/y.tab.c b/y.tab.c
|
|
||||||
--- a/y.tab.c
|
|
||||||
+++ b/y.tab.c
|
|
||||||
@@ -5138,7 +5138,7 @@ execute_variable_command (command, vname)
|
|
||||||
if (last_lastarg)
|
|
||||||
last_lastarg = savestring (last_lastarg);
|
|
||||||
|
|
||||||
- parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST);
|
|
||||||
+ parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE);
|
|
||||||
|
|
||||||
restore_parser_state (&ps);
|
|
||||||
bind_variable ("_", last_lastarg, 0);
|
|
File diff suppressed because it is too large
Load Diff
@ -1,23 +0,0 @@
|
|||||||
diff --git a/builtins/evalfile.c b/builtins/evalfile.c
|
|
||||||
--- a/builtins/evalfile.c
|
|
||||||
+++ b/builtins/evalfile.c
|
|
||||||
@@ -266,7 +266,7 @@ file_error_and_exit:
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* set the flags to be passed to parse_and_execute */
|
|
||||||
- pflags = SEVAL_RESETLINE;
|
|
||||||
+ pflags = SEVAL_RESETLINE|SEVAL_NOOPTIMIZE;
|
|
||||||
pflags |= (flags & FEVAL_HISTORY) ? 0 : SEVAL_NOHIST;
|
|
||||||
|
|
||||||
if (flags & FEVAL_BUILTIN)
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 16
|
|
||||||
+#define PATCHLEVEL 17
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
File diff suppressed because it is too large
Load Diff
@ -1,38 +0,0 @@
|
|||||||
diff --git a/jobs.c b/jobs.c
|
|
||||||
--- a/jobs.c
|
|
||||||
+++ b/jobs.c
|
|
||||||
@@ -3077,9 +3077,13 @@ if (job == NO_JOB)
|
|
||||||
/* Don't modify terminal pgrp if we are running in background or a
|
|
||||||
subshell. Make sure subst.c:command_substitute uses the same
|
|
||||||
conditions to determine whether or not it should undo this and
|
|
||||||
- give the terminal to pipeline_pgrp. */
|
|
||||||
-
|
|
||||||
+ give the terminal to pipeline_pgrp. We don't give the terminal
|
|
||||||
+ back to shell_pgrp if an async job in the background exits because
|
|
||||||
+ we never gave it to that job in the first place. An async job in
|
|
||||||
+ the foreground is one we started in the background and foregrounded
|
|
||||||
+ with `fg', and gave it the terminal. */
|
|
||||||
if ((flags & JWAIT_NOTERM) == 0 && running_in_background == 0 &&
|
|
||||||
+ (job == NO_JOB || IS_ASYNC (job) == 0 || IS_FOREGROUND (job)) &&
|
|
||||||
(subshell_environment & (SUBSHELL_ASYNC|SUBSHELL_PIPE)) == 0)
|
|
||||||
give_terminal_to (shell_pgrp, 0);
|
|
||||||
}
|
|
||||||
@@ -3623,6 +3627,7 @@ start_job (job, foreground)
|
|
||||||
{
|
|
||||||
get_tty_state ();
|
|
||||||
save_stty = shell_tty_info;
|
|
||||||
+ jobs[job]->flags &= ~J_ASYNC; /* no longer async */
|
|
||||||
/* Give the terminal to this job. */
|
|
||||||
if (IS_JOBCONTROL (job))
|
|
||||||
give_terminal_to (jobs[job]->pgrp, 0);
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 18
|
|
||||||
+#define PATCHLEVEL 19
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
@ -1,25 +0,0 @@
|
|||||||
diff --git a/lib/readline/nls.c b/lib/readline/nls.c
|
|
||||||
--- a/lib/readline/nls.c
|
|
||||||
+++ b/lib/readline/nls.c
|
|
||||||
@@ -141,6 +141,10 @@ _rl_init_locale (void)
|
|
||||||
if (lspec == 0)
|
|
||||||
lspec = "";
|
|
||||||
ret = setlocale (LC_CTYPE, lspec); /* ok, since it does not change locale */
|
|
||||||
+ if (ret == 0 || *ret == 0)
|
|
||||||
+ ret = setlocale (LC_CTYPE, (char *)NULL);
|
|
||||||
+ if (ret == 0 || *ret == 0)
|
|
||||||
+ ret = RL_DEFAULT_LOCALE;
|
|
||||||
#else
|
|
||||||
ret = (lspec == 0 || *lspec == 0) ? RL_DEFAULT_LOCALE : lspec;
|
|
||||||
#endif
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 1
|
|
||||||
+#define PATCHLEVEL 2
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
@ -1,33 +0,0 @@
|
|||||||
diff --git a/parse.y b/parse.y
|
|
||||||
--- a/parse.y
|
|
||||||
+++ b/parse.y
|
|
||||||
@@ -3150,6 +3150,7 @@ time_command_acceptable ()
|
|
||||||
case TIME: /* time time pipeline */
|
|
||||||
case TIMEOPT: /* time -p time pipeline */
|
|
||||||
case TIMEIGN: /* time -p -- ... */
|
|
||||||
+ case DOLPAREN:
|
|
||||||
return 1;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 19
|
|
||||||
+#define PATCHLEVEL 20
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/y.tab.c b/y.tab.c
|
|
||||||
--- a/y.tab.c
|
|
||||||
+++ b/y.tab.c
|
|
||||||
@@ -5465,6 +5465,7 @@ time_command_acceptable ()
|
|
||||||
case TIME: /* time time pipeline */
|
|
||||||
case TIMEOPT: /* time -p time pipeline */
|
|
||||||
case TIMEIGN: /* time -p -- ... */
|
|
||||||
+ case DOLPAREN:
|
|
||||||
return 1;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
@ -1,32 +0,0 @@
|
|||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 20
|
|
||||||
+#define PATCHLEVEL 21
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/subst.c b/subst.c
|
|
||||||
--- a/subst.c
|
|
||||||
+++ b/subst.c
|
|
||||||
@@ -1693,7 +1693,7 @@ extract_heredoc_dolbrace_string (string, sindex, quoted, flags)
|
|
||||||
t = extract_command_subst (string, &si, flags);
|
|
||||||
CHECK_STRING_OVERRUN (i, si, slen, c);
|
|
||||||
|
|
||||||
- tlen = si - i - 1;
|
|
||||||
+ tlen = si - i - 2;
|
|
||||||
RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 4, result_size, 64);
|
|
||||||
result[result_index++] = c;
|
|
||||||
result[result_index++] = LPAREN;
|
|
||||||
@@ -1713,7 +1713,7 @@ extract_heredoc_dolbrace_string (string, sindex, quoted, flags)
|
|
||||||
t = extract_process_subst (string, (string[i] == '<' ? "<(" : ">)"), &si, flags);
|
|
||||||
CHECK_STRING_OVERRUN (i, si, slen, c);
|
|
||||||
|
|
||||||
- tlen = si - i - 1;
|
|
||||||
+ tlen = si - i - 2;
|
|
||||||
RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 4, result_size, 64);
|
|
||||||
result[result_index++] = c;
|
|
||||||
result[result_index++] = LPAREN;
|
|
@ -1,29 +0,0 @@
|
|||||||
diff --git a/lib/readline/display.c b/lib/readline/display.c
|
|
||||||
--- a/lib/readline/display.c
|
|
||||||
+++ b/lib/readline/display.c
|
|
||||||
@@ -2683,11 +2683,8 @@ rl_forced_update_display (void)
|
|
||||||
register char *temp;
|
|
||||||
|
|
||||||
if (visible_line)
|
|
||||||
- {
|
|
||||||
- temp = visible_line;
|
|
||||||
- while (*temp)
|
|
||||||
- *temp++ = '\0';
|
|
||||||
- }
|
|
||||||
+ memset (visible_line, 0, line_size);
|
|
||||||
+
|
|
||||||
rl_on_new_line ();
|
|
||||||
forced_display++;
|
|
||||||
(*rl_redisplay_function) ();
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
index 1712b108..e5e8cabd 100644
|
|
||||||
--- 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 21
|
|
||||||
+#define PATCHLEVEL 22
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
@ -1,38 +0,0 @@
|
|||||||
diff --git a/builtins/declare.def b/builtins/declare.def
|
|
||||||
--- a/builtins/declare.def
|
|
||||||
+++ b/builtins/declare.def
|
|
||||||
@@ -420,11 +420,19 @@ declare_internal (list, local_var)
|
|
||||||
|
|
||||||
if (local_var && variable_context && STREQ (name, "-"))
|
|
||||||
{
|
|
||||||
+ int o;
|
|
||||||
+
|
|
||||||
+ o = localvar_inherit;
|
|
||||||
+ localvar_inherit = 0;
|
|
||||||
var = make_local_variable ("-", 0);
|
|
||||||
- FREE (value_cell (var)); /* just in case */
|
|
||||||
- value = get_current_options ();
|
|
||||||
- var_setvalue (var, value);
|
|
||||||
- VSETATTR (var, att_invisible);
|
|
||||||
+ localvar_inherit = o;
|
|
||||||
+
|
|
||||||
+ if (value_cell (var) == NULL) /* no duplicate instances */
|
|
||||||
+ {
|
|
||||||
+ value = get_current_options ();
|
|
||||||
+ var_setvalue (var, value);
|
|
||||||
+ VSETATTR (var, att_invisible);
|
|
||||||
+ }
|
|
||||||
NEXT_VARIABLE ();
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 22
|
|
||||||
+#define PATCHLEVEL 23
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
@ -1,56 +0,0 @@
|
|||||||
diff --git a/arrayfunc.c b/arrayfunc.c
|
|
||||||
--- a/arrayfunc.c
|
|
||||||
+++ b/arrayfunc.c
|
|
||||||
@@ -650,7 +650,7 @@ assign_assoc_from_kvlist (var, nlist, h, flags)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
- aval = expand_subscript_string (v, 0);
|
|
||||||
+ aval = expand_assignment_string_to_string (v, 0);
|
|
||||||
if (aval == 0)
|
|
||||||
{
|
|
||||||
aval = (char *)xmalloc (1);
|
|
||||||
@@ -842,7 +842,7 @@ assign_compound_array_list (var, nlist, flags)
|
|
||||||
/* See above; we need to expand the value here */
|
|
||||||
if (assoc_p (var))
|
|
||||||
{
|
|
||||||
- val = expand_subscript_string (val, 0);
|
|
||||||
+ val = expand_assignment_string_to_string (val, 0);
|
|
||||||
if (val == 0)
|
|
||||||
{
|
|
||||||
val = (char *)xmalloc (1);
|
|
||||||
@@ -1030,7 +1030,7 @@ expand_and_quote_assoc_word (w, type)
|
|
||||||
nword[i++] = w[ind++];
|
|
||||||
nword[i++] = w[ind++];
|
|
||||||
|
|
||||||
- t = expand_subscript_string (w+ind, 0);
|
|
||||||
+ t = expand_assignment_string_to_string (w+ind, 0);
|
|
||||||
s = (t && strchr (t, CTLESC)) ? quote_escapes (t) : t;
|
|
||||||
value = sh_single_quote (s ? s : "");
|
|
||||||
if (s != t)
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 23
|
|
||||||
+#define PATCHLEVEL 24
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/subst.c b/subst.c
|
|
||||||
--- a/subst.c
|
|
||||||
+++ b/subst.c
|
|
||||||
@@ -10802,7 +10802,11 @@ expand_subscript_string (string, quoted)
|
|
||||||
oe = expand_no_split_dollar_star;
|
|
||||||
ret = (char *)NULL;
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
td.flags = W_NOPROCSUB|W_NOTILDE|W_NOSPLIT2; /* XXX - W_NOCOMSUB? */
|
|
||||||
+#else
|
|
||||||
+ td.flags = W_NOPROCSUB|W_NOSPLIT2; /* XXX - W_NOCOMSUB? */
|
|
||||||
+#endif
|
|
||||||
td.word = savestring (string); /* in case it's freed on error */
|
|
||||||
|
|
||||||
expand_no_split_dollar_star = 1;
|
|
@ -1,24 +0,0 @@
|
|||||||
diff --git a/execute_cmd.c b/execute_cmd.c
|
|
||||||
--- a/execute_cmd.c
|
|
||||||
+++ b/execute_cmd.c
|
|
||||||
@@ -1725,6 +1725,9 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
|
||||||
return_code = (return_code == EXECUTION_SUCCESS) ? EXECUTION_FAILURE
|
|
||||||
: EXECUTION_SUCCESS;
|
|
||||||
|
|
||||||
+ /* Check for terminating signals before we return to our caller, which we
|
|
||||||
+ expect to exit immediately anyway. */
|
|
||||||
+ CHECK_TERMSIG;
|
|
||||||
|
|
||||||
/* If we were explicitly placed in a subshell with (), we need
|
|
||||||
to do the `shell cleanup' things, such as running traps[0]. */
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 24
|
|
||||||
+#define PATCHLEVEL 25
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
@ -1,23 +0,0 @@
|
|||||||
diff --git a/lib/readline/colors.c b/lib/readline/colors.c
|
|
||||||
--- a/lib/readline/colors.c
|
|
||||||
+++ b/lib/readline/colors.c
|
|
||||||
@@ -73,7 +73,7 @@
|
|
||||||
static bool is_colored (enum indicator_no type);
|
|
||||||
static void restore_default_color (void);
|
|
||||||
|
|
||||||
-#define RL_COLOR_PREFIX_EXTENSION "readline-colored-completion-prefix"
|
|
||||||
+#define RL_COLOR_PREFIX_EXTENSION ".readline-colored-completion-prefix"
|
|
||||||
|
|
||||||
COLOR_EXT_TYPE *_rl_color_ext_list = 0;
|
|
||||||
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 25
|
|
||||||
+#define PATCHLEVEL 26
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
@ -1,60 +0,0 @@
|
|||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 2
|
|
||||||
+#define PATCHLEVEL 3
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/print_cmd.c b/print_cmd.c
|
|
||||||
--- a/print_cmd.c
|
|
||||||
+++ b/print_cmd.c
|
|
||||||
@@ -297,10 +297,12 @@ make_command_string_internal (command)
|
|
||||||
case '\n': /* special case this */
|
|
||||||
{
|
|
||||||
char c = command->value.Connection->connector;
|
|
||||||
+ int was_newline;
|
|
||||||
|
|
||||||
s[0] = printing_comsub ? c : ';';
|
|
||||||
s[1] = '\0';
|
|
||||||
|
|
||||||
+ was_newline = deferred_heredocs == 0 && was_heredoc == 0 && c == '\n';
|
|
||||||
if (deferred_heredocs == 0)
|
|
||||||
{
|
|
||||||
if (was_heredoc == 0)
|
|
||||||
@@ -314,6 +316,8 @@ make_command_string_internal (command)
|
|
||||||
|
|
||||||
if (inside_function_def)
|
|
||||||
cprintf ("\n");
|
|
||||||
+ else if (printing_comsub && c == '\n' && was_newline == 0)
|
|
||||||
+ cprintf ("\n"); /* preserve newlines in comsubs but don't double them */
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (c == ';')
|
|
||||||
@@ -1365,7 +1369,11 @@ print_function_def (func)
|
|
||||||
cmdcopy->redirects = func_redirects;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- newline ("}");
|
|
||||||
+ {
|
|
||||||
+ /* { */
|
|
||||||
+ newline ("}");
|
|
||||||
+ was_heredoc = 0; /* not printing any here-documents now */
|
|
||||||
+ }
|
|
||||||
|
|
||||||
dispose_command (cmdcopy);
|
|
||||||
}
|
|
||||||
@@ -1442,7 +1450,10 @@ named_function_string (name, command, flags)
|
|
||||||
cmdcopy->redirects = func_redirects;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- newline ("}");
|
|
||||||
+ { /* { */
|
|
||||||
+ newline ("}");
|
|
||||||
+ was_heredoc = 0;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
result = the_printed_command;
|
|
@ -1,50 +0,0 @@
|
|||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 3
|
|
||||||
+#define PATCHLEVEL 4
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/subst.c b/subst.c
|
|
||||||
--- a/subst.c
|
|
||||||
+++ b/subst.c
|
|
||||||
@@ -1798,6 +1798,9 @@ extract_heredoc_dolbrace_string (string, sindex, quoted, flags)
|
|
||||||
return (result);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#define PARAMEXPNEST_MAX 32 // for now
|
|
||||||
+static int dbstate[PARAMEXPNEST_MAX];
|
|
||||||
+
|
|
||||||
/* Extract a parameter expansion expression within ${ and } from STRING.
|
|
||||||
Obey the Posix.2 rules for finding the ending `}': count braces while
|
|
||||||
skipping over enclosed quoted strings and command substitutions.
|
|
||||||
@@ -1828,6 +1831,8 @@ extract_dollar_brace_string (string, sindex, quoted, flags)
|
|
||||||
if (quoted == Q_HERE_DOCUMENT && dolbrace_state == DOLBRACE_QUOTE && (flags & SX_NOALLOC) == 0)
|
|
||||||
return (extract_heredoc_dolbrace_string (string, sindex, quoted, flags));
|
|
||||||
|
|
||||||
+ dbstate[0] = dolbrace_state;
|
|
||||||
+
|
|
||||||
pass_character = 0;
|
|
||||||
nesting_level = 1;
|
|
||||||
slen = strlen (string + *sindex) + *sindex;
|
|
||||||
@@ -1852,6 +1857,8 @@ extract_dollar_brace_string (string, sindex, quoted, flags)
|
|
||||||
|
|
||||||
if (string[i] == '$' && string[i+1] == LBRACE)
|
|
||||||
{
|
|
||||||
+ if (nesting_level < PARAMEXPNEST_MAX)
|
|
||||||
+ dbstate[nesting_level] = dolbrace_state;
|
|
||||||
nesting_level++;
|
|
||||||
i += 2;
|
|
||||||
if (dolbrace_state == DOLBRACE_QUOTE || dolbrace_state == DOLBRACE_WORD)
|
|
||||||
@@ -1864,6 +1871,7 @@ extract_dollar_brace_string (string, sindex, quoted, flags)
|
|
||||||
nesting_level--;
|
|
||||||
if (nesting_level == 0)
|
|
||||||
break;
|
|
||||||
+ dolbrace_state = (nesting_level < PARAMEXPNEST_MAX) ? dbstate[nesting_level] : dbstate[0]; /* Guess using initial state */
|
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 4
|
|
||||||
+#define PATCHLEVEL 5
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/subst.c b/subst.c
|
|
||||||
--- a/subst.c
|
|
||||||
+++ b/subst.c
|
|
||||||
@@ -8965,7 +8965,8 @@ pat_subst (string, pat, rep, mflags)
|
|
||||||
return (ret);
|
|
||||||
}
|
|
||||||
else if (*string == 0 && (match_pattern (string, pat, mtype, &s, &e) != 0))
|
|
||||||
- return ((mflags & MATCH_EXPREP) ? strcreplace (rep, '&', "", 2) : savestring (rep));
|
|
||||||
+ return (mflags & MATCH_EXPREP) ? strcreplace (rep, '&', "", 2)
|
|
||||||
+ : (rep ? savestring (rep) : savestring (""));
|
|
||||||
|
|
||||||
ret = (char *)xmalloc (rsize = 64);
|
|
||||||
ret[0] = '\0';
|
|
@ -1,230 +0,0 @@
|
|||||||
diff --git a/builtins/common.h b/builtins/common.h
|
|
||||||
--- a/builtins/common.h
|
|
||||||
+++ b/builtins/common.h
|
|
||||||
@@ -257,6 +257,8 @@ extern int print_shift_error;
|
|
||||||
extern int expand_once_flag;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+extern int expaliases_flag;
|
|
||||||
+
|
|
||||||
/* variables from source.def */
|
|
||||||
extern int source_searches_cwd;
|
|
||||||
extern int source_uses_path;
|
|
||||||
diff --git a/builtins/shopt.def b/builtins/shopt.def
|
|
||||||
--- a/builtins/shopt.def
|
|
||||||
+++ b/builtins/shopt.def
|
|
||||||
@@ -149,6 +149,9 @@ static int shopt_set_complete_direxpand PARAMS((char *, int));
|
|
||||||
static int set_assoc_expand PARAMS((char *, int));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+int expaliases_flag = 0;
|
|
||||||
+static int shopt_set_expaliases PARAMS((char *, int));
|
|
||||||
+
|
|
||||||
static int shopt_set_debug_mode PARAMS((char *, int));
|
|
||||||
|
|
||||||
static int shopt_login_shell;
|
|
||||||
@@ -198,7 +201,7 @@ static struct {
|
|
||||||
#endif
|
|
||||||
{ "dotglob", &glob_dot_filenames, (shopt_set_func_t *)NULL },
|
|
||||||
{ "execfail", &no_exit_on_failed_exec, (shopt_set_func_t *)NULL },
|
|
||||||
- { "expand_aliases", &expand_aliases, (shopt_set_func_t *)NULL },
|
|
||||||
+ { "expand_aliases", &expaliases_flag, shopt_set_expaliases },
|
|
||||||
#if defined (DEBUGGER)
|
|
||||||
{ "extdebug", &debugging_mode, shopt_set_debug_mode },
|
|
||||||
#endif
|
|
||||||
@@ -350,7 +353,7 @@ reset_shopt_options ()
|
|
||||||
check_window_size = CHECKWINSIZE_DEFAULT;
|
|
||||||
allow_null_glob_expansion = glob_dot_filenames = 0;
|
|
||||||
no_exit_on_failed_exec = 0;
|
|
||||||
- expand_aliases = 0;
|
|
||||||
+ expand_aliases = expaliases_flag = 0;
|
|
||||||
extended_quote = 1;
|
|
||||||
fail_glob_expansion = 0;
|
|
||||||
glob_asciirange = GLOBASCII_DEFAULT;
|
|
||||||
@@ -631,6 +634,15 @@ shopt_set_debug_mode (option_name, mode)
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int
|
|
||||||
+shopt_set_expaliases (option_name, mode)
|
|
||||||
+ char *option_name;
|
|
||||||
+ int mode;
|
|
||||||
+{
|
|
||||||
+ expand_aliases = expaliases_flag;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
#if defined (READLINE)
|
|
||||||
static int
|
|
||||||
shopt_enable_hostname_completion (option_name, mode)
|
|
||||||
diff --git a/execute_cmd.c b/execute_cmd.c
|
|
||||||
--- a/execute_cmd.c
|
|
||||||
+++ b/execute_cmd.c
|
|
||||||
@@ -1536,7 +1536,7 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
|
||||||
expansion with `shopt -s expand_alias' to continue to expand
|
|
||||||
aliases. */
|
|
||||||
if (ois != interactive_shell)
|
|
||||||
- expand_aliases = 0;
|
|
||||||
+ expand_aliases = expaliases_flag = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Subshells are neither login nor interactive. */
|
|
||||||
diff --git a/general.c b/general.c
|
|
||||||
--- a/general.c
|
|
||||||
+++ b/general.c
|
|
||||||
@@ -91,7 +91,7 @@ static struct {
|
|
||||||
{
|
|
||||||
&interactive_comments,
|
|
||||||
&source_uses_path,
|
|
||||||
- &expand_aliases,
|
|
||||||
+ &expaliases_flag,
|
|
||||||
&inherit_errexit,
|
|
||||||
&print_shift_error,
|
|
||||||
0
|
|
||||||
@@ -106,7 +106,8 @@ posix_initialize (on)
|
|
||||||
/* Things that should be turned on when posix mode is enabled. */
|
|
||||||
if (on != 0)
|
|
||||||
{
|
|
||||||
- interactive_comments = source_uses_path = expand_aliases = 1;
|
|
||||||
+ interactive_comments = source_uses_path = 1;
|
|
||||||
+ expand_aliases = expaliases_flag = 1;
|
|
||||||
inherit_errexit = 1;
|
|
||||||
source_searches_cwd = 0;
|
|
||||||
print_shift_error = 1;
|
|
||||||
@@ -116,13 +117,14 @@ posix_initialize (on)
|
|
||||||
else if (saved_posix_vars) /* on == 0, restore saved settings */
|
|
||||||
{
|
|
||||||
set_posix_options (saved_posix_vars);
|
|
||||||
+ expand_aliases = expaliases_flag;
|
|
||||||
free (saved_posix_vars);
|
|
||||||
saved_posix_vars = 0;
|
|
||||||
}
|
|
||||||
else /* on == 0, restore a default set of settings */
|
|
||||||
{
|
|
||||||
source_searches_cwd = 1;
|
|
||||||
- expand_aliases = interactive_shell;
|
|
||||||
+ expand_aliases = expaliases_flag = interactive_shell; /* XXX */
|
|
||||||
print_shift_error = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/parse.y b/parse.y
|
|
||||||
--- a/parse.y
|
|
||||||
+++ b/parse.y
|
|
||||||
@@ -3306,6 +3306,8 @@ reset_parser ()
|
|
||||||
if (parser_state & (PST_EXTPAT|PST_CMDSUBST))
|
|
||||||
extended_glob = global_extglob;
|
|
||||||
#endif
|
|
||||||
+ if (parser_state & (PST_CMDSUBST|PST_STRING))
|
|
||||||
+ expand_aliases = expaliases_flag;
|
|
||||||
|
|
||||||
parser_state = 0;
|
|
||||||
here_doc_first_line = 0;
|
|
||||||
@@ -4388,6 +4390,7 @@ parse_string_to_command (string, flags)
|
|
||||||
if (flags & SX_COMPLETE)
|
|
||||||
parser_state |= PST_NOERROR;
|
|
||||||
|
|
||||||
+ parser_state |= PST_STRING;
|
|
||||||
expand_aliases = 0;
|
|
||||||
|
|
||||||
cmd = 0;
|
|
||||||
@@ -6401,7 +6404,7 @@ parse_string_to_word_list (s, flags, whom)
|
|
||||||
/* State flags we don't want to persist into compound assignments. */
|
|
||||||
parser_state &= ~PST_NOEXPAND; /* parse_comsub sentinel */
|
|
||||||
/* State flags we want to set for this run through the tokenizer. */
|
|
||||||
- parser_state |= PST_COMPASSIGN|PST_REPARSE;
|
|
||||||
+ parser_state |= PST_COMPASSIGN|PST_REPARSE|PST_STRING;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((tok = read_token (READ)) != yacc_EOF)
|
|
||||||
diff --git a/parser.h b/parser.h
|
|
||||||
--- a/parser.h
|
|
||||||
+++ b/parser.h
|
|
||||||
@@ -50,6 +50,7 @@
|
|
||||||
#define PST_ENDALIAS 0x200000 /* just finished expanding and consuming an alias */
|
|
||||||
#define PST_NOEXPAND 0x400000 /* don't expand anything in read_token_word; for command substitution */
|
|
||||||
#define PST_NOERROR 0x800000 /* don't print error messages in yyerror */
|
|
||||||
+#define PST_STRING 0x1000000 /* parsing a string to a command or word list */
|
|
||||||
|
|
||||||
/* Definition of the delimiter stack. Needed by parse.y and bashhist.c. */
|
|
||||||
struct dstack {
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 5
|
|
||||||
+#define PATCHLEVEL 6
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/shell.c b/shell.c
|
|
||||||
--- a/shell.c
|
|
||||||
+++ b/shell.c
|
|
||||||
@@ -1844,8 +1844,8 @@ reset_option_defaults ()
|
|
||||||
static void
|
|
||||||
init_interactive ()
|
|
||||||
{
|
|
||||||
- expand_aliases = interactive_shell = startup_state = 1;
|
|
||||||
- interactive = 1;
|
|
||||||
+ expand_aliases = expaliases_flag = 1;
|
|
||||||
+ interactive_shell = startup_state = interactive = 1;
|
|
||||||
#if defined (HISTORY)
|
|
||||||
if (enable_history_list == -1)
|
|
||||||
enable_history_list = 1; /* set default */
|
|
||||||
@@ -1865,7 +1865,7 @@ init_noninteractive ()
|
|
||||||
bash_history_reinit (0);
|
|
||||||
#endif /* HISTORY */
|
|
||||||
interactive_shell = startup_state = interactive = 0;
|
|
||||||
- expand_aliases = posixly_correct; /* XXX - was 0 not posixly_correct */
|
|
||||||
+ expand_aliases = expaliases_flag = posixly_correct; /* XXX - was 0 not posixly_correct */
|
|
||||||
no_line_editing = 1;
|
|
||||||
#if defined (JOB_CONTROL)
|
|
||||||
/* Even if the shell is not interactive, enable job control if the -i or
|
|
||||||
@@ -1882,7 +1882,7 @@ init_interactive_script ()
|
|
||||||
enable_history_list = 1;
|
|
||||||
#endif
|
|
||||||
init_noninteractive ();
|
|
||||||
- expand_aliases = interactive_shell = startup_state = 1;
|
|
||||||
+ expand_aliases = expaliases_flag = interactive_shell = startup_state = 1;
|
|
||||||
#if defined (HISTORY)
|
|
||||||
remember_on_history = enable_history_list; /* XXX */
|
|
||||||
#endif
|
|
||||||
@@ -2025,7 +2025,7 @@ shell_reinitialize ()
|
|
||||||
debugging = do_version = line_number = last_command_exit_value = 0;
|
|
||||||
forced_interactive = interactive_shell = 0;
|
|
||||||
subshell_environment = running_in_background = 0;
|
|
||||||
- expand_aliases = 0;
|
|
||||||
+ expand_aliases = expaliases_flag = 0;
|
|
||||||
bash_argv_initialized = 0;
|
|
||||||
|
|
||||||
/* XXX - should we set jobs_m_flag to 0 here? */
|
|
||||||
diff --git a/y.tab.c b/y.tab.c
|
|
||||||
--- a/y.tab.c
|
|
||||||
+++ b/y.tab.c
|
|
||||||
@@ -5617,6 +5617,8 @@ reset_parser ()
|
|
||||||
if (parser_state & (PST_EXTPAT|PST_CMDSUBST))
|
|
||||||
extended_glob = global_extglob;
|
|
||||||
#endif
|
|
||||||
+ if (parser_state & (PST_CMDSUBST|PST_STRING))
|
|
||||||
+ expand_aliases = expaliases_flag;
|
|
||||||
|
|
||||||
parser_state = 0;
|
|
||||||
here_doc_first_line = 0;
|
|
||||||
@@ -6699,6 +6701,7 @@ parse_string_to_command (string, flags)
|
|
||||||
if (flags & SX_COMPLETE)
|
|
||||||
parser_state |= PST_NOERROR;
|
|
||||||
|
|
||||||
+ parser_state |= PST_STRING;
|
|
||||||
expand_aliases = 0;
|
|
||||||
|
|
||||||
cmd = 0;
|
|
||||||
@@ -8712,7 +8715,7 @@ parse_string_to_word_list (s, flags, whom)
|
|
||||||
/* State flags we don't want to persist into compound assignments. */
|
|
||||||
parser_state &= ~PST_NOEXPAND; /* parse_comsub sentinel */
|
|
||||||
/* State flags we want to set for this run through the tokenizer. */
|
|
||||||
- parser_state |= PST_COMPASSIGN|PST_REPARSE;
|
|
||||||
+ parser_state |= PST_COMPASSIGN|PST_REPARSE|PST_STRING;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((tok = read_token (READ)) != yacc_EOF)
|
|
@ -1,206 +0,0 @@
|
|||||||
diff --git a/builtins/evalstring.c b/builtins/evalstring.c
|
|
||||||
--- a/builtins/evalstring.c
|
|
||||||
+++ b/builtins/evalstring.c
|
|
||||||
@@ -431,6 +431,8 @@ parse_and_execute (string, from_file, flags)
|
|
||||||
|
|
||||||
if (parse_command () == 0)
|
|
||||||
{
|
|
||||||
+ int local_expalias, local_alflag;
|
|
||||||
+
|
|
||||||
if ((flags & SEVAL_PARSEONLY) || (interactive_shell == 0 && read_but_dont_execute))
|
|
||||||
{
|
|
||||||
last_result = EXECUTION_SUCCESS;
|
|
||||||
@@ -507,6 +509,19 @@ parse_and_execute (string, from_file, flags)
|
|
||||||
}
|
|
||||||
#endif /* ONESHOT */
|
|
||||||
|
|
||||||
+ /* We play tricks in the parser and command_substitute() turning
|
|
||||||
+ expand_aliases on and off depending on which parsing pass and
|
|
||||||
+ whether or not we're in posix mode. This only matters for
|
|
||||||
+ parsing, and we let the higher layers deal with that. We just
|
|
||||||
+ want to ensure that expand_aliases is set to the appropriate
|
|
||||||
+ global value when we go to execute this command, so we save
|
|
||||||
+ and restore it around the execution (we don't restore it if
|
|
||||||
+ the global value of the flag (expaliases_flag) changes). */
|
|
||||||
+ local_expalias = expand_aliases;
|
|
||||||
+ local_alflag = expaliases_flag;
|
|
||||||
+ if (subshell_environment & SUBSHELL_COMSUB)
|
|
||||||
+ expand_aliases = expaliases_flag;
|
|
||||||
+
|
|
||||||
/* See if this is a candidate for $( <file ). */
|
|
||||||
if (startup_state == 2 &&
|
|
||||||
(subshell_environment & SUBSHELL_COMSUB) &&
|
|
||||||
@@ -524,6 +539,10 @@ parse_and_execute (string, from_file, flags)
|
|
||||||
dispose_fd_bitmap (bitmap);
|
|
||||||
discard_unwind_frame ("pe_dispose");
|
|
||||||
|
|
||||||
+ /* If the global value didn't change, we restore what we had. */
|
|
||||||
+ if ((subshell_environment & SUBSHELL_COMSUB) && local_alflag == expaliases_flag)
|
|
||||||
+ expand_aliases = local_expalias;
|
|
||||||
+
|
|
||||||
if (flags & SEVAL_ONECMD)
|
|
||||||
{
|
|
||||||
reset_parser ();
|
|
||||||
diff --git a/command.h b/command.h
|
|
||||||
--- a/command.h
|
|
||||||
+++ b/command.h
|
|
||||||
@@ -114,6 +114,7 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select,
|
|
||||||
#define PF_COMPLETE 0x10 /* same as W_COMPLETE, sets SX_COMPLETE */
|
|
||||||
#define PF_EXPANDRHS 0x20 /* same as W_EXPANDRHS */
|
|
||||||
#define PF_ALLINDS 0x40 /* array, act as if [@] was supplied */
|
|
||||||
+#define PF_BACKQUOTE 0x80 /* differentiate `` from $() for command_substitute */
|
|
||||||
|
|
||||||
/* Possible values for subshell_environment */
|
|
||||||
#define SUBSHELL_ASYNC 0x01 /* subshell caused by `command &' */
|
|
||||||
diff --git a/parse.y b/parse.y
|
|
||||||
--- a/parse.y
|
|
||||||
+++ b/parse.y
|
|
||||||
@@ -3612,6 +3612,7 @@ tokword:
|
|
||||||
#define P_BACKQUOTE 0x0010 /* parsing a backquoted command substitution */
|
|
||||||
#define P_ARRAYSUB 0x0020 /* parsing a [...] array subscript for assignment */
|
|
||||||
#define P_DOLBRACE 0x0040 /* parsing a ${...} construct */
|
|
||||||
+#define P_ARITH 0x0080 /* parsing a $(( )) arithmetic expansion */
|
|
||||||
|
|
||||||
/* Lexical state while parsing a grouping construct or $(...). */
|
|
||||||
#define LEX_WASDOL 0x0001
|
|
||||||
@@ -3910,6 +3911,9 @@ parse_matched_pair (qc, open, close, lenp, flags)
|
|
||||||
}
|
|
||||||
else if ((flags & (P_ARRAYSUB|P_DOLBRACE)) && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '[')) /* ) } ] */
|
|
||||||
goto parse_dollar_word;
|
|
||||||
+ else if ((flags & P_ARITH) && (tflags & LEX_WASDOL) && ch == '(') /*)*/
|
|
||||||
+ /* $() inside $(( ))/$[ ] */
|
|
||||||
+ goto parse_dollar_word;
|
|
||||||
#if defined (PROCESS_SUBSTITUTION)
|
|
||||||
/* XXX - technically this should only be recognized at the start of
|
|
||||||
a word */
|
|
||||||
@@ -3940,7 +3944,7 @@ parse_dollar_word:
|
|
||||||
else if (ch == '{') /* } */
|
|
||||||
nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags);
|
|
||||||
else if (ch == '[') /* ] */
|
|
||||||
- nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
|
|
||||||
+ nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags|P_ARITH);
|
|
||||||
|
|
||||||
CHECK_NESTRET_ERROR ();
|
|
||||||
APPEND_NESTRET ();
|
|
||||||
@@ -4079,7 +4083,7 @@ parse_comsub (qc, open, close, lenp, flags)
|
|
||||||
peekc = shell_getc (1);
|
|
||||||
shell_ungetc (peekc);
|
|
||||||
if (peekc == '(') /*)*/
|
|
||||||
- return (parse_matched_pair (qc, open, close, lenp, 0));
|
|
||||||
+ return (parse_matched_pair (qc, open, close, lenp, P_ARITH));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*itrace("parse_comsub: qc = `%c' open = %c close = %c", qc, open, close);*/
|
|
||||||
@@ -4500,7 +4504,7 @@ parse_arith_cmd (ep, adddq)
|
|
||||||
int ttoklen;
|
|
||||||
|
|
||||||
exp_lineno = line_number;
|
|
||||||
- ttok = parse_matched_pair (0, '(', ')', &ttoklen, 0);
|
|
||||||
+ ttok = parse_matched_pair (0, '(', ')', &ttoklen, P_ARITH);
|
|
||||||
rval = 1;
|
|
||||||
if (ttok == &matched_pair_error)
|
|
||||||
return -1;
|
|
||||||
@@ -5015,7 +5019,7 @@ read_token_word (character)
|
|
||||||
pop_delimiter (dstack);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- ttok = parse_matched_pair (cd, '[', ']', &ttoklen, 0);
|
|
||||||
+ ttok = parse_matched_pair (cd, '[', ']', &ttoklen, P_ARITH);
|
|
||||||
if (ttok == &matched_pair_error)
|
|
||||||
return -1; /* Bail immediately. */
|
|
||||||
RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 3,
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 6
|
|
||||||
+#define PATCHLEVEL 7
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/subst.c b/subst.c
|
|
||||||
--- a/subst.c
|
|
||||||
+++ b/subst.c
|
|
||||||
@@ -7123,8 +7123,12 @@ command_substitute (string, quoted, flags)
|
|
||||||
remove_quoted_escapes (string);
|
|
||||||
|
|
||||||
/* We want to expand aliases on this pass if we are not in posix mode
|
|
||||||
- for backwards compatibility. */
|
|
||||||
- if (expand_aliases)
|
|
||||||
+ for backwards compatibility. parse_and_execute() takes care of
|
|
||||||
+ setting expand_aliases back to the global value when executing the
|
|
||||||
+ parsed string. We only do this for $(...) command substitution,
|
|
||||||
+ since that is what parse_comsub handles; `` comsubs are processed
|
|
||||||
+ using parse.y:parse_matched_pair(). */
|
|
||||||
+ if (expand_aliases && (flags & PF_BACKQUOTE) == 0)
|
|
||||||
expand_aliases = posixly_correct == 0;
|
|
||||||
|
|
||||||
startup_state = 2; /* see if we can avoid a fork */
|
|
||||||
@@ -11292,7 +11296,7 @@ add_string:
|
|
||||||
else
|
|
||||||
{
|
|
||||||
de_backslash (temp);
|
|
||||||
- tword = command_substitute (temp, quoted, 0);
|
|
||||||
+ tword = command_substitute (temp, quoted, PF_BACKQUOTE);
|
|
||||||
temp1 = tword ? tword->word : (char *)NULL;
|
|
||||||
if (tword)
|
|
||||||
dispose_word_desc (tword);
|
|
||||||
diff --git a/y.tab.c b/y.tab.c
|
|
||||||
--- a/y.tab.c
|
|
||||||
+++ b/y.tab.c
|
|
||||||
@@ -5923,6 +5923,7 @@ tokword:
|
|
||||||
#define P_BACKQUOTE 0x0010 /* parsing a backquoted command substitution */
|
|
||||||
#define P_ARRAYSUB 0x0020 /* parsing a [...] array subscript for assignment */
|
|
||||||
#define P_DOLBRACE 0x0040 /* parsing a ${...} construct */
|
|
||||||
+#define P_ARITH 0x0080 /* parsing a $(( )) arithmetic expansion */
|
|
||||||
|
|
||||||
/* Lexical state while parsing a grouping construct or $(...). */
|
|
||||||
#define LEX_WASDOL 0x0001
|
|
||||||
@@ -6221,6 +6222,9 @@ parse_matched_pair (qc, open, close, lenp, flags)
|
|
||||||
}
|
|
||||||
else if ((flags & (P_ARRAYSUB|P_DOLBRACE)) && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '[')) /* ) } ] */
|
|
||||||
goto parse_dollar_word;
|
|
||||||
+ else if ((flags & P_ARITH) && (tflags & LEX_WASDOL) && ch == '(') /*)*/
|
|
||||||
+ /* $() inside $(( ))/$[ ] */
|
|
||||||
+ goto parse_dollar_word;
|
|
||||||
#if defined (PROCESS_SUBSTITUTION)
|
|
||||||
/* XXX - technically this should only be recognized at the start of
|
|
||||||
a word */
|
|
||||||
@@ -6251,7 +6255,7 @@ parse_dollar_word:
|
|
||||||
else if (ch == '{') /* } */
|
|
||||||
nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags);
|
|
||||||
else if (ch == '[') /* ] */
|
|
||||||
- nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
|
|
||||||
+ nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags|P_ARITH);
|
|
||||||
|
|
||||||
CHECK_NESTRET_ERROR ();
|
|
||||||
APPEND_NESTRET ();
|
|
||||||
@@ -6390,7 +6394,7 @@ parse_comsub (qc, open, close, lenp, flags)
|
|
||||||
peekc = shell_getc (1);
|
|
||||||
shell_ungetc (peekc);
|
|
||||||
if (peekc == '(') /*)*/
|
|
||||||
- return (parse_matched_pair (qc, open, close, lenp, 0));
|
|
||||||
+ return (parse_matched_pair (qc, open, close, lenp, P_ARITH));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*itrace("parse_comsub: qc = `%c' open = %c close = %c", qc, open, close);*/
|
|
||||||
@@ -6811,7 +6815,7 @@ parse_arith_cmd (ep, adddq)
|
|
||||||
int ttoklen;
|
|
||||||
|
|
||||||
exp_lineno = line_number;
|
|
||||||
- ttok = parse_matched_pair (0, '(', ')', &ttoklen, 0);
|
|
||||||
+ ttok = parse_matched_pair (0, '(', ')', &ttoklen, P_ARITH);
|
|
||||||
rval = 1;
|
|
||||||
if (ttok == &matched_pair_error)
|
|
||||||
return -1;
|
|
||||||
@@ -7326,7 +7330,7 @@ read_token_word (character)
|
|
||||||
pop_delimiter (dstack);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- ttok = parse_matched_pair (cd, '[', ']', &ttoklen, 0);
|
|
||||||
+ ttok = parse_matched_pair (cd, '[', ']', &ttoklen, P_ARITH);
|
|
||||||
if (ttok == &matched_pair_error)
|
|
||||||
return -1; /* Bail immediately. */
|
|
||||||
RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 3,
|
|
@ -1,34 +0,0 @@
|
|||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 7
|
|
||||||
+#define PATCHLEVEL 8
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
diff --git a/subst.c b/subst.c
|
|
||||||
--- a/subst.c
|
|
||||||
+++ b/subst.c
|
|
||||||
@@ -3819,6 +3819,10 @@ pos_params (string, start, end, quoted, pflags)
|
|
||||||
#define EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC || s == '~')
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+/* We don't perform process substitution in arithmetic expressions, so don't
|
|
||||||
+ bother checking for it. */
|
|
||||||
+#define ARITH_EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC || s == '~')
|
|
||||||
+
|
|
||||||
/* If there are any characters in STRING that require full expansion,
|
|
||||||
then call FUNC to expand STRING; otherwise just perform quote
|
|
||||||
removal if necessary. This returns a new string. */
|
|
||||||
@@ -4028,7 +4032,7 @@ expand_arith_string (string, quoted)
|
|
||||||
i = saw_quote = 0;
|
|
||||||
while (string[i])
|
|
||||||
{
|
|
||||||
- if (EXP_CHAR (string[i]))
|
|
||||||
+ if (ARITH_EXP_CHAR (string[i]))
|
|
||||||
break;
|
|
||||||
else if (string[i] == '\'' || string[i] == '\\' || string[i] == '"')
|
|
||||||
saw_quote = string[i];
|
|
@ -1,23 +0,0 @@
|
|||||||
diff --git a/expr.c b/expr.c
|
|
||||||
--- a/expr.c
|
|
||||||
+++ b/expr.c
|
|
||||||
@@ -1168,6 +1168,8 @@ expr_streval (tok, e, lvalue)
|
|
||||||
/* [[[[[ */
|
|
||||||
#if defined (ARRAY_VARS)
|
|
||||||
aflag = tflag; /* use a different variable for now */
|
|
||||||
+ if (shell_compatibility_level > 51)
|
|
||||||
+ aflag |= AV_ATSTARKEYS;
|
|
||||||
v = (e == ']') ? array_variable_part (tok, tflag, (char **)0, (int *)0) : find_variable (tok);
|
|
||||||
#else
|
|
||||||
v = find_variable (tok);
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
--- 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 8
|
|
||||||
+#define PATCHLEVEL 9
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
@ -1,186 +0,0 @@
|
|||||||
diff --git a/arrayfunc.c b/arrayfunc.c
|
|
||||||
--- a/arrayfunc.c
|
|
||||||
+++ b/arrayfunc.c
|
|
||||||
@@ -208,7 +208,10 @@ bind_assoc_var_internal (entry, hash, key, value, flags)
|
|
||||||
newval = make_array_variable_value (entry, 0, key, value, flags);
|
|
||||||
|
|
||||||
if (entry->assign_func)
|
|
||||||
- (*entry->assign_func) (entry, newval, 0, key);
|
|
||||||
+ {
|
|
||||||
+ (*entry->assign_func) (entry, newval, 0, key);
|
|
||||||
+ FREE (key);
|
|
||||||
+ }
|
|
||||||
else
|
|
||||||
assoc_insert (hash, key, newval);
|
|
||||||
|
|
||||||
@@ -985,6 +988,7 @@ quote_compound_array_word (w, type)
|
|
||||||
if (t != w+ind)
|
|
||||||
free (t);
|
|
||||||
strcpy (nword + i, value);
|
|
||||||
+ free (value);
|
|
||||||
|
|
||||||
return nword;
|
|
||||||
}
|
|
||||||
diff --git a/builtins/evalfile.c b/builtins/evalfile.c
|
|
||||||
--- a/builtins/evalfile.c
|
|
||||||
+++ b/builtins/evalfile.c
|
|
||||||
@@ -79,7 +79,8 @@ _evalfile (filename, flags)
|
|
||||||
{
|
|
||||||
volatile int old_interactive;
|
|
||||||
procenv_t old_return_catch;
|
|
||||||
- int return_val, fd, result, pflags, i, nnull;
|
|
||||||
+ int return_val, fd, result, pflags, nnull;
|
|
||||||
+ size_t i;
|
|
||||||
ssize_t nr; /* return value from read(2) */
|
|
||||||
char *string;
|
|
||||||
struct stat finfo;
|
|
||||||
@@ -112,10 +113,10 @@ _evalfile (filename, flags)
|
|
||||||
|
|
||||||
if (fd < 0 || (fstat (fd, &finfo) == -1))
|
|
||||||
{
|
|
||||||
- i = errno;
|
|
||||||
+ result = errno;
|
|
||||||
if (fd >= 0)
|
|
||||||
close (fd);
|
|
||||||
- errno = i;
|
|
||||||
+ errno = result;
|
|
||||||
|
|
||||||
file_error_and_exit:
|
|
||||||
if (((flags & FEVAL_ENOENTOK) == 0) || errno != ENOENT)
|
|
||||||
diff --git a/lib/readline/text.c b/lib/readline/text.c
|
|
||||||
--- a/lib/readline/text.c
|
|
||||||
+++ b/lib/readline/text.c
|
|
||||||
@@ -1409,8 +1409,7 @@ rl_change_case (int count, int op)
|
|
||||||
#if defined (HANDLE_MULTIBYTE)
|
|
||||||
WCHAR_T wc, nwc;
|
|
||||||
char mb[MB_LEN_MAX+1];
|
|
||||||
- int mlen;
|
|
||||||
- size_t m;
|
|
||||||
+ size_t m, mlen;
|
|
||||||
mbstate_t mps;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -1479,12 +1478,13 @@ rl_change_case (int count, int op)
|
|
||||||
|
|
||||||
memset (&ts, 0, sizeof (mbstate_t));
|
|
||||||
mlen = WCRTOMB (mb, nwc, &ts);
|
|
||||||
- if (mlen < 0)
|
|
||||||
+
|
|
||||||
+ if (MB_INVALIDCH (mlen))
|
|
||||||
{
|
|
||||||
nwc = wc;
|
|
||||||
memset (&ts, 0, sizeof (mbstate_t));
|
|
||||||
mlen = WCRTOMB (mb, nwc, &ts);
|
|
||||||
- if (mlen < 0) /* should not happen */
|
|
||||||
+ if (MB_INVALIDCH (mlen)) /* should not happen */
|
|
||||||
strncpy (mb, rl_line_buffer + start, mlen = m);
|
|
||||||
}
|
|
||||||
if (mlen > 0)
|
|
||||||
diff --git a/lib/readline/util.c b/lib/readline/util.c
|
|
||||||
--- a/lib/readline/util.c
|
|
||||||
+++ b/lib/readline/util.c
|
|
||||||
@@ -556,7 +556,10 @@ _rl_audit_tty (char *string)
|
|
||||||
size = strlen (string) + 1;
|
|
||||||
|
|
||||||
if (NLMSG_SPACE (size) > MAX_AUDIT_MESSAGE_LENGTH)
|
|
||||||
- return;
|
|
||||||
+ {
|
|
||||||
+ close (fd);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
memset (&req, 0, sizeof(req));
|
|
||||||
req.nlh.nlmsg_len = NLMSG_SPACE (size);
|
|
||||||
diff --git a/lib/sh/casemod.c b/lib/sh/casemod.c
|
|
||||||
--- a/lib/sh/casemod.c
|
|
||||||
+++ b/lib/sh/casemod.c
|
|
||||||
@@ -111,8 +111,7 @@ sh_modcase (string, pat, flags)
|
|
||||||
#if defined (HANDLE_MULTIBYTE)
|
|
||||||
wchar_t nwc;
|
|
||||||
char mb[MB_LEN_MAX+1];
|
|
||||||
- int mlen;
|
|
||||||
- size_t m;
|
|
||||||
+ size_t m, mlen;
|
|
||||||
mbstate_t state;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -254,8 +253,9 @@ singlebyte:
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mlen = wcrtomb (mb, nwc, &state);
|
|
||||||
- if (mlen > 0)
|
|
||||||
- mb[mlen] = '\0';
|
|
||||||
+ if (MB_INVALIDCH (mlen))
|
|
||||||
+ strncpy (mb, string + start, mlen = m);
|
|
||||||
+ mb[mlen] = '\0';
|
|
||||||
/* Don't assume the same width */
|
|
||||||
strncpy (ret + retind, mb, mlen);
|
|
||||||
retind += mlen;
|
|
||||||
diff --git a/lib/sh/zwrite.c b/lib/sh/zwrite.c
|
|
||||||
--- a/lib/sh/zwrite.c
|
|
||||||
+++ b/lib/sh/zwrite.c
|
|
||||||
@@ -41,7 +41,9 @@ zwrite (fd, buf, nb)
|
|
||||||
char *buf;
|
|
||||||
size_t nb;
|
|
||||||
{
|
|
||||||
- int n, i, nt;
|
|
||||||
+ int nt;
|
|
||||||
+ size_t n;
|
|
||||||
+ ssize_t i;
|
|
||||||
|
|
||||||
for (n = nb, nt = 0;;)
|
|
||||||
{
|
|
||||||
diff --git a/subst.c b/subst.c
|
|
||||||
--- a/subst.c
|
|
||||||
+++ b/subst.c
|
|
||||||
@@ -4287,12 +4287,17 @@ expand_string_dollar_quote (string, flags)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
trans = locale_expand (t, 0, news-sindex, 0, &translen);
|
|
||||||
- free (t);
|
|
||||||
if (singlequote_translations &&
|
|
||||||
((news-sindex-1) != translen || STREQN (t, trans, translen) == 0))
|
|
||||||
- t = sh_single_quote (trans);
|
|
||||||
+ {
|
|
||||||
+ free (t);
|
|
||||||
+ t = sh_single_quote (trans);
|
|
||||||
+ }
|
|
||||||
else
|
|
||||||
- t = sh_mkdoublequoted (trans, translen, 0);
|
|
||||||
+ {
|
|
||||||
+ free (t);
|
|
||||||
+ t = sh_mkdoublequoted (trans, translen, 0);
|
|
||||||
+ }
|
|
||||||
sindex = news;
|
|
||||||
}
|
|
||||||
#endif /* TRANSLATABLE_STRINGS */
|
|
||||||
diff --git a/support/bashbug.sh.in b/support/bashbug.sh.in
|
|
||||||
--- a/support/bashbug.sh.in
|
|
||||||
+++ b/support/bashbug.sh.in
|
|
||||||
@@ -132,9 +132,9 @@ if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ]; then
|
|
||||||
DEFEDITOR=emacs
|
|
||||||
elif [ -x /usr/bin/xemacs ]; then
|
|
||||||
DEFEDITOR=xemacs
|
|
||||||
- elif [ -x /usr/bin/vim; then
|
|
||||||
+ elif [ -x /usr/bin/vim ]; then
|
|
||||||
DEFEDITOR=vim
|
|
||||||
- elif [ -x /usr/bin/gvim; then
|
|
||||||
+ elif [ -x /usr/bin/gvim ]; then
|
|
||||||
DEFEDITOR=gvim
|
|
||||||
elif [ -x /usr/bin/nano ]; then
|
|
||||||
DEFEDITOR=nano
|
|
||||||
diff --git a/support/man2html.c b/support/man2html.c
|
|
||||||
--- a/support/man2html.c
|
|
||||||
+++ b/support/man2html.c
|
|
||||||
@@ -809,7 +809,7 @@ out_html(char *c)
|
|
||||||
} else if (output_possible) {
|
|
||||||
while (*c) {
|
|
||||||
outbuffer[obp++] = *c;
|
|
||||||
- if (*c == '\n' || obp > HUGE_STR_MAX) {
|
|
||||||
+ if (*c == '\n' || obp >= HUGE_STR_MAX) {
|
|
||||||
outbuffer[obp] = '\0';
|
|
||||||
add_links(outbuffer);
|
|
||||||
obp = 0;
|
|
||||||
--
|
|
||||||
2.46.0
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
|||||||
Another C compatibility issue: char ** and char * are distinct types,
|
|
||||||
and strtold expects the former for its second argument.
|
|
||||||
|
|
||||||
Submitted upstream:
|
|
||||||
|
|
||||||
<https://lists.gnu.org/archive/html/bug-bash/2023-11/msg00104.html>
|
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index 6defea0835fe8877..955c1149a8141e19 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -885,7 +885,7 @@ AC_CHECK_DECLS([strtold], [
|
|
||||||
[AC_COMPILE_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM(
|
|
||||||
[[#include <stdlib.h>]],
|
|
||||||
- [[long double r; char *foo, bar; r = strtold(foo, &bar);]]
|
|
||||||
+ [[long double r; char *foo, *bar; r = strtold(foo, &bar);]]
|
|
||||||
)],
|
|
||||||
[bash_cv_strtold_broken=no],[bash_cv_strtold_broken=yes])
|
|
||||||
]
|
|
@ -1,21 +0,0 @@
|
|||||||
Avoid an implicit declaration of dup2 in its configure probe. This
|
|
||||||
prevents build issues with future compilers.
|
|
||||||
|
|
||||||
Already reported upstream:
|
|
||||||
|
|
||||||
<https://lists.gnu.org/archive/html/bug-bash/2023-02/msg00000.html>
|
|
||||||
|
|
||||||
diff --git a/aclocal.m4 b/aclocal.m4
|
|
||||||
index 6162f6eb9ef90754..5cbbe96d7158197a 100644
|
|
||||||
--- a/aclocal.m4
|
|
||||||
+++ b/aclocal.m4
|
|
||||||
@@ -238,6 +238,9 @@ AC_CACHE_VAL(bash_cv_dup2_broken,
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
+#ifdef HAVE_UNISTD_H
|
|
||||||
+# include <unistd.h>
|
|
||||||
+#endif /* HAVE_UNISTD_H */
|
|
||||||
int
|
|
||||||
main()
|
|
||||||
{
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user