diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..248cf8d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/bash-4.4.tar.gz diff --git a/EMPTY b/EMPTY deleted file mode 100644 index 0519ecb..0000000 --- a/EMPTY +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/bash-2.02-security.patch b/bash-2.02-security.patch new file mode 100644 index 0000000..f8a913b --- /dev/null +++ b/bash-2.02-security.patch @@ -0,0 +1,11 @@ +--- bash-2.02-orig/parse.y Wed Mar 25 18:16:23 1998 ++++ bash-2.02/parse.y Sun Apr 19 16:46:34 1998 +@@ -923,7 +923,7 @@ + + #if defined (READLINE) + char *current_readline_prompt = (char *)NULL; +-char *current_readline_line = (char *)NULL; ++unsigned char *current_readline_line = (unsigned char *)NULL; + int current_readline_line_index = 0; + + static int diff --git a/bash-2.03-paths.patch b/bash-2.03-paths.patch new file mode 100644 index 0000000..24ec5cc --- /dev/null +++ b/bash-2.03-paths.patch @@ -0,0 +1,11 @@ +--- bash-3.0/config-top.h.paths 2003-08-05 15:36:12.000000000 +0100 ++++ bash-3.0/config-top.h 2004-07-28 09:36:27.117205637 +0100 +@@ -66,7 +66,7 @@ + the Posix.2 confstr () function, or CS_PATH define are not present. */ + #ifndef STANDARD_UTILS_PATH + #define STANDARD_UTILS_PATH \ +- "/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/etc" ++ "/bin:/usr/bin:/usr/sbin:/sbin" + #endif + + /* Default primary and secondary prompt strings. */ diff --git a/bash-2.03-profile.patch b/bash-2.03-profile.patch new file mode 100644 index 0000000..ba3344b --- /dev/null +++ b/bash-2.03-profile.patch @@ -0,0 +1,12 @@ +diff -up bash-3.2/config-top.h.profile bash-3.2/config-top.h +--- bash-3.2/config-top.h.profile 2008-07-17 13:35:39.000000000 +0200 ++++ bash-3.2/config-top.h 2008-07-17 13:42:18.000000000 +0200 +@@ -26,6 +26,8 @@ + what POSIX.2 specifies. */ + #define CONTINUE_AFTER_KILL_ERROR + ++#define NON_INTERACTIVE_LOGIN_SHELLS ++ + /* Define BREAK_COMPLAINS if you want the non-standard, but useful + error messages about `break' and `continue' out of context. */ + #define BREAK_COMPLAINS diff --git a/bash-2.05a-interpreter.patch b/bash-2.05a-interpreter.patch new file mode 100644 index 0000000..ca497c4 --- /dev/null +++ b/bash-2.05a-interpreter.patch @@ -0,0 +1,224 @@ +diff --git a/config.h.in b/config.h.in +index a5ad9e7..62a6b32 100644 +--- a/config.h.in ++++ b/config.h.in +@@ -748,6 +748,9 @@ + /* Define if you have the pselect function. */ + #undef HAVE_PSELECT + ++/* Define if you have the pread function. */ ++#undef HAVE_PREAD ++ + /* Define if you have the putenv function. */ + #undef HAVE_PUTENV + +@@ -946,6 +949,9 @@ + /* Define if you have the header file. */ + #undef HAVE_DLFCN_H + ++/* Define if you have the header file. */ ++#undef HAVE_ELF_H ++ + /* Define if you have the header file. */ + #undef HAVE_GRP_H + +diff --git a/configure.ac b/configure.ac +index ce4e9b6..eda95d6 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -700,7 +700,7 @@ BASH_HEADER_INTTYPES + 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 \ + getpagesize getpeername getrlimit getrusage gettimeofday \ + kill killpg lstat pselect readlink sbrk select setdtablesize \ +- setitimer tcgetpgrp uname ulimit waitpid) ++ setitimer tcgetpgrp uname ulimit waitpid pread) + AC_REPLACE_FUNCS(rename) + + dnl checks for c library functions +diff --git a/execute_cmd.c b/execute_cmd.c +index 2a3df6d..b5cd405 100644 +--- a/execute_cmd.c ++++ b/execute_cmd.c +@@ -41,6 +41,10 @@ + # include + #endif + ++#ifdef HAVE_ELF_H ++# include ++#endif ++ + #include "posixtime.h" + + #if defined (HAVE_SYS_RESOURCE_H) && !defined (RLIMTYPE) +@@ -5486,6 +5490,14 @@ shell_execve (command, args, env) + { + /* The file has the execute bits set, but the kernel refuses to + run it for some reason. See why. */ ++#if defined (HAVE_HASH_BANG_EXEC) || defined (HAVE_ELF_H) ++ int fd = open (command, O_RDONLY); ++ ++ if (fd >= 0) ++ sample_len = read (fd, sample, sizeof (sample)); ++ else ++ sample_len = -1; ++#endif + #if defined (HAVE_HASH_BANG_EXEC) + READ_SAMPLE_BUF (command, sample, sample_len); + if (sample_len > 0) +@@ -5495,6 +5507,7 @@ shell_execve (command, args, env) + char *interp; + int ilen; + ++ close (fd); + interp = getinterp (sample, sample_len, (int *)NULL); + ilen = strlen (interp); + errno = i; +@@ -5510,6 +5523,136 @@ shell_execve (command, args, env) + return (EX_NOEXEC); + } + #endif ++#if defined (HAVE_ELF_H) ++ if (i == ENOENT ++ && sample_len > EI_NIDENT ++ && memcmp (sample, ELFMAG, SELFMAG) == 0) ++ { ++ off_t offset = -1; ++ ++ /* It is an ELF file. Now determine whether it is dynamically ++ linked and if yes, get the offset of the interpreter ++ string. */ ++ if (sample[EI_CLASS] == ELFCLASS32 ++ && sample_len > sizeof (Elf32_Ehdr)) ++ { ++ Elf32_Ehdr ehdr; ++ Elf32_Phdr *phdr; ++ int nphdr; ++ ++ /* We have to copy the data since the sample buffer ++ might not be aligned correctly to be accessed as ++ an Elf32_Ehdr struct. */ ++ memcpy (&ehdr, sample, sizeof (Elf32_Ehdr)); ++ ++ nphdr = ehdr.e_phnum; ++ phdr = (Elf32_Phdr *) malloc (nphdr * ehdr.e_phentsize); ++ if (phdr != NULL) ++ { ++#ifdef HAVE_PREAD ++ sample_len = pread (fd, phdr, nphdr * ehdr.e_phentsize, ++ ehdr.e_phoff); ++#else ++ if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1) ++ sample_len = read (fd, phdr, ++ nphdr * ehdr.e_phentsize); ++ else ++ sample_len = -1; ++#endif ++ if (sample_len == nphdr * ehdr.e_phentsize) ++ while (nphdr-- > 0) ++ if (phdr[nphdr].p_type == PT_INTERP) ++ { ++ offset = phdr[nphdr].p_offset; ++ break; ++ } ++ free (phdr); ++ } ++ } ++ else if (sample[EI_CLASS] == ELFCLASS64 ++ && sample_len > sizeof (Elf64_Ehdr)) ++ { ++ Elf64_Ehdr ehdr; ++ Elf64_Phdr *phdr; ++ int nphdr; ++ ++ /* We have to copy the data since the sample buffer ++ might not be aligned correctly to be accessed as ++ an Elf64_Ehdr struct. */ ++ memcpy (&ehdr, sample, sizeof (Elf64_Ehdr)); ++ ++ nphdr = ehdr.e_phnum; ++ phdr = (Elf64_Phdr *) malloc (nphdr * ehdr.e_phentsize); ++ if (phdr != NULL) ++ { ++#ifdef HAVE_PREAD ++ sample_len = pread (fd, phdr, nphdr * ehdr.e_phentsize, ++ ehdr.e_phoff); ++#else ++ if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1) ++ sample_len = read (fd, phdr, ++ nphdr * ehdr.e_phentsize); ++ else ++ sample_len = -1; ++#endif ++ if (sample_len == nphdr * ehdr.e_phentsize) ++ while (nphdr-- > 0) ++ if (phdr[nphdr].p_type == PT_INTERP) ++ { ++ offset = phdr[nphdr].p_offset; ++ break; ++ } ++ free (phdr); ++ } ++ } ++ ++ if (offset != -1) ++ { ++ size_t maxlen = 0; ++ size_t actlen = 0; ++ char *interp = NULL; ++ ++ do ++ { ++ if (actlen == maxlen) ++ { ++ char *newinterp = realloc (interp, maxlen += 200); ++ if (newinterp == NULL) ++ { ++ actlen = 0; ++ break; ++ } ++ interp = newinterp; ++ ++#ifdef HAVE_PREAD ++ actlen = pread (fd, interp, maxlen, offset); ++#else ++ if (lseek (fd, offset, SEEK_SET) != -1) ++ actlen = read (fd, interp, maxlen); ++ else ++ actlen = -1; ++#endif ++ } ++ } ++ while (actlen > 0 && memchr (interp, '\0', actlen) == NULL); ++ ++ if (actlen > 0) ++ { ++ close (fd); ++ errno = i; ++ sys_error ("%s: %s: bad ELF interpreter", command, ++ interp); ++ free (interp); ++ return (EX_NOEXEC); ++ } ++ ++ free (interp); ++ } ++ } ++#endif ++#if defined (HAVE_HASH_BANG_EXEC) || defined (HAVE_ELF_H) ++ close (fd); ++#endif + errno = i; + file_error (command); + } +-- +2.9.3 + diff --git a/bash-2.05b-debuginfo.patch b/bash-2.05b-debuginfo.patch new file mode 100644 index 0000000..3278cab --- /dev/null +++ b/bash-2.05b-debuginfo.patch @@ -0,0 +1,10 @@ +--- bash-2.05b/builtins/Makefile.in.debuginfo 2003-03-25 17:25:21.000000000 +0000 ++++ bash-2.05b/builtins/Makefile.in 2003-03-25 17:25:49.000000000 +0000 +@@ -93,7 +93,6 @@ + $(RM) $@ + ./$(MKBUILTINS) $(DIRECTDEFINE) $< + $(CC) -c $(CCFLAGS) $*.c || ( $(RM) $*.c ; exit 1 ) +- $(RM) $*.c + + # How to make a .c file from a .def file. + .def.c: diff --git a/bash-2.05b-manso.patch b/bash-2.05b-manso.patch new file mode 100644 index 0000000..39ebf74 --- /dev/null +++ b/bash-2.05b-manso.patch @@ -0,0 +1,10 @@ +--- bash-2.05b/doc/builtins.1.manso 2003-02-10 18:58:21.000000000 +0000 ++++ bash-2.05b/doc/builtins.1 2003-02-10 18:58:28.000000000 +0000 +@@ -10,6 +10,6 @@ + ulimit, umask, unalias, unset, wait \- bash built-in commands, see \fBbash\fR(1) + .SH BASH BUILTIN COMMANDS + .nr zZ 1 +-.so bash.1 ++.so man1/bash.1 + .SH SEE ALSO + bash(1), sh(1) diff --git a/bash-2.05b-pgrp_sync.patch b/bash-2.05b-pgrp_sync.patch new file mode 100644 index 0000000..bd7ded6 --- /dev/null +++ b/bash-2.05b-pgrp_sync.patch @@ -0,0 +1,11 @@ +--- bash-2.05b/aclocal.m4.pgrp_sync 2002-06-25 14:45:43.000000000 +0100 ++++ bash-2.05b/aclocal.m4 2003-01-15 18:17:35.000000000 +0000 +@@ -1255,7 +1255,7 @@ + wait(&status); + exit(ok ? 0 : 5); + } +-], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes, ++], bash_cv_pgrp_pipe=yes,bash_cv_pgrp_pipe=yes, + [AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no) + bash_cv_pgrp_pipe=no]) + ]) diff --git a/bash-2.05b-xcc.patch b/bash-2.05b-xcc.patch new file mode 100644 index 0000000..ad42832 --- /dev/null +++ b/bash-2.05b-xcc.patch @@ -0,0 +1,19 @@ +--- bash-3.1/Makefile.in.xcc 2005-10-25 19:37:52.000000000 +0100 ++++ bash-3.1/Makefile.in 2005-12-23 16:11:09.000000000 +0000 +@@ -68,6 +68,7 @@ + ARFLAGS = @ARFLAGS@ + RANLIB = @RANLIB@ + SIZE = @SIZE@ ++STRIP = strip + + INSTALL = @INSTALL@ + INSTALL_PROGRAM = @INSTALL_PROGRAM@ +@@ -535,7 +536,7 @@ + @chmod a+rx bashbug + + strip: $(Program) .made +- strip $(Program) ++ $(STRIP) $(Program) + ls -l $(Program) + -$(SIZE) $(Program) + diff --git a/bash-3.2-audit.patch b/bash-3.2-audit.patch new file mode 100644 index 0000000..48a1751 --- /dev/null +++ b/bash-3.2-audit.patch @@ -0,0 +1,96 @@ +diff -up bash-4.2/config.h.in.audit bash-4.2/config.h.in +--- bash-4.2/config.h.in.audit 2013-01-31 16:26:16.857698992 +0100 ++++ bash-4.2/config.h.in 2013-01-31 16:26:16.876699255 +0100 +@@ -1131,6 +1131,14 @@ + + /* End additions for lib/intl */ + ++ ++/* Additions for lib/readline */ ++ ++/* Define if you have and it defines AUDIT_USER_TTY */ ++#undef HAVE_DECL_AUDIT_USER_TTY ++ ++/* End additions for lib/readline */ ++ + #include "config-bot.h" + + #endif /* _CONFIG_H_ */ +diff -up bash-4.2/configure.in.audit bash-4.2/configure.in +--- bash-4.2/configure.in.audit 2013-01-31 16:26:16.858699005 +0100 ++++ bash-4.2/configure.ac 2013-01-31 16:26:16.877699269 +0100 +@@ -888,6 +888,8 @@ BASH_FUNC_DUP2_CLOEXEC_CHECK + BASH_SYS_PGRP_SYNC + BASH_SYS_SIGNAL_VINTAGE + ++AC_CHECK_DECLS([AUDIT_USER_TTY],,, [[#include ]]) ++ + dnl checking for the presence of certain library symbols + BASH_SYS_ERRLIST + BASH_SYS_SIGLIST +diff -up bash-4.2/lib/readline/readline.c.audit bash-4.2/lib/readline/readline.c +--- bash-4.2/lib/readline/readline.c.audit 2013-01-31 16:26:16.871699185 +0100 ++++ bash-4.2/lib/readline/readline.c 2013-01-31 17:24:23.902744860 +0100 +@@ -55,6 +55,12 @@ + extern int errno; + #endif /* !errno */ + ++#if defined (HAVE_DECL_AUDIT_USER_TTY) ++# include ++# include ++# include ++#endif ++ + /* System-specific feature definitions and include files. */ + #include "rldefs.h" + #include "rlmbutil.h" +@@ -301,7 +307,48 @@ rl_set_prompt (prompt) + rl_visible_prompt_length = rl_expand_prompt (rl_prompt); + return 0; + } +- ++ ++#if defined (HAVE_DECL_AUDIT_USER_TTY) ++/* Report STRING to the audit system. */ ++static void ++audit_tty (char *string) ++{ ++ struct sockaddr_nl addr; ++ struct msghdr msg; ++ struct nlmsghdr nlm; ++ struct iovec iov[2]; ++ size_t size; ++ int fd; ++ ++ size = strlen (string) + 1; ++ fd = socket (AF_NETLINK, SOCK_RAW, NETLINK_AUDIT); ++ if (fd < 0) ++ return; ++ nlm.nlmsg_len = NLMSG_LENGTH (size); ++ nlm.nlmsg_type = AUDIT_USER_TTY; ++ nlm.nlmsg_flags = NLM_F_REQUEST; ++ nlm.nlmsg_seq = 0; ++ nlm.nlmsg_pid = 0; ++ iov[0].iov_base = &nlm; ++ iov[0].iov_len = sizeof (nlm); ++ iov[1].iov_base = string; ++ iov[1].iov_len = size; ++ addr.nl_family = AF_NETLINK; ++ addr.nl_pad = 0; ++ addr.nl_pid = 0; ++ addr.nl_groups = 0; ++ msg.msg_name = &addr; ++ msg.msg_namelen = sizeof (addr); ++ msg.msg_iov = iov; ++ msg.msg_iovlen = 2; ++ msg.msg_control = NULL; ++ msg.msg_controllen = 0; ++ msg.msg_flags = 0; ++ (void)sendmsg (fd, &msg, 0); ++ close (fd); ++} ++#endif ++ + /* Read a line of input. Prompt with PROMPT. An empty PROMPT means + none. A return value of NULL means that EOF was encountered. */ + char * diff --git a/bash-3.2-ssh_source_bash.patch b/bash-3.2-ssh_source_bash.patch new file mode 100644 index 0000000..5bd19ce --- /dev/null +++ b/bash-3.2-ssh_source_bash.patch @@ -0,0 +1,12 @@ +diff -up bash-4.0/config-top.h.ssh_source_bash bash-4.0/config-top.h +--- bash-4.0/config-top.h.ssh_source_bash 2009-01-21 15:20:06.000000000 +0100 ++++ bash-4.0/config-top.h 2009-01-21 15:25:46.000000000 +0100 +@@ -90,7 +90,7 @@ + sshd and source the .bashrc if so (like the rshd behavior). This checks + for the presence of SSH_CLIENT or SSH2_CLIENT in the initial environment, + which can be fooled under certain not-uncommon circumstances. */ +-/* #define SSH_SOURCE_BASHRC */ ++#define SSH_SOURCE_BASHRC + + /* Define if you want the case-capitalizing operators (~[~]) and the + `capcase' variable attribute (declare -c). */ diff --git a/bash-4.0-nobits.patch b/bash-4.0-nobits.patch new file mode 100644 index 0000000..0e77fda --- /dev/null +++ b/bash-4.0-nobits.patch @@ -0,0 +1,154 @@ +diff -up bash-4.0/execute_cmd.c.nobits bash-4.0/execute_cmd.c +--- bash-4.0/execute_cmd.c.nobits 2009-08-11 11:53:38.000000000 +0200 ++++ bash-4.0/execute_cmd.c 2009-08-14 16:18:18.000000000 +0200 +@@ -4747,6 +4747,7 @@ shell_execve (command, args, env) + && memcmp (sample, ELFMAG, SELFMAG) == 0) + { + off_t offset = -1; ++ int dynamic_nobits = 0; + + /* It is an ELF file. Now determine whether it is dynamically + linked and if yes, get the offset of the interpreter +@@ -4756,13 +4757,61 @@ shell_execve (command, args, env) + { + Elf32_Ehdr ehdr; + Elf32_Phdr *phdr; +- int nphdr; ++ Elf32_Shdr *shdr; ++ int nphdr, nshdr; + + /* We have to copy the data since the sample buffer + might not be aligned correctly to be accessed as + an Elf32_Ehdr struct. */ + memcpy (&ehdr, sample, sizeof (Elf32_Ehdr)); + ++ nshdr = ehdr.e_shnum; ++ shdr = (Elf32_Shdr *) malloc (nshdr * ehdr.e_shentsize); ++ ++ if (shdr != NULL) ++ { ++#ifdef HAVE_PREAD ++ sample_len = pread (fd, shdr, nshdr * ehdr.e_shentsize, ++ ehdr.e_shoff); ++#else ++ if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1) ++ sample_len = read (fd, shdr, ++ nshdr * ehdr.e_shentsize); ++ else ++ sample_len = -1; ++#endif ++ if (sample_len == nshdr * ehdr.e_shentsize) ++ { ++ char *strings = (char *) malloc (shdr[ehdr.e_shstrndx].sh_size); ++ if (strings != NULL) ++ { ++#ifdef HAVE_PREAD ++ sample_len = pread (fd, strings, ++ shdr[ehdr.e_shstrndx].sh_size, ++ shdr[ehdr.e_shstrndx].sh_offset); ++#else ++ if (lseek (fd, shdr[ehdr.e_shstrndx].sh_offset, ++ SEEK_SET) != -1) ++ sample_len = read (fd, strings, ++ shdr[ehdr.e_shstrndx].sh_size); ++ else ++ sample_len = -1; ++#endif ++ if (sample_len == shdr[ehdr.e_shstrndx].sh_size) ++ while (nshdr-- > 0) ++ if (strcmp (strings + shdr[nshdr].sh_name, ++ ".interp") == 0 && ++ shdr[nshdr].sh_type == SHT_NOBITS) ++ { ++ dynamic_nobits++; ++ break; ++ } ++ free (strings); ++ } ++ } ++ free (shdr); ++ } ++ + nphdr = ehdr.e_phnum; + phdr = (Elf32_Phdr *) malloc (nphdr * ehdr.e_phentsize); + if (phdr != NULL) +@@ -4792,13 +4841,60 @@ shell_execve (command, args, env) + { + Elf64_Ehdr ehdr; + Elf64_Phdr *phdr; +- int nphdr; ++ Elf64_Shdr *shdr; ++ int nphdr, nshdr; + + /* We have to copy the data since the sample buffer + might not be aligned correctly to be accessed as + an Elf64_Ehdr struct. */ + memcpy (&ehdr, sample, sizeof (Elf64_Ehdr)); + ++ nshdr = ehdr.e_shnum; ++ shdr = (Elf64_Shdr *) malloc (nshdr * ehdr.e_shentsize); ++ if (shdr != NULL) ++ { ++#ifdef HAVE_PREAD ++ sample_len = pread (fd, shdr, nshdr * ehdr.e_shentsize, ++ ehdr.e_shoff); ++#else ++ if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1) ++ sample_len = read (fd, shdr, ++ nshdr * ehdr.e_shentsize); ++ else ++ sample_len = -1; ++#endif ++ if (sample_len == nshdr * ehdr.e_shentsize) ++ { ++ char *strings = (char *) malloc (shdr[ehdr.e_shstrndx].sh_size); ++ if (strings != NULL) ++ { ++#ifdef HAVE_PREAD ++ sample_len = pread (fd, strings, ++ shdr[ehdr.e_shstrndx].sh_size, ++ shdr[ehdr.e_shstrndx].sh_offset); ++#else ++ if (lseek (fd, shdr[ehdr.e_shstrndx].sh_offset, ++ SEEK_SET) != -1) ++ sample_len = read (fd, strings, ++ shdr[ehdr.e_shstrndx].sh_size); ++ else ++ sample_len = -1; ++#endif ++ if (sample_len == shdr[ehdr.e_shstrndx].sh_size) ++ while (nshdr-- > 0) ++ if (strcmp (strings + shdr[nshdr].sh_name, ++ ".interp") == 0 && ++ shdr[nshdr].sh_type == SHT_NOBITS) ++ { ++ dynamic_nobits++; ++ break; ++ } ++ free (strings); ++ } ++ } ++ free (shdr); ++ } ++ + nphdr = ehdr.e_phnum; + phdr = (Elf64_Phdr *) malloc (nphdr * ehdr.e_phentsize); + if (phdr != NULL) +@@ -4858,8 +4954,15 @@ shell_execve (command, args, env) + { + close (fd); + errno = i; +- sys_error ("%s: %s: bad ELF interpreter", command, +- interp); ++ if (dynamic_nobits > 0) ++ { ++ sys_error ("%s: bad ELF interpreter", command); ++ } ++ else ++ { ++ sys_error ("%s: %s: bad ELF interpreter", command, ++ interp); ++ } + free (interp); + return (EX_NOEXEC); + } diff --git a/bash-4.1-broken_pipe.patch b/bash-4.1-broken_pipe.patch new file mode 100644 index 0000000..e083374 --- /dev/null +++ b/bash-4.1-broken_pipe.patch @@ -0,0 +1,12 @@ +diff -up bash-4.1/config-top.h.broken_pipe bash-4.1/config-top.h +--- bash-4.1/config-top.h.broken_pipe 2011-01-06 18:01:30.000000000 +0100 ++++ bash-4.1/config-top.h 2011-01-06 18:02:14.000000000 +0100 +@@ -51,7 +51,7 @@ + /* Define DONT_REPORT_BROKEN_PIPE_WRITE_ERRORS if you don't want builtins + like `echo' and `printf' to report errors when output does not succeed + due to EPIPE. */ +-/* #define DONT_REPORT_BROKEN_PIPE_WRITE_ERRORS */ ++#define DONT_REPORT_BROKEN_PIPE_WRITE_ERRORS + + /* The default value of the PATH variable. */ + #ifndef DEFAULT_PATH_VALUE diff --git a/bash-4.1-defer-sigchld-trap.patch b/bash-4.1-defer-sigchld-trap.patch new file mode 100644 index 0000000..e00adec --- /dev/null +++ b/bash-4.1-defer-sigchld-trap.patch @@ -0,0 +1,11 @@ +diff -pruN bash-4.1/jobs.c bash-4.1.patched/jobs.c +--- bash-4.1/jobs.c 2009-11-30 03:42:05.000000000 +0530 ++++ bash-4.1.patched/jobs.c 2012-03-06 16:44:15.706595703 +0530 +@@ -3037,6 +3037,7 @@ waitchld (wpid, block) + pid_t pid; + + int call_set_current, last_stopped_job, job, children_exited, waitpid_flags; ++ int called_from_sighand = sigchld; + static int wcontinued = WCONTINUED; /* run-time fix for glibc problem */ + + call_set_current = children_exited = 0; diff --git a/bash-4.1-examples.patch b/bash-4.1-examples.patch new file mode 100644 index 0000000..19159e7 --- /dev/null +++ b/bash-4.1-examples.patch @@ -0,0 +1,24 @@ +diff -up bash-4.1/examples/loadables/Makefile.in.examples bash-4.1/examples/loadables/Makefile.in +--- bash-4.1/examples/loadables/Makefile.in.examples 2010-06-22 16:20:02.000000000 +0200 ++++ bash-4.1/examples/loadables/Makefile.in 2010-06-22 16:20:41.000000000 +0200 +@@ -43,7 +43,7 @@ host_os = @host_os@ + host_cpu = @host_cpu@ + host_vendor = @host_vendor@ + +-CFLAGS = @CFLAGS@ ++CFLAGS = -O2 -g + LOCAL_CFLAGS = @LOCAL_CFLAGS@ + DEFS = @DEFS@ + LOCAL_DEFS = @LOCAL_DEFS@ +diff -up bash-4.1/examples/loadables/perl/Makefile.in.examples bash-4.1/examples/loadables/perl/Makefile.in +--- bash-4.1/examples/loadables/perl/Makefile.in.examples 2010-06-22 16:20:46.000000000 +0200 ++++ bash-4.1/examples/loadables/perl/Makefile.in 2010-06-22 16:21:04.000000000 +0200 +@@ -42,7 +42,7 @@ SHELL = @MAKE_SHELL@ + + PERL5 = perl5 + +-CFLAGS = @CFLAGS@ ++CFLAGS = -O2 -g + + # + # These values are generated for configure by ${topdir}/support/shobj-conf. diff --git a/bash-4.2-coverity.patch b/bash-4.2-coverity.patch new file mode 100644 index 0000000..5fc8456 --- /dev/null +++ b/bash-4.2-coverity.patch @@ -0,0 +1,99 @@ +diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c +--- bash-4.2/execute_cmd.c.coverity 2011-02-24 13:04:35.000000000 +0100 ++++ bash-4.2/execute_cmd.c 2011-02-24 13:49:13.000000000 +0100 +@@ -5036,7 +5036,7 @@ shell_execve (command, args, env) + Elf32_Ehdr ehdr; + Elf32_Phdr *phdr; + Elf32_Shdr *shdr; +- int nphdr, nshdr; ++ Elf32_Half nphdr, nshdr; + + /* We have to copy the data since the sample buffer + might not be aligned correctly to be accessed as +@@ -5044,12 +5044,12 @@ shell_execve (command, args, env) + memcpy (&ehdr, sample, sizeof (Elf32_Ehdr)); + + nshdr = ehdr.e_shnum; +- shdr = (Elf32_Shdr *) malloc (nshdr * ehdr.e_shentsize); ++ shdr = (Elf32_Shdr *) malloc ((size_t)nshdr * (size_t)ehdr.e_shentsize); + + if (shdr != NULL) + { + #ifdef HAVE_PREAD +- sample_len = pread (fd, shdr, nshdr * ehdr.e_shentsize, ++ sample_len = pread (fd, shdr, (size_t)nshdr * (size_t)ehdr.e_shentsize, + ehdr.e_shoff); + #else + if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1) +@@ -5091,11 +5091,11 @@ shell_execve (command, args, env) + } + + nphdr = ehdr.e_phnum; +- phdr = (Elf32_Phdr *) malloc (nphdr * ehdr.e_phentsize); ++ phdr = (Elf32_Phdr *) malloc ((size_t)nphdr * (size_t)ehdr.e_phentsize); + if (phdr != NULL) + { + #ifdef HAVE_PREAD +- sample_len = pread (fd, phdr, nphdr * ehdr.e_phentsize, ++ sample_len = pread (fd, phdr, (size_t)nphdr * (size_t)ehdr.e_phentsize, + ehdr.e_phoff); + #else + if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1) +@@ -5120,7 +5120,7 @@ shell_execve (command, args, env) + Elf64_Ehdr ehdr; + Elf64_Phdr *phdr; + Elf64_Shdr *shdr; +- int nphdr, nshdr; ++ Elf32_Half nphdr, nshdr; + + /* We have to copy the data since the sample buffer + might not be aligned correctly to be accessed as +@@ -5128,11 +5128,11 @@ shell_execve (command, args, env) + memcpy (&ehdr, sample, sizeof (Elf64_Ehdr)); + + nshdr = ehdr.e_shnum; +- shdr = (Elf64_Shdr *) malloc (nshdr * ehdr.e_shentsize); ++ shdr = (Elf64_Shdr *) malloc ((size_t)nshdr * (size_t)ehdr.e_shentsize); + if (shdr != NULL) + { + #ifdef HAVE_PREAD +- sample_len = pread (fd, shdr, nshdr * ehdr.e_shentsize, ++ sample_len = pread (fd, shdr, (size_t)nshdr * (size_t)ehdr.e_shentsize, + ehdr.e_shoff); + #else + if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1) +@@ -5174,11 +5174,11 @@ shell_execve (command, args, env) + } + + nphdr = ehdr.e_phnum; +- phdr = (Elf64_Phdr *) malloc (nphdr * ehdr.e_phentsize); ++ phdr = (Elf64_Phdr *) malloc ((size_t)nphdr * (size_t)ehdr.e_phentsize); + if (phdr != NULL) + { + #ifdef HAVE_PREAD +- sample_len = pread (fd, phdr, nphdr * ehdr.e_phentsize, ++ sample_len = pread (fd, phdr, (size_t)nphdr * (size_t)ehdr.e_phentsize, + ehdr.e_phoff); + #else + if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1) +@@ -5200,8 +5200,8 @@ shell_execve (command, args, env) + + if (offset != -1) + { +- size_t maxlen = 0; +- size_t actlen = 0; ++ ssize_t maxlen = 0; ++ ssize_t actlen = 0; + char *interp = NULL; + + do +@@ -5250,7 +5250,8 @@ shell_execve (command, args, env) + } + #endif + #if defined (HAVE_HASH_BANG_EXEC) || defined (HAVE_ELF_H) +- close (fd); ++ if (fd >= 0) ++ close (fd); + #endif + errno = i; + file_error (command); diff --git a/bash-4.2-manpage_trap.patch b/bash-4.2-manpage_trap.patch new file mode 100644 index 0000000..e81882f --- /dev/null +++ b/bash-4.2-manpage_trap.patch @@ -0,0 +1,12 @@ +diff -up bash-4.1/doc/bash.1.manpage_trap bash-4.1/doc/bash.1 +--- bash-4.1/doc/bash.1.manpage_trap 2012-08-28 10:06:00.561999092 +0200 ++++ bash-4.1/doc/bash.1 2012-08-28 10:06:24.225304505 +0200 +@@ -9251,7 +9251,7 @@ being inverted via + These are the same conditions obeyed by the \fBerrexit\fP (\fB\-e\fP) option. + .if t .sp 0.5 + .if n .sp 1 +-Signals ignored upon entry to the shell cannot be trapped or reset. ++Signals ignored upon entry to the shell cannot be trapped, reset or listed. + Trapped signals that are not being ignored are reset to their original + values in a subshell or subshell environment when one is created. + The return status is false if any diff --git a/bash-4.2-rc2-logout.patch b/bash-4.2-rc2-logout.patch new file mode 100644 index 0000000..f63c8b6 --- /dev/null +++ b/bash-4.2-rc2-logout.patch @@ -0,0 +1,41 @@ +diff --git a/config-top.h b/config-top.h +index 026d4a4..cb0e002 100644 +--- a/config-top.h ++++ b/config-top.h +@@ -92,7 +92,7 @@ + /* #define SYS_BASHRC "/etc/bash.bashrc" */ + + /* System-wide .bash_logout for login shells. */ +-/* #define SYS_BASH_LOGOUT "/etc/bash.bash_logout" */ ++#define SYS_BASH_LOGOUT "/etc/bash.bash_logout" + + /* Define this to make non-interactive shells begun with argv[0][0] == '-' + run the startup files when not in posix mode. */ +diff --git a/doc/bash.1 b/doc/bash.1 +index 04ce845..bfde55e 100644 +--- a/doc/bash.1 ++++ b/doc/bash.1 +@@ -335,8 +335,8 @@ option may be used when the shell is started to inhibit this behavior. + When an interactive login shell exits, + or a non-interactive login shell executes the \fBexit\fP builtin command, + .B bash +-reads and executes commands from the file \fI~/.bash_logout\fP, if it +-exists. ++reads and executes commands from the files \fI~/.bash_logout\fP ++and \fI/etc/bash.bash_logout\fP, if the files exists. + .PP + When an interactive shell that is not a login shell is started, + .B bash +@@ -10558,6 +10558,9 @@ The \fBbash\fP executable + .FN /etc/profile + The systemwide initialization file, executed for login shells + .TP ++.FN /etc/bash.bash_logout ++The systemwide login shell cleanup file, executed when a login shell exits ++.TP + .FN ~/.bash_profile + The personal initialization file, executed for login shells + .TP +-- +2.9.3 + diff --git a/bash-4.2-size_type.patch b/bash-4.2-size_type.patch new file mode 100644 index 0000000..ab56677 --- /dev/null +++ b/bash-4.2-size_type.patch @@ -0,0 +1,14 @@ +diff -up bash-4.2/variables.h.size_type bash-4.2/variables.h +--- bash-4.2/variables.h.size_type 2012-11-29 10:33:25.109036844 +0100 ++++ bash-4.2/variables.h 2012-11-29 10:46:12.718530162 +0100 +@@ -95,8 +95,8 @@ typedef struct variable { + + typedef struct _vlist { + SHELL_VAR **list; +- int list_size; /* allocated size */ +- int list_len; /* current number of entries */ ++ size_t list_size; /* allocated size */ ++ size_t list_len; /* current number of entries */ + } VARLIST; + + /* The various attributes that a given variable can have. */ diff --git a/bash-4.3-man-ulimit.patch b/bash-4.3-man-ulimit.patch new file mode 100644 index 0000000..0c3fa0a --- /dev/null +++ b/bash-4.3-man-ulimit.patch @@ -0,0 +1,15 @@ +diff --git a/doc/bash.1 b/doc/bash.1 +index 6e8aebb..e846e68 100644 +--- a/doc/bash.1 ++++ b/doc/bash.1 +@@ -10333,6 +10333,7 @@ and + which are in 512-byte increments. + The return status is 0 unless an invalid option or argument is supplied, + or an error occurs while setting a new limit. ++In POSIX Mode 512-byte blocks are used for the `-c' and `-f' options. + .RE + .TP + \fBumask\fP [\fB\-p\fP] [\fB\-S\fP] [\fImode\fP] +-- +2.9.3 + diff --git a/bash-4.3-memleak-lc_all.patch b/bash-4.3-memleak-lc_all.patch new file mode 100644 index 0000000..77e86de --- /dev/null +++ b/bash-4.3-memleak-lc_all.patch @@ -0,0 +1,12 @@ +diff -up bash-4.3/locale.c.old bash-4.3/locale.c +--- bash-4.3/locale.c.old 2015-07-15 11:55:00.002857301 +0200 ++++ bash-4.3/locale.c 2015-07-15 11:48:36.698086257 +0200 +@@ -77,8 +77,6 @@ set_default_locale () + { + #if defined (HAVE_SETLOCALE) + default_locale = setlocale (LC_ALL, ""); +- if (default_locale) +- default_locale = savestring (default_locale); + #endif /* HAVE_SETLOCALE */ + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); diff --git a/bash-4.3-noecho.patch b/bash-4.3-noecho.patch new file mode 100644 index 0000000..2906fbf --- /dev/null +++ b/bash-4.3-noecho.patch @@ -0,0 +1,46 @@ +diff --git a/parse.y b/parse.y +index 30425a5..85f1c4f 100644 +--- a/parse.y ++++ b/parse.y +@@ -4228,6 +4228,8 @@ xparse_dolparen (base, string, indp, flags) + save_parser_state (&ps); + save_input_line_state (&ls); + orig_eof_token = shell_eof_token; ++ /* avoid echoing every substitution again */ ++ echo_input_at_read = 0; + + /*(*/ + parser_state |= PST_CMDSUBST|PST_EOFTOKEN; /* allow instant ')' */ /*(*/ +diff --git a/subst.c b/subst.c +index f1a4df1..a93a4ce 100644 +--- a/subst.c ++++ b/subst.c +@@ -8513,6 +8513,7 @@ param_expand (string, sindex, quoted, expanded_something, + WORD_LIST *list; + WORD_DESC *tdesc, *ret; + int tflag; ++ int old_echo_input; + + /*itrace("param_expand: `%s' pflags = %d", string+*sindex, pflags);*/ + zindex = *sindex; +@@ -8831,6 +8832,9 @@ arithsub: + } + + comsub: ++ old_echo_input = echo_input_at_read; ++ /* avoid echoing every substitution again */ ++ echo_input_at_read = 0; + if (pflags & PF_NOCOMSUB) + /* we need zindex+1 because string[zindex] == RPAREN */ + temp1 = substring (string, *sindex, zindex+1); +@@ -8843,6 +8847,7 @@ comsub: + } + FREE (temp); + temp = temp1; ++ echo_input_at_read = old_echo_input; + break; + + /* Do POSIX.2d9-style arithmetic substitution. This will probably go +-- +2.9.3 + diff --git a/bash-4.4-assignment-error.patch b/bash-4.4-assignment-error.patch new file mode 100644 index 0000000..9645503 --- /dev/null +++ b/bash-4.4-assignment-error.patch @@ -0,0 +1,31 @@ +diff --git a/execute_cmd.h b/execute_cmd.h +--- a/execute_cmd.h ++++ b/execute_cmd.h +@@ -37,6 +37,9 @@ struct func_array_state + }; + #endif + ++/* Variables delared in execute_cmd.c, used by many other files */ ++extern int executing_command_builtin; ++ + extern struct fd_bitmap *new_fd_bitmap __P((int)); + extern void dispose_fd_bitmap __P((struct fd_bitmap *)); + extern void close_fd_bitmap __P((struct fd_bitmap *)); +diff --git a/subst.c b/subst.c +--- a/subst.c ++++ b/subst.c +@@ -10676,11 +10676,12 @@ expand_word_list_internal (list, eflags) + tint = do_word_assignment (temp_list->word, 0); + this_command_name = savecmd; + /* Variable assignment errors in non-interactive shells +- running in Posix.2 mode cause the shell to exit. */ ++ running in Posix.2 mode cause the shell to exit, unless ++ they are being run by the `command' builtin. */ + if (tint == 0) + { + last_command_exit_value = EXECUTION_FAILURE; +- if (interactive_shell == 0 && posixly_correct) ++ if (interactive_shell == 0 && posixly_correct && executing_command_builtin == 0) + exp_jump_to_top_level (FORCE_EOF); + else + exp_jump_to_top_level (DISCARD); diff --git a/bash-4.4-case-in-command-subst.patch b/bash-4.4-case-in-command-subst.patch new file mode 100644 index 0000000..12509ed --- /dev/null +++ b/bash-4.4-case-in-command-subst.patch @@ -0,0 +1,18 @@ +diff --git a/parse.y b/parse.y +--- a/parse.y ++++ b/parse.y +@@ -4011,11 +4011,13 @@ eof_error: + tflags |= LEX_RESWDOK; + lex_rwlen = 0; + } +- else ++ else if (shellmeta (ch) == 0) + { + tflags &= ~LEX_RESWDOK; + /*itrace("parse_comsub:%d: found `%.4s', lex_reswdok -> 0", line_number, ret+retind-4);*/ + } ++ else /* can't be in a reserved word any more */ ++ lex_rwlen = 0; + } + else if MBTEST((tflags & LEX_CKCOMMENT) && ch == '#' && (lex_rwlen == 0 || ((tflags & LEX_INWORD) && lex_wlen == 0))) + ; /* don't modify LEX_RESWDOK if we're starting a comment */ diff --git a/bash-4.4-coverity.patch b/bash-4.4-coverity.patch new file mode 100644 index 0000000..c1fc747 --- /dev/null +++ b/bash-4.4-coverity.patch @@ -0,0 +1,203 @@ +diff --git a/builtins/fc.def b/builtins/fc.def +index fe16471..98c53db 100644 +--- a/builtins/fc.def ++++ b/builtins/fc.def +@@ -423,6 +423,7 @@ fc_builtin (list) + { + sh_wrerror (); + fclose (stream); ++ FREE (fn); + return (EXECUTION_FAILURE); + } + fclose (stream); +diff --git a/execute_cmd.c b/execute_cmd.c +index 63a332a..15b5e19 100644 +--- a/execute_cmd.c ++++ b/execute_cmd.c +@@ -2196,8 +2196,10 @@ coproc_setvars (cp) + if (v == 0) + { + v = find_variable_nameref_for_create (cp->c_name, 1); +- if (v == INVALID_NAMEREF_VALUE) +- return; ++ if (v == INVALID_NAMEREF_VALUE) { ++ free (namevar); ++ return; ++ } + if (v && nameref_p (v)) + { + free (cp->c_name); +@@ -2210,6 +2212,7 @@ coproc_setvars (cp) + { + if (readonly_p (v)) + err_readonly (cp->c_name); ++ free (namevar); + return; + } + if (v == 0) +@@ -5528,7 +5531,6 @@ shell_execve (command, args, env) + char *interp; + int ilen; + +- close (fd); + interp = getinterp (sample, sample_len, (int *)NULL); + ilen = strlen (interp); + errno = i; +diff --git a/expr.c b/expr.c +index 172964a..5dc57c0 100644 +--- a/expr.c ++++ b/expr.c +@@ -207,7 +207,8 @@ static intmax_t exp5 __P((void)); + static intmax_t exp4 __P((void)); + static intmax_t expshift __P((void)); + static intmax_t exp3 __P((void)); +-static intmax_t exp2 __P((void)); ++/* Avoid name clash with standard exp2 */ ++static intmax_t bash_exp2 __P((void)); + static intmax_t exppower __P((void)); + static intmax_t exp1 __P((void)); + static intmax_t exp0 __P((void)); +@@ -809,14 +810,14 @@ exp3 () + { + register intmax_t val1, val2; + +- val1 = exp2 (); ++ val1 = bash_exp2 (); + + while ((curtok == PLUS) || (curtok == MINUS)) + { + int op = curtok; + + readtok (); +- val2 = exp2 (); ++ val2 = bash_exp2 (); + + if (op == PLUS) + val1 += val2; +@@ -828,7 +829,7 @@ exp3 () + } + + static intmax_t +-exp2 () ++bash_exp2 () + { + register intmax_t val1, val2; + #if defined (HAVE_IMAXDIV) +diff --git a/lib/glob/glob.c b/lib/glob/glob.c +index 7f6eafe..c018e29 100644 +--- a/lib/glob/glob.c ++++ b/lib/glob/glob.c +@@ -576,7 +576,7 @@ glob_vector (pat, dir, flags) + register char *nextname, *npat, *subdir; + unsigned int count; + int lose, skip, ndirs, isdir, sdlen, add_current, patlen; +- register char **name_vector; ++ register char **name_vector = NULL; + register unsigned int i; + int mflags; /* Flags passed to strmatch (). */ + int pflags; /* flags passed to sh_makepath () */ +@@ -894,7 +894,7 @@ glob_vector (pat, dir, flags) + } + + /* Don't call QUIT; here; let higher layers deal with it. */ +- ++ FREE (name_vector); + return ((char **)NULL); + } + +diff --git a/lib/sh/pathcanon.c b/lib/sh/pathcanon.c +index f19bd55..2a565d6 100644 +--- a/lib/sh/pathcanon.c ++++ b/lib/sh/pathcanon.c +@@ -227,7 +227,7 @@ sh_canonpath (path, flags) + if (result[2] == '\0') /* short-circuit for bare `//' */ + result[1] = '\0'; + else +- strcpy (result, result + 1); ++ memmove(result, result + 1, strlen(result + 1) + 1); + } + + return (result); +diff --git a/lib/sh/pathphys.c b/lib/sh/pathphys.c +index 26016b7..b64c4cd 100644 +--- a/lib/sh/pathphys.c ++++ b/lib/sh/pathphys.c +@@ -245,7 +245,7 @@ error: + if (result[2] == '\0') /* short-circuit for bare `//' */ + result[1] = '\0'; + else +- strcpy (result, result + 1); ++ memmove(result, result + 1, strlen(result + 1) + 1); + } + + return (result); +diff --git a/shell.c b/shell.c +index b43de50..4aae182 100644 +--- a/shell.c ++++ b/shell.c +@@ -1948,8 +1948,10 @@ show_shell_usage (fp, extra) + fputs (_("\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"), fp); + + for (i = 0, set_opts = 0; shell_builtins[i].name; i++) +- if (STREQ (shell_builtins[i].name, "set")) ++ if (STREQ (shell_builtins[i].name, "set")) { + set_opts = savestring (shell_builtins[i].short_doc); ++ break; ++ } + if (set_opts) + { + s = strchr (set_opts, '['); +diff --git a/subst.c b/subst.c +index 5f3e41e..7574617 100644 +--- a/subst.c ++++ b/subst.c +@@ -5182,8 +5182,11 @@ parameter_list_transform (xc, itype, quoted) + list = list_rest_of_args (); + if (list == 0) + return ((char *)NULL); +- if (xc == 'A') +- return (pos_params_assignment (list, itype, quoted)); ++ if (xc == 'A') { ++ ret = pos_params_assignment (list, itype, quoted); ++ dispose_words (list); ++ return (ret); ++ } + ret = list_transform (xc, (SHELL_VAR *)0, list, itype, quoted); + dispose_words (list); + return (ret); +@@ -6813,6 +6816,7 @@ parameter_brace_expand_rhs (name, value, c, quoted, pflags, qdollaratp, hasdolla + { + report_error (_("%s: invalid indirect expansion"), name); + free (vname); ++ free (t1); + dispose_word (w); + return &expand_wdesc_error; + } +@@ -6820,6 +6824,7 @@ parameter_brace_expand_rhs (name, value, c, quoted, pflags, qdollaratp, hasdolla + { + report_error (_("%s: invalid variable name"), vname); + free (vname); ++ free (t1); + dispose_word (w); + return &expand_wdesc_error; + } +diff --git a/support/man2html.c b/support/man2html.c +index 6ba5061..1d9e376 100644 +--- a/support/man2html.c ++++ b/support/man2html.c +@@ -522,6 +522,7 @@ read_man_page(char *filename) + man_buf[buf_size] = '\n'; + man_buf[buf_size + 1] = man_buf[buf_size + 2] = '\0'; + } else { ++ free (man_buf); + man_buf = NULL; + } + fclose(man_stream); +@@ -2562,7 +2563,6 @@ scan_request(char *c) + h = name; + if (stat(h, &stbuf) != -1) + l = stbuf.st_size; +- buf = stralloc(l + 4); + #if NOCGI + if (!out_length) { + char *t, *s; diff --git a/bash-4.4-fix-buffered_getchar-crash.patch b/bash-4.4-fix-buffered_getchar-crash.patch new file mode 100644 index 0000000..0290fa8 --- /dev/null +++ b/bash-4.4-fix-buffered_getchar-crash.patch @@ -0,0 +1,23 @@ +diff -up bash-4.4/input.c.orig bash-4.4/input.c +--- bash-4.4/input.c.orig 2022-03-10 10:50:40.046490589 -0300 ++++ bash-4.4/input.c 2022-03-10 10:51:48.659491601 -0300 +@@ -530,7 +530,7 @@ bufstream_ungetc(c, bp) + int c; + BUFFERED_STREAM *bp; + { +- if (c == EOF || bp->b_inputp == 0) ++ if (c == EOF || bp == 0 || bp->b_inputp == 0) + return (EOF); + + bp->b_buffer[--bp->b_inputp] = c; +@@ -561,6 +561,10 @@ buffered_getchar () + { + CHECK_TERMSIG; + ++ if (bash_input.location.buffered_fd < 0 || ++ buffers[bash_input.location.buffered_fd] == 0) ++ return EOF; ++ + #if !defined (DJGPP) + return (bufstream_getc (buffers[bash_input.location.buffered_fd])); + #else diff --git a/bash-4.4-no-loadable-builtins.patch b/bash-4.4-no-loadable-builtins.patch new file mode 100644 index 0000000..b03459d --- /dev/null +++ b/bash-4.4-no-loadable-builtins.patch @@ -0,0 +1,15 @@ +diff --git a/Makefile.in b/Makefile.in +index a1f9483..24c646a 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -800,7 +800,6 @@ install: .made installdirs + infodir=$(infodir) htmldir=$(htmldir) DESTDIR=$(DESTDIR) $@ ) + -( cd $(DEFDIR) ; $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ ) + -( cd $(PO_DIR) ; $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ ) +- -( cd $(LOADABLES_DIR) && $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ ) + + install-strip: + $(MAKE) $(MFLAGS) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ +-- +2.9.3 + diff --git a/bash-4.4-patch-1.patch b/bash-4.4-patch-1.patch new file mode 100644 index 0000000..e0a6088 --- /dev/null +++ b/bash-4.4-patch-1.patch @@ -0,0 +1,49 @@ +From 8ddc8d6e3a3d85eec6d4ba9b9ed2bc36bce56716 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-10.patch b/bash-4.4-patch-10.patch new file mode 100644 index 0000000..ec0fbfe --- /dev/null +++ b/bash-4.4-patch-10.patch @@ -0,0 +1,39 @@ +From 5b9762d6f0cd36ff1b88bde22efa30ad0ed27ec6 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-11.patch b/bash-4.4-patch-11.patch new file mode 100644 index 0000000..d3ec76a --- /dev/null +++ b/bash-4.4-patch-11.patch @@ -0,0 +1,39 @@ +From 76bb456d8fcd870cd31b7bf9d90798cd97cee2ab Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-12.patch b/bash-4.4-patch-12.patch new file mode 100644 index 0000000..2983a94 --- /dev/null +++ b/bash-4.4-patch-12.patch @@ -0,0 +1,119 @@ +From bc007799f0e1362100375bb95d952d28de4c62fb Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-13.patch b/bash-4.4-patch-13.patch new file mode 100644 index 0000000..abfb2de --- /dev/null +++ b/bash-4.4-patch-13.patch @@ -0,0 +1,38 @@ +From 1aef9c7b55dcef4af239caf93e01419e1c8e04ad Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-14.patch b/bash-4.4-patch-14.patch new file mode 100644 index 0000000..bceb8ea --- /dev/null +++ b/bash-4.4-patch-14.patch @@ -0,0 +1,85 @@ +From 2fb21d75bfddd724b0e45d4a51455a166467e496 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-15.patch b/bash-4.4-patch-15.patch new file mode 100644 index 0000000..7d1dccf --- /dev/null +++ b/bash-4.4-patch-15.patch @@ -0,0 +1,38 @@ +From 9cce630e80008e74fa9a1d9408367341caf363f2 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-16.patch b/bash-4.4-patch-16.patch new file mode 100644 index 0000000..752b034 --- /dev/null +++ b/bash-4.4-patch-16.patch @@ -0,0 +1,68 @@ +From c9f1b04651dae16e33f0aa8974c5122e26b362ae Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-17.patch b/bash-4.4-patch-17.patch new file mode 100644 index 0000000..ac3eac8 --- /dev/null +++ b/bash-4.4-patch-17.patch @@ -0,0 +1,41 @@ +From b3a5ec8dd510a68dc850f3f516c0cf9afd87451f Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-18.patch b/bash-4.4-patch-18.patch new file mode 100644 index 0000000..853a9e3 --- /dev/null +++ b/bash-4.4-patch-18.patch @@ -0,0 +1,38 @@ +From eb78197af36bb0fb95493ebf8fce104be6832ec9 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-19.patch b/bash-4.4-patch-19.patch new file mode 100644 index 0000000..35e6606 --- /dev/null +++ b/bash-4.4-patch-19.patch @@ -0,0 +1,40 @@ +From b0776d8c49ab4310fa056ce1033985996c5b9807 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 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 + diff --git a/bash-4.4-patch-2.patch b/bash-4.4-patch-2.patch new file mode 100644 index 0000000..373a92d --- /dev/null +++ b/bash-4.4-patch-2.patch @@ -0,0 +1,59 @@ +From 280bd77d8d3e7f7c90c9fa07de3d1e8f8e18ac29 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-20.patch b/bash-4.4-patch-20.patch new file mode 100644 index 0000000..5475e3c --- /dev/null +++ b/bash-4.4-patch-20.patch @@ -0,0 +1,136 @@ +From 354efb96f1e4574f458e994163bbe31c76769573 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +Date: Fri, 1 Jun 2018 10:19:56 -0400 +Subject: [PATCH] saved background process status hash table loop fixes + +--- + jobs.c | 62 +++++++++++++++++++++++++++++++++++++++++----------- + patchlevel.h | 2 +- + 2 files changed, 50 insertions(+), 14 deletions(-) + +diff --git a/jobs.c b/jobs.c +index fc966036..2684632d 100644 +--- a/jobs.c ++++ b/jobs.c +@@ -812,8 +812,22 @@ bgp_add (pid, status) + ps_index_t *bucket, psi; + struct pidstat *ps; + +- bucket = pshash_getbucket (pid); +- psi = bgp_getindex (); ++ /* bucket == existing chain of pids hashing to same value ++ psi = where were going to put this pid/status */ ++ ++ bucket = pshash_getbucket (pid); /* index into pidstat_table */ ++ psi = bgp_getindex (); /* bgpids.head, index into storage */ ++ ++ /* XXX - what if psi == *bucket? */ ++ if (psi == *bucket) ++ { ++#ifdef DEBUG ++ internal_warning ("hashed pid %d (pid %d) collides with bgpids.head, skipping", psi, pid); ++#endif ++ bgpids.storage[psi].pid = NO_PID; /* make sure */ ++ psi = bgp_getindex (); /* skip to next one */ ++ } ++ + ps = &bgpids.storage[psi]; + + ps->pid = pid; +@@ -841,32 +855,47 @@ pshash_delindex (psi) + ps_index_t psi; + { + struct pidstat *ps; ++ ps_index_t *bucket; + + ps = &bgpids.storage[psi]; + if (ps->pid == NO_PID) + return; + +- if (ps->bucket_next != NO_PID) ++ if (ps->bucket_next != NO_PIDSTAT) + bgpids.storage[ps->bucket_next].bucket_prev = ps->bucket_prev; +- if (ps->bucket_prev != NO_PID) ++ if (ps->bucket_prev != NO_PIDSTAT) + bgpids.storage[ps->bucket_prev].bucket_next = ps->bucket_next; + else +- *(pshash_getbucket (ps->pid)) = ps->bucket_next; ++ { ++ bucket = pshash_getbucket (ps->pid); ++ *bucket = ps->bucket_next; /* deleting chain head in hash table */ ++ } ++ ++ /* clear out this cell, just in case */ ++ ps->pid = NO_PID; ++ ps->bucket_next = ps->bucket_prev = NO_PIDSTAT; + } + + static int + bgp_delete (pid) + pid_t pid; + { +- ps_index_t psi; ++ ps_index_t psi, orig_psi; + + if (bgpids.storage == 0 || bgpids.nalloc == 0 || bgpids.npid == 0) + return 0; + + /* Search chain using hash to find bucket in pidstat_table */ +- for (psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next) +- if (bgpids.storage[psi].pid == pid) +- break; ++ for (orig_psi = psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next) ++ { ++ if (bgpids.storage[psi].pid == pid) ++ break; ++ if (orig_psi == bgpids.storage[psi].bucket_next) /* catch reported bug */ ++ { ++ internal_warning ("bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next", psi); ++ return 0; ++ } ++ } + + if (psi == NO_PIDSTAT) + return 0; /* not found */ +@@ -904,15 +933,22 @@ static int + bgp_search (pid) + pid_t pid; + { +- ps_index_t psi; ++ ps_index_t psi, orig_psi; + + if (bgpids.storage == 0 || bgpids.nalloc == 0 || bgpids.npid == 0) + return -1; + + /* Search chain using hash to find bucket in pidstat_table */ +- for (psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next) +- if (bgpids.storage[psi].pid == pid) +- return (bgpids.storage[psi].status); ++ for (orig_psi = psi = *(pshash_getbucket (pid)); psi != NO_PIDSTAT; psi = bgpids.storage[psi].bucket_next) ++ { ++ if (bgpids.storage[psi].pid == pid) ++ return (bgpids.storage[psi].status); ++ if (orig_psi == bgpids.storage[psi].bucket_next) /* catch reported bug */ ++ { ++ internal_warning ("bgp_search: LOOP: psi (%d) == storage[psi].bucket_next", psi); ++ return -1; ++ } ++ } + + return -1; + } +diff --git a/patchlevel.h b/patchlevel.h +index a711c495..4a65dc0f 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 19 ++#define PATCHLEVEL 20 + + #endif /* _PATCHLEVEL_H_ */ +-- +2.29.2 + diff --git a/bash-4.4-patch-3.patch b/bash-4.4-patch-3.patch new file mode 100644 index 0000000..30b81cb --- /dev/null +++ b/bash-4.4-patch-3.patch @@ -0,0 +1,52 @@ +From 4f59a8babc53a9f975078c4a003bdc8831c5ee22 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-4.patch b/bash-4.4-patch-4.patch new file mode 100644 index 0000000..f397be6 --- /dev/null +++ b/bash-4.4-patch-4.patch @@ -0,0 +1,81 @@ +From 2965eca924466a48c5597ac5c6c86d470e718908 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-5.patch b/bash-4.4-patch-5.patch new file mode 100644 index 0000000..03b9761 --- /dev/null +++ b/bash-4.4-patch-5.patch @@ -0,0 +1,42 @@ +From f459cbd8be37b28be1dc90315e0ab51d7f211301 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-6.patch b/bash-4.4-patch-6.patch new file mode 100644 index 0000000..a6e3551 --- /dev/null +++ b/bash-4.4-patch-6.patch @@ -0,0 +1,50 @@ +From 44bfefc553993613c0aff992bc4f3078d738ee1d Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-7.patch b/bash-4.4-patch-7.patch new file mode 100644 index 0000000..2db3d82 --- /dev/null +++ b/bash-4.4-patch-7.patch @@ -0,0 +1,114 @@ +From 4f747edc625815f449048579f6e65869914dd715 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-8.patch b/bash-4.4-patch-8.patch new file mode 100644 index 0000000..fc435f9 --- /dev/null +++ b/bash-4.4-patch-8.patch @@ -0,0 +1,71 @@ +From b9f81c2977b82490cd4dc70b0bb292bfbf86bd2c Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-patch-9.patch b/bash-4.4-patch-9.patch new file mode 100644 index 0000000..b759e01 --- /dev/null +++ b/bash-4.4-patch-9.patch @@ -0,0 +1,80 @@ +From e59fb114e9c0436890d110cfdda4d794a63496e7 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +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 + diff --git a/bash-4.4-unset-nonblock-stdin.patch b/bash-4.4-unset-nonblock-stdin.patch new file mode 100644 index 0000000..68ad38c --- /dev/null +++ b/bash-4.4-unset-nonblock-stdin.patch @@ -0,0 +1,11 @@ +diff --git a/parse.y b/parse.y +index 85f1c4f..9d1cdf8 100644 +--- a/parse.y ++++ b/parse.y +@@ -1453,6 +1453,7 @@ yy_readline_get () + old_sigint = (SigHandler *)set_signal_handler (SIGINT, sigint_sighandler); + } + ++ sh_unset_nodelay_mode (fileno (rl_instream)); /* just in case */ + current_readline_line = readline (current_readline_prompt ? + current_readline_prompt : ""); diff --git a/bash-4.5-test-modification-time.patch b/bash-4.5-test-modification-time.patch new file mode 100644 index 0000000..275bbed --- /dev/null +++ b/bash-4.5-test-modification-time.patch @@ -0,0 +1,11 @@ +diff --git a/config.h.in b/config.h.in +--- a/config.h.in ++++ b/config.h.in +@@ -449,6 +449,7 @@ + #undef SYS_TIME_H_DEFINES_STRUCT_TIMESPEC + #undef PTHREAD_H_DEFINES_STRUCT_TIMESPEC + ++#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC + #undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC + #undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC + #undef HAVE_STRUCT_STAT_ST_ATIMENSEC diff --git a/bash-5.0-bgp-resize.patch b/bash-5.0-bgp-resize.patch new file mode 100644 index 0000000..1a3f288 --- /dev/null +++ b/bash-5.0-bgp-resize.patch @@ -0,0 +1,95 @@ +diff --git a/include/typemax.h b/include/typemax.h +--- a/include/typemax.h ++++ b/include/typemax.h +@@ -35,14 +35,23 @@ + # define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + #endif + ++#ifndef TYPE_SIGNED_MAGNITUDE ++# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) ++#endif ++ ++#ifndef TYPE_WIDTH ++# define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) ++#endif ++ + #ifndef TYPE_MINIMUM +-# define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \ +- ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \ +- : (t) 0)) ++# define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) + #endif + + #ifndef TYPE_MAXIMUM +-# define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t))) ++# define TYPE_MAXIMUM(t) \ ++ ((t) (! TYPE_SIGNED (t) \ ++ ? (t) -1 \ ++ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) + #endif + + #ifdef HAVE_LONG_LONG +diff --git a/jobs.c b/jobs.c +--- a/jobs.c ++++ b/jobs.c +@@ -72,6 +72,8 @@ + #include "execute_cmd.h" + #include "flags.h" + ++#include "typemax.h" ++ + #include "builtins/builtext.h" + #include "builtins/common.h" + +@@ -92,7 +94,7 @@ extern int killpg __P((pid_t, int)); + #endif + + #if !MAX_CHILD_MAX +-# define MAX_CHILD_MAX 8192 ++# define MAX_CHILD_MAX 32768 + #endif + + #if !defined (DEBUG) +@@ -751,7 +753,7 @@ stop_pipeline (async, deferred) + static void + bgp_resize () + { +- ps_index_t nsize; ++ ps_index_t nsize, nsize_cur, nsize_max; + ps_index_t psi; + + if (bgpids.nalloc == 0) +@@ -765,11 +767,20 @@ bgp_resize () + else + nsize = bgpids.nalloc; + +- while (nsize < js.c_childmax) +- nsize *= 2; ++ nsize_max = TYPE_MAXIMUM (ps_index_t); ++ nsize_cur = (ps_index_t)js.c_childmax; ++ if (nsize_cur < 0) /* overflow */ ++ nsize_cur = MAX_CHILD_MAX; + +- if (bgpids.nalloc < js.c_childmax) +- { ++ while (nsize > 0 && nsize < nsize_cur) /* > 0 should catch overflow */ ++ nsize <<= 1; ++ if (nsize > nsize_max || nsize <= 0) /* overflow? */ ++ nsize = nsize_max; ++ if (nsize > MAX_CHILD_MAX) ++ nsize = nsize_max = MAX_CHILD_MAX; /* hard cap */ ++ ++ if (bgpids.nalloc < nsize_cur && bgpids.nalloc < nsize_max) ++ { + bgpids.storage = (struct pidstat *)xrealloc (bgpids.storage, nsize * sizeof (struct pidstat)); + + for (psi = bgpids.nalloc; psi < nsize; psi++) +@@ -787,7 +798,7 @@ bgp_getindex () + { + ps_index_t psi; + +- if (bgpids.nalloc < js.c_childmax || bgpids.head >= bgpids.nalloc) ++ if (bgpids.nalloc < (ps_index_t)js.c_childmax || bgpids.head >= bgpids.nalloc) + bgp_resize (); + + pshash_delindex (bgpids.head); /* XXX - clear before reusing */ diff --git a/bash-5.0-cve-2019-18276-2.patch b/bash-5.0-cve-2019-18276-2.patch new file mode 100644 index 0000000..ff911e3 --- /dev/null +++ b/bash-5.0-cve-2019-18276-2.patch @@ -0,0 +1,41 @@ +diff --git a/configure.ac b/configure.ac +index e5162c4..b82a33b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -799,10 +799,13 @@ AC_CHECK_DECLS([confstr]) + AC_CHECK_DECLS([printf]) + AC_CHECK_DECLS([sbrk]) + AC_CHECK_DECLS([setregid]) +-AC_CHECK_DECLS[(setresuid, setresgid]) ++dnl AC_CHECK_DECLS[(setresuid]) ++dnl AC_CHECK_DECLS[(setresgid]) + AC_CHECK_DECLS([strcpy]) + AC_CHECK_DECLS([strsignal]) + ++AC_CHECK_FUNCS(setresuid setresgid) ++ + dnl Extra test to detect the horribly broken HP/UX 11.00 strtold(3) + AC_CHECK_DECLS([strtold], [ + AC_MSG_CHECKING([for broken strtold]) +diff --git a/shell.c b/shell.c +index 484d8a9..5c24922 100644 +--- a/shell.c ++++ b/shell.c +@@ -1286,7 +1286,7 @@ disable_priv_mode () + { + int e; + +-#if HAVE_DECL_SETRESUID ++#if HAVE_SETRESUID + if (setresuid (current_user.uid, current_user.uid, current_user.uid) < 0) + #else + if (setuid (current_user.uid) < 0) +@@ -1299,7 +1299,7 @@ disable_priv_mode () + exit (e); + #endif + } +-#if HAVE_DECL_SETRESGID ++#if HAVE_SETRESGID + if (setresgid (current_user.gid, current_user.gid, current_user.gid) < 0) + #else + if (setgid (current_user.gid) < 0) diff --git a/bash-5.0-cve-2019-18276.patch b/bash-5.0-cve-2019-18276.patch new file mode 100644 index 0000000..4ff0574 --- /dev/null +++ b/bash-5.0-cve-2019-18276.patch @@ -0,0 +1,61 @@ +diff --git a/config.h.in b/config.h.in +index 1a89e85..2df4786 100644 +--- a/config.h.in ++++ b/config.h.in +@@ -801,6 +801,14 @@ + #undef HAVE_SETREGID + #undef HAVE_DECL_SETREGID + ++/* Define if you have the setregid function. */ ++#undef HAVE_SETRESGID ++#undef HAVE_DECL_SETRESGID ++ ++/* Define if you have the setresuid function. */ ++#undef HAVE_SETRESUID ++#undef HAVE_DECL_SETRESUID ++ + /* Define if you have the setvbuf function. */ + #undef HAVE_SETVBUF + +diff --git a/configure.ac b/configure.ac +index a3f6d8f..e5162c4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -799,6 +799,7 @@ AC_CHECK_DECLS([confstr]) + AC_CHECK_DECLS([printf]) + AC_CHECK_DECLS([sbrk]) + AC_CHECK_DECLS([setregid]) ++AC_CHECK_DECLS[(setresuid, setresgid]) + AC_CHECK_DECLS([strcpy]) + AC_CHECK_DECLS([strsignal]) + +diff --git a/shell.c b/shell.c +index 4aae182..484d8a9 100644 +--- a/shell.c ++++ b/shell.c +@@ -1286,7 +1286,11 @@ disable_priv_mode () + { + int e; + ++#if HAVE_DECL_SETRESUID ++ if (setresuid (current_user.uid, current_user.uid, current_user.uid) < 0) ++#else + if (setuid (current_user.uid) < 0) ++#endif + { + e = errno; + sys_error (_("cannot set uid to %d: effective uid %d"), current_user.uid, current_user.euid); +@@ -1295,7 +1299,11 @@ disable_priv_mode () + exit (e); + #endif + } ++#if HAVE_DECL_SETRESGID ++ if (setresgid (current_user.gid, current_user.gid, current_user.gid) < 0) ++#else + if (setgid (current_user.gid) < 0) ++#endif + sys_error (_("cannot set gid to %d: effective gid %d"), current_user.gid, current_user.egid); + + current_user.euid = current_user.uid; +-- +2.25.4 diff --git a/bash-5.0-histtimeformat-segfault.patch b/bash-5.0-histtimeformat-segfault.patch new file mode 100644 index 0000000..0d7efa8 --- /dev/null +++ b/bash-5.0-histtimeformat-segfault.patch @@ -0,0 +1,19 @@ +diff --git a/builtins/history.def b/builtins/history.def +--- a/builtins/history.def ++++ b/builtins/history.def +@@ -256,10 +256,13 @@ histtime (hlist, histtimefmt) + { + static char timestr[128]; + time_t t; ++ struct tm *tm; + + t = history_get_time (hlist); +- if (t) +- strftime (timestr, sizeof (timestr), histtimefmt, localtime (&t)); ++ ++ tm = t ? localtime (&t) : 0; ++ if (t && tm) ++ strftime (timestr, sizeof (timestr), histtimefmt, tm); + else if (hlist->timestamp && hlist->timestamp[0]) + snprintf (timestr, sizeof (timestr), _("%s: invalid timestamp"), + (hlist->timestamp[0] == '#') ? hlist->timestamp + 1: hlist->timestamp); diff --git a/bash-5.0-shellpid-subshell.patch b/bash-5.0-shellpid-subshell.patch new file mode 100644 index 0000000..6dad7c1 --- /dev/null +++ b/bash-5.0-shellpid-subshell.patch @@ -0,0 +1,12 @@ +diff --git a/parse.y b/parse.y +--- a/parse.y ++++ b/parse.y +@@ -4193,7 +4193,7 @@ eof_error: + + FREE (nestret); + } +- if MBTEST(ch == '$') ++ if MBTEST(ch == '$' && (tflags & LEX_WASDOL) == 0) + tflags |= LEX_WASDOL; + else + tflags &= ~LEX_WASDOL; diff --git a/bash-5.0-syslog-history.patch b/bash-5.0-syslog-history.patch new file mode 100644 index 0000000..e5fe25e --- /dev/null +++ b/bash-5.0-syslog-history.patch @@ -0,0 +1,84 @@ +diff --git a/bashhist.c b/bashhist.c +index 9979f99..793c81f 100644 +--- a/bashhist.c ++++ b/bashhist.c +@@ -754,6 +754,12 @@ extern char *shell_name; + #define OPENLOG_OPTS 0 + #endif + ++#if defined (SYSLOG_SHOPT) ++int syslog_history = SYSLOG_SHOPT; ++#else ++int syslog_history = 1; ++#endif ++ + void + bash_syslog_history (line) + const char *line; +@@ -851,7 +857,8 @@ bash_add_history (line) + really_add_history (line); + + #if defined (SYSLOG_HISTORY) +- bash_syslog_history (line); ++ if (syslog_history) ++ bash_syslog_history (line); + #endif + + using_history (); +diff --git a/builtins/shopt.def b/builtins/shopt.def +index 2febb7e..38c398e 100644 +--- a/builtins/shopt.def ++++ b/builtins/shopt.def +@@ -118,6 +118,10 @@ extern char *shell_name; + extern int debugging_mode; + #endif + ++#if defined (SYSLOG_HISTORY) && defined (SYSLOG_SHOPT) ++extern int syslog_history; ++#endif ++ + static void shopt_error __P((char *)); + + static int set_shellopts_after_change __P((char *, int)); +@@ -223,6 +227,9 @@ static struct { + #endif + { "shift_verbose", &print_shift_error, (shopt_set_func_t *)NULL }, + { "sourcepath", &source_uses_path, (shopt_set_func_t *)NULL }, ++#if defined (SYSLOG_HISTORY) && defined (SYSLOG_SHOPT) ++ { "syslog_history", &syslog_history, (shopt_set_func_t *)NULL }, ++#endif + { "xpg_echo", &xpg_echo, (shopt_set_func_t *)NULL }, + { (char *)0, (int *)0, (shopt_set_func_t *)NULL } + }; +diff --git a/config-top.h b/config-top.h +index cb0e002..39cf6b5 100644 +--- a/config-top.h ++++ b/config-top.h +@@ -122,6 +122,13 @@ + # define OPENLOG_OPTS LOG_PID + #endif + ++/* Define if you want syslogging history to be controllable at runtime via a ++ shell option; if defined, the value is the default for the syslog_history ++ shopt option */ ++#if defined (SYSLOG_HISTORY) ++#define SYSLOG_SHOPT 0 ++#endif ++ + /* Define if you want to include code in shell.c to support wordexp(3) */ + /* #define WORDEXP_OPTION */ + +diff --git a/doc/bash.1 b/doc/bash.1 +index d6cee1d..9dfa0b3 100644 +--- a/doc/bash.1 ++++ b/doc/bash.1 +@@ -9889,6 +9889,9 @@ If set, the + to find the directory containing the file supplied as an argument. + This option is enabled by default. + .TP 8 ++.B syslog_history ++If set, command history is logged to syslog. ++.TP 8 + .B xpg_echo + If set, the \fBecho\fP builtin expands backslash-escape sequences + by default. diff --git a/bash-infotags.patch b/bash-infotags.patch new file mode 100644 index 0000000..fe39609 --- /dev/null +++ b/bash-infotags.patch @@ -0,0 +1,26 @@ +diff --git a/doc/Makefile.in b/doc/Makefile.in +index 5f0756c..a5fa5a0 100644 +--- a/doc/Makefile.in ++++ b/doc/Makefile.in +@@ -74,7 +74,6 @@ TEXI2DVI = ${SUPPORT_SRCDIR}/texi2dvi + TEXI2HTML = ${SUPPORT_SRCDIR}/texi2html + MAN2HTML = ${BUILD_DIR}/support/man2html + HTMLPOST = ${srcdir}/htmlpost.sh +-INFOPOST = ${srcdir}/infopost.sh + QUIETPS = #set this to -q to shut up dvips + PAPERSIZE = letter # change to a4 for A4-size paper + PSDPI = 600 # could be 300 if you like +@@ -188,8 +187,8 @@ bashref.pdf: $(BASHREF_FILES) $(HSUSER) $(RLUSER) + bashref.html: $(BASHREF_FILES) $(HSUSER) $(RLUSER) + $(MAKEINFO) --html --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi + +-bash.info: bashref.info +- ${SHELL} ${INFOPOST} < $(srcdir)/bashref.info > $@ ; \ ++bash.info: $(BASHREF_FILES) $(HSUSER) $(RLUSER) ++ $(MAKEINFO) --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi -o $@ + + bash.txt: bash.1 + bash.ps: bash.1 +-- +2.9.3 + diff --git a/bash-requires.patch b/bash-requires.patch new file mode 100644 index 0000000..2766431 --- /dev/null +++ b/bash-requires.patch @@ -0,0 +1,325 @@ +diff --git a/builtins.h b/builtins.h +index 0cfea18..a6ef958 100644 +--- a/builtins.h ++++ b/builtins.h +@@ -42,6 +42,7 @@ + #define ASSIGNMENT_BUILTIN 0x10 /* This builtin takes assignment statements. */ + #define POSIX_BUILTIN 0x20 /* This builtins is special in the Posix command search order. */ + #define LOCALVAR_BUILTIN 0x40 /* This builtin creates local variables */ ++#define REQUIRES_BUILTIN 0x80 /* This builtin requires other files. */ + + #define BASE_INDENT 4 + +diff --git a/builtins/mkbuiltins.c b/builtins/mkbuiltins.c +index 4f51201..283bfea 100644 +--- a/builtins/mkbuiltins.c ++++ b/builtins/mkbuiltins.c +@@ -69,10 +69,15 @@ extern char *strcpy (); + #define whitespace(c) (((c) == ' ') || ((c) == '\t')) + + /* Flag values that builtins can have. */ ++/* These flags are for the C code generator, ++ the C which is produced (./builtin.c) ++ includes the flags definitions found ++ in ../builtins.h */ + #define BUILTIN_FLAG_SPECIAL 0x01 + #define BUILTIN_FLAG_ASSIGNMENT 0x02 + #define BUILTIN_FLAG_LOCALVAR 0x04 + #define BUILTIN_FLAG_POSIX_BUILTIN 0x08 ++#define BUILTIN_FLAG_REQUIRES 0x10 + + #define BASE_INDENT 4 + +@@ -173,11 +178,20 @@ char *posix_builtins[] = + (char *)NULL + }; + ++/* The builtin commands that cause requirements on other files. */ ++static char *requires_builtins[] = ++{ ++ ".", "command", "exec", "source", "inlib", ++ (char *)NULL ++}; ++ ++ + /* Forward declarations. */ + static int is_special_builtin (); + static int is_assignment_builtin (); + static int is_localvar_builtin (); + static int is_posix_builtin (); ++static int is_requires_builtin (); + + #if !defined (HAVE_RENAME) + static int rename (); +@@ -831,6 +845,9 @@ builtin_handler (self, defs, arg) + new->flags |= BUILTIN_FLAG_LOCALVAR; + if (is_posix_builtin (name)) + new->flags |= BUILTIN_FLAG_POSIX_BUILTIN; ++ if (is_requires_builtin (name)) ++ new->flags |= BUILTIN_FLAG_REQUIRES; ++ + + array_add ((char *)new, defs->builtins); + building_builtin = 1; +@@ -1250,12 +1267,13 @@ write_builtins (defs, structfile, externfile) + else + fprintf (structfile, "(sh_builtin_func_t *)0x0, "); + +- fprintf (structfile, "%s%s%s%s%s, %s_doc,\n", ++ fprintf (structfile, "%s%s%s%s%s%s, %s_doc,\n", + "BUILTIN_ENABLED | STATIC_BUILTIN", + (builtin->flags & BUILTIN_FLAG_SPECIAL) ? " | SPECIAL_BUILTIN" : "", + (builtin->flags & BUILTIN_FLAG_ASSIGNMENT) ? " | ASSIGNMENT_BUILTIN" : "", + (builtin->flags & BUILTIN_FLAG_LOCALVAR) ? " | LOCALVAR_BUILTIN" : "", + (builtin->flags & BUILTIN_FLAG_POSIX_BUILTIN) ? " | POSIX_BUILTIN" : "", ++ (builtin->flags & BUILTIN_FLAG_REQUIRES) ? " | REQUIRES_BUILTIN" : "", + document_name (builtin)); + + /* Don't translate short document summaries that are identical +@@ -1645,6 +1663,13 @@ is_posix_builtin (name) + return (_find_in_table (name, posix_builtins)); + } + ++static int ++is_requires_builtin (name) ++ char *name; ++{ ++ return (_find_in_table (name, requires_builtins)); ++} ++ + #if !defined (HAVE_RENAME) + static int + rename (from, to) +diff --git a/doc/bash.1 b/doc/bash.1 +index c21e877..04ce845 100644 +--- a/doc/bash.1 ++++ b/doc/bash.1 +@@ -238,6 +238,14 @@ The shell becomes restricted (see + .B "RESTRICTED SHELL" + below). + .TP ++.B \-\-rpm-requires ++Produce the list of files that are required for the ++shell script to run. This implies '-n' and is subject ++to the same limitations as compile time error checking checking; ++Command substitutions, Conditional expressions and ++.BR eval ++builtin are not parsed so some dependencies may be missed. ++.TP + .B \-\-verbose + Equivalent to \fB\-v\fP. + .TP +diff --git a/doc/bashref.texi b/doc/bashref.texi +index 06957b6..e3fe925 100644 +--- a/doc/bashref.texi ++++ b/doc/bashref.texi +@@ -6243,6 +6243,13 @@ standard. @xref{Bash POSIX Mode}, for a description of the Bash + @item --restricted + Make the shell a restricted shell (@pxref{The Restricted Shell}). + ++@item --rpm-requires ++Produce the list of files that are required for the ++shell script to run. This implies '-n' and is subject ++to the same limitations as compile time error checking checking; ++Command substitutions, Conditional expressions and @command{eval} ++are not parsed so some dependencies may be missed. ++ + @item --verbose + Equivalent to @option{-v}. Print shell input lines as they're read. + +diff --git a/eval.c b/eval.c +index db863e7..5a5af32 100644 +--- a/eval.c ++++ b/eval.c +@@ -56,6 +56,7 @@ extern int need_here_doc; + extern int current_command_number, current_command_line_count, line_number; + extern int expand_aliases; + extern char *ps0_prompt; ++extern int rpm_requires; + + #if defined (HAVE_POSIX_SIGNALS) + extern sigset_t top_level_mask; +@@ -148,7 +149,7 @@ reader_loop () + + if (read_command () == 0) + { +- if (interactive_shell == 0 && read_but_dont_execute) ++ if (interactive_shell == 0 && (read_but_dont_execute && !rpm_requires)) + { + last_command_exit_value = EXECUTION_SUCCESS; + dispose_command (global_command); +diff --git a/execute_cmd.c b/execute_cmd.c +index b5cd405..88c7a5c 100644 +--- a/execute_cmd.c ++++ b/execute_cmd.c +@@ -533,6 +533,8 @@ async_redirect_stdin () + + #define DESCRIBE_PID(pid) do { if (interactive) describe_pid (pid); } while (0) + ++extern int rpm_requires; ++ + /* Execute the command passed in COMMAND, perhaps doing it asynchronously. + COMMAND is exactly what read_command () places into GLOBAL_COMMAND. + 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, + + if (breaking || continuing) + return (last_command_exit_value); +- if (command == 0 || read_but_dont_execute) ++ if (command == 0 || (read_but_dont_execute && !rpm_requires)) ++ return (EXECUTION_SUCCESS); ++ if (rpm_requires && command->type == cm_function_def) ++ return last_command_exit_value = ++ execute_intern_function (command->value.Function_def->name, ++ command->value.Function_def); ++ if (read_but_dont_execute) + return (EXECUTION_SUCCESS); + + QUIT; +@@ -5752,7 +5760,7 @@ execute_intern_function (name, funcdef) + + if (check_identifier (name, posixly_correct) == 0) + { +- if (posixly_correct && interactive_shell == 0) ++ if (posixly_correct && interactive_shell == 0 && rpm_requires == 0) + { + last_command_exit_value = EX_BADUSAGE; + jump_to_top_level (ERREXIT); +diff --git a/execute_cmd.h b/execute_cmd.h +index 62bec82..d42dc85 100644 +--- a/execute_cmd.h ++++ b/execute_cmd.h +@@ -22,6 +22,8 @@ + #define _EXECUTE_CMD_H_ + + #include "stdc.h" ++#include "variables.h" ++#include "command.h" + + #if defined (ARRAY_VARS) + struct func_array_state +diff --git a/make_cmd.c b/make_cmd.c +index b42e9ff..a982fe0 100644 +--- a/make_cmd.c ++++ b/make_cmd.c +@@ -42,11 +42,15 @@ + #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)); + } + ++static void ++output_requirement (deptype, filename) ++const char *deptype; ++char *filename; ++{ ++ if (strchr(filename, '$') || (filename[0] != '/' && strchr(filename, '/'))) ++ return; ++ ++ /* ++ if the executable is called via variable substitution we can ++ not dermine what it is at compile time. ++ ++ if the executable consists only of characters not in the ++ alphabet we do not consider it a dependency just an artifact ++ of shell parsing (ex "exec < ${infile}"). ++ */ ++ ++ if (strpbrk(filename, alphabet_set)) ++ printf ("%s(%s)\n", deptype, filename); ++} ++ + /* Reverse the word list and redirection list in the simple command + has just been parsed. It seems simpler to do this here the one + time then by any other method that I can think of. */ +@@ -856,6 +885,27 @@ clean_simple_command (command) + REVERSE_LIST (command->value.Simple->redirects, REDIRECT *); + } + ++ if (rpm_requires && command->value.Simple->words) ++ { ++ char *cmd0; ++ char *cmd1; ++ struct builtin *b; ++ ++ cmd0 = command->value.Simple->words->word->word; ++ b = builtin_address_internal (cmd0, 0); ++ cmd1 = 0; ++ if (command->value.Simple->words->next) ++ cmd1 = command->value.Simple->words->next->word->word; ++ ++ if (b) { ++ if ( (b->flags & REQUIRES_BUILTIN) && cmd1) ++ output_requirement ("executable", cmd1); ++ } else { ++ if (!assignment(cmd0, 0)) ++ output_requirement (find_function(cmd0) ? "function" : "executable", cmd0); ++ } ++ } /*rpm_requires*/ ++ + parser_state &= ~PST_REDIRLIST; + return (command); + } +diff --git a/shell.c b/shell.c +index 7f63969..a0fb7ce 100644 +--- a/shell.c ++++ b/shell.c +@@ -201,6 +201,9 @@ int have_devfd = 0; + /* The name of the .(shell)rc file. */ + static char *bashrc_file = DEFAULT_BASHRC; + ++/* Non-zero if we are finding the scripts requirements. */ ++int rpm_requires; ++ + /* Non-zero means to act more like the Bourne shell on startup. */ + static int act_like_sh; + +@@ -264,6 +267,7 @@ static const struct { + { "protected", Int, &protected_mode, (char **)0x0 }, + #endif + { "rcfile", Charp, (int *)0x0, &bashrc_file }, ++ { "rpm-requires", Int, &rpm_requires, (char **)0x0 }, + #if defined (RESTRICTED_SHELL) + { "restricted", Int, &restricted, (char **)0x0 }, + #endif +@@ -500,6 +504,12 @@ main (argc, argv, env) + if (dump_translatable_strings) + read_but_dont_execute = 1; + ++ if (rpm_requires) ++ { ++ read_but_dont_execute = 1; ++ initialize_shell_builtins (); ++ } ++ + if (running_setuid && privileged_mode == 0) + disable_priv_mode (); + +-- +2.9.3 + diff --git a/bash-setlocale.patch b/bash-setlocale.patch new file mode 100644 index 0000000..f068ec7 --- /dev/null +++ b/bash-setlocale.patch @@ -0,0 +1,10 @@ +--- bash-3.0/builtins/setattr.def.setlocale 2005-08-08 12:22:42.000000000 +0100 ++++ bash-3.0/builtins/setattr.def 2005-08-08 12:25:16.000000000 +0100 +@@ -423,4 +423,7 @@ + + if (var && (exported_p (var) || (attribute & att_exported))) + array_needs_making++; /* XXX */ ++ ++ if (var) ++ stupidly_hack_special_variables (name); + } diff --git a/bash-tty-tests.patch b/bash-tty-tests.patch new file mode 100644 index 0000000..83569b1 --- /dev/null +++ b/bash-tty-tests.patch @@ -0,0 +1,61 @@ +diff --git a/tests/exec.right b/tests/exec.right +index 81224fa..ff77f09 100644 +--- a/tests/exec.right ++++ b/tests/exec.right +@@ -51,7 +51,6 @@ this is ohio-state + 0 + 1 + testb +-expand_aliases on + 1 + 1 + 1 +diff --git a/tests/execscript b/tests/execscript +index 3415ae3..75c48a4 100644 +--- a/tests/execscript ++++ b/tests/execscript +@@ -108,8 +108,6 @@ ${THIS_SH} ./exec6.sub + # checks for properly deciding what constitutes an executable file + ${THIS_SH} ./exec7.sub + +-${THIS_SH} -i ./exec8.sub +- + ${THIS_SH} ./exec9.sub + + ${THIS_SH} ./exec10.sub +diff --git a/tests/read.right b/tests/read.right +index 73cb704..a92fe7f 100644 +--- a/tests/read.right ++++ b/tests/read.right +@@ -33,14 +33,6 @@ a = abcdefg + a = xyz + a = -xyz 123- + a = abc +-timeout 1: ok +- +-timeout 2: ok +- +-./read2.sub: line 23: read: -3: invalid timeout specification +-1 +- +-abcde + ./read3.sub: line 4: read: -1: invalid number + abc + ab +diff --git a/tests/read.tests b/tests/read.tests +index fe27dae..10346f7 100644 +--- a/tests/read.tests ++++ b/tests/read.tests +@@ -82,9 +82,6 @@ echo " foo" | { IFS=$':' ; read line; recho "$line"; } + # test read -d delim behavior + ${THIS_SH} ./read1.sub + +-# test read -t timeout behavior +-${THIS_SH} ./read2.sub +- + # test read -n nchars behavior + ${THIS_SH} ./read3.sub + +-- +2.9.3 + diff --git a/bash.spec b/bash.spec new file mode 100644 index 0000000..b2e431b --- /dev/null +++ b/bash.spec @@ -0,0 +1,1734 @@ +#% define beta_tag rc2 +%global _hardened_build 1 +%define patchleveltag .20 +%define baseversion 4.4 +%bcond_without tests + +Version: %{baseversion}%{patchleveltag} +Name: bash +Summary: The GNU Bourne Again shell +Release: 4%{?dist} +License: GPLv3+ +Url: https://www.gnu.org/software/bash +Source0: https://ftp.gnu.org/gnu/bash/bash-%{baseversion}.tar.gz + +# For now there isn't any doc +#Source2: ftp://ftp.gnu.org/gnu/bash/bash-doc-%{version}.tar.gz + +Source1: dot-bashrc +Source2: dot-bash_profile +Source3: dot-bash_logout + +# Official upstream patches +# Patches are converted to apply with '-p1' +%{lua:for i=1,20 do print(string.format("Patch%u: bash-4.4-patch-%u.patch\n", i, i)) end} + +# Other patches +Patch101: bash-2.02-security.patch +Patch102: bash-2.03-paths.patch +Patch103: bash-2.03-profile.patch +Patch104: bash-2.05a-interpreter.patch +Patch105: bash-2.05b-debuginfo.patch +Patch106: bash-2.05b-manso.patch +Patch107: bash-2.05b-pgrp_sync.patch +Patch108: bash-2.05b-xcc.patch +Patch109: bash-3.2-audit.patch +Patch110: bash-3.2-ssh_source_bash.patch +Patch112: bash-infotags.patch +Patch113: bash-requires.patch +Patch114: bash-setlocale.patch +Patch115: bash-tty-tests.patch + +# 484809, check if interp section is NOBITS +Patch116: bash-4.0-nobits.patch + +# Do the same CFLAGS in generated Makefile in examples +Patch117: bash-4.1-examples.patch + +# Builtins like echo and printf won't report errors +# when output does not succeed due to EPIPE +Patch118: bash-4.1-broken_pipe.patch + +# Enable system-wide .bash_logout for login shells +Patch119: bash-4.2-rc2-logout.patch + +# Static analyzis shows some issues in bash-2.05a-interpreter.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 +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 +Patch123: bash-4.2-size_type.patch + +# 1112710 - mention ulimit -c and -f POSIX block size +Patch124: bash-4.3-man-ulimit.patch + +# 1102815 - fix double echoes in vi visual mode +Patch125: bash-4.3-noecho.patch + +#1241533,1224855 - bash leaks memory when LC_ALL set +Patch126: bash-4.3-memleak-lc_all.patch + +# bash-4.4 builds loadable builtin examples by default +# this patch disables it +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 + +Patch132: bash-4.4-coverity.patch + +# 1687835 - [RFE] Add a runtime option to enable history logging to syslog +# This should be dropped while rebasing to bash-5.0 +Patch133: bash-5.0-syslog-history.patch + +# 1727952 - Parsing commands break when using $$ in command substitution $(..) +# https://lists.gnu.org/archive/html/bug-bash/2017-01/msg00065.html +Patch134: bash-5.0-shellpid-subshell.patch + +# 1793943 - CVE-2019-18276: when effective UID is not equal to its real UID the saved UID is +# not dropped +Patch135: bash-5.0-cve-2019-18276.patch +Patch136: bash-5.0-cve-2019-18276-2.patch + +# 1890888 - Took long time to return when bash -c 'exit 2 & wait $!' run in the big size LimitNPROC +# values +Patch137: bash-5.0-bgp-resize.patch + +# 1794884 - HISTTIMEFORMAT causes Segmentation fault under certain conditions +Patch138: bash-5.0-histtimeformat-segfault.patch + +#2062291 - Segfault in 'buffered_getchar()' function in bash +Patch139: bash-4.4-fix-buffered_getchar-crash.patch + +BuildRequires: texinfo bison +BuildRequires: ncurses-devel +BuildRequires: autoconf, gettext +Requires: filesystem >= 3 +Provides: /bin/sh +Provides: /bin/bash + +%description +The GNU Bourne Again shell (Bash) is a shell or command language +interpreter that is compatible with the Bourne shell (sh). Bash +incorporates useful features from the Korn shell (ksh) and the C shell +(csh). Most sh scripts can be run by bash without modification. + +%package devel +Summary: Development headers for %{name} +Requires: %{name} = %{version}-%{release} +Requires: pkgconf-pkg-config + +%description devel +This package contains development headers for %{name}. + +%package doc +Summary: Documentation files for %{name} +Requires: %{name} = %{version}-%{release} + +%description doc +This package contains documentation files for %{name}. + +%prep +%autosetup -n %{name}-%{baseversion} -p1 + +echo %{version} > _distribution +echo %{release} > _patchlevel + +# force refreshing the generated files +rm y.tab.* + +%build +autoconf +%configure --with-bash-malloc=no --with-afs + +# Recycles pids is neccessary. When bash's last fork's pid was X +# and new fork's pid is also X, bash has to wait for this same pid. +# Without Recycles pids bash will not wait. +make "CPPFLAGS=-D_GNU_SOURCE -DRECYCLES_PIDS -DDEFAULT_PATH_VALUE='\"/usr/local/bin:/usr/bin\"' `getconf LFS_CFLAGS` -DSYSLOG_HISTORY" %{?_smp_mflags} + +%install +if [ -e autoconf ]; then + # Yuck. We're using autoconf 2.1x. + export PATH=.:$PATH +fi + +# Fix bug #83776 +sed -i -e 's,bashref\.info,bash.info,' doc/bashref.info + +%make_install install-headers + +mkdir -p %{buildroot}/etc + +# make manpages for bash builtins as per suggestion in DOC/README +pushd doc +sed -e ' +/^\.SH NAME/, /\\- bash built-in commands, see \\fBbash\\fR(1)$/{ +/^\.SH NAME/d +s/^bash, // +s/\\- bash built-in commands, see \\fBbash\\fR(1)$// +s/,//g +b +} +d +' builtins.1 > man.pages +for i in echo pwd test kill; do + sed -i -e "s,$i,,g" man.pages + sed -i -e "s, , ,g" man.pages +done + +install -p -m 644 builtins.1 %{buildroot}%{_mandir}/man1/builtins.1 + +for i in `cat man.pages` ; do + echo .so man1/builtins.1 > %{buildroot}%{_mandir}/man1/$i.1 + chmod 0644 %{buildroot}%{_mandir}/man1/$i.1 +done +popd + +# Link bash man page to sh so that man sh works. +ln -s bash.1 %{buildroot}%{_mandir}/man1/sh.1 + +# Not for printf, true and false (conflict with coreutils) +rm -f %{buildroot}/%{_mandir}/man1/printf.1 +rm -f %{buildroot}/%{_mandir}/man1/true.1 +rm -f %{buildroot}/%{_mandir}/man1/false.1 + +ln -sf bash %{buildroot}%{_bindir}/sh +rm -f %{buildroot}%{_infodir}/dir +mkdir -p %{buildroot}/etc/skel +install -p -m644 %SOURCE1 %{buildroot}/etc/skel/.bashrc +install -p -m644 %SOURCE2 %{buildroot}/etc/skel/.bash_profile +install -p -m644 %SOURCE3 %{buildroot}/etc/skel/.bash_logout +LONG_BIT=$(getconf LONG_BIT) +mv %{buildroot}%{_bindir}/bashbug \ + %{buildroot}%{_bindir}/bashbug-"${LONG_BIT}" +ln -s bashbug-"${LONG_BIT}" %{buildroot}%{_bindir}/bashbug +ln -s bashbug.1 %{buildroot}/%{_mandir}/man1/bashbug-"$LONG_BIT".1 + +# Fix missing sh-bangs in example scripts (bug #225609). +for script in \ + examples/scripts/shprompt +# I don't know why these are gone in 4.3 + #examples/scripts/krand.bash \ + #examples/scripts/bcsh.sh \ + #examples/scripts/precedence \ +do + cp "$script" "$script"-orig + echo '#!/bin/bash' > "$script" + cat "$script"-orig >> "$script" + rm -f "$script"-orig +done + +# bug #820192, need to add execable alternatives for regular built-ins +for ea in alias bg cd command fc fg getopts hash jobs read type ulimit umask unalias wait +do + cat < "%{buildroot}"/%{_bindir}/"$ea" +#!/bin/sh +builtin $ea "\$@" +EOF +chmod +x "%{buildroot}"/%{_bindir}/"$ea" +done + +%find_lang %{name} + +# copy doc to /usr/share/doc +cat /dev/null > %{name}-doc.files +mkdir -p %{buildroot}/%{_pkgdocdir}/doc +# loadables aren't buildable +rm -rf examples/loadables +for file in CHANGES COMPAT NEWS NOTES POSIX RBASH README examples +do + cp -rp "$file" %{buildroot}/%{_pkgdocdir}/"$file" + echo "%%doc %{_pkgdocdir}/$file" >> %{name}-doc.files +done +echo "%%doc %{_pkgdocdir}/doc" >> %{name}-doc.files + + + +%if %{with tests} +%check +make check +%endif + +# post is in lua so that we can run it without any external deps. Helps +# for bootstrapping a new install. +# Jesse Keating 2009-01-29 (code from Ignacio Vazquez-Abrams) +# Roman Rakus 2011-11-07 (code from Sergey Romanov) #740611 +%post -p +nl = '\n' +sh = '/bin/sh'..nl +bash = '/bin/bash'..nl +f = io.open('/etc/shells', 'a+') +if f then + local shells = nl..f:read('*all')..nl + if not shells:find(nl..sh) then f:write(sh) end + if not shells:find(nl..bash) then f:write(bash) end + f:close() +end + +%postun -p +-- Run it only if we are uninstalling +if arg[2] == "0" +then + t={} + for line in io.lines("/etc/shells") + do + if line ~= "/bin/bash" and line ~= "/bin/sh" + then + table.insert(t,line) + end + end + + f = io.open("/etc/shells", "w+") + for n,line in pairs(t) + do + f:write(line.."\n") + end + f:close() +end + +%files -f %{name}.lang +%config(noreplace) /etc/skel/.b* +%{_bindir}/sh +%{_bindir}/bash +%{_bindir}/alias +%{_bindir}/bg +%{_bindir}/cd +%{_bindir}/command +%{_bindir}/fc +%{_bindir}/fg +%{_bindir}/hash +%{_bindir}/getopts +%{_bindir}/jobs +%{_bindir}/read +%{_bindir}/type +%{_bindir}/ulimit +%{_bindir}/umask +%{_bindir}/unalias +%{_bindir}/wait +%dir %{_pkgdocdir}/ +%license COPYING +%attr(0755,root,root) %{_bindir}/bashbug[-.]* +%{_bindir}/bashbug +%{_infodir}/bash.info* +%{_mandir}/*/* +%{_mandir}/*/..1* +%doc RBASH README +%doc doc/{FAQ,INTRO,README,bash{,ref}.html} + +%files doc -f %{name}-doc.files +%doc doc/*.ps doc/*.0 doc/*.html doc/article.txt + +%files devel +%{_includedir}/%{name} +%{_libdir}/pkgconfig/%{name}.pc + +%changelog +* Tue Apr 05 2022 Siteshwar Vashisht - 4.4.20-4 +- Fix a crash in buffered_getchar() function + Resolves: #2062291 + +* Thu Sep 30 2021 Siteshwar Vashisht - 4.4.20-3 +- Bump version number + Resolves: #2004189 + +* Mon Jul 26 2021 Siteshwar Vashisht - 4.4.20-2 +- Fix crash if a timestamp in a history file overflowed a time_t + Resolves: #1794884 + +* Fri Mar 26 2021 Siteshwar Vashisht - 4.4.20-1 +- Fix infinite loop in long running scripts + Resolves: #1943495 + +* Wed Nov 04 2020 Siteshwar Vashisht - 4.4.19-14 +- Fix hang when limit for nproc is very high + Resolves: #1890888 + +* Fri Oct 09 2020 Siteshwar Vashisht - 4.4.19-13 +- Correctly drop saved UID when effective UID is not equal to its real UID + Resolves: #1793943 + +* Mon Jun 22 2020 Siteshwar Vashisht - 4.4.19-12 +- Avoid duplicating user path entries + Resolves: #1667008 + +* Mon Jun 22 2020 Siteshwar Vashisht - 4.4.19-11 +- Drop saved UID when effective UID is not equal to its real UID + Resolves: #1793943 + +* Thu Aug 22 2019 Siteshwar Vashisht - 4.4.19-10 +- Fix runtime option to enable history logging to syslog + Related: #1687835 + +* Wed Jul 10 2019 Siteshwar Vashisht - 4.4.19-9 +- Fix `$$` expansion in subshell + Resolves: #1727952 + +* Mon May 27 2019 Siteshwar Vashisht - 4.4.19-8 +- Add a runtime option to enable history logging to syslog + Resolves: #1687835 + +* Mon Jan 14 2019 Siteshwar Vashisht - 4.4.19-7 +- Bump version number + Resolves: #1650059 + +* Tue Oct 09 2018 Siteshwar Vashisht - 4.4.19-6 +- Set custom PATH in non-login shells + Resolves: #1627074 + +* Thu Sep 20 2018 Siteshwar Vashisht - 4.4.19-5 +- Fix some issues identified by coverity + Resolves: #1602450 + +* Mon Aug 06 2018 Siteshwar Vashisht - 4.4.19-4 +- Bump version number + +* Tue Jun 26 2018 Siteshwar Vashisht - 4.4.19-3 +- Move user bin directories in front of the PATH + Resolves: #1595223 + +* Thu Mar 15 2018 Siteshwar Vashisht - 4.4.19-2 +- Fix handling case statement in command subsitution + Resolves: #1556867 + +* Mon Feb 12 2018 Siteshwar Vashisht - 4.4.19-1 +- Update to bash-4.4 patchlevel 19 + Resolves: #1540383 + +* Wed Feb 07 2018 Fedora Release Engineering - 4.4.12-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Nov 08 2017 Christoph Junghans - 4.4.12-13 +- Package headers in devel package, in prep for MPI-bash + +* Mon Oct 30 2017 Siteshwar Vashisht - 4.4.12-12 +- Revert change to always source from /etc/bashrc + +* Tue Aug 29 2017 Siteshwar Vashisht - 4.4.12-11 +- Always source from /etc/bashrc + Resolves: #1193590 + +* Tue Aug 22 2017 Siteshwar Vashisht - 4.4.12-10 +- Enable parallel builds + +* Tue Aug 08 2017 Siteshwar Vashisht - 4.4.12-9 +- command should not be treated as special builtin + Resolves: #1479220 + +* Wed Aug 02 2017 Fedora Release Engineering - 4.4.12-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 4.4.12-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Jun 30 2017 Siteshwar Vashisht - 4.4.12-6 +- Fix test for comparing file modification times when they differ by subsecond + Resolves: #1458008 + +* Tue May 30 2017 Siteshwar Vashisht - 4.4.12-5 +- command builtin should not abort on variable assignment errors + Resolves: #1389838 + +* Wed Apr 26 2017 Siteshwar Vashisht - 4.4.12-4 +- Explicitly unset nonblocking mode while reading from stdin + Resolves: #1068697 + +* Wed Apr 26 2017 Siteshwar Vashisht - 4.4.12-3 +- Fix heredoc file descriptor leak + Resolves: #1413676 + +* Tue Apr 18 2017 Siteshwar Vashisht - 4.4.12-2 +- Document 'bashbug' for reporting bugs + Resolves: #1255886 + +* Mon Apr 10 2017 Siteshwar Vashisht - 4.4.12-1 +- Update to bash-4.4 patchlevel 12 + +* Fri Feb 10 2017 Fedora Release Engineering - 4.4.11-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Sat Jan 21 2017 Siteshwar Vashisht - 4.4.11-1 +- Update to bash-4.4 patchlevel 11 + +* Mon Jan 16 2017 Siteshwar Vashisht - 4.4.5-1 +- Update to bash-4.4 patchlevel 5 + +* Fri Jan 06 2017 Siteshwar Vashisht - 4.4.0-1 +- Rebase to bash-4.4 + Resolves: #1376609 + +* Fri Sep 30 2016 Siteshwar Vashisht - 4.3.43-4 +- CVE-2016-7543: Fix for arbitrary code execution via SHELLOPTS+PS4 variables + Resolves: #1379634 + +* Wed Sep 21 2016 David Kaspar [Dee'Kej] - 4.3.43-3 +- CVE-2016-0634 - Fix for arbitrary code execution via malicious hostname + Resolves: #1377614 + +* Tue Sep 6 2016 David Kaspar [Dee'Kej] - 4.3.43-2 +- Inverted the condition for UsrMove safeguard check, so we comply with: + https://fedoraproject.org/wiki/Packaging:Conflicts + +* Thu Jun 23 2016 Siteshwar Vashisht - 4.3.43-1 +- Fix a crash in nested pipeline in lastpipe mode + Resolves: #1349430 + +* Tue May 17 2016 Siteshwar Vashisht - 4.3.42-5 +- Do not set terminate_immediately and interrupt_immediately while expanding tilda + Resolves: #1336800 + +* Wed Feb 03 2016 Fedora Release Engineering - 4.3.42-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Jan 11 2016 Ondrej Oprala - 4.3.42-3 +- Actually do it properly this time + Related: #1297166 + +* Mon Jan 11 2016 Ondrej Oprala - 4.3.42-2 +- Provide exec-able alternatives to hash, type and ulimit + Resolves: #1297166 + +* Tue Aug 18 2015 Ondrej Oprala - 4.3.42-1 +- Patchlevel 42 + +* Mon Aug 03 2015 Ondrej Oprala - 4.3.39-6 +- #1245233 - fixed memleak + +* Wed Jul 15 2015 Ondrej Oprala - 4.3.39-5 +- #1182278 - bash crashes on `select' if REPLY is readonly +- #1241533,1224855 - bash memleak when LC_ALL set + +* Tue Jun 30 2015 Ondrej Oprala - 4.3.39-4 +- Fix a leak introduced by plevel39 + +* Tue Jun 30 2015 Ondrej Oprala - 4.3.39-3 +- Fix --rpm-requires + +* Wed Jun 17 2015 Fedora Release Engineering - 4.3.39-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Thu May 21 2015 Ondrej Oprala - 4.3.39-1 +- Patchlevel 39 + +* Mon Mar 16 2015 Than Ngo 4.3.33-3 +- rebuild against new gcc + +* Fri Jan 23 2015 Elad Alfassa - 4.3.25-3 +- Enable PIE (hardened build) + +* Tue Dec 30 2014 Ondrej Oprala - 4.3.33-1 +- Patchlevel 33 + +* Wed Oct 08 2014 Dan Horák - 4.3.30-2 +- force refreshing generated files, fixes build on s390 + +* Mon Oct 06 2014 Ondrej Oprala - 4.3.30-1 +- Patchlevel 30 + +* Mon Oct 06 2014 Ondrej Oprala - 4.3.28-1 +- RedHat's patchlevel 28 + +* Thu Sep 25 2014 Ondrej Oprala - 4.3.25-2 +- CVE-2014-7169 + Resolves: #1146319 ++ +* Thu Sep 25 2014 Ondrej Oprala - 4.3.25-1 +- Patchlevel 25 + +* Wed Sep 24 2014 Ondrej Oprala - 4.3.24-2 +- Inhibit code injection - patch by Stephane Chazelas + +* Wed Aug 20 2014 Ondrej Oprala - 4.3.24-1 +- Patchlevel 24 + +* Fri Aug 15 2014 Fedora Release Engineering - 4.3.22-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Mon Aug 04 2014 Ondrej Oprala - 4.3.22-1 +- Patchlevel 22 + +* Wed Jul 30 2014 Ondrej Oprala - 4.3.18-7 +- #1102815 - fix double echo in vi visual mode + +* Thu Jul 24 2014 Ondrej Oprala - 4.3.18-6 +- Apply all upstream patches since 4.3-18-1 up to this date + +* Thu Jul 24 2014 Ondrej Oprala - 4.3.18-5 +- Array name expansion - apply upstream quickfix + +* Mon Jul 21 2014 Ondrej Oprala - 4.3.18-4 +- Mention ulimit -c and -f block size in POSIX mode + +* Fri Jul 11 2014 Tom Callaway - 4.3.18-3 +- fix license handling + +* Sat Jun 07 2014 Fedora Release Engineering - 4.3.18-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon Apr 14 2014 Ondrej Oprala - 4.3.18-1 +- Patchlevel 18 + +* Mon Apr 14 2014 Ondrej Oprala - 4.3.11-2 +- And let the build system know... + +* Mon Apr 14 2014 Ondrej Oprala - 4.3.11-1 +- Patchlevel 11 + +* Tue Apr 01 2014 Ondrej Oprala - 4.3.8-1 +- Patchlevel 8 + +* Thu Feb 27 2014 Ondrej Oprala - 4.3.0-1 +- Update to bash-4.3 + +* Wed Dec 04 2013 Ondrej Oprala - 4.2.45-6 +- Change the paths for format-security patch + +* Wed Dec 04 2013 Ondrej Oprala - 4.2.45-5 +- bash FTBFS if -Werror=format-string is used (#1036998) + +* Fri Aug 09 2013 Roman Rakus - 4.2.45-4 +- Added suggestion to .bashrc how to disable autopaging in systemctl + +* Fri Jul 26 2013 Ville Skyttä - 4.2.45-3 +- Install docs to %%{_pkgdocdir} where available. +- Fix bogus dates in %%changelog. + +* Thu Jun 27 2013 Roman Rakus - 4.2.45-2 +- Fixed a bug that caused trap handlers to be executed recursively, + corrupting internal data structures. + +* Mon Mar 11 2013 Roman Rakus - 4.2.45-1 +- Patchlevel 45 + +* Thu Jan 31 2013 Roman Rakus - 4.2.42-3 +- Fix usage of partial unitialized structure + Resolves: #857948 + +* Thu Jan 31 2013 Roman Rakus - 4.2.42-2 +- Fix fd leaks + Resolves: #903833 + +* Thu Jan 03 2013 Roman Rakus - 4.2.42-1 +- Patchlevel 42 + +* Thu Nov 29 2012 Roman Rakus - 4.2.39-3 +- Use unsigned type for size + +* Tue Nov 27 2012 Roman Rakus - 4.2.39-2 +- Create bashbug symlink + +* Fri Nov 02 2012 Roman Rakus - 4.2.39-1 +- Patchlevel 39 + +* Tue Aug 28 2012 Roman Rakus - 4.2.37-8 +- Fix a comments in rpm changelog + +* Tue Aug 28 2012 Roman Rakus - 4.2.37-7 +- Update info about trap in man page + Resolves: #799958 +- instead of setting the signal handler to SIG_IGN while installing + the new trap handler, block the signal and unblock it after the new handler + is installed + Resolves: #695656 + +* Wed Aug 22 2012 Ondrej Oprala - 4.2.37-6 +- Revert revision 4.2.37-5 - already fixed upstream + +* Tue Aug 21 2012 Ondrej Oprala - 4.2.37-5 +- Don't filter out environmental variables with + a dot in the name + Resolves: #819995 + +* Wed Aug 08 2012 Roman Rakus - 4.2.37-4 +- Added doc subdir to bash-doc ownership list + Resolves: #846734 + +* Tue Jul 24 2012 Roman Rakus - 4.2.37-3 +- Increment patchlevel tag + +* Tue Jul 24 2012 Roman Rakus - 4.2.36-3 +- Patchlevel 37 + +* Wed Jul 18 2012 Fedora Release Engineering - 4.2.36-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Jul 10 2012 Roman Rakus - 4.2.36-1 +- Patchlevel 36 + +* Sat Jun 23 2012 Roman Rakus - 4.2.29-3 +- Remove /bin from DEFAULT_PATH_VALUE + Resolves: #834571 + +* Thu May 31 2012 Roman Rakus - 4.2.29-2 +- Patchlevel 29 +- Also keep release at -2, so we are newer then f16 and f17 + +* Tue May 29 2012 Roman Rakus - 4.2.28-2 +- Provide exec-able alternatives to some builtins + Resolves #820192 + +* Wed May 09 2012 Roman Rakus - 4.2.28-1 +- Patchlevel 28 + +* Mon Apr 23 2012 Roman Rakus - 4.2.24-2 +- Don't call malloc in signal handler + +* Tue Mar 13 2012 Roman Rakus - 4.2.24-1 +- Patchlevel 24 + +* Wed Jan 25 2012 Harald Hoyer 4.2.20-4 +- install everything in /usr + https://fedoraproject.org/wiki/Features/UsrMove + +* Thu Jan 12 2012 Fedora Release Engineering - 4.2.20-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Thu Nov 24 2011 Roman Rakus - 4.2.20-2 +- Add missing f:close() in postun +- Patchlevel 20 + +* Thu Nov 10 2011 Roman Rakus - 4.2.10-7 +- erase /bin/bash and /bin/sh in postun only if we are uninstalling (#752827) + +* Mon Nov 07 2011 Roman Rakus - 4.2.10-6 +- Simplified lua post script (#740611) + +* Fri Jul 29 2011 Roman Rakus - 4.2.10-5 +- Clean up unneeded bash-doc files (Ville Skyttä) (#721116) + +* Wed Jun 22 2011 Roman Rakus - 4.2.10-4 +- Don't crash when use `read' with associative array (#715050) + +* Tue Jun 07 2011 Roman Rakus - 4.2.10-3 +- Added $HOME/.local/bin to PATH in .bash_profile (#699812) + +* Thu May 05 2011 Roman Rakus - 4.2.10-2 +- Inc. a release no. + +* Thu May 05 2011 Roman Rakus - 4.2.10-1 +- Patchlevel 10 + +* Thu Mar 31 2011 Roman Rakus - 4.2.8-2 +- Remove bash-4.2-xdupmbstowcs2-patch, which introduced another bugs + +* Tue Mar 15 2011 Roman Rakus - 4.2.8-1 +- Patchlevel 8 + +* Tue Mar 15 2011 Roman Rakus - 4.2.7-3 +- #684293, fix the infinite loop with invalid wide char + +* Mon Mar 14 2011 Roman Rakus - 4.2.7-2 +- Use lua script in postun + +* Mon Mar 07 2011 Roman Rakus - 4.2.7-1 +- Patchlevel 7 + +* Wed Mar 02 2011 Roman Rakus - 4.2.6-1 +- Patchlevel 6 + +* Tue Mar 01 2011 Roman Rakus - 4.2.5-1 +- Patchlevel 5 +- Static analyzis show some issues in some patches +- Some cleanup + +* Wed Feb 16 2011 Roman Rakus - 4.2.0-2 +- pattern matching glitch, patch from upstream + +* Wed Feb 16 2011 Roman Rakus - 4.2.0-1 +- Release bash-4.2 + +* Mon Feb 14 2011 Roman Rakus - 4.2.0-0.2.rc2 +- Enable system-wide .bash_logout for login shells + +* Wed Feb 09 2011 Roman Rakus - 4.2.0-0.1.rc2 +- Update to bash-4.2-rc2 + +* Mon Feb 07 2011 Fedora Release Engineering - 4.1.9-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Jan 06 2011 Roman Rakus - 4.1.9-5 +- Builtins like echo and printf won't report errors + when output does not succeed due to EPIPE + +* Thu Dec 16 2010 Roman Rakus - 4.1.9-4 +- Drop doc/examples/loadables + +* Wed Dec 01 2010 Roman Rakus - 4.1.9-3 +- don't segfault when trying to bind int variable to array + with bad array subsrcipt + Resolves: #618289 + +* Fri Oct 15 2010 Ville Skyttä - 4.1.9-2 +- Move doc dir ownership to main package. +- Preserve doc timestamps. +- Add --without tests option for building without running the test suite. + +* Thu Oct 14 2010 Roman Rakus - 4.1.9-1 +- Patch level 9 + +* Mon Aug 02 2010 Roman Rakus - 4.1.7-4 +- Use better nomenclature for --rpm-requires bash option (#557134) + +* Tue Jun 22 2010 Roman Rakus - 4.1.7-3 +- Added missing patch + +* Tue Jun 22 2010 Roman Rakus - 4.1.7-2 +- Do the same CFLAGS in generated Makefile in examples + +* Fri May 21 2010 Roman Rakus - 4.1.7-1 +- Patch level 7 + +* Mon Apr 12 2010 Roman Rakus - 4.1.5-1 +- Patch level 5 +- There's no more need for Requires(post) ncurses-libs + +* Tue Mar 30 2010 Roman Rakus - 4.1.2-4 +- Corrected requires patch (#563301) + +* Fri Jan 22 2010 rrakus@redhat.com 4.1.2-3 +- Don't use cond-rmatch patch +- Use manso patch +- Include COPYING in base bash rpm + +* Fri Jan 22 2010 rrakus@redhat.com 4.1.2-2 +- Correct patchlevel 2 + +* Fri Jan 22 2010 Roman Rakus rrakus@redhat.com 4.1.2-1 +- Patchlevel 4.2 +- Removed old patch +- Returned back manso patch + +* Fri Jan 08 2010 Roman Rakus rrakus@redhat.com 4.1.0-2 +- Include COPYING in doc dir + +* Mon Jan 04 2010 Roman Rakus - 4.1.0-1 +- Upstream 4.1 + +* Sun Dec 27 2009 Roman Rakus - 4.1-0.2.rc1 +- Fixed patch for fuzz=0 + +* Sun Dec 27 2009 Roman Rakus - 4.1-0.1.rc1 +- Upstream 4.1.rc1 + +* Fri Dec 11 2009 Roman Rakus - 4.0.35-2 +- Don't segfault when TERM=eterm* and EMACS is unset (#530911) + +* Thu Oct 29 2009 Roman Rakus - 4.0.35-1 +- Patch level 35 + +* Mon Oct 05 2009 Roman Rakus - 4.0.33-2 +- Make symlink from bashbug-suffix to bashbug man pages + +* Wed Sep 16 2009 Roman Rakus - 4.0.33-1 +- Patch level 33 +- spec file cleanup + +* Fri Sep 04 2009 Roman Rakus - 4.0.28-3 +- check if interp section is NOBITS +- define Recycles pids + +* Wed Aug 26 2009 Roman Rakus - 4.0.28-2 +- alloc memory for key in creation associative array (#518644) + +* Tue Jul 28 2009 Roman Rakus - 4.0.28-1 +- Upstream patch level 28 + +* Fri Jul 24 2009 Fedora Release Engineering - 4.0.24-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue May 19 2009 Roman Rakus - 4.0.24-1 +- Upstream patch level 24 + +* Wed Apr 22 2009 Roman Rakus - 4.0.16-1 +- better to use patch level in version tag like vim do + +* Tue Apr 21 2009 Roman Rakus - 4.0-7.16 +- Use patch level in Release tag + +* Wed Apr 08 2009 Roman Rakus - 4.0-6 +- Official upstream patch level 16 + +* Mon Mar 30 2009 Roman Rakus - 4.0-5 +- Split documentation, use bash-doc package + Resolves: #492447 + +* Sat Mar 21 2009 Lubomir Rintel - 4.0-4 +- Add full URLs to upstream patches +- Don't uselessly use %%version macro + +* Wed Mar 11 2009 Roman Rakus - 4.0-3 +- Official upstream patch level 10 + +* Wed Feb 25 2009 Roman Rakus - 4.0-2 +- Save parser state in pcomplete. + Resolves: #487257 + +* Tue Feb 24 2009 Roman Rakus - 4.0-1 +- Release of bash-4.0 + +* Mon Feb 23 2009 Fedora Release Engineering - 4.0-0.5.rc1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Wed Feb 11 2009 Roman Rakus - 4.0-0.4.rc1 +- Fix handling pipelines with `set -e' + Resolves: #483385 + +* Thu Jan 29 2009 Roman Rakus - 4.0-0.3.rc1 +- No more debug output + Resolves: #483002 + +* Wed Jan 28 2009 Jesse Keating - 4.0-0.2.rc1 +- Replace post code with lua to be able to not have external deps + +* Mon Jan 26 2009 Roman Rakus - 4.0-0.1.rc1 +- Fixed release tag + +* Wed Jan 21 2009 Roman Rakus - 4.0-rc1.1 +- Bump to upstream bash-4.0-rc1 + +* Mon Dec 15 2008 Roman Rakus - 3.2-33 +- fc builtin fix + Resolves: #438841 + +* Mon Dec 15 2008 Roman Rakus - 3.2-32 +- Enabling auditing + Resolves: #476216 + +* Tue Dec 09 2008 Roman Rakus - 3.2-31 +- Patchlevel 48 + +* Thu Dec 04 2008 Roman Rakus - 3.2-30 +- Added check for `command_not_found_handler' shell function + Resolves: #432579 + +* Tue Oct 28 2008 Jesse Keating - 3.2-29 +- Add the Requires(post) back for ncurses-libs, so that rpm knows + where to break the loop. The post actually does require the curses + libs for the sh calls. Could consider doing this in LUA and not have + any external deps. + +* Thu Oct 23 2008 Roman Rakus - 3.2-28 +- Removing Requires for mktemp and ncurses, which cause + dependencing loop +- Enabling #define SSH_SOURCE_BASHRC, because ssh changed. + Resolves: #458839 +- Catch signals right after calling execve() + Resolves: #455548 + +* Thu Jul 17 2008 Roman Rakus - 3.2-27 +- Changes in man page - #442018, #445692, #446625, #453409 +- Changed patches to satisfy fuzz=0 + +* Thu Jun 5 2008 Roman Rakus - 3.2-26 +- Patchlevel 39 + +* Tue Jun 3 2008 Roman Rakus - 3.2-25 +- #449512 - reverting back last change - don't use glob library + +* Wed May 28 2008 Roman Rakus - 3.2-24 +- #217359 - use posix glob library + +* Thu May 22 2008 Roman Rakus - 3.2-23 +- #446420 - COMP_WORDBREAKS settings now works + +* Fri Feb 29 2008 Tomas Janousek - 3.2-22 +- drop /usr/bin/clear from /etc/skel/.bash_logout as suggested by #429406 + +* Wed Feb 20 2008 Fedora Release Engineering - 3.2-21 +- Autorebuild for GCC 4.3 + +* Mon Jan 14 2008 Tomas Janousek - 3.2-20 +- Added bash32-026 upstream official patch +- Added bash32-027 upstream official patch (#249987) +- Added bash32-028 upstream official patch +- Added bash32-029 upstream official patch (#286861) +- Added bash32-030 upstream official patch +- Added bash32-031 upstream official patch (#358231) +- Added bash32-032 upstream official patch +- Added bash32-033 upstream official patch +- Fix insert command repeating in vi mode (#190350) + +* Tue Nov 06 2007 Tomas Janousek - 3.2-19 +- fix cursor position when prompt has one invisible character (#358231) +- dropped examples/loadables/ from docs, since it wasn't possible to build them + anyway (#174380) +- fix #286861: Wrong input confuses bash's arithmetic unit permanently +- fix #344411: $RANDOM stays the same when job executed in the background + +* Fri Aug 31 2007 Pete Graner - 3.2-18 +- Added bash32-021 upstream official patch +- Added bash32-025 upstream official patch +- Added bash32-024 upstream official patch +- Added bash32-023 upstream official patch +- Added bash32-022 upstream official patch + +* Wed Aug 29 2007 Pete Graner - 3.2-17 +- Added bash32-018 upstream official patch +- Added bash32-020 upstream official patch +- Added bash32-019 upstream official patch + +* Thu Aug 23 2007 Pete Graner - 3.2-16 +- Rebuild + +* Mon Aug 20 2007 Pete Graner - 3.2-15 +- Update to the Improve bash $RANDOM pseudo RNG (bug #234906) + now works with subshells and make $RANDOM on demand thus reducing the + amount of AVCs thrown. + +* Thu Aug 16 2007 Pete Graner - 3.2-15 +- Changed spec file License to GPLv2+ + +* Wed Aug 15 2007 Pete Graner - 3.2-13 +- Improve bash $RANDOM pseudo RNG (bug #234906) + +* Fri Jul 20 2007 Tim Waugh 3.2-12 +- Quote environment variables in the post scriptlet to prevent upgrade + failures (bug #249005). + +* Thu Jul 5 2007 Tim Waugh 3.2-11 +- Patchlevel 17 (bug #241647). + +* Wed Jul 4 2007 Tim Waugh 3.2-10 +- Clarification in the ulimit man page (bug #220657). + +* Mon Feb 12 2007 Tim Waugh 3.2-9 +- Rebuild to link with libtinfo instead of libncurses. + +* Wed Feb 7 2007 Tim Waugh 3.2-8 +- Avoid %%makeinstall (bug #225609). + +* Tue Feb 6 2007 Tim Waugh 3.2-7 +- Reinstated this change: + - Post requires ncurses (bug #224567). +- Reverted this change: + - Added triggers for install-info (bug #225609). + +* Tue Feb 6 2007 Tim Waugh 3.2-6 +- Reverted this change: + - Post requires ncurses (bug #224567). + +* Mon Feb 5 2007 Tim Waugh 3.2-5 +- Added triggers for install-info (bug #225609). +- Use full path to utilities in scriptlets (bug #225609). +- Fix missing sh-bangs in example scripts (bug #225609). +- Post requires ncurses (bug #224567). +- Removed Prefix tag (bug #225609). +- Fixed BuildRoot tag (bug #225609). +- Removed trailing full-stop from summary (bug #225609). +- Spec file is now UTF-8 (bug #225609). +- Removed obsolete Obsoletes (bug #225609). +- Moved 'make check' to new 'check' section (bug #225609). +- Removed uses of RPM_SOURCE_DIR (bug #225609). +- Fixed macros in changelog (bug #225609). +- Changed tabs to spaces (bug #225609). + +* Tue Jan 23 2007 Tim Waugh 3.2-4 +- Slightly better .bash_logout (bug #223960). + +* Fri Jan 19 2007 Tim Waugh 3.2-3 +- Back out rmatch change introduced in 3.2 (bug #220087). + +* Tue Jan 16 2007 Miroslav Lichvar 3.2-2 +- Link with ncurses. + +* Fri Dec 15 2006 Tim Waugh 3.2-1 +- Build requires autoconf and gettext. +- 3.2. No longer need aq, login, ulimit, sighandler or read-memleak + patches. + +* Wed Jul 12 2006 Tim Waugh 3.1-17 +- Fixed 'tags out of date' problem with 'info bash' (bug #150118). + +* Wed Jul 12 2006 Jesse Keating - 3.1-16.1 +- rebuild + +* Wed Jun 28 2006 Tim Waugh 3.1-16 +- Removed 'unset USERNAME' from default .bash_profile (bug #196735). + +* Thu Jun 15 2006 Tim Waugh 3.1-15 +- Updated requires patch to the ALT version. + +* Wed May 31 2006 Tim Waugh 3.1-14 +- More sighandler fixes, this time hypothetical. + +* Thu May 25 2006 Tim Waugh 3.1-13 +- Another fix for the sighandler patch (bug #192297). + +* Thu Apr 13 2006 Tim Waugh 3.1-12 +- Patchlevel 17. + +* Tue Apr 4 2006 Tim Waugh 3.1-11 +- Patchlevel 16. + +* Thu Mar 23 2006 Tim Waugh 3.1-10 +- Patchlevel 14. + +* Thu Mar 2 2006 Tim Waugh 3.1-9 +- Fixed duplicate documentation of ulimit '-x' option introduced by + ulimit patch (bug #183596). + +* Tue Feb 21 2006 Tim Waugh 3.1-8 +- Patchlevel 10. + +* Thu Feb 16 2006 Tim Waugh 3.1-7 +- Patchlevel 8. + +* Fri Feb 10 2006 Jesse Keating - 3.1-6.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 3.1-6.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Sun Feb 5 2006 Tim Waugh 3.1-6 +- Patchlevel 7. + +* Wed Jan 18 2006 Tim Waugh +- Removed inaccuracies from %%description (bug #178189). + +* Fri Jan 13 2006 Tim Waugh 3.1-5 +- Fix 'exec -l /bin/bash'. + +* Thu Jan 12 2006 Tim Waugh 3.1-4 +- Fix sighandler patch bug (bug #177545). + +* Tue Jan 10 2006 Tim Waugh 3.1-3 +- Patchlevel 5. + +* Fri Jan 6 2006 Tim Waugh 3.1-2 +- No longer need loadables, mbinc or shellfunc patches. +- Use literal single-quote in bash man page where appropriate (bug #177051). + +* Mon Jan 2 2006 Tim Waugh 3.1-1 +- 3.1. +- No longer need ia64, utf8, multibyteifs, jobs, sigpipe, + read-e-segfault, manpage, crash, pwd, afs, subshell patches. +- Remove wrap patch for now. +- Use upstream patch to fix arrays. + +* Thu Dec 15 2005 Tim Waugh 3.0-41 +- Missed another loop for improved sighandler patch (bug #169231). + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Thu Dec 8 2005 Tim Waugh 3.0-40 +- Fix read memleak when reading from non-blocking fd (bug #173283). +- Missed another loop for improved sighandler patch (bug #169231). + +* Wed Dec 7 2005 Tim Waugh 3.0-39 +- Missed a loop for improved sighandler patch (bug #169231). + +* Tue Dec 6 2005 Tim Waugh 3.0-38 +- Test out improved sighandler patch (bug #169231). + +* Tue Nov 22 2005 Tim Waugh 3.0-37 +- Applied patch from upstream to fix parsing problem (bug #146638). + +* Wed Nov 9 2005 Tim Waugh 3.0-36 +- Added Url: tag (bug #172770). +- Do not explicitly gzip info pages (bug #172770). +- Fix permissions on bashbug (bug #172770). + +* Thu Oct 6 2005 Tim Waugh 3.0-35 +- Fixed memory allocation bug in multibyteifs patch (bug #169996). + +* Fri Sep 23 2005 Tim Waugh +- Use 'volatile' in sighandler patch. + +* Wed Sep 21 2005 Tim Waugh 3.0-34 +- Avoid writing history files during signal handling (bug #163235). + +* Mon Aug 8 2005 Tim Waugh 3.0-33 +- Fixed multibyte IFS handling for invalid input (bug #165243). + +* Mon Aug 8 2005 Tim Waugh 3.0-32 +- Fixed 'LC_ALL=C export LC_ALL' behaviour (bug #165249). + +* Thu Jun 23 2005 Tim Waugh +- Added ulimit support for RLIMIT_NICE and RLIMIT_RTPRIO (bug #157049). + +* Wed Jun 8 2005 Tim Waugh +- Move a comment in dot-bashrc (bug #159522). + +* Tue May 10 2005 Tim Waugh 3.0-31 +- Small fix for multibyteifs patch to prevent segfault (bug #157260). + +* Wed Apr 20 2005 Tim Waugh +- Fixed AFS support for output redirection, so that the correct errors + are reported for other filesystems (bug #155373). + +* Tue Mar 15 2005 Tim Waugh 3.0-30 +- Fix PS1 expansion crash when PWD is unset (bg #151116). + +* Wed Mar 2 2005 Tim Waugh 3.0-29 +- Rebuild for new GCC. + +* Thu Feb 17 2005 Tim Waugh 3.0-28 +- Define _GNU_SOURCE in CPPFLAGS (bug #147573). + +* Mon Feb 14 2005 Tim Waugh +- Reverted this change: + - Added code to /etc/skel/.bash_logout to support the gpm selection buffer + invalidation on virtual terminals (bug #115493). + +* Mon Jan 31 2005 Tim Waugh 3.0-27 +- Applied upstream patch to fix a potential NULL dereference. + +* Fri Jan 28 2005 Tim Waugh 3.0-26 +- Fixed job handling bug (bug #145124). + +* Sun Dec 5 2004 Tim Waugh 3.0-25 +- Applied patch from Florian La Roche to fix CPPFLAGS quoting in spec file. + +* Tue Nov 30 2004 Tim Waugh +- Fixed typo in man page (spotted on bug-bash). + +* Thu Nov 18 2004 Tim Waugh 3.0-24 +- Use upstream patch to fix bug #139575 and bug #139306. + +* Thu Nov 18 2004 Tim Waugh 3.0-23 +- Fixed last patch to avoid regressions (bug #139575). + +* Mon Nov 15 2004 Tim Waugh 3.0-22 +- Fixed prompt wrapping code to cope with zero-length prompts (bug #139306). + +* Thu Nov 11 2004 Tim Waugh 3.0-21 +- Added code to /etc/skel/.bash_logout to support the gpm selection buffer + invalidation on virtual terminals (bug #115493). + +* Wed Nov 10 2004 Tim Waugh 3.0-20 +- Patchlevel 16. + +* Mon Nov 1 2004 Tim Waugh +- Patchlevel 15. + +* Tue Oct 19 2004 Tim Waugh 3.0-17 +- Patchlevel 14. +- No longer need brace patch. + +* Wed Sep 29 2004 Tim Waugh 3.0-16 +- Apply patch from Chet Ramey to fix brace expansion. + +* Fri Sep 24 2004 Tim Waugh 3.0-15 +- Minor fix for job handling. + +* Mon Sep 13 2004 Tim Waugh +- Add bashbug back in (with suffix). + +* Mon Sep 13 2004 Tim Waugh +- Remove bash2. + +* Fri Sep 10 2004 Tim Waugh 3.0-14 +- Don't run tests that read from /dev/tty. +- Patchlevel 13. + +* Wed Sep 8 2004 Tim Waugh 3.0-13 +- Check for EINVAL from waitpid() and avoid WCONTINUED in that case. +- Fixed jobs4 test. +- Applied experimental upstream patch for trap compatibility. +- Re-make documentation to reflect source changes. + +* Tue Sep 7 2004 Tim Waugh 3.0-12 +- Remove 'bashbug' from the documentation, because we don't ship it due + to biarch concerns. + +* Thu Sep 2 2004 Tim Waugh 3.0-11 +- Fixed multibyte parameter length expansion. + +* Tue Aug 31 2004 Tim Waugh 3.0-9 +- Fix ulimits patch from Ulrich Drepper (bug #129800). + +* Fri Aug 27 2004 Tim Waugh 3.0-8 +- Provide support for new limits (bug #129800). + +* Thu Aug 26 2004 Tim Waugh 3.0-7 +- Use upstream patch for last fix. + +* Thu Aug 26 2004 Tim Waugh 3.0-6 +- Fixed history saved-line handling. + +* Tue Aug 24 2004 Tim Waugh +- Fixed multibyte IFS handling. + +* Wed Aug 18 2004 Tim Waugh +- Applied bug-bash list patch to fix pipefail. + +* Tue Aug 17 2004 Tim Waugh 3.0-5 +- Make trap usage string show POSIX usage (bug #128938). +- Updated ${x[@]:1} expansion fix from bug-bash list. +- Updated patch to fix unset array crash (from bug-bash list). + +* Sun Aug 15 2004 Tim Waugh +- Fix ${x[@]:1} expansion (William Park, bug-bash list). + +* Tue Aug 10 2004 Tim Waugh 3.0-4 +- Fix vi-change-char behaviour at EOL (bug #129526). + +* Mon Aug 9 2004 Tim Waugh 3.0-3 +- Applied bug-bash list patch to fix multiline PS1 prompting (bug #129382). + +* Wed Aug 4 2004 Tim Waugh 3.0-2 +- Fixed brace expansion (bug #129128). +- Build with AFS support again, since bug #86514 seems fixed upstream + (bug #129094). + +* Tue Aug 3 2004 Tim Waugh +- Fixed crash when unsetting an unset array (from bug-bash list). + +* Wed Jul 28 2004 Tim Waugh 3.0-1 +- 3.0. + +* Wed Jul 21 2004 Tim Waugh 2.05b-44 +- Don't report SIGPIPE errors (bug #128274). + +* Thu Jul 8 2004 Tim Waugh 2.05b-43 +- Fixed command substitution problem (bug #127242). + +* Mon Jun 28 2004 Tim Waugh 2.05b-42 +- Fixed multibyte variable substitution patch (bug #126399). + +* Thu Jun 17 2004 Karsten Hopp 2.05b-41 +- remove bashbug script/docs to avoid conflicting files in + biarch installs. + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Fri Jun 4 2004 Tim Waugh +- Build requires bison (bug #125307). + +* Wed Jun 2 2004 Tim Waugh 2.05b-39 +- Build requires libtermcap-devel (bug #125068). + +* Wed May 19 2004 Tim Waugh +- Don't ship empty %%{_libdir}/bash (bug #123556). + +* Thu Mar 11 2004 Tim Waugh 2.05b-38 +- Apply patch from Nalin Dahyabhai fixing an overread. + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Thu Jan 22 2004 Tim Waugh 2.05b-36 +- Fix the bug causing bindings to need reparsing .inputrc (bug #114101). + +* Mon Jan 5 2004 Tim Waugh 2.05b-35 +- Fix parameter expansion in multibyte locales (bug #112657). +- Run 'make check'. + +* Tue Dec 9 2003 Tim Waugh 2.05b-34 +- Build requires texinfo (bug #111171). + +* Fri Nov 28 2003 Tim Waugh 2.05b-33 +- Speed up UTF-8 command-line redrawing in the common case (bug #102353, + bug #110777). + +* Thu Nov 6 2003 Tim Waugh 2.05b-32 +- Apply upstream patches (bug #109269 among others). + +* Fri Oct 31 2003 Tim Waugh +- Fix bash.info (bug #83776). + +* Tue Oct 28 2003 Tim Waugh 2.05b-31 +- Add bash205b-007 patch to fix bug #106876. + +* Thu Oct 23 2003 Tim Waugh 2.05b-30 +- Rebuilt. + +* Thu Sep 18 2003 Tim Waugh 2.05b-29.1 +- Rebuilt. + +* Thu Sep 18 2003 Tim Waugh 2.05b-29 +- Avoid crashing on multibyte input when locale is set incorrectly + (bug #74266). + +* Fri Sep 5 2003 Tim Waugh 2.05b-28.1 +- Rebuilt. + +* Fri Sep 5 2003 Tim Waugh 2.05b-28 +- Avoid built-in malloc implementation (bug #103768). + +* Wed Sep 3 2003 Tim Waugh 2.05b-27.1 +- Rebuilt. + +* Wed Sep 3 2003 Tim Waugh 2.05b-27 +- LFS support (bug #103627). + +* Thu Jul 31 2003 Tim Waugh 2.05b-26.1 +- Rebuilt. + +* Thu Jul 31 2003 Tim Waugh 2.05b-26 +- Merge bash-doc into main package (bug #100632). + +* Wed Jun 04 2003 Elliot Lee 2.05b-25 +- rebuilt + +* Mon May 12 2003 Tim Waugh 2.05b-24 +- Fix completion display when multibyte or control characters are to be + shown (bug #90201). + +* Wed Mar 26 2003 Tim Waugh 2.05b-23 +- Fix a warning message (bug #79629). +- Don't remove generated source during build, for debuginfo package. +- Don't build with AFS support (bug #86514). + +* Tue Mar 25 2003 Tim Waugh 2.05b-22 +- Really fix bug #78455. + +* Tue Mar 11 2003 Tim Waugh 2.05b-21 +- Don't explicitly strip binaries (bug #85995). + +* Tue Feb 11 2003 Tim Waugh 2.05b-20 +- Really fix bug #83331 for good. + +* Mon Feb 10 2003 Tim Waugh 2.05b-19 +- Fix builtins.1. + +* Fri Feb 7 2003 Tim Waugh 2.05b-18 +- Actually apply the patch (bug #83331). + +* Wed Feb 5 2003 Tim Waugh 2.05b-17 +- Fix history/UTF-8 bug (bug #83331). + +* Sun Jan 26 2003 Tim Waugh 2.05b-16 +- More tab-completion fixing (bug #72512). + +* Wed Jan 22 2003 Tim Powers 2.05b-15 +- rebuilt + +* Wed Jan 15 2003 Tim Waugh 2.05b-14 +- Force pgrp synchronization (bug #81653). + +* Thu Dec 05 2002 Elliot Lee 2.05b-13 +- (patch26) Don't call 'size' in makefile. Pointless, and interferes with + cross compiles. + +* Tue Dec 3 2002 Tim Waugh 2.05b-12 +- Prevent prompt overwriting output (bug #74383). + +* Wed Nov 27 2002 Tim Waugh 2.05b-11 +- Fix '-rbash' (bug #78455). + +* Thu Nov 21 2002 Tim Waugh 2.05b-10 +- Rebuild. + +* Wed Nov 20 2002 Elliot Lee +- Use the configure macro instead of calling ./configure directly + +* Wed Nov 13 2002 Tim Waugh +- Revert previous change. + +* Wed Nov 13 2002 Tim Waugh 2.05b-8 +- PreReq libtermcap. + +* Fri Oct 18 2002 Tim Waugh 2.05b-7 +- Add readline-init patch (bug #74925). + +* Wed Oct 16 2002 Tim Waugh 2.05b-6 +- Add the (4) patches from ftp.gnu.org (bug #75888, bug #72512). +- Ship '.' man page, which doesn't get picked up by glob. +- Don't install files not shipped when building. +- Locale shell variables fix (bug #74701). + +* Fri Aug 23 2002 Tim Powers 2.05b-5 +- re-bzip the docs, something was corrupted + +* Thu Aug 22 2002 Tim Waugh 2.05b-4 +- Fix history substitution modifiers in UTF-8 (bug #70294, bug #71186). +- Fix ADVANCE_CHAR at end of string (bug #70819). +- docs: CWRU/POSIX.NOTES no longer exists, but ship POSIX. + +* Wed Aug 07 2002 Phil Knirsch 2.05b-3 +- Fixed out of memory problem with readline. + +* Tue Jul 23 2002 Phil Knirsch 2.05b-2 +- Added symlink for sh.1 in man1 section so that man sh works (#44039). + +* Mon Jul 22 2002 Phil Knirsch 2.05b-1 +- Update to 2.05b + +* Wed Jul 10 2002 Phil Knirsch 2.05a-16 +- Fixed readline utf8 problem (#68313). + +* Fri Jun 21 2002 Tim Powers 2.05a-15 +- automated rebuild + +* Thu May 23 2002 Tim Powers 2.05a-14 +- automated rebuild + +* Fri Apr 12 2002 Tim Powers 2.05a-13 +- don't build the stuff in examples/loadables. It breaks FHS + compliance + +* Fri Apr 5 2002 Bernhard Rosenkraenzer 2.05a-12 +- Fix the fix for #62418 + +* Thu Apr 4 2002 Bernhard Rosenkraenzer 2.05a-11 +- Fix kill builtin (#62418) + +* Mon Mar 25 2002 Trond Eivind Glomsrød 2.0.5a-10 +- Get rid of completion subpackage +- Use %%{_tmppath} + +* Mon Mar 11 2002 Bernhard Rosenkraenzer 2.05a-9 +- Add patch from Ulrich Drepper to get better error messages when trying + to launch an application with a bad ELF interpreter (e.g. libc5 ld.so) + (#60870) + +* Fri Feb 22 2002 Bernhard Rosenkraenzer 2.05a-8 +- Update completion + +* Wed Jan 30 2002 Bernhard Rosenkraenzer 2.05a-7 +- Update completion stuff and move it to a separate package + +* Sat Jan 26 2002 Bernhard Rosenkraenzer 2.05a-6 +- Add patches from Ian Macdonald + +* Wed Jan 23 2002 Bernhard Rosenkraenzer 2.05a-5 +- Add programmable completion (optional) + +* Thu Jan 17 2002 Bernhard Rosenkraenzer 2.05a-4 +- Fix mailcheck (#57792) + +* Tue Jan 15 2002 Bernhard Rosenkraenzer 2.05a-3 +- Fix autoconf mess +- Build --with-afs, some users may be using it + +* Wed Jan 09 2002 Tim Powers +- automated rebuild + +* Thu Nov 22 2001 Bernhard Rosenkraenzer 2.05a-2 +- Fix conflict with sh-utils (printf builtin manpage vs. printf binary manpage) + (#56590) + +* Tue Nov 20 2001 Bernhard Rosenkraenzer 2.05a-1 +- 2.05a + +* Wed Oct 10 2001 Florian La Roche +- disable s390x fix, not needed anymore + +* Mon Oct 1 2001 Bernhard Rosenkraenzer 2.05-9 +- Add patch from readline 4.2-3 to bash's internal libreadline + +* Mon Jul 9 2001 Bernhard Rosenkraenzer 2.05-8 +- Merge Pekka Savola's patch (RFE#47762) + +* Mon Jul 2 2001 Pekka Savola +- Add IPv6 patch from PLD (only redirection to /dev/{tcp,udp}/host/port + support) + +* Sun Jun 24 2001 Bernhard Rosenkraenzer 2.05-7 +- Add some bugfix patches from the maintainer + +* Mon Jun 11 2001 Florian La Roche +- added patch for s390x from + +* Wed May 23 2001 Bernhard Rosenkraenzer 2.05-5 +- Don't set BASH_ENV in .bash_profile, it causes .bashrc to be sourced + twice in interactive non-login shells. +- s/Copyright/License/ + +* Sat May 5 2001 Bernhard Rosenkraenzer 2.05-4 +- Fix tempfile creation in bashbug + +* Wed May 2 2001 Preston Brown 2.05-3 +- bashrc moved to setup package + +* Tue Apr 24 2001 Bernhard Rosenkraenzer 2.05-2 +- bash comes with its own copy of readline... Add the patches we're + applying in the readline package. + +* Tue Apr 24 2001 Bernhard Rosenkraenzer 2.05-1 +- Update to 2.05 +- Change PROMPT_COMMAND in bashrc for xterms + to something less space consuming (#24159) +- Provide plugs for alternate prompt commands (#30634), but don't + default to them + +* Mon Mar 19 2001 Preston Brown +- add default aliases for 'dir' and 'df' to have human readable output + +* Wed Feb 28 2001 Matt Wilson +- don't Prereq: /sbin/install-info! + +* Tue Feb 27 2001 Preston Brown +- noreplace config files +- don't own /etc/skel directory + +* Thu Feb 22 2001 Harald Hoyer +- changed /etc/bashrc to work with backspace = 0177 (rxvt) + +* Wed Feb 07 2001 Florian La Roche +- changed /etc/skel/.bash_profile to "unset USERNAME" + +* Mon Feb 5 2001 Yukihiro Nakai +- Delete Japanese resources from dot-bashrc + and move them to each package. + +* Fri Dec 15 2000 Yukihiro Nakai +- Add Japanese resource to dot-bashrc + +* Mon Dec 11 2000 Bernhard Rosenkraenzer +- rebuild to get rid of 0777 doc dirs + +* Thu Nov 16 2000 Bernhard Rosenkraenzer +- restore the ^Hs in documentation, they're highlighting sequences + for less (#20654) + +* Fri Sep 15 2000 Florian La Roche +- bash-2.04-export.patch is reported to fix compilation + of older glibc-2.1 sources + +* Tue Aug 22 2000 Matt Wilson +- fixed the summary of bash-doc to use %%{version} instead of "2.03" + +* Tue Aug 8 2000 Bill Nottingham +- 'exit' in bashrc is very bad. + +* Tue Aug 8 2000 Bernhard Rosenkraenzer +- minor bashrc fix (Bug #8518) + +* Mon Jul 17 2000 Bernhard Rosenkraenzer +- Don't use tput etc. in bashrc if /usr isn't available (Bug #14116) + +* Wed Jul 12 2000 Prospector +- automatic rebuild + +* Thu Jun 22 2000 Bill Nottingham +- fix for some IA-64 issues from Stephane Eranian + +* Thu Jun 15 2000 Bernhard Rosenkraenzer +- Fix summary and description, they had old version numbers (Bug #12092) + +* Tue Jun 6 2000 Bill Nottingham +- add /etc/skel/.bash* ; obsolete etcskel + +* Tue May 2 2000 Bill Nottingham +- fix for shell functions on 64-bit architectures... + +* Wed Mar 29 2000 Bernhard Rosenkraenzer +- Add some backwards compatibility (for i in ; do something; done) + +* Tue Mar 21 2000 Bernhard Rosenkraenzer +- 2.04 final +- remove the echo, pwd, test and kill man pages from the package, + we're getting them from sh-utils + +* Sun Mar 19 2000 Bernhard Rosenkraenzer +- 2.04beta5 +- adapt patches +- Fix up bashrc +- Don't put in bashrc1, this should be done by the bash1 package +- use install -c instead of plain install to work on *BSD +- remove the collected patches - they're now in the base version. +- make compressed man pages optional + +* Thu Mar 16 2000 Florian La Roche +- add some collected patches for bash2 +- change it over to be the main bash package +- install man-pages root:root +- obsolete bash2, bash2-doc + +* Wed Feb 02 2000 Cristian Gafton +- man pages are compressed +- fix description + +* Thu Dec 2 1999 Ken Estes +- updated patch to detect what executables are required by a script. + +* Tue Sep 14 1999 Dale Lovelace +- Remove annoying ^H's from documentation + +* Fri Jul 16 1999 Ken Estes +- patch to detect what executables are required by a script. + +* Sun Mar 21 1999 Cristian Gafton +- auto rebuild in the new build environment (release 4) + +* Fri Mar 19 1999 Jeff Johnson +- strip binaries. +- include bash-doc correctly. + +* Thu Mar 18 1999 Preston Brown +- fixed post/postun /etc/shells work. + +* Thu Mar 18 1999 Cristian Gafton +- updated again text in the spec file + +* Mon Feb 22 1999 Jeff Johnson +- updated text in spec file. +- update to 2.03. + +* Fri Feb 12 1999 Cristian Gafton +- build it as bash2 instead of bash + +* Tue Feb 9 1999 Bill Nottingham +- set 'NON_INTERACTIVE_LOGIN_SHELLS' so profile gets read + +* Thu Jan 14 1999 Jeff Johnson +- rename man pages in bash-doc to avoid packaging conflicts (#606). + +* Wed Dec 02 1998 Cristian Gafton +- patch for the arm +- use $RPM_ARCH-redhat-linux as the build target + +* Tue Oct 6 1998 Bill Nottingham +- rewrite %%pre, axe %%postun (to avoid prereq loops) + +* Wed Aug 19 1998 Jeff Johnson +- resurrect for RH 6.0. + +* Sun Jul 26 1998 Jeff Johnson +- update to 2.02.1 + +* Thu Jun 11 1998 Jeff Johnson +- Package for 5.2. + +* Mon Apr 20 1998 Ian Macdonald +- added POSIX.NOTES doc file +- some extraneous doc files removed +- minor .spec file changes + +* Sun Apr 19 1998 Ian Macdonald +- upgraded to version 2.02 +- Alpha, MIPS & Sparc patches removed due to lack of test platforms +- glibc & signal patches no longer required +- added documentation subpackage (doc) + +* Fri Nov 07 1997 Donnie Barnes +- added signal handling patch from Dean Gaudet that + is based on a change made in bash 2.0. Should fix some early exit + problems with suspends and fg. + +* Mon Oct 20 1997 Donnie Barnes +- added %%clean + +* Mon Oct 20 1997 Erik Troan +- added comment explaining why install-info isn't used +- added mips patch + +* Fri Oct 17 1997 Donnie Barnes +- added BuildRoot + +* Tue Jun 03 1997 Erik Troan +- built against glibc diff --git a/dot-bash_logout b/dot-bash_logout new file mode 100644 index 0000000..af7c6fd --- /dev/null +++ b/dot-bash_logout @@ -0,0 +1,2 @@ +# ~/.bash_logout + diff --git a/dot-bash_profile b/dot-bash_profile new file mode 100644 index 0000000..55136b9 --- /dev/null +++ b/dot-bash_profile @@ -0,0 +1,8 @@ +# .bash_profile + +# Get the aliases and functions +if [ -f ~/.bashrc ]; then + . ~/.bashrc +fi + +# User specific environment and startup programs diff --git a/dot-bashrc b/dot-bashrc new file mode 100644 index 0000000..d81e0b5 --- /dev/null +++ b/dot-bashrc @@ -0,0 +1,18 @@ +# .bashrc + +# Source global definitions +if [ -f /etc/bashrc ]; then + . /etc/bashrc +fi + +# User specific environment +if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]] +then + PATH="$HOME/.local/bin:$HOME/bin:$PATH" +fi +export PATH + +# Uncomment the following line if you don't like systemctl's auto-paging feature: +# export SYSTEMD_PAGER= + +# User specific aliases and functions diff --git a/sources b/sources new file mode 100644 index 0000000..fd6bdf9 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (bash-4.4.tar.gz) = 73de3b425faaac55e45456b0f6f6d8077b5dfa7bb76e0d1894a19361b4a2b6bd4fbbe182117ddbfe9b07b4d898fba03537c261badc9533dd3c0da891764c7f29