Rebase to bash-5.0
- Remove 'bash-2.02-security.patch' patch as it does not seem to be needed. - Remove 'bash-2.05b-xcc.patch' as this change is already in upstream. - Remove 'bash-4.1-defer-sigchld-trap.patch' as this patch was doing nothing and this bug that it tried to solve should be fixed in upstream https://lists.gnu.org/archive/html/bug-bash/2012-03/msg00045.html - Remove 'bash-4.4-coverity.patch' as it has been upstreamed. - Delete several other patches that were not removed while rebasing to bash-4.4. Resolves: #1675080
This commit is contained in:
parent
8a41ac7807
commit
91692f161e
1
.gitignore
vendored
1
.gitignore
vendored
@ -3,3 +3,4 @@ bash-4.1.tar.gz
|
|||||||
/bash-4.2.tar.gz
|
/bash-4.2.tar.gz
|
||||||
/bash-4.3.tar.gz
|
/bash-4.3.tar.gz
|
||||||
/bash-4.4.tar.gz
|
/bash-4.4.tar.gz
|
||||||
|
/bash-5.0.tar.gz
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
--- 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
|
|
@ -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 a5ad9e7..62a6b32 100644
|
index 0adc903..366e639 100644
|
||||||
--- a/config.h.in
|
--- a/config.h.in
|
||||||
+++ b/config.h.in
|
+++ b/config.h.in
|
||||||
@@ -748,6 +748,9 @@
|
@@ -758,6 +758,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 a5ad9e7..62a6b32 100644
|
|||||||
/* Define if you have the putenv function. */
|
/* Define if you have the putenv function. */
|
||||||
#undef HAVE_PUTENV
|
#undef HAVE_PUTENV
|
||||||
|
|
||||||
@@ -946,6 +949,9 @@
|
@@ -956,6 +959,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,29 +23,20 @@ index a5ad9e7..62a6b32 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 ce4e9b6..eda95d6 100644
|
index 2c74f13..4e9c3a4 100644
|
||||||
--- a/configure.ac
|
--- a/configure.ac
|
||||||
+++ b/configure.ac
|
+++ b/configure.ac
|
||||||
@@ -700,7 +700,7 @@ BASH_HEADER_INTTYPES
|
@@ -782,7 +782,7 @@ dnl checks for system calls
|
||||||
AC_CHECK_HEADERS(unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \
|
|
||||||
memory.h locale.h termcap.h termio.h termios.h dlfcn.h \
|
|
||||||
stdbool.h stddef.h stdint.h netdb.h pwd.h grp.h strings.h \
|
|
||||||
- regex.h syslog.h ulimit.h)
|
|
||||||
+ 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 \
|
AC_CHECK_FUNCS(dup2 eaccess fcntl getdtablesize getgroups gethostname \
|
||||||
getpagesize getpeername getrlimit getrusage gettimeofday \
|
getpagesize getpeername getrlimit getrusage gettimeofday \
|
||||||
kill killpg lstat pselect readlink sbrk select setdtablesize \
|
kill killpg lstat pselect readlink select setdtablesize \
|
||||||
- setitimer tcgetpgrp uname ulimit waitpid)
|
- setitimer tcgetpgrp uname ulimit waitpid)
|
||||||
+ setitimer tcgetpgrp uname ulimit waitpid pread)
|
+ 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 2a3df6d..b5cd405 100644
|
index 4eae19c..0af6f8f 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 @@
|
||||||
@ -59,7 +50,7 @@ index 2a3df6d..b5cd405 100644
|
|||||||
#include "posixtime.h"
|
#include "posixtime.h"
|
||||||
|
|
||||||
#if defined (HAVE_SYS_RESOURCE_H) && !defined (RLIMTYPE)
|
#if defined (HAVE_SYS_RESOURCE_H) && !defined (RLIMTYPE)
|
||||||
@@ -5486,6 +5490,14 @@ shell_execve (command, args, env)
|
@@ -5706,6 +5710,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. */
|
||||||
@ -74,18 +65,19 @@ index 2a3df6d..b5cd405 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)
|
||||||
@@ -5495,6 +5507,7 @@ shell_execve (command, args, env)
|
@@ -5715,6 +5727,7 @@ shell_execve (command, args, env)
|
||||||
char *interp;
|
char *interp;
|
||||||
int ilen;
|
int ilen;
|
||||||
|
|
||||||
+ close (fd);
|
+ close (fd);
|
||||||
interp = getinterp (sample, sample_len, (int *)NULL);
|
interp = getinterp (sample, sample_len, (int *)NULL);
|
||||||
ilen = strlen (interp);
|
ilen = strlen (interp);
|
||||||
errno = i;
|
errno = i;
|
||||||
@@ -5510,6 +5523,136 @@ shell_execve (command, args, env)
|
@@ -5730,7 +5743,138 @@ 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
|
||||||
@ -216,9 +208,11 @@ index 2a3df6d..b5cd405 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
|
2.17.2
|
||||||
|
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
--- 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)
|
|
@ -1,19 +0,0 @@
|
|||||||
--- 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,11 +0,0 @@
|
|||||||
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;
|
|
@ -1,7 +1,8 @@
|
|||||||
diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c
|
diff --git a/execute_cmd.c b/execute_cmd.c
|
||||||
--- bash-4.2/execute_cmd.c.coverity 2011-02-24 13:04:35.000000000 +0100
|
index a988400..412128c 100644
|
||||||
+++ bash-4.2/execute_cmd.c 2011-02-24 13:49:13.000000000 +0100
|
--- a/execute_cmd.c
|
||||||
@@ -5036,7 +5036,7 @@ shell_execve (command, args, env)
|
+++ b/execute_cmd.c
|
||||||
|
@@ -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;
|
||||||
@ -10,7 +11,7 @@ diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c
|
|||||||
|
|
||||||
/* 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
|
||||||
@@ -5044,12 +5044,12 @@ shell_execve (command, args, env)
|
@@ -5768,12 +5768,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;
|
||||||
@ -25,7 +26,7 @@ diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c
|
|||||||
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)
|
||||||
@@ -5091,11 +5091,11 @@ shell_execve (command, args, env)
|
@@ -5815,11 +5815,11 @@ shell_execve (command, args, env)
|
||||||
}
|
}
|
||||||
|
|
||||||
nphdr = ehdr.e_phnum;
|
nphdr = ehdr.e_phnum;
|
||||||
@ -39,7 +40,7 @@ diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c
|
|||||||
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)
|
||||||
@@ -5120,7 +5120,7 @@ shell_execve (command, args, env)
|
@@ -5844,7 +5844,7 @@ shell_execve (command, args, env)
|
||||||
Elf64_Ehdr ehdr;
|
Elf64_Ehdr ehdr;
|
||||||
Elf64_Phdr *phdr;
|
Elf64_Phdr *phdr;
|
||||||
Elf64_Shdr *shdr;
|
Elf64_Shdr *shdr;
|
||||||
@ -48,7 +49,7 @@ diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c
|
|||||||
|
|
||||||
/* 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
|
||||||
@@ -5128,11 +5128,11 @@ shell_execve (command, args, env)
|
@@ -5852,11 +5852,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;
|
||||||
@ -62,7 +63,7 @@ diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c
|
|||||||
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)
|
||||||
@@ -5174,11 +5174,11 @@ shell_execve (command, args, env)
|
@@ -5898,11 +5898,11 @@ shell_execve (command, args, env)
|
||||||
}
|
}
|
||||||
|
|
||||||
nphdr = ehdr.e_phnum;
|
nphdr = ehdr.e_phnum;
|
||||||
@ -76,7 +77,7 @@ diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c
|
|||||||
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)
|
||||||
@@ -5200,8 +5200,8 @@ shell_execve (command, args, env)
|
@@ -5924,8 +5924,8 @@ shell_execve (command, args, env)
|
||||||
|
|
||||||
if (offset != -1)
|
if (offset != -1)
|
||||||
{
|
{
|
||||||
@ -87,7 +88,7 @@ diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c
|
|||||||
char *interp = NULL;
|
char *interp = NULL;
|
||||||
|
|
||||||
do
|
do
|
||||||
@@ -5250,7 +5250,8 @@ shell_execve (command, args, env)
|
@@ -5974,7 +5974,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)
|
||||||
@ -95,5 +96,8 @@ diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c
|
|||||||
+ if (fd >= 0)
|
+ if (fd >= 0)
|
||||||
+ close (fd);
|
+ close (fd);
|
||||||
#endif
|
#endif
|
||||||
errno = i;
|
|
||||||
file_error (command);
|
errno = i;
|
||||||
|
--
|
||||||
|
2.17.2
|
||||||
|
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
commit 41d203e21f94c1b8bfc457606ee633c22da3cf04
|
|
||||||
Author: Chet Ramey <chet.ramey@case.edu>
|
|
||||||
Date: Wed Jun 12 09:29:51 2013 -0400
|
|
||||||
|
|
||||||
commit bash-20130523 snapshot
|
|
||||||
|
|
||||||
diff --git a/trap.c b/trap.c
|
|
||||||
index 1e11d1f..da59b26 100644
|
|
||||||
--- a/trap.c
|
|
||||||
+++ b/trap.c
|
|
||||||
@@ -286,6 +286,9 @@ run_pending_traps ()
|
|
||||||
if (catch_flag == 0) /* simple optimization */
|
|
||||||
return;
|
|
||||||
|
|
||||||
+ if (running_trap > 0)
|
|
||||||
+ return; /* no recursive trap invocations */
|
|
||||||
+
|
|
||||||
catch_flag = trapped_signal_received = 0;
|
|
||||||
|
|
||||||
/* Preserve $? when running trap. */
|
|
||||||
@@ -304,6 +307,8 @@ run_pending_traps ()
|
|
||||||
|
|
||||||
BLOCK_SIGNAL (sig, set, oset);
|
|
||||||
|
|
||||||
+ running_trap = sig + 1;
|
|
||||||
+
|
|
||||||
if (sig == SIGINT)
|
|
||||||
{
|
|
||||||
run_interrupt_trap ();
|
|
||||||
@@ -324,6 +329,7 @@ run_pending_traps ()
|
|
||||||
{
|
|
||||||
/* This can happen when run_pending_traps is called while
|
|
||||||
running a SIGCHLD trap handler. */
|
|
||||||
+ running_trap = 0;
|
|
||||||
UNBLOCK_SIGNAL (oset);
|
|
||||||
continue; /* XXX */
|
|
||||||
}
|
|
||||||
@@ -359,7 +365,14 @@ run_pending_traps ()
|
|
||||||
save_subst_varlist = subst_assign_varlist;
|
|
||||||
subst_assign_varlist = 0;
|
|
||||||
|
|
||||||
+#if defined (JOB_CONTROL)
|
|
||||||
+ save_pipeline (1); /* XXX only provides one save level */
|
|
||||||
+#endif
|
|
||||||
evalstring (savestring (trap_list[sig]), "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE);
|
|
||||||
+#if defined (JOB_CONTROL)
|
|
||||||
+ restore_pipeline (1);
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
restore_token_state (token_state);
|
|
||||||
free (token_state);
|
|
||||||
|
|
||||||
@@ -367,6 +380,7 @@ run_pending_traps ()
|
|
||||||
}
|
|
||||||
|
|
||||||
pending_traps[sig] = 0;
|
|
||||||
+ running_trap = 0;
|
|
||||||
|
|
||||||
UNBLOCK_SIGNAL (oset);
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
*** ../bash-4.3-patched/shell.h 2012-12-25 21:11:01.000000000 -0500
|
|
||||||
--- shell.h 2014-06-03 09:24:28.000000000 -0400
|
|
||||||
***************
|
|
||||||
*** 169,173 ****
|
|
||||||
int expand_aliases;
|
|
||||||
int echo_input_at_read;
|
|
||||||
!
|
|
||||||
} sh_parser_state_t;
|
|
||||||
|
|
||||||
--- 169,174 ----
|
|
||||||
int expand_aliases;
|
|
||||||
int echo_input_at_read;
|
|
||||||
! int need_here_doc;
|
|
||||||
!
|
|
||||||
} sh_parser_state_t;
|
|
||||||
|
|
||||||
*** ../bash-4.3-patched/parse.y 2014-05-14 09:16:40.000000000 -0400
|
|
||||||
--- parse.y 2014-04-30 09:27:59.000000000 -0400
|
|
||||||
***************
|
|
||||||
*** 2643,2647 ****
|
|
||||||
|
|
||||||
r = 0;
|
|
||||||
! while (need_here_doc)
|
|
||||||
{
|
|
||||||
parser_state |= PST_HEREDOC;
|
|
||||||
--- 2643,2647 ----
|
|
||||||
|
|
||||||
r = 0;
|
|
||||||
! while (need_here_doc > 0)
|
|
||||||
{
|
|
||||||
parser_state |= PST_HEREDOC;
|
|
||||||
***************
|
|
||||||
*** 6076,6079 ****
|
|
||||||
--- 6076,6080 ----
|
|
||||||
ps->expand_aliases = expand_aliases;
|
|
||||||
ps->echo_input_at_read = echo_input_at_read;
|
|
||||||
+ ps->need_here_doc = need_here_doc;
|
|
||||||
|
|
||||||
ps->token = token;
|
|
||||||
***************
|
|
||||||
*** 6124,6127 ****
|
|
||||||
--- 6125,6129 ----
|
|
||||||
expand_aliases = ps->expand_aliases;
|
|
||||||
echo_input_at_read = ps->echo_input_at_read;
|
|
||||||
+ need_here_doc = ps->need_here_doc;
|
|
||||||
|
|
||||||
FREE (token);
|
|
@ -1,24 +0,0 @@
|
|||||||
*** ../bash-4.3-patched/execute_cmd.c 2014-01-31 10:54:52.000000000 -0500
|
|
||||||
--- execute_cmd.c 2014-06-19 08:05:49.000000000 -0400
|
|
||||||
***************
|
|
||||||
*** 2410,2414 ****
|
|
||||||
lstdin = wait_for (lastpid);
|
|
||||||
#if defined (JOB_CONTROL)
|
|
||||||
! exec_result = job_exit_status (lastpipe_jid);
|
|
||||||
#endif
|
|
||||||
unfreeze_jobs_list ();
|
|
||||||
--- 2425,2438 ----
|
|
||||||
lstdin = wait_for (lastpid);
|
|
||||||
#if defined (JOB_CONTROL)
|
|
||||||
! /* If wait_for removes the job from the jobs table, use result of last
|
|
||||||
! command as pipeline's exit status as usual. The jobs list can get
|
|
||||||
! frozen and unfrozen at inconvenient times if there are multiple pipelines
|
|
||||||
! running simultaneously. */
|
|
||||||
! if (INVALID_JOB (lastpipe_jid) == 0)
|
|
||||||
! exec_result = job_exit_status (lastpipe_jid);
|
|
||||||
! else if (pipefail_opt)
|
|
||||||
! exec_result = exec_result | lstdin; /* XXX */
|
|
||||||
! /* otherwise we use exec_result */
|
|
||||||
!
|
|
||||||
#endif
|
|
||||||
unfreeze_jobs_list ();
|
|
@ -1,21 +1,21 @@
|
|||||||
diff --git a/parse.y b/parse.y
|
diff --git a/parse.y b/parse.y
|
||||||
index 30425a5..85f1c4f 100644
|
index 07e6e3e..4cd373f 100644
|
||||||
--- a/parse.y
|
--- a/parse.y
|
||||||
+++ b/parse.y
|
+++ b/parse.y
|
||||||
@@ -4228,6 +4228,8 @@ xparse_dolparen (base, string, indp, flags)
|
@@ -4410,6 +4410,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;
|
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)
|
||||||
/*(*/
|
saved_pushed_strings = pushed_string_list; /* separate parsing context */
|
||||||
parser_state |= PST_CMDSUBST|PST_EOFTOKEN; /* allow instant ')' */ /*(*/
|
pushed_string_list = (STRING_SAVER *)NULL;
|
||||||
diff --git a/subst.c b/subst.c
|
diff --git a/subst.c b/subst.c
|
||||||
index f1a4df1..a93a4ce 100644
|
index 9559187..0c2caa6 100644
|
||||||
--- a/subst.c
|
--- a/subst.c
|
||||||
+++ b/subst.c
|
+++ b/subst.c
|
||||||
@@ -8513,6 +8513,7 @@ param_expand (string, sindex, quoted, expanded_something,
|
@@ -9145,6 +9145,7 @@ param_expand (string, sindex, quoted, expanded_something,
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
WORD_DESC *tdesc, *ret;
|
WORD_DESC *tdesc, *ret;
|
||||||
int tflag;
|
int tflag;
|
||||||
@ -23,7 +23,7 @@ index f1a4df1..a93a4ce 100644
|
|||||||
|
|
||||||
/*itrace("param_expand: `%s' pflags = %d", string+*sindex, pflags);*/
|
/*itrace("param_expand: `%s' pflags = %d", string+*sindex, pflags);*/
|
||||||
zindex = *sindex;
|
zindex = *sindex;
|
||||||
@@ -8831,6 +8832,9 @@ arithsub:
|
@@ -9514,6 +9515,9 @@ arithsub:
|
||||||
}
|
}
|
||||||
|
|
||||||
comsub:
|
comsub:
|
||||||
@ -33,7 +33,7 @@ index f1a4df1..a93a4ce 100644
|
|||||||
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);
|
||||||
@@ -8843,6 +8847,7 @@ comsub:
|
@@ -9526,6 +9530,7 @@ comsub:
|
||||||
}
|
}
|
||||||
FREE (temp);
|
FREE (temp);
|
||||||
temp = temp1;
|
temp = temp1;
|
||||||
@ -42,5 +42,5 @@ index f1a4df1..a93a4ce 100644
|
|||||||
|
|
||||||
/* Do POSIX.2d9-style arithmetic substitution. This will probably go
|
/* Do POSIX.2d9-style arithmetic substitution. This will probably go
|
||||||
--
|
--
|
||||||
2.9.3
|
2.17.2
|
||||||
|
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
*** ../bash-4.3-patched/parse.y 2014-04-07 11:56:12.000000000 -0400
|
|
||||||
--- parse.y 2014-06-11 10:25:53.000000000 -0400
|
|
||||||
***************
|
|
||||||
*** 2789,2797 ****
|
|
||||||
case OR_OR:
|
|
||||||
case '&':
|
|
||||||
case DO:
|
|
||||||
case THEN:
|
|
||||||
case ELSE:
|
|
||||||
case '{': /* } */
|
|
||||||
! case '(': /* ) */
|
|
||||||
case BANG: /* ! time pipeline */
|
|
||||||
case TIME: /* time time pipeline */
|
|
||||||
--- 2789,2802 ----
|
|
||||||
case OR_OR:
|
|
||||||
case '&':
|
|
||||||
+ case WHILE:
|
|
||||||
case DO:
|
|
||||||
+ case UNTIL:
|
|
||||||
+ case IF:
|
|
||||||
case THEN:
|
|
||||||
+ case ELIF:
|
|
||||||
case ELSE:
|
|
||||||
case '{': /* } */
|
|
||||||
! case '(': /* )( */
|
|
||||||
! case ')': /* only valid in case statement */
|
|
||||||
case BANG: /* ! time pipeline */
|
|
||||||
case TIME: /* time time pipeline */
|
|
@ -1,18 +0,0 @@
|
|||||||
*** ../bash-4.3-patched/lib/readline/misc.c 2012-09-01 18:03:11.000000000 -0400
|
|
||||||
--- lib/readline/misc.c 2014-06-30 13:41:19.000000000 -0400
|
|
||||||
***************
|
|
||||||
*** 462,465 ****
|
|
||||||
--- 462,466 ----
|
|
||||||
/* Set up rl_line_buffer and other variables from history entry */
|
|
||||||
rl_replace_from_history (entry, 0); /* entry->line is now current */
|
|
||||||
+ entry->data = 0; /* entry->data is now current undo list */
|
|
||||||
/* Undo all changes to this history entry */
|
|
||||||
while (rl_undo_list)
|
|
||||||
***************
|
|
||||||
*** 469,473 ****
|
|
||||||
FREE (entry->line);
|
|
||||||
entry->line = savestring (rl_line_buffer);
|
|
||||||
- entry->data = 0;
|
|
||||||
}
|
|
||||||
entry = previous_history ();
|
|
||||||
--- 470,473 ----
|
|
@ -1,31 +0,0 @@
|
|||||||
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);
|
|
@ -1,18 +0,0 @@
|
|||||||
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 */
|
|
@ -1,203 +0,0 @@
|
|||||||
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;
|
|
@ -1,49 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,119 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,85 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,68 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,59 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,136 +0,0 @@
|
|||||||
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.14.4
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
|||||||
From 36f89ff1d8b761c815d8993e9833e6357a57fc6b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Chet Ramey <chet.ramey@case.edu>
|
|
||||||
Date: Fri, 1 Jun 2018 10:20:32 -0400
|
|
||||||
Subject: [PATCH] SIGINT trap handler SIGINT loop fix
|
|
||||||
|
|
||||||
---
|
|
||||||
jobs.c | 12 +++++++++++-
|
|
||||||
patchlevel.h | 2 +-
|
|
||||||
2 files changed, 12 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/jobs.c b/jobs.c
|
|
||||||
index 2684632d..5ee21e10 100644
|
|
||||||
--- a/jobs.c
|
|
||||||
+++ b/jobs.c
|
|
||||||
@@ -2689,7 +2689,17 @@ wait_for (pid)
|
|
||||||
wait_sigint_received = child_caught_sigint = 0;
|
|
||||||
if (job_control == 0 || (subshell_environment&SUBSHELL_COMSUB))
|
|
||||||
{
|
|
||||||
- old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler);
|
|
||||||
+ SigHandler *temp_sigint_handler;
|
|
||||||
+
|
|
||||||
+ temp_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler);
|
|
||||||
+ if (temp_sigint_handler == wait_sigint_handler)
|
|
||||||
+ {
|
|
||||||
+#if defined (DEBUG)
|
|
||||||
+ internal_warning ("wait_for: recursively setting old_sigint_handler to wait_sigint_handler: running_trap = %d", running_trap);
|
|
||||||
+#endif
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ old_sigint_handler = temp_sigint_handler;
|
|
||||||
waiting_for_child = 0;
|
|
||||||
if (old_sigint_handler == SIG_IGN)
|
|
||||||
set_signal_handler (SIGINT, old_sigint_handler);
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
index 4a65dc0f..d87b0ba7 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 20
|
|
||||||
+#define PATCHLEVEL 21
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
--
|
|
||||||
2.14.4
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
|||||||
From 34dbca51a5fb5938db2e69ebb3318bbb182c2902 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Chet Ramey <chet.ramey@case.edu>
|
|
||||||
Date: Fri, 1 Jun 2018 10:22:00 -0400
|
|
||||||
Subject: [PATCH] readline multi-key command re-read input fix
|
|
||||||
|
|
||||||
---
|
|
||||||
lib/readline/readline.c | 4 ++--
|
|
||||||
patchlevel.h | 2 +-
|
|
||||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/readline/readline.c b/lib/readline/readline.c
|
|
||||||
index e51df4f0..a05b35e5 100644
|
|
||||||
--- a/lib/readline/readline.c
|
|
||||||
+++ b/lib/readline/readline.c
|
|
||||||
@@ -1057,7 +1057,7 @@ _rl_subseq_result (r, map, key, got_subseq)
|
|
||||||
/* We probably shadowed a keymap, so keep going. */
|
|
||||||
r = _rl_dispatch (ANYOTHERKEY, m);
|
|
||||||
}
|
|
||||||
- else if (r && map[ANYOTHERKEY].function)
|
|
||||||
+ else if (r < 0 && map[ANYOTHERKEY].function)
|
|
||||||
{
|
|
||||||
/* We didn't match (r is probably -1), so return something to
|
|
||||||
tell the caller that it should try ANYOTHERKEY for an
|
|
||||||
@@ -1069,7 +1069,7 @@ _rl_subseq_result (r, map, key, got_subseq)
|
|
||||||
_rl_dispatching_keymap = map;
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
- else if (r && got_subseq)
|
|
||||||
+ else if (r < 0 && got_subseq) /* XXX */
|
|
||||||
{
|
|
||||||
/* OK, back up the chain. */
|
|
||||||
if (RL_ISSTATE (RL_STATE_MACROINPUT))
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
index d87b0ba7..9be226c3 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_ */
|
|
||||||
--
|
|
||||||
2.14.4
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
|||||||
From 64447609994bfddeef1061948022c074093e9a9f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Chet Ramey <chet.ramey@case.edu>
|
|
||||||
Date: Fri, 1 Jun 2018 10:22:36 -0400
|
|
||||||
Subject: [PATCH] fix for SIGINT in sourced script
|
|
||||||
|
|
||||||
---
|
|
||||||
builtins/trap.def | 4 ++++
|
|
||||||
patchlevel.h | 2 +-
|
|
||||||
2 files changed, 5 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/builtins/trap.def b/builtins/trap.def
|
|
||||||
index 57d9b522..d43b0ef6 100644
|
|
||||||
--- a/builtins/trap.def
|
|
||||||
+++ b/builtins/trap.def
|
|
||||||
@@ -98,6 +98,7 @@ static int display_traps __P((WORD_LIST *));
|
|
||||||
#define IGNORE 2 /* Ignore this signal. */
|
|
||||||
|
|
||||||
extern int posixly_correct, subshell_environment;
|
|
||||||
+extern int sourcelevel, running_trap;
|
|
||||||
|
|
||||||
int
|
|
||||||
trap_builtin (list)
|
|
||||||
@@ -212,6 +213,9 @@ trap_builtin (list)
|
|
||||||
was SIG_IGN? */
|
|
||||||
if (interactive)
|
|
||||||
set_signal_handler (SIGINT, sigint_sighandler);
|
|
||||||
+ /* special cases for interactive == 0 */
|
|
||||||
+ else if (interactive_shell && (sourcelevel||running_trap))
|
|
||||||
+ set_signal_handler (SIGINT, sigint_sighandler);
|
|
||||||
else
|
|
||||||
set_signal_handler (SIGINT, termsig_sighandler);
|
|
||||||
break;
|
|
||||||
diff --git a/patchlevel.h b/patchlevel.h
|
|
||||||
index 9be226c3..2060b58f 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 22
|
|
||||||
+#define PATCHLEVEL 23
|
|
||||||
|
|
||||||
#endif /* _PATCHLEVEL_H_ */
|
|
||||||
--
|
|
||||||
2.14.4
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,81 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,114 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,71 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,80 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
|||||||
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 : "");
|
|
@ -1,11 +0,0 @@
|
|||||||
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
|
|
150
bash-5.0-patch-1.patch
Normal file
150
bash-5.0-patch-1.patch
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
From 4d2e315490b778707b3a3afdfc514d5083a97a11 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Fri, 18 Jan 2019 15:12:37 -0500
|
||||||
|
Subject: [PATCH] Bash-5.0 patch 1: fix pathname expansion of directory names
|
||||||
|
containing backslashes
|
||||||
|
|
||||||
|
---
|
||||||
|
bashline.c | 62 +++++++++++++++++++++++++++++++++++++++++---
|
||||||
|
lib/glob/glob_loop.c | 6 -----
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
3 files changed, 60 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/bashline.c b/bashline.c
|
||||||
|
index 2846aabf..75e79f1a 100644
|
||||||
|
--- a/bashline.c
|
||||||
|
+++ b/bashline.c
|
||||||
|
@@ -231,6 +231,7 @@ static int bash_possible_variable_completions __P((int, int));
|
||||||
|
static int bash_complete_command __P((int, int));
|
||||||
|
static int bash_possible_command_completions __P((int, int));
|
||||||
|
|
||||||
|
+static int completion_glob_pattern __P((char *));
|
||||||
|
static char *glob_complete_word __P((const char *, int));
|
||||||
|
static int bash_glob_completion_internal __P((int));
|
||||||
|
static int bash_glob_complete_word __P((int, int));
|
||||||
|
@@ -1741,7 +1742,7 @@ bash_default_completion (text, start, end, qc, compflags)
|
||||||
|
|
||||||
|
/* This could be a globbing pattern, so try to expand it using pathname
|
||||||
|
expansion. */
|
||||||
|
- if (!matches && glob_pattern_p (text))
|
||||||
|
+ if (!matches && completion_glob_pattern ((char *)text))
|
||||||
|
{
|
||||||
|
matches = rl_completion_matches (text, glob_complete_word);
|
||||||
|
/* A glob expression that matches more than one filename is problematic.
|
||||||
|
@@ -1850,7 +1851,7 @@ command_word_completion_function (hint_text, state)
|
||||||
|
glob_matches = (char **)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- globpat = glob_pattern_p (hint_text);
|
||||||
|
+ globpat = completion_glob_pattern ((char *)hint_text);
|
||||||
|
|
||||||
|
/* If this is an absolute program name, do not check it against
|
||||||
|
aliases, reserved words, functions or builtins. We must check
|
||||||
|
@@ -3713,6 +3714,61 @@ bash_complete_command_internal (what_to_do)
|
||||||
|
return bash_specific_completion (what_to_do, command_word_completion_function);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int
|
||||||
|
+completion_glob_pattern (string)
|
||||||
|
+ char *string;
|
||||||
|
+{
|
||||||
|
+ register int c;
|
||||||
|
+ char *send;
|
||||||
|
+ int open;
|
||||||
|
+
|
||||||
|
+ DECLARE_MBSTATE;
|
||||||
|
+
|
||||||
|
+ open = 0;
|
||||||
|
+ send = string + strlen (string);
|
||||||
|
+
|
||||||
|
+ while (c = *string++)
|
||||||
|
+ {
|
||||||
|
+ switch (c)
|
||||||
|
+ {
|
||||||
|
+ case '?':
|
||||||
|
+ case '*':
|
||||||
|
+ return (1);
|
||||||
|
+
|
||||||
|
+ case '[':
|
||||||
|
+ open++;
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ case ']':
|
||||||
|
+ if (open)
|
||||||
|
+ return (1);
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ case '+':
|
||||||
|
+ case '@':
|
||||||
|
+ case '!':
|
||||||
|
+ if (*string == '(') /*)*/
|
||||||
|
+ return (1);
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ case '\\':
|
||||||
|
+ if (*string == 0)
|
||||||
|
+ return (0);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Advance one fewer byte than an entire multibyte character to
|
||||||
|
+ account for the auto-increment in the loop above. */
|
||||||
|
+#ifdef HANDLE_MULTIBYTE
|
||||||
|
+ string--;
|
||||||
|
+ ADVANCE_CHAR_P (string, send - string);
|
||||||
|
+ string++;
|
||||||
|
+#else
|
||||||
|
+ ADVANCE_CHAR_P (string, send - string);
|
||||||
|
+#endif
|
||||||
|
+ }
|
||||||
|
+ return (0);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static char *globtext;
|
||||||
|
static char *globorig;
|
||||||
|
|
||||||
|
@@ -3877,7 +3933,7 @@ bash_vi_complete (count, key)
|
||||||
|
t = substring (rl_line_buffer, p, rl_point);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (t && glob_pattern_p (t) == 0)
|
||||||
|
+ if (t && completion_glob_pattern (t) == 0)
|
||||||
|
rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */
|
||||||
|
FREE (t);
|
||||||
|
|
||||||
|
diff --git a/lib/glob/glob_loop.c b/lib/glob/glob_loop.c
|
||||||
|
index 5f319cc2..7d6ae211 100644
|
||||||
|
--- a/lib/glob/glob_loop.c
|
||||||
|
+++ b/lib/glob/glob_loop.c
|
||||||
|
@@ -54,17 +54,11 @@ INTERNAL_GLOB_PATTERN_P (pattern)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case L('\\'):
|
||||||
|
-#if 0
|
||||||
|
/* Don't let the pattern end in a backslash (GMATCH returns no match
|
||||||
|
if the pattern ends in a backslash anyway), but otherwise return 1,
|
||||||
|
since the matching engine uses backslash as an escape character
|
||||||
|
and it can be removed. */
|
||||||
|
return (*p != L('\0'));
|
||||||
|
-#else
|
||||||
|
- /* The pattern may not end with a backslash. */
|
||||||
|
- if (*p++ == L('\0'))
|
||||||
|
- return 0;
|
||||||
|
-#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 1cd7c96c..40db1a32 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.17.2
|
||||||
|
|
96
bash-5.0-patch-2.patch
Normal file
96
bash-5.0-patch-2.patch
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
From ddf3f643cb9b9a2ca8e6d996c605e4332204874c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Fri, 18 Jan 2019 15:13:57 -0500
|
||||||
|
Subject: [PATCH] Bash-5.0 patch 2: fix expansion of aliases whose value ends
|
||||||
|
with an unquoted tab
|
||||||
|
|
||||||
|
---
|
||||||
|
parse.y | 5 ++++-
|
||||||
|
parser.h | 1 +
|
||||||
|
patchlevel.h | 2 +-
|
||||||
|
y.tab.c | 5 ++++-
|
||||||
|
4 files changed, 10 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/parse.y b/parse.y
|
||||||
|
index 3ff87bcc..07e6e3e4 100644
|
||||||
|
--- a/parse.y
|
||||||
|
+++ b/parse.y
|
||||||
|
@@ -2557,12 +2557,14 @@ next_alias_char:
|
||||||
|
if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE &&
|
||||||
|
pushed_string_list->flags != PSH_DPAREN &&
|
||||||
|
(parser_state & PST_COMMENT) == 0 &&
|
||||||
|
+ (parser_state & PST_ENDALIAS) == 0 && /* only once */
|
||||||
|
shell_input_line_index > 0 &&
|
||||||
|
- shell_input_line[shell_input_line_index-1] != ' ' &&
|
||||||
|
+ shellblank (shell_input_line[shell_input_line_index-1]) == 0 &&
|
||||||
|
shell_input_line[shell_input_line_index-1] != '\n' &&
|
||||||
|
shellmeta (shell_input_line[shell_input_line_index-1]) == 0 &&
|
||||||
|
(current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"'))
|
||||||
|
{
|
||||||
|
+ parser_state |= PST_ENDALIAS;
|
||||||
|
return ' '; /* END_ALIAS */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@@ -2571,6 +2573,7 @@ pop_alias:
|
||||||
|
/* This case works for PSH_DPAREN as well */
|
||||||
|
if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE)
|
||||||
|
{
|
||||||
|
+ parser_state &= ~PST_ENDALIAS;
|
||||||
|
pop_string ();
|
||||||
|
uc = shell_input_line[shell_input_line_index];
|
||||||
|
if (uc)
|
||||||
|
diff --git a/parser.h b/parser.h
|
||||||
|
index 54dd2c88..6d08915d 100644
|
||||||
|
--- a/parser.h
|
||||||
|
+++ b/parser.h
|
||||||
|
@@ -47,6 +47,7 @@
|
||||||
|
#define PST_REPARSE 0x040000 /* re-parsing in parse_string_to_word_list */
|
||||||
|
#define PST_REDIRLIST 0x080000 /* parsing a list of redirections preceding a simple command name */
|
||||||
|
#define PST_COMMENT 0x100000 /* parsing a shell comment; used by aliases */
|
||||||
|
+#define PST_ENDALIAS 0x200000 /* just finished expanding and consuming an alias */
|
||||||
|
|
||||||
|
/* Definition of the delimiter stack. Needed by parse.y and bashhist.c. */
|
||||||
|
struct dstack {
|
||||||
|
diff --git a/patchlevel.h b/patchlevel.h
|
||||||
|
index 40db1a32..a988d852 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/y.tab.c b/y.tab.c
|
||||||
|
index 1abe2c50..7efce3c8 100644
|
||||||
|
--- a/y.tab.c
|
||||||
|
+++ b/y.tab.c
|
||||||
|
@@ -4873,12 +4873,14 @@ next_alias_char:
|
||||||
|
if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE &&
|
||||||
|
pushed_string_list->flags != PSH_DPAREN &&
|
||||||
|
(parser_state & PST_COMMENT) == 0 &&
|
||||||
|
+ (parser_state & PST_ENDALIAS) == 0 && /* only once */
|
||||||
|
shell_input_line_index > 0 &&
|
||||||
|
- shell_input_line[shell_input_line_index-1] != ' ' &&
|
||||||
|
+ shellblank (shell_input_line[shell_input_line_index-1]) == 0 &&
|
||||||
|
shell_input_line[shell_input_line_index-1] != '\n' &&
|
||||||
|
shellmeta (shell_input_line[shell_input_line_index-1]) == 0 &&
|
||||||
|
(current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"'))
|
||||||
|
{
|
||||||
|
+ parser_state |= PST_ENDALIAS;
|
||||||
|
return ' '; /* END_ALIAS */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@@ -4887,6 +4889,7 @@ pop_alias:
|
||||||
|
/* This case works for PSH_DPAREN as well */
|
||||||
|
if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE)
|
||||||
|
{
|
||||||
|
+ parser_state &= ~PST_ENDALIAS;
|
||||||
|
pop_string ();
|
||||||
|
uc = shell_input_line[shell_input_line_index];
|
||||||
|
if (uc)
|
||||||
|
--
|
||||||
|
2.17.2
|
||||||
|
|
@ -1,8 +1,8 @@
|
|||||||
diff --git a/builtins.h b/builtins.h
|
diff --git a/builtins.h b/builtins.h
|
||||||
index 0cfea18..a6ef958 100644
|
index dac95fd..5b7e811 100644
|
||||||
--- a/builtins.h
|
--- a/builtins.h
|
||||||
+++ b/builtins.h
|
+++ b/builtins.h
|
||||||
@@ -42,6 +42,7 @@
|
@@ -45,6 +45,7 @@
|
||||||
#define ASSIGNMENT_BUILTIN 0x10 /* This builtin takes assignment statements. */
|
#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 */
|
||||||
@ -11,7 +11,7 @@ index 0cfea18..a6ef958 100644
|
|||||||
#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
|
index 4f51201..91c25db 100644
|
||||||
--- a/builtins/mkbuiltins.c
|
--- a/builtins/mkbuiltins.c
|
||||||
+++ b/builtins/mkbuiltins.c
|
+++ b/builtins/mkbuiltins.c
|
||||||
@@ -69,10 +69,15 @@ extern char *strcpy ();
|
@@ -69,10 +69,15 @@ extern char *strcpy ();
|
||||||
@ -30,7 +30,7 @@ index 4f51201..283bfea 100644
|
|||||||
|
|
||||||
#define BASE_INDENT 4
|
#define BASE_INDENT 4
|
||||||
|
|
||||||
@@ -173,11 +178,20 @@ char *posix_builtins[] =
|
@@ -173,11 +178,19 @@ char *posix_builtins[] =
|
||||||
(char *)NULL
|
(char *)NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -40,7 +40,6 @@ index 4f51201..283bfea 100644
|
|||||||
+ ".", "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 ();
|
||||||
@ -51,17 +50,16 @@ index 4f51201..283bfea 100644
|
|||||||
|
|
||||||
#if !defined (HAVE_RENAME)
|
#if !defined (HAVE_RENAME)
|
||||||
static int rename ();
|
static int rename ();
|
||||||
@@ -831,6 +845,9 @@ builtin_handler (self, defs, arg)
|
@@ -831,6 +844,8 @@ builtin_handler (self, defs, arg)
|
||||||
new->flags |= BUILTIN_FLAG_LOCALVAR;
|
new->flags |= BUILTIN_FLAG_LOCALVAR;
|
||||||
if (is_posix_builtin (name))
|
if (is_posix_builtin (name))
|
||||||
new->flags |= BUILTIN_FLAG_POSIX_BUILTIN;
|
new->flags |= BUILTIN_FLAG_POSIX_BUILTIN;
|
||||||
+ 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;
|
||||||
@@ -1250,12 +1267,13 @@ write_builtins (defs, structfile, externfile)
|
@@ -1250,12 +1265,13 @@ write_builtins (defs, structfile, externfile)
|
||||||
else
|
else
|
||||||
fprintf (structfile, "(sh_builtin_func_t *)0x0, ");
|
fprintf (structfile, "(sh_builtin_func_t *)0x0, ");
|
||||||
|
|
||||||
@ -76,7 +74,7 @@ index 4f51201..283bfea 100644
|
|||||||
document_name (builtin));
|
document_name (builtin));
|
||||||
|
|
||||||
/* Don't translate short document summaries that are identical
|
/* Don't translate short document summaries that are identical
|
||||||
@@ -1645,6 +1663,13 @@ is_posix_builtin (name)
|
@@ -1645,6 +1661,13 @@ is_posix_builtin (name)
|
||||||
return (_find_in_table (name, posix_builtins));
|
return (_find_in_table (name, posix_builtins));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,10 +89,10 @@ index 4f51201..283bfea 100644
|
|||||||
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
|
index d91f1fd..111a66d 100644
|
||||||
--- a/doc/bash.1
|
--- a/doc/bash.1
|
||||||
+++ b/doc/bash.1
|
+++ b/doc/bash.1
|
||||||
@@ -238,6 +238,14 @@ The shell becomes restricted (see
|
@@ -239,6 +239,14 @@ The shell becomes restricted (see
|
||||||
.B "RESTRICTED SHELL"
|
.B "RESTRICTED SHELL"
|
||||||
below).
|
below).
|
||||||
.TP
|
.TP
|
||||||
@ -110,10 +108,10 @@ index c21e877..04ce845 100644
|
|||||||
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
|
index d33cd57..6fc4d18 100644
|
||||||
--- a/doc/bashref.texi
|
--- a/doc/bashref.texi
|
||||||
+++ b/doc/bashref.texi
|
+++ b/doc/bashref.texi
|
||||||
@@ -6243,6 +6243,13 @@ standard. @xref{Bash POSIX Mode}, for a description of the Bash
|
@@ -6453,6 +6453,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}).
|
||||||
|
|
||||||
@ -128,31 +126,24 @@ index 06957b6..e3fe925 100644
|
|||||||
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
|
index f02d6e4..76c1e8d 100644
|
||||||
--- a/eval.c
|
--- a/eval.c
|
||||||
+++ b/eval.c
|
+++ b/eval.c
|
||||||
@@ -56,6 +56,7 @@ extern int need_here_doc;
|
@@ -142,7 +142,8 @@ reader_loop ()
|
||||||
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))
|
||||||
{
|
{
|
||||||
last_command_exit_value = EXECUTION_SUCCESS;
|
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
|
index 8b3c83a..4eae19c 100644
|
||||||
--- a/execute_cmd.c
|
--- a/execute_cmd.c
|
||||||
+++ b/execute_cmd.c
|
+++ b/execute_cmd.c
|
||||||
@@ -533,6 +533,8 @@ async_redirect_stdin ()
|
@@ -538,6 +538,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)
|
||||||
|
|
||||||
@ -161,7 +152,7 @@ index b5cd405..88c7a5c 100644
|
|||||||
/* 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.
|
||||||
ASYNCHROUNOUS, if non-zero, says to do this command in the background.
|
ASYNCHROUNOUS, if non-zero, says to do this command in the background.
|
||||||
@@ -565,7 +567,13 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
|
@@ -569,7 +571,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);
|
||||||
@ -176,9 +167,9 @@ index b5cd405..88c7a5c 100644
|
|||||||
return (EXECUTION_SUCCESS);
|
return (EXECUTION_SUCCESS);
|
||||||
|
|
||||||
QUIT;
|
QUIT;
|
||||||
@@ -5752,7 +5760,7 @@ execute_intern_function (name, funcdef)
|
@@ -2813,7 +2821,7 @@ execute_for_command (for_command)
|
||||||
|
save_line_number = line_number;
|
||||||
if (check_identifier (name, posixly_correct) == 0)
|
if (check_identifier (for_command->name, 1) == 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)
|
||||||
@ -186,50 +177,24 @@ index b5cd405..88c7a5c 100644
|
|||||||
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
|
index dc2f15e..506fff4 100644
|
||||||
--- a/execute_cmd.h
|
--- a/execute_cmd.h
|
||||||
+++ b/execute_cmd.h
|
+++ b/execute_cmd.h
|
||||||
@@ -22,6 +22,8 @@
|
@@ -22,6 +22,9 @@
|
||||||
#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
|
index ecbbfd6..3d8bfa4 100644
|
||||||
--- a/make_cmd.c
|
--- a/make_cmd.c
|
||||||
+++ b/make_cmd.c
|
+++ b/make_cmd.c
|
||||||
@@ -42,11 +42,15 @@
|
@@ -828,6 +828,27 @@ make_coproc_command (name, command)
|
||||||
#include "flags.h"
|
|
||||||
#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));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,7 +222,7 @@ index b42e9ff..a982fe0 100644
|
|||||||
/* 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 +885,27 @@ clean_simple_command (command)
|
@@ -845,6 +866,28 @@ clean_simple_command (command)
|
||||||
REVERSE_LIST (command->value.Simple->redirects, REDIRECT *);
|
REVERSE_LIST (command->value.Simple->redirects, REDIRECT *);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -281,15 +246,16 @@ index b42e9ff..a982fe0 100644
|
|||||||
+ 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
|
index a2b2a55..c5d99b3 100644
|
||||||
--- a/shell.c
|
--- a/shell.c
|
||||||
+++ b/shell.c
|
+++ b/shell.c
|
||||||
@@ -201,6 +201,9 @@ int have_devfd = 0;
|
@@ -193,6 +193,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;
|
||||||
|
|
||||||
@ -299,7 +265,7 @@ index 7f63969..a0fb7ce 100644
|
|||||||
/* 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;
|
||||||
|
|
||||||
@@ -264,6 +267,7 @@ static const struct {
|
@@ -259,6 +262,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 },
|
||||||
@ -307,7 +273,7 @@ index 7f63969..a0fb7ce 100644
|
|||||||
#if defined (RESTRICTED_SHELL)
|
#if defined (RESTRICTED_SHELL)
|
||||||
{ "restricted", Int, &restricted, (char **)0x0 },
|
{ "restricted", Int, &restricted, (char **)0x0 },
|
||||||
#endif
|
#endif
|
||||||
@@ -500,6 +504,12 @@ main (argc, argv, env)
|
@@ -496,6 +500,12 @@ main (argc, argv, env)
|
||||||
if (dump_translatable_strings)
|
if (dump_translatable_strings)
|
||||||
read_but_dont_execute = 1;
|
read_but_dont_execute = 1;
|
||||||
|
|
||||||
@ -320,6 +286,36 @@ index 7f63969..a0fb7ce 100644
|
|||||||
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
|
||||||
2.9.3
|
index 8072605..6c4149d 100644
|
||||||
|
--- a/shell.h
|
||||||
|
+++ b/shell.h
|
||||||
|
@@ -34,12 +34,15 @@
|
||||||
|
#include "maxpath.h"
|
||||||
|
#include "unwind_prot.h"
|
||||||
|
#include "dispose_cmd.h"
|
||||||
|
+#include "execute_cmd.h"
|
||||||
|
#include "make_cmd.h"
|
||||||
|
#include "ocache.h"
|
||||||
|
#include "subst.h"
|
||||||
|
#include "sig.h"
|
||||||
|
#include "pathnames.h"
|
||||||
|
#include "externs.h"
|
||||||
|
+#include "builtins.h"
|
||||||
|
+#include "builtins/common.h"
|
||||||
|
|
||||||
|
extern int EOF_Reached;
|
||||||
|
|
||||||
|
@@ -99,6 +102,9 @@ extern int interactive, interactive_shell;
|
||||||
|
extern int startup_state;
|
||||||
|
extern int reading_shell_script;
|
||||||
|
extern int shell_initialized;
|
||||||
|
+extern int rpm_requires;
|
||||||
|
+static char *alphabet_set = "abcdefghijklmnopqrstuvwxyz"
|
||||||
|
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
|
extern int bash_argv_initialized;
|
||||||
|
extern int subshell_environment;
|
||||||
|
extern int current_command_number;
|
||||||
|
--
|
||||||
|
2.17.2
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
diff --git a/tests/exec.right b/tests/exec.right
|
diff --git a/tests/exec.right b/tests/exec.right
|
||||||
index 81224fa..ff77f09 100644
|
index 6075cc8..0b3f02c 100644
|
||||||
--- a/tests/exec.right
|
--- a/tests/exec.right
|
||||||
+++ b/tests/exec.right
|
+++ b/tests/exec.right
|
||||||
@@ -51,7 +51,6 @@ this is ohio-state
|
@@ -51,7 +51,6 @@ this is ohio-state
|
||||||
@ -11,14 +11,14 @@ index 81224fa..ff77f09 100644
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
diff --git a/tests/execscript b/tests/execscript
|
diff --git a/tests/execscript b/tests/execscript
|
||||||
index 3415ae3..75c48a4 100644
|
index c1819de..9227a4a 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 ./exec8.sub
|
-${THIS_SH} -i ${PWD}/exec8.sub
|
||||||
-
|
-
|
||||||
${THIS_SH} ./exec9.sub
|
${THIS_SH} ./exec9.sub
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ index 73cb704..a92fe7f 100644
|
|||||||
abc
|
abc
|
||||||
ab
|
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
|
index f67cd00..083f4a4 100644
|
||||||
--- a/tests/read.tests
|
--- a/tests/read.tests
|
||||||
+++ b/tests/read.tests
|
+++ b/tests/read.tests
|
||||||
@@ -82,9 +82,6 @@ echo " foo" | { IFS=$':' ; read line; recho "$line"; }
|
@@ -82,9 +82,6 @@ echo " foo" | { IFS=$':' ; read line; recho "$line"; }
|
||||||
@ -57,5 +57,5 @@ index fe27dae..10346f7 100644
|
|||||||
${THIS_SH} ./read3.sub
|
${THIS_SH} ./read3.sub
|
||||||
|
|
||||||
--
|
--
|
||||||
2.9.3
|
2.17.2
|
||||||
|
|
||||||
|
98
bash.spec
98
bash.spec
@ -1,13 +1,12 @@
|
|||||||
#% define beta_tag rc2
|
#% define beta_tag rc2
|
||||||
%global _hardened_build 1
|
%define patchleveltag .2
|
||||||
%define patchleveltag .23
|
%define baseversion 5.0
|
||||||
%define baseversion 4.4
|
|
||||||
%bcond_without tests
|
%bcond_without tests
|
||||||
|
|
||||||
Version: %{baseversion}%{patchleveltag}
|
Version: %{baseversion}%{patchleveltag}
|
||||||
Name: bash
|
Name: bash
|
||||||
Summary: The GNU Bourne Again shell
|
Summary: The GNU Bourne Again shell
|
||||||
Release: 7%{?dist}
|
Release: 1%{?dist}
|
||||||
License: GPLv3+
|
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
|
||||||
@ -21,23 +20,30 @@ Source3: dot-bash_logout
|
|||||||
|
|
||||||
# Official upstream patches
|
# Official upstream patches
|
||||||
# Patches are converted to apply with '-p1'
|
# Patches are converted to apply with '-p1'
|
||||||
%{lua:for i=1,23 do print(string.format("Patch%u: bash-4.4-patch-%u.patch\n", i, i)) end}
|
%{lua:for i=1,2 do print(string.format("Patch%u: bash-5.0-patch-%u.patch\n", i, i)) end}
|
||||||
|
|
||||||
# Other patches
|
# Other patches
|
||||||
Patch101: bash-2.02-security.patch
|
# We don't want to add '/etc:/usr/etc' in standard utils path.
|
||||||
Patch102: bash-2.03-paths.patch
|
Patch101: bash-2.03-paths.patch
|
||||||
Patch103: bash-2.03-profile.patch
|
# Non-interactive shells beginning with argv[0][0] == '-' should run the startup files when not in posix mode.
|
||||||
Patch104: bash-2.05a-interpreter.patch
|
Patch102: bash-2.03-profile.patch
|
||||||
Patch105: bash-2.05b-debuginfo.patch
|
# https://bugzilla.redhat.com/show_bug.cgi?id=60870
|
||||||
Patch106: bash-2.05b-manso.patch
|
Patch103: bash-2.05a-interpreter.patch
|
||||||
Patch107: bash-2.05b-pgrp_sync.patch
|
# Generate info for debuginfo files.
|
||||||
Patch108: bash-2.05b-xcc.patch
|
Patch104: bash-2.05b-debuginfo.patch
|
||||||
Patch109: bash-3.2-audit.patch
|
# Pid passed to setpgrp() can not be pid of a zombie process.
|
||||||
Patch110: bash-3.2-ssh_source_bash.patch
|
Patch105: bash-2.05b-pgrp_sync.patch
|
||||||
Patch112: bash-infotags.patch
|
# Enable audit logs
|
||||||
Patch113: bash-requires.patch
|
Patch106: bash-3.2-audit.patch
|
||||||
Patch114: bash-setlocale.patch
|
# Source bashrc file when bash is run under ssh.
|
||||||
Patch115: bash-tty-tests.patch
|
Patch107: bash-3.2-ssh_source_bash.patch
|
||||||
|
# Use makeinfo to generate .texi file
|
||||||
|
Patch108: bash-infotags.patch
|
||||||
|
# Try to pick up latest `--rpm-requires` patch from http://git.altlinux.org/gears/b/bash4.git
|
||||||
|
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
|
||||||
@ -49,57 +55,40 @@ Patch117: bash-4.1-examples.patch
|
|||||||
# when output does not succeed due to EPIPE
|
# when output does not succeed due to EPIPE
|
||||||
Patch118: bash-4.1-broken_pipe.patch
|
Patch118: bash-4.1-broken_pipe.patch
|
||||||
|
|
||||||
# Enable system-wide .bash_logout for login shells
|
# # Enable system-wide .bash_logout for login shells
|
||||||
Patch119: bash-4.2-rc2-logout.patch
|
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
|
||||||
Patch125: bash-4.3-noecho.patch
|
Patch125: bash-4.3-noecho.patch
|
||||||
|
#
|
||||||
#1241533,1224855 - bash leaks memory when LC_ALL set
|
# #1241533,1224855 - bash leaks memory when LC_ALL set
|
||||||
Patch126: bash-4.3-memleak-lc_all.patch
|
Patch126: bash-4.3-memleak-lc_all.patch
|
||||||
|
#
|
||||||
# bash-4.4 builds loadable builtin examples by default
|
# bash-4.4 builds loadable builtin examples by default
|
||||||
# this patch disables it
|
# this patch disables it
|
||||||
Patch127: bash-4.4-no-loadable-builtins.patch
|
Patch127: bash-4.4-no-loadable-builtins.patch
|
||||||
|
|
||||||
# 1068697 - Explicitly unset nonblocking mode while reading from stdin
|
|
||||||
# This should be dropped while rebasing to bash-4.5
|
|
||||||
Patch128: bash-4.4-unset-nonblock-stdin.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
|
|
||||||
|
|
||||||
# 1637018
|
|
||||||
Patch132: bash-4.4-coverity.patch
|
|
||||||
|
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
BuildRequires: texinfo bison
|
BuildRequires: texinfo bison
|
||||||
BuildRequires: ncurses-devel
|
BuildRequires: ncurses-devel
|
||||||
BuildRequires: autoconf, gettext
|
BuildRequires: autoconf, gettext
|
||||||
|
# Required for bash tests
|
||||||
|
BuildRequires: glibc-all-langpacks
|
||||||
Requires: filesystem >= 3
|
Requires: filesystem >= 3
|
||||||
Provides: /bin/sh
|
Provides: /bin/sh
|
||||||
Provides: /bin/bash
|
Provides: /bin/bash
|
||||||
@ -112,8 +101,7 @@ 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} = %{version}-%{release}
|
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||||
Requires: pkgconf-pkg-config
|
|
||||||
|
|
||||||
%description devel
|
%description devel
|
||||||
This package contains development headers for %{name}.
|
This package contains development headers for %{name}.
|
||||||
@ -154,7 +142,7 @@ sed -i -e 's,bashref\.info,bash.info,' doc/bashref.info
|
|||||||
|
|
||||||
%make_install install-headers
|
%make_install install-headers
|
||||||
|
|
||||||
mkdir -p %{buildroot}/etc
|
mkdir -p %{buildroot}/%{_sysconfdir}
|
||||||
|
|
||||||
# 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
|
||||||
@ -191,7 +179,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}/etc/skel
|
mkdir -p %{buildroot}%{_sysconfdir}/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
|
||||||
@ -234,7 +222,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
|
||||||
@ -320,6 +308,10 @@ end
|
|||||||
%{_libdir}/pkgconfig/%{name}.pc
|
%{_libdir}/pkgconfig/%{name}.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* 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
|
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 4.4.23-7
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||||
|
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (bash-4.4.tar.gz) = 73de3b425faaac55e45456b0f6f6d8077b5dfa7bb76e0d1894a19361b4a2b6bd4fbbe182117ddbfe9b07b4d898fba03537c261badc9533dd3c0da891764c7f29
|
SHA512 (bash-5.0.tar.gz) = bb4519f06e278f271d08722b531e49d2e842cc3e0b02a6b3eee422e2efcb5b6226111af43f5e5eae56beb85ac8bfebcd6a4aacbabb8f609e529aa4d571890864
|
||||||
|
Loading…
Reference in New Issue
Block a user