From 24acfa146b8665f29d3ab3d027a561763a508444 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 19 Aug 2012 23:11:08 +0200 Subject: [PATCH] bash: Update to 3.2. --- lfs/bash | 13 +- src/patches/bash-3.1-fixes-8.patch | 723 ----------------------------- src/patches/bash-3.1-login.patch | 15 - src/patches/bash/bash32-001 | 47 ++ src/patches/bash/bash32-002 | 48 ++ src/patches/bash/bash32-003 | 147 ++++++ src/patches/bash/bash32-004 | 96 ++++ src/patches/bash/bash32-005 | 223 +++++++++ src/patches/bash/bash32-006 | 45 ++ src/patches/bash/bash32-007 | 55 +++ src/patches/bash/bash32-008 | 48 ++ src/patches/bash/bash32-009 | 61 +++ src/patches/bash/bash32-010 | 207 +++++++++ src/patches/bash/bash32-011 | 138 ++++++ src/patches/bash/bash32-012 | 96 ++++ src/patches/bash/bash32-013 | 65 +++ src/patches/bash/bash32-014 | 307 ++++++++++++ src/patches/bash/bash32-015 | 95 ++++ src/patches/bash/bash32-016 | 52 +++ src/patches/bash/bash32-017 | 85 ++++ src/patches/bash/bash32-018 | 98 ++++ src/patches/bash/bash32-019 | 343 ++++++++++++++ src/patches/bash/bash32-020 | 183 ++++++++ src/patches/bash/bash32-021 | 72 +++ src/patches/bash/bash32-022 | 126 +++++ src/patches/bash/bash32-023 | 51 ++ src/patches/bash/bash32-024 | 77 +++ src/patches/bash/bash32-025 | 79 ++++ src/patches/bash/bash32-026 | 82 ++++ src/patches/bash/bash32-027 | 85 ++++ src/patches/bash/bash32-028 | 60 +++ src/patches/bash/bash32-029 | 52 +++ src/patches/bash/bash32-030 | 50 ++ src/patches/bash/bash32-031 | 62 +++ src/patches/bash/bash32-032 | 47 ++ src/patches/bash/bash32-033 | 88 ++++ src/patches/bash/bash32-034 | 74 +++ src/patches/bash/bash32-035 | 159 +++++++ src/patches/bash/bash32-036 | 44 ++ src/patches/bash/bash32-037 | 110 +++++ src/patches/bash/bash32-038 | 80 ++++ src/patches/bash/bash32-039 | 175 +++++++ src/patches/bash/bash32-040 | 47 ++ src/patches/bash/bash32-041 | 154 ++++++ src/patches/bash/bash32-042 | 48 ++ src/patches/bash/bash32-043 | 62 +++ src/patches/bash/bash32-044 | 150 ++++++ src/patches/bash/bash32-045 | 50 ++ src/patches/bash/bash32-046 | 47 ++ src/patches/bash/bash32-047 | 65 +++ src/patches/bash/bash32-048 | 56 +++ src/patches/bash/bash32-049 | 64 +++ src/patches/bash/bash32-050 | 56 +++ src/patches/bash/bash32-051 | 46 ++ 54 files changed, 4864 insertions(+), 744 deletions(-) delete mode 100644 src/patches/bash-3.1-fixes-8.patch delete mode 100644 src/patches/bash-3.1-login.patch create mode 100644 src/patches/bash/bash32-001 create mode 100644 src/patches/bash/bash32-002 create mode 100644 src/patches/bash/bash32-003 create mode 100644 src/patches/bash/bash32-004 create mode 100644 src/patches/bash/bash32-005 create mode 100644 src/patches/bash/bash32-006 create mode 100644 src/patches/bash/bash32-007 create mode 100644 src/patches/bash/bash32-008 create mode 100644 src/patches/bash/bash32-009 create mode 100644 src/patches/bash/bash32-010 create mode 100644 src/patches/bash/bash32-011 create mode 100644 src/patches/bash/bash32-012 create mode 100644 src/patches/bash/bash32-013 create mode 100644 src/patches/bash/bash32-014 create mode 100644 src/patches/bash/bash32-015 create mode 100644 src/patches/bash/bash32-016 create mode 100644 src/patches/bash/bash32-017 create mode 100644 src/patches/bash/bash32-018 create mode 100644 src/patches/bash/bash32-019 create mode 100644 src/patches/bash/bash32-020 create mode 100644 src/patches/bash/bash32-021 create mode 100644 src/patches/bash/bash32-022 create mode 100644 src/patches/bash/bash32-023 create mode 100644 src/patches/bash/bash32-024 create mode 100644 src/patches/bash/bash32-025 create mode 100644 src/patches/bash/bash32-026 create mode 100644 src/patches/bash/bash32-027 create mode 100644 src/patches/bash/bash32-028 create mode 100644 src/patches/bash/bash32-029 create mode 100644 src/patches/bash/bash32-030 create mode 100644 src/patches/bash/bash32-031 create mode 100644 src/patches/bash/bash32-032 create mode 100644 src/patches/bash/bash32-033 create mode 100644 src/patches/bash/bash32-034 create mode 100644 src/patches/bash/bash32-035 create mode 100644 src/patches/bash/bash32-036 create mode 100644 src/patches/bash/bash32-037 create mode 100644 src/patches/bash/bash32-038 create mode 100644 src/patches/bash/bash32-039 create mode 100644 src/patches/bash/bash32-040 create mode 100644 src/patches/bash/bash32-041 create mode 100644 src/patches/bash/bash32-042 create mode 100644 src/patches/bash/bash32-043 create mode 100644 src/patches/bash/bash32-044 create mode 100644 src/patches/bash/bash32-045 create mode 100644 src/patches/bash/bash32-046 create mode 100644 src/patches/bash/bash32-047 create mode 100644 src/patches/bash/bash32-048 create mode 100644 src/patches/bash/bash32-049 create mode 100644 src/patches/bash/bash32-050 create mode 100644 src/patches/bash/bash32-051 diff --git a/lfs/bash b/lfs/bash index afdb511f13..c4fc567ae9 100644 --- a/lfs/bash +++ b/lfs/bash @@ -24,7 +24,7 @@ include Config -VER = 3.1 +VER = 3.2 THISAPP = bash-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -48,8 +48,6 @@ else EXTRA_INSTALL = endif -EXTRA_CONFIG += --build=$(BUILDTARGET) - ############################################################################### # Top-level Rules ############################################################################### @@ -58,7 +56,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = ef5304c4b22aaa5088972c792ed45d72 +$(DL_FILE)_MD5 = 00bfa16d58e034e3c2aa27f390390d30 install : $(TARGET) @@ -88,8 +86,11 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)-fixes-8.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)-login.patch + + for i in $$(seq 1 51); do \ + cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash32-$$(printf "%03d" "$${i}") || exit 1; \ + done + cd $(DIR_APP) && ./configure $(EXTRA_CONFIG) cd $(DIR_APP) && make $(EXTRA_MAKE) cd $(DIR_APP) && make $(EXTRA_INSTALL) install diff --git a/src/patches/bash-3.1-fixes-8.patch b/src/patches/bash-3.1-fixes-8.patch deleted file mode 100644 index 449f076536..0000000000 --- a/src/patches/bash-3.1-fixes-8.patch +++ /dev/null @@ -1,723 +0,0 @@ -Submitted By: Jeremy Huntwork (jhuntwork at linuxfromscratch dot org) -Date: 2006-04-11 -Initial Package Version: 3.1 -Origin: http://ftp.gnu.org/gnu/bash/bash-3.1-patches/ -Upstream Status: From Upstream -Description: Contains patches 001-017 from upstream - -diff -Naur bash-3.1.orig/arrayfunc.c bash-3.1/arrayfunc.c ---- bash-3.1.orig/arrayfunc.c 2005-07-04 17:25:58.000000000 -0700 -+++ bash-3.1/arrayfunc.c 2006-04-19 15:59:29.000000000 -0700 -@@ -592,11 +592,7 @@ - exp = (char *)xmalloc (len); - strncpy (exp, s, len - 1); - exp[len - 1] = '\0'; --#if 0 -- t = expand_string_to_string (exp, 0); --#else -- t = expand_string_to_string (exp, Q_DOUBLE_QUOTES); --#endif -+ t = expand_arith_string (exp, 0); - this_command_name = (char *)NULL; - val = evalexp (t, &expok); - free (t); -diff -Naur bash-3.1.orig/doc/bash.1 bash-3.1/doc/bash.1 ---- bash-3.1.orig/doc/bash.1 2005-10-12 08:40:52.000000000 -0700 -+++ bash-3.1/doc/bash.1 2006-04-19 15:58:34.000000000 -0700 -@@ -6,12 +6,12 @@ - .\" Case Western Reserve University - .\" chet@po.cwru.edu - .\" --.\" Last Change: Sat Aug 27 13:28:44 EDT 2005 -+.\" Last Change: Wed Dec 28 19:58:45 EST 2005 - .\" - .\" bash_builtins, strip all but Built-Ins section - .if \n(zZ=1 .ig zZ - .if \n(zY=1 .ig zY --.TH BASH 1 "2005 Aug 27" "GNU Bash-3.1-beta1" -+.TH BASH 1 "2005 Dec 28" "GNU Bash-3.1" - .\" - .\" There's some problem with having a `@' - .\" in a tagged paragraph with the BSD man macros. -@@ -677,8 +677,8 @@ - .B nocasematch - is enabled, the match is performed without regard to the case - of alphabetic characters. --The return value is 0 if the string matches or does not match --the pattern, respectively, and 1 otherwise. -+The return value is 0 if the string matches (\fB==\fP) or does not match -+(\fB!=\fP) the pattern, and 1 otherwise. - Any part of the pattern may be quoted to force it to be matched as a - string. - .if t .sp 0.5 -@@ -807,6 +807,12 @@ - as for pathname expansion (see - .B Pathname Expansion - below). -+The \fIword\fP is expanded using tilde -+expansion, parameter and variable expansion, arithmetic substituion, -+command substitution, process substitution and quote removal. -+Each \fIpattern\fP examined is expanded using tilde -+expansion, parameter and variable expansion, arithmetic substituion, -+command substitution, and process substitution. - If the shell option - .B nocasematch - is enabled, the match is performed without regard to the case -@@ -8484,7 +8490,7 @@ - returns true if any of the arguments are found, false if - none are found. - .TP --\fBulimit\fP [\fB\-SHacdflmnpstuv\fP [\fIlimit\fP]] -+\fBulimit\fP [\fB\-SHacdfilmnpqstuvx\fP [\fIlimit\fP]] - Provides control over the resources available to the shell and to - processes started by it, on systems that allow such control. - The \fB\-H\fP and \fB\-S\fP options specify that the hard or soft limit is -@@ -8523,6 +8529,9 @@ - .B \-f - The maximum size of files created by the shell - .TP -+.B \-i -+The maximum number of pending signals -+.TP - .B \-l - The maximum size that may be locked into memory - .TP -@@ -8536,6 +8545,9 @@ - .B \-p - The pipe size in 512-byte blocks (this may not be set) - .TP -+.B \-q -+The maximum number of bytes in POSIX message queues -+.TP - .B \-s - The maximum stack size - .TP -@@ -8547,6 +8559,9 @@ - .TP - .B \-v - The maximum amount of virtual memory available to the shell -+.TP -+.B \-x -+The maximum number of file locks - .PD - .PP - If -diff -Naur bash-3.1.orig/doc/bashref.texi bash-3.1/doc/bashref.texi ---- bash-3.1.orig/doc/bashref.texi 2005-10-03 12:07:21.000000000 -0700 -+++ bash-3.1/doc/bashref.texi 2006-04-19 15:58:34.000000000 -0700 -@@ -961,8 +961,8 @@ - (see the description of @code{shopt} in @ref{Bash Builtins}) - is enabled, the match is performed without regard to the case - of alphabetic characters. --The return value is 0 if the string matches or does not match --the pattern, respectively, and 1 otherwise. -+The return value is 0 if the string matches (@samp{==}) or does not -+match (@samp{!=})the pattern, and 1 otherwise. - Any part of the pattern may be quoted to force it to be matched as a - string. - -@@ -2598,7 +2598,7 @@ - Builtin commands are necessary to implement functionality impossible - or inconvenient to obtain with separate utilities. - --This section briefly the builtins which Bash inherits from -+This section briefly describes the builtins which Bash inherits from - the Bourne Shell, as well as the builtin commands which are unique - to or have been extended in Bash. - -@@ -3833,7 +3833,7 @@ - @item ulimit - @btindex ulimit - @example --ulimit [-acdflmnpstuvSH] [@var{limit}] -+ulimit [-acdfilmnpqstuvxSH] [@var{limit}] - @end example - @code{ulimit} provides control over the resources available to processes - started by the shell, on systems that allow such control. If an -@@ -3857,6 +3857,9 @@ - @item -f - The maximum size of files created by the shell. - -+@item -i -+The maximum number of pending signals. -+ - @item -l - The maximum size that may be locked into memory. - -@@ -3869,6 +3872,9 @@ - @item -p - The pipe buffer size. - -+@item -q -+The maximum number of bytes in POSIX message queues. -+ - @item -s - The maximum stack size. - -@@ -3881,6 +3887,9 @@ - @item -v - The maximum amount of virtual memory available to the process. - -+@item -x -+The maximum number of file locks. -+ - @end table - - If @var{limit} is given, it is the new value of the specified resource; -@@ -4089,8 +4098,8 @@ - Print shell input lines as they are read. - - @item -x --Print a trace of simple commands, \fBfor\fP commands, \fBcase\fP --commands, \fBselect\fP commands, and arithmetic \fBfor\fP commands -+Print a trace of simple commands, @code{for} commands, @code{case} -+commands, @code{select} commands, and arithmetic @code{for} commands - and their arguments or associated word lists after they are - expanded and before they are executed. The value of the @env{PS4} - variable is expanded and the resultant value is printed before -diff -Naur bash-3.1.orig/doc/version.texi bash-3.1/doc/version.texi ---- bash-3.1.orig/doc/version.texi 2005-09-20 11:52:56.000000000 -0700 -+++ bash-3.1/doc/version.texi 2006-04-19 15:58:34.000000000 -0700 -@@ -2,9 +2,9 @@ - Copyright (C) 1988-2005 Free Software Foundation, Inc. - @end ignore - --@set LASTCHANGE Mon Sep 5 11:47:04 EDT 2005 -+@set LASTCHANGE Fri Dec 30 10:50:51 EST 2005 - --@set EDITION 3.1-beta1 --@set VERSION 3.1-beta1 --@set UPDATED 5 September 2005 --@set UPDATED-MONTH September 2005 -+@set EDITION 3.1 -+@set VERSION 3.1 -+@set UPDATED 30 December 2005 -+@set UPDATED-MONTH December 2005 -diff -Naur bash-3.1.orig/jobs.c bash-3.1/jobs.c ---- bash-3.1.orig/jobs.c 2005-11-11 20:13:27.000000000 -0800 -+++ bash-3.1/jobs.c 2006-04-19 15:58:34.000000000 -0700 -@@ -619,8 +619,11 @@ - * once in the parent and once in each child. This is where - * the parent gives it away. - * -+ * Don't give the terminal away if this shell is an asynchronous -+ * subshell. -+ * - */ -- if (job_control && newjob->pgrp) -+ if (job_control && newjob->pgrp && (subshell_environment&SUBSHELL_ASYNC) == 0) - give_terminal_to (newjob->pgrp, 0); - } - } -@@ -844,9 +847,10 @@ - realloc_jobs_list () - { - sigset_t set, oset; -- int nsize, i, j; -+ int nsize, i, j, ncur, nprev; - JOB **nlist; - -+ ncur = nprev = NO_JOB; - nsize = ((js.j_njobs + JOB_SLOTS - 1) / JOB_SLOTS); - nsize *= JOB_SLOTS; - i = js.j_njobs % JOB_SLOTS; -@@ -854,17 +858,51 @@ - nsize += JOB_SLOTS; - - BLOCK_CHILD (set, oset); -- nlist = (JOB **) xmalloc (nsize * sizeof (JOB *)); -+ nlist = (js.j_jobslots == nsize) ? jobs : (JOB **) xmalloc (nsize * sizeof (JOB *)); -+ - for (i = j = 0; i < js.j_jobslots; i++) - if (jobs[i]) -- nlist[j++] = jobs[i]; -+ { -+ if (i == js.j_current) -+ ncur = j; -+ if (i == js.j_previous) -+ nprev = j; -+ nlist[j++] = jobs[i]; -+ } -+ -+#if defined (DEBUG) -+ itrace ("realloc_jobs_list: resize jobs list from %d to %d", js.j_jobslots, nsize); -+ itrace ("realloc_jobs_list: j_lastj changed from %d to %d", js.j_lastj, (j > 0) ? j - 1 : 0); -+ itrace ("realloc_jobs_list: j_njobs changed from %d to %d", js.j_njobs, (j > 0) ? j - 1 : 0); -+#endif - - js.j_firstj = 0; -- js.j_lastj = (j > 0) ? j - 1: 0; -+ js.j_lastj = (j > 0) ? j - 1 : 0; -+ js.j_njobs = j; - js.j_jobslots = nsize; - -- free (jobs); -- jobs = nlist; -+ /* Zero out remaining slots in new jobs list */ -+ for ( ; j < nsize; j++) -+ nlist[j] = (JOB *)NULL; -+ -+ if (jobs != nlist) -+ { -+ free (jobs); -+ jobs = nlist; -+ } -+ -+ if (ncur != NO_JOB) -+ js.j_current = ncur; -+ if (nprev != NO_JOB) -+ js.j_previous = nprev; -+ -+ /* Need to reset these */ -+ if (js.j_current == NO_JOB || js.j_previous == NO_JOB || js.j_current > js.j_lastj || js.j_previous > js.j_lastj) -+ reset_current (); -+ -+#ifdef DEBUG -+ itrace ("realloc_jobs_list: reset js.j_current (%d) and js.j_previous (%d)", js.j_current, js.j_previous); -+#endif - - UNBLOCK_CHILD (oset); - } -@@ -1655,7 +1693,7 @@ - In this case, we don't want to give the terminal to the - shell's process group (we could be in the middle of a - pipeline, for example). */ -- if (async_p == 0 && pipeline_pgrp != shell_pgrp) -+ if (async_p == 0 && pipeline_pgrp != shell_pgrp && ((subshell_environment&SUBSHELL_ASYNC) == 0)) - give_terminal_to (pipeline_pgrp, 0); - - #if defined (PGRP_PIPE) -@@ -2198,7 +2236,11 @@ - /* This is possibly a race condition -- should it go in stop_pipeline? */ - wait_sigint_received = 0; - if (job_control == 0) -- old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); -+ { -+ old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); -+ if (old_sigint_handler == SIG_IGN) -+ set_signal_handler (SIGINT, old_sigint_handler); -+ } - - termination_state = last_command_exit_value; - -diff -Naur bash-3.1.orig/lib/glob/glob.c bash-3.1/lib/glob/glob.c ---- bash-3.1.orig/lib/glob/glob.c 2005-03-24 09:42:27.000000000 -0800 -+++ bash-3.1/lib/glob/glob.c 2006-04-19 15:58:34.000000000 -0700 -@@ -360,6 +360,7 @@ - count = lose = skip = 0; - - firstmalloc = 0; -+ nalloca = 0; - - /* If PAT is empty, skip the loop, but return one (empty) filename. */ - if (pat == 0 || *pat == '\0') -@@ -546,6 +547,8 @@ - firstmalloc = 0; - tmplink = lastlink; - } -+ else -+ tmplink = 0; - free (lastlink->name); - lastlink = lastlink->next; - FREE (tmplink); -diff -Naur bash-3.1.orig/lib/glob/sm_loop.c bash-3.1/lib/glob/sm_loop.c ---- bash-3.1.orig/lib/glob/sm_loop.c 2005-10-16 18:21:04.000000000 -0700 -+++ bash-3.1/lib/glob/sm_loop.c 2006-04-19 15:58:34.000000000 -0700 -@@ -638,12 +638,13 @@ - CHAR *psub; /* pointer to sub-pattern */ - CHAR *pnext; /* pointer to next sub-pattern */ - CHAR *srest; /* pointer to rest of string */ -- int m1, m2; -+ int m1, m2, xflags; /* xflags = flags passed to recursive matches */ - - #if DEBUG_MATCHING - fprintf(stderr, "extmatch: xc = %c\n", xc); - fprintf(stderr, "extmatch: s = %s; se = %s\n", s, se); - fprintf(stderr, "extmatch: p = %s; pe = %s\n", p, pe); -+fprintf(stderr, "extmatch: flags = %d\n", flags); - #endif - - prest = PATSCAN (p + (*p == L('(')), pe, 0); /* ) */ -@@ -677,8 +678,12 @@ - string matches the rest of the pattern. Also handle - multiple matches of the pattern. */ - if (m1) -- m2 = (GMATCH (srest, se, prest, pe, flags) == 0) || -- (s != srest && GMATCH (srest, se, p - 1, pe, flags) == 0); -+ { -+ /* if srest > s, we are not at start of string */ -+ xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags; -+ m2 = (GMATCH (srest, se, prest, pe, xflags) == 0) || -+ (s != srest && GMATCH (srest, se, p - 1, pe, xflags) == 0); -+ } - if (m1 && m2) - return (0); - } -@@ -704,8 +709,10 @@ - srest = (prest == pe) ? se : s; - for ( ; srest <= se; srest++) - { -+ /* if srest > s, we are not at start of string */ -+ xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags; - if (GMATCH (s, srest, psub, pnext - 1, flags) == 0 && -- GMATCH (srest, se, prest, pe, flags) == 0) -+ GMATCH (srest, se, prest, pe, xflags) == 0) - return (0); - } - if (pnext == prest) -@@ -726,7 +733,9 @@ - if (pnext == prest) - break; - } -- if (m1 == 0 && GMATCH (srest, se, prest, pe, flags) == 0) -+ /* if srest > s, we are not at start of string */ -+ xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags; -+ if (m1 == 0 && GMATCH (srest, se, prest, pe, xflags) == 0) - return (0); - } - return (FNM_NOMATCH); -diff -Naur bash-3.1.orig/lib/readline/display.c bash-3.1/lib/readline/display.c ---- bash-3.1.orig/lib/readline/display.c 2005-11-30 11:05:02.000000000 -0800 -+++ bash-3.1/lib/readline/display.c 2006-04-19 15:58:34.000000000 -0700 -@@ -1983,11 +1983,15 @@ - int pchar; - { - int len; -- char *pmt; -+ char *pmt, *p; - - rl_save_prompt (); - -- if (saved_local_prompt == 0) -+ /* We've saved the prompt, and can do anything with the various prompt -+ strings we need before they're restored. We want the unexpanded -+ portion of the prompt string after any final newline. */ -+ p = rl_prompt ? strrchr (rl_prompt, '\n') : 0; -+ if (p == 0) - { - len = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0; - pmt = (char *)xmalloc (len + 2); -@@ -1998,19 +2002,17 @@ - } - else - { -- len = *saved_local_prompt ? strlen (saved_local_prompt) : 0; -+ p++; -+ len = strlen (p); - pmt = (char *)xmalloc (len + 2); - if (len) -- strcpy (pmt, saved_local_prompt); -+ strcpy (pmt, p); - pmt[len] = pchar; - pmt[len+1] = '\0'; -- local_prompt = savestring (pmt); -- prompt_last_invisible = saved_last_invisible; -- prompt_visible_length = saved_visible_length + 1; -- } -+ } - -+ /* will be overwritten by expand_prompt, called from rl_message */ - prompt_physical_chars = saved_physical_chars + 1; -- - return pmt; - } - -diff -Naur bash-3.1.orig/lib/readline/readline.c bash-3.1/lib/readline/readline.c ---- bash-3.1.orig/lib/readline/readline.c 2005-07-04 19:29:35.000000000 -0700 -+++ bash-3.1/lib/readline/readline.c 2006-04-19 15:58:34.000000000 -0700 -@@ -282,6 +282,7 @@ - { - FREE (rl_prompt); - rl_prompt = prompt ? savestring (prompt) : (char *)NULL; -+ rl_display_prompt = rl_prompt ? rl_prompt : ""; - - rl_visible_prompt_length = rl_expand_prompt (rl_prompt); - return 0; -diff -Naur bash-3.1.orig/lib/readline/terminal.c bash-3.1/lib/readline/terminal.c ---- bash-3.1.orig/lib/readline/terminal.c 2005-11-12 17:46:54.000000000 -0800 -+++ bash-3.1/lib/readline/terminal.c 2006-04-19 15:58:34.000000000 -0700 -@@ -122,7 +122,7 @@ - static char *_rl_visible_bell; - - /* Non-zero means the terminal can auto-wrap lines. */ --int _rl_term_autowrap; -+int _rl_term_autowrap = -1; - - /* Non-zero means that this terminal has a meta key. */ - static int term_has_meta; -@@ -274,6 +274,9 @@ - _rl_set_screen_size (rows, cols) - int rows, cols; - { -+ if (_rl_term_autowrap == -1) -+ _rl_init_terminal_io (rl_terminal_name); -+ - if (rows > 0) - _rl_screenheight = rows; - if (cols > 0) -diff -Naur bash-3.1.orig/parse.y bash-3.1/parse.y ---- bash-3.1.orig/parse.y 2005-11-11 20:14:18.000000000 -0800 -+++ bash-3.1/parse.y 2006-04-19 15:58:34.000000000 -0700 -@@ -2716,6 +2716,7 @@ - #define P_ALLOWESC 0x02 - #define P_DQUOTE 0x04 - #define P_COMMAND 0x08 /* parsing a command, so look for comments */ -+#define P_BACKQUOTE 0x10 /* parsing a backquoted command substitution */ - - static char matched_pair_error; - static char * -@@ -2725,12 +2726,12 @@ - int *lenp, flags; - { - int count, ch, was_dollar, in_comment, check_comment; -- int pass_next_character, nestlen, ttranslen, start_lineno; -+ int pass_next_character, backq_backslash, nestlen, ttranslen, start_lineno; - char *ret, *nestret, *ttrans; - int retind, retsize, rflags; - - count = 1; -- pass_next_character = was_dollar = in_comment = 0; -+ pass_next_character = backq_backslash = was_dollar = in_comment = 0; - check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; - - /* RFLAGS is the set of flags we want to pass to recursive calls. */ -@@ -2742,11 +2743,8 @@ - start_lineno = line_number; - while (count) - { --#if 0 -- ch = shell_getc ((qc != '\'' || (flags & P_ALLOWESC)) && pass_next_character == 0); --#else -- ch = shell_getc (qc != '\'' && pass_next_character == 0); --#endif -+ ch = shell_getc (qc != '\'' && pass_next_character == 0 && backq_backslash == 0); -+ - if (ch == EOF) - { - free (ret); -@@ -2771,9 +2769,16 @@ - continue; - } - /* Not exactly right yet */ -- else if (check_comment && in_comment == 0 && ch == '#' && (retind == 0 || ret[retind-1] == '\n' || whitespace (ret[retind -1]))) -+ else if MBTEST(check_comment && in_comment == 0 && ch == '#' && (retind == 0 || ret[retind-1] == '\n' || whitespace (ret[retind - 1]))) - in_comment = 1; - -+ /* last char was backslash inside backquoted command substitution */ -+ if (backq_backslash) -+ { -+ backq_backslash = 0; -+ /* Placeholder for adding special characters */ -+ } -+ - if (pass_next_character) /* last char was backslash */ - { - pass_next_character = 0; -@@ -2814,6 +2819,8 @@ - { - if MBTEST((flags & P_ALLOWESC) && ch == '\\') - pass_next_character++; -+ else if MBTEST((flags & P_BACKQUOTE) && ch == '\\') -+ backq_backslash++; - continue; - } - -@@ -2898,7 +2905,11 @@ - } - else if MBTEST(qc == '`' && (ch == '"' || ch == '\'') && in_comment == 0) - { -- nestret = parse_matched_pair (0, ch, ch, &nestlen, rflags); -+ /* Add P_BACKQUOTE so backslash quotes the next character and -+ shell_getc does the right thing with \. We do this for -+ a measure of backwards compatibility -- it's not strictly the -+ right POSIX thing. */ -+ nestret = parse_matched_pair (0, ch, ch, &nestlen, rflags|P_BACKQUOTE); - goto add_nestret; - } - else if MBTEST(was_dollar && (ch == '(' || ch == '{' || ch == '[')) /* ) } ] */ -@@ -2907,7 +2918,7 @@ - if (open == ch) /* undo previous increment */ - count--; - if (ch == '(') /* ) */ -- nestret = parse_matched_pair (0, '(', ')', &nestlen, rflags); -+ nestret = parse_matched_pair (0, '(', ')', &nestlen, rflags & ~P_DQUOTE); - else if (ch == '{') /* } */ - nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|rflags); - else if (ch == '[') /* ] */ -@@ -3578,7 +3589,7 @@ - FREE (ttok); - all_digit_token = 0; - compound_assignment = 1; --#if 0 -+#if 1 - goto next_character; - #else - goto got_token; /* ksh93 seems to do this */ -@@ -3695,7 +3706,9 @@ - struct builtin *b; - b = builtin_address_internal (token, 0); - if (b && (b->flags & ASSIGNMENT_BUILTIN)) -- parser_state |= PST_ASSIGNOK; -+ parser_state |= PST_ASSIGNOK; -+ else if (STREQ (token, "eval") || STREQ (token, "let")) -+ parser_state |= PST_ASSIGNOK; - } - - yylval.word = the_word; -@@ -4686,18 +4699,21 @@ - int *retlenp; - { - WORD_LIST *wl, *rl; -- int tok, orig_line_number, orig_token_size; -+ int tok, orig_line_number, orig_token_size, orig_last_token, assignok; - char *saved_token, *ret; - - saved_token = token; - orig_token_size = token_buffer_size; - orig_line_number = line_number; -+ orig_last_token = last_read_token; - - last_read_token = WORD; /* WORD to allow reserved words here */ - - token = (char *)NULL; - token_buffer_size = 0; - -+ assignok = parser_state&PST_ASSIGNOK; /* XXX */ -+ - wl = (WORD_LIST *)NULL; /* ( */ - parser_state |= PST_COMPASSIGN; - -@@ -4740,7 +4756,7 @@ - jump_to_top_level (DISCARD); - } - -- last_read_token = WORD; -+ last_read_token = orig_last_token; /* XXX - was WORD? */ - if (wl) - { - rl = REVERSE_LIST (wl, WORD_LIST *); -@@ -4752,6 +4768,10 @@ - - if (retlenp) - *retlenp = (ret && *ret) ? strlen (ret) : 0; -+ -+ if (assignok) -+ parser_state |= PST_ASSIGNOK; -+ - return ret; - } - -diff -Naur bash-3.1.orig/patchlevel.h bash-3.1/patchlevel.h ---- bash-3.1.orig/patchlevel.h 2005-07-20 10:58:20.000000000 -0700 -+++ bash-3.1/patchlevel.h 2006-04-19 15:59:29.000000000 -0700 -@@ -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 17 - - #endif /* _PATCHLEVEL_H_ */ -diff -Naur bash-3.1.orig/subst.c bash-3.1/subst.c ---- bash-3.1.orig/subst.c 2005-10-24 06:51:13.000000000 -0700 -+++ bash-3.1/subst.c 2006-04-19 15:59:29.000000000 -0700 -@@ -2187,7 +2187,7 @@ - if (mklocal && variable_context) - { - v = find_variable (name); -- if (v == 0 || array_p (v) == 0) -+ if (v == 0 || array_p (v) == 0 || v->context != variable_context) - v = make_local_array_variable (name); - v = assign_array_var_from_string (v, value, flags); - } -@@ -2575,6 +2575,13 @@ - return (expand_string_to_string_internal (string, quoted, expand_string_assignment)); - } - -+char * -+expand_arith_string (string, quoted) -+ char *string; -+{ -+ return (expand_string_if_necessary (string, quoted, expand_string)); -+} -+ - #if defined (COND_COMMAND) - /* Just remove backslashes in STRING. Returns a new string. */ - char * -@@ -5248,7 +5255,7 @@ - else - t = (char *)0; - -- temp1 = expand_string_if_necessary (substr, Q_DOUBLE_QUOTES, expand_string); -+ temp1 = expand_arith_string (substr, Q_DOUBLE_QUOTES); - *e1p = evalexp (temp1, &expok); - free (temp1); - if (expok == 0) -@@ -5293,7 +5300,7 @@ - { - t++; - temp2 = savestring (t); -- temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string); -+ temp1 = expand_arith_string (temp2, Q_DOUBLE_QUOTES); - free (temp2); - t[-1] = ':'; - *e2p = evalexp (temp1, &expok); -@@ -6435,7 +6442,7 @@ - temp2[t_index] = '\0'; - - /* Expand variables found inside the expression. */ -- temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string); -+ temp1 = expand_arith_string (temp2, Q_DOUBLE_QUOTES); - free (temp2); - - arithsub: -@@ -6477,7 +6484,7 @@ - zindex = t_index; - - /* Do initial variable expansion. */ -- temp1 = expand_string_if_necessary (temp, Q_DOUBLE_QUOTES, expand_string); -+ temp1 = expand_arith_string (temp, Q_DOUBLE_QUOTES); - - goto arithsub; - -@@ -6795,6 +6802,12 @@ - if (temp && *temp && t_index > 0) - { - temp1 = bash_tilde_expand (temp, tflag); -+ if (temp1 && *temp1 == '~' && STREQ (temp, temp1)) -+ { -+ FREE (temp); -+ FREE (temp1); -+ goto add_character; /* tilde expansion failed */ -+ } - free (temp); - temp = temp1; - sindex += t_index; -diff -Naur bash-3.1.orig/subst.h bash-3.1/subst.h ---- bash-3.1.orig/subst.h 2004-11-07 12:12:28.000000000 -0800 -+++ bash-3.1/subst.h 2006-04-19 15:59:29.000000000 -0700 -@@ -151,6 +151,9 @@ - extern char *expand_string_unsplit_to_string __P((char *, int)); - extern char *expand_assignment_string_to_string __P((char *, int)); - -+/* Expand an arithmetic expression string */ -+extern char *expand_arith_string __P((char *, int)); -+ - /* De-quoted quoted characters in STRING. */ - extern char *dequote_string __P((char *)); - -diff -Naur bash-3.1.orig/variables.c bash-3.1/variables.c ---- bash-3.1.orig/variables.c 2005-11-12 18:22:37.000000000 -0800 -+++ bash-3.1/variables.c 2006-04-19 15:58:34.000000000 -0700 -@@ -860,9 +860,11 @@ - { - char val[INT_STRLEN_BOUND(int) + 1], *v; - -+#if defined (READLINE) - /* If we are currently assigning to LINES or COLUMNS, don't do anything. */ - if (winsize_assignment) - return; -+#endif - - v = inttostr (lines, val, sizeof (val)); - bind_variable ("LINES", v, 0); diff --git a/src/patches/bash-3.1-login.patch b/src/patches/bash-3.1-login.patch deleted file mode 100644 index 8e950baa56..0000000000 --- a/src/patches/bash-3.1-login.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- bash-3.1/shell.c.login 2006-01-13 16:52:14.000000000 +0000 -+++ bash-3.1/shell.c 2006-01-13 16:52:15.000000000 +0000 -@@ -1543,9 +1543,10 @@ - any startup files; just try to be more like /bin/sh. */ - shell_name = argv0 ? base_pathname (argv0) : PROGRAM; - -- if (*shell_name == '-') -+ if (argv0 && *argv0 == '-') - { -- shell_name++; -+ if (*shell_name == '-') -+ shell_name++; - login_shell++; - } - diff --git a/src/patches/bash/bash32-001 b/src/patches/bash/bash32-001 new file mode 100644 index 0000000000..b7d1f1e079 --- /dev/null +++ b/src/patches/bash/bash32-001 @@ -0,0 +1,47 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-001 + +Bug-Reported-by: Greg Schafer +Bug-Reference-ID: <20061012084940.GA15768@tigers.local> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00046.html + +Bug-Description: + +When using historical ``-style command substitution, bash incorrectly attempts +to interpret shell comments while scanning for the closing backquote. + +Patch: + +*** ../bash-3.2/parse.y Tue Sep 19 16:37:21 2006 +--- parse.y Thu Oct 12 10:30:57 2006 +*************** +*** 2736,2740 **** + count = 1; + pass_next_character = backq_backslash = was_dollar = in_comment = 0; +! check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; + + /* RFLAGS is the set of flags we want to pass to recursive calls. */ +--- 2736,2740 ---- + count = 1; + pass_next_character = backq_backslash = was_dollar = in_comment = 0; +! check_comment = (flags & P_COMMAND) && qc != '`' && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; + + /* RFLAGS is the set of flags we want to pass to recursive calls. */ +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 0 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-002 b/src/patches/bash/bash32-002 new file mode 100644 index 0000000000..b934df9fa0 --- /dev/null +++ b/src/patches/bash/bash32-002 @@ -0,0 +1,48 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-002 + +Bug-Reported-by: Jim Gifford +Bug-Reference-ID: <12j2pc3aq35mb04@corp.supernews.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00082.html + +Bug-Description: + +An incorrect encoding specification in the Content-Type header causes msgfmt +to fail, which causes `make install' to fail. + +Patch: + +*** ../bash-3.2/po/ru.po Tue Jan 10 17:51:03 2006 +--- po/ru.po Mon Oct 16 15:13:23 2006 +*************** +*** 13,17 **** + "Language-Team: Russian \n" + "MIME-Version: 1.0\n" +! "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +--- 13,17 ---- + "Language-Team: Russian \n" + "MIME-Version: 1.0\n" +! "Content-Type: text/plain; charset=KOI8-R\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-003 b/src/patches/bash/bash32-003 new file mode 100644 index 0000000000..922041b4ac --- /dev/null +++ b/src/patches/bash/bash32-003 @@ -0,0 +1,147 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-003 + +Bug-Reported-by: John Gatewood Ham +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00045.html + +Bug-Description: + +When using the conditional command's `=~' operator to match regular +expressions, the parser did not skip over shell metacharacters in the +regular expression, leading to syntax errors. + +Patch: + +*** ../bash-3.2-patched/parse.y Tue Oct 17 11:45:20 2006 +--- parse.y Sat Oct 14 14:56:16 2006 +*************** +*** 1029,1034 **** +--- 1029,1035 ---- + #define PST_CMDTOKEN 0x1000 /* command token OK - unused */ + #define PST_COMPASSIGN 0x2000 /* parsing x=(...) compound assignment */ + #define PST_ASSIGNOK 0x4000 /* assignment statement ok in this context */ ++ #define PST_REGEXP 0x8000 /* parsing an ERE/BRE as a single word */ + + /* Initial size to allocate for tokens, and the + amount to grow them by. */ +*************** +*** 2591,2596 **** +--- 2592,2600 ---- + return (character); + } + ++ if (parser_state & PST_REGEXP) ++ goto tokword; ++ + /* Shell meta-characters. */ + if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0)) + { +*************** +*** 2698,2703 **** +--- 2702,2708 ---- + if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND)) + return (character); + ++ tokword: + /* Okay, if we got this far, we have to read a word. Read one, + and then check it against the known ones. */ + result = read_token_word (character); +*************** +*** 3202,3209 **** + if (tok == WORD && test_binop (yylval.word->word)) + op = yylval.word; + #if defined (COND_REGEXP) +! else if (tok == WORD && STREQ (yylval.word->word,"=~")) +! op = yylval.word; + #endif + else if (tok == '<' || tok == '>') + op = make_word_from_token (tok); /* ( */ +--- 3207,3217 ---- + if (tok == WORD && test_binop (yylval.word->word)) + op = yylval.word; + #if defined (COND_REGEXP) +! else if (tok == WORD && STREQ (yylval.word->word, "=~")) +! { +! op = yylval.word; +! parser_state |= PST_REGEXP; +! } + #endif + else if (tok == '<' || tok == '>') + op = make_word_from_token (tok); /* ( */ +*************** +*** 3234,3239 **** +--- 3242,3248 ---- + + /* rhs */ + tok = read_token (READ); ++ parser_state &= ~PST_REGEXP; + if (tok == WORD) + { + tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL); +*************** +*** 3419,3427 **** + goto next_character; + } + + #ifdef EXTENDED_GLOB + /* Parse a ksh-style extended pattern matching specification. */ +! if (extended_glob && PATTERN_CHAR (character)) + { + peek_char = shell_getc (1); + if MBTEST(peek_char == '(') /* ) */ +--- 3428,3461 ---- + goto next_character; + } + ++ #ifdef COND_REGEXP ++ /* When parsing a regexp as a single word inside a conditional command, ++ we need to special-case characters special to both the shell and ++ regular expressions. Right now, that is only '(' and '|'. */ /*)*/ ++ if MBTEST((parser_state & PST_REGEXP) && (character == '(' || character == '|')) /*)*/ ++ { ++ if (character == '|') ++ goto got_character; ++ ++ push_delimiter (dstack, character); ++ ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0); ++ pop_delimiter (dstack); ++ if (ttok == &matched_pair_error) ++ return -1; /* Bail immediately. */ ++ RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2, ++ token_buffer_size, TOKEN_DEFAULT_GROW_SIZE); ++ token[token_index++] = character; ++ strcpy (token + token_index, ttok); ++ token_index += ttoklen; ++ FREE (ttok); ++ dollar_present = all_digit_token = 0; ++ goto next_character; ++ } ++ #endif /* COND_REGEXP */ ++ + #ifdef EXTENDED_GLOB + /* Parse a ksh-style extended pattern matching specification. */ +! if MBTEST(extended_glob && PATTERN_CHAR (character)) + { + peek_char = shell_getc (1); + if MBTEST(peek_char == '(') /* ) */ + +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ + diff --git a/src/patches/bash/bash32-004 b/src/patches/bash/bash32-004 new file mode 100644 index 0000000000..cd2accfa3f --- /dev/null +++ b/src/patches/bash/bash32-004 @@ -0,0 +1,96 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-004 + +Bug-Reported-by: Stuart Shelton +Bug-Reference-ID: <619141e40610261203y6cda5aa6i23cb24c7aeba996e@mail.gmail.com> +Bug-Reference-URL: + +Bug-Description: + +A bug in the parameter pattern substitution implementation treated a pattern +whose first character was `/' (after expansion) as specifying global +replacement. + +Patch: + +*** ../bash-3.2/subst.c Tue Sep 19 08:35:09 2006 +--- subst.c Thu Oct 26 09:17:50 2006 +*************** +*** 5707,5712 **** +--- 5707,5717 ---- + vtype &= ~VT_STARSUB; + + mflags = 0; ++ if (patsub && *patsub == '/') ++ { ++ mflags |= MATCH_GLOBREP; ++ patsub++; ++ } + + /* Malloc this because expand_string_if_necessary or one of the expansion + functions in its call chain may free it on a substitution error. */ +*************** +*** 5741,5753 **** + } + + /* ksh93 doesn't allow the match specifier to be a part of the expanded +! pattern. This is an extension. */ + p = pat; +! if (pat && pat[0] == '/') +! { +! mflags |= MATCH_GLOBREP|MATCH_ANY; +! p++; +! } + else if (pat && pat[0] == '#') + { + mflags |= MATCH_BEG; +--- 5746,5757 ---- + } + + /* ksh93 doesn't allow the match specifier to be a part of the expanded +! pattern. This is an extension. Make sure we don't anchor the pattern +! at the beginning or end of the string if we're doing global replacement, +! though. */ + p = pat; +! if (mflags & MATCH_GLOBREP) +! mflags |= MATCH_ANY; + else if (pat && pat[0] == '#') + { + mflags |= MATCH_BEG; +*** ../bash-3.2/tests/new-exp.right Thu Aug 10 12:00:00 2006 +--- tests/new-exp.right Sun Oct 29 16:03:36 2006 +*************** +*** 430,436 **** + Case06---1---A B C::--- + Case07---3---A:B:C--- + Case08---3---A:B:C--- +! ./new-exp.tests: line 506: /${$(($#-1))}: bad substitution + argv[1] = + argv[2] = + argv[3] = +--- 430,436 ---- + Case06---1---A B C::--- + Case07---3---A:B:C--- + Case08---3---A:B:C--- +! ./new-exp.tests: line 506: ${$(($#-1))}: bad substitution + argv[1] = + argv[2] = + argv[3] = +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-005 b/src/patches/bash/bash32-005 new file mode 100644 index 0000000000..903ec58403 --- /dev/null +++ b/src/patches/bash/bash32-005 @@ -0,0 +1,223 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-005 + +Bug-Reported-by: Stuart Shelton +Bug-Reference-ID: <453F7CC8.6030907@openobjects.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00127.html + +Bug-Description: + +A missing extern declaration for `asprintf' caused `double' arguments to be +passed as `0', leading to incorrect results. Additionally, a bug in the +replacement asprintf/snprintf function caused an infinite loop when passed +0 arguments to the floating point conversions under some circumstances. + +Patch: + +*** ../bash-3.2/builtins/printf.def Mon Sep 18 08:48:42 2006 +--- builtins/printf.def Tue Oct 31 08:19:44 2006 +*************** +*** 49,54 **** +--- 49,60 ---- + # define INT_MIN (-2147483647-1) + #endif + ++ #if defined (PREFER_STDARG) ++ # include ++ #else ++ # include ++ #endif ++ + #include + #include + +*************** +*** 151,156 **** +--- 157,166 ---- + #define SKIP1 "#'-+ 0" + #define LENMODS "hjlLtz" + ++ #ifndef HAVE_ASPRINTF ++ extern int asprintf __P((char **, const char *, ...)) __attribute__((__format__ (printf, 2, 3))); ++ #endif ++ + static void printf_erange __P((char *)); + static int printstr __P((char *, char *, int, int, int)); + static int tescape __P((char *, char *, int *)); + + +*** ../bash-3.2/lib/sh/snprintf.c Thu Apr 6 09:48:40 2006 +--- lib/sh/snprintf.c Sat Oct 28 00:00:13 2006 +*************** +*** 471,476 **** +--- 476,483 ---- + 10^x ~= r + * log_10(200) = 2; + * log_10(250) = 2; ++ * ++ * NOTE: do not call this with r == 0 -- an infinite loop results. + */ + static int + log_10(r) +*************** +*** 576,583 **** + { + integral_part[0] = '0'; + integral_part[1] = '\0'; +! fraction_part[0] = '0'; +! fraction_part[1] = '\0'; + if (fract) + *fract = fraction_part; + return integral_part; +--- 583,593 ---- + { + integral_part[0] = '0'; + integral_part[1] = '\0'; +! /* The fractional part has to take the precision into account */ +! for (ch = 0; ch < precision-1; ch++) +! fraction_part[ch] = '0'; +! fraction_part[ch] = '0'; +! fraction_part[ch+1] = '\0'; + if (fract) + *fract = fraction_part; + return integral_part; +*************** +*** 805,810 **** +--- 815,821 ---- + PUT_CHAR(*tmp, p); + tmp++; + } ++ + PAD_LEFT(p); + } + +*************** +*** 972,982 **** + if ((p->flags & PF_THOUSANDS) && grouping && (t = groupnum (tmp))) + tmp = t; + + /* calculate the padding. 1 for the dot */ + p->width = p->width - + ((d > 0. && p->justify == RIGHT) ? 1:0) - + ((p->flags & PF_SPACE) ? 1:0) - +! strlen(tmp) - p->precision - 1; + PAD_RIGHT(p); + PUT_PLUS(d, p, 0.); + PUT_SPACE(d, p, 0.); +--- 983,1003 ---- + if ((p->flags & PF_THOUSANDS) && grouping && (t = groupnum (tmp))) + tmp = t; + ++ if ((*p->pf == 'g' || *p->pf == 'G') && (p->flags & PF_ALTFORM) == 0) ++ { ++ /* smash the trailing zeros unless altform */ ++ for (i = strlen(tmp2) - 1; i >= 0 && tmp2[i] == '0'; i--) ++ tmp2[i] = '\0'; ++ if (tmp2[0] == '\0') ++ p->precision = 0; ++ } ++ + /* calculate the padding. 1 for the dot */ + p->width = p->width - + ((d > 0. && p->justify == RIGHT) ? 1:0) - + ((p->flags & PF_SPACE) ? 1:0) - +! strlen(tmp) - p->precision - +! ((p->precision != 0 || (p->flags & PF_ALTFORM)) ? 1 : 0); /* radix char */ + PAD_RIGHT(p); + PUT_PLUS(d, p, 0.); + PUT_SPACE(d, p, 0.); +*************** +*** 991,1001 **** + if (p->precision != 0 || (p->flags & PF_ALTFORM)) + PUT_CHAR(decpoint, p); /* put the '.' */ + +- if ((*p->pf == 'g' || *p->pf == 'G') && (p->flags & PF_ALTFORM) == 0) +- /* smash the trailing zeros unless altform */ +- for (i = strlen(tmp2) - 1; i >= 0 && tmp2[i] == '0'; i--) +- tmp2[i] = '\0'; +- + for (; *tmp2; tmp2++) + PUT_CHAR(*tmp2, p); /* the fraction */ + +--- 1012,1017 ---- +*************** +*** 1011,1024 **** + char *tmp, *tmp2; + int j, i; + +! if (chkinfnan(p, d, 1) || chkinfnan(p, d, 2)) + return; /* already printed nan or inf */ + + GETLOCALEDATA(decpoint, thoussep, grouping); + DEF_PREC(p); +! j = log_10(d); +! d = d / pow_10(j); /* get the Mantissa */ +! d = ROUND(d, p); + tmp = dtoa(d, p->precision, &tmp2); + + /* 1 for unit, 1 for the '.', 1 for 'e|E', +--- 1027,1045 ---- + char *tmp, *tmp2; + int j, i; + +! if (d != 0 && (chkinfnan(p, d, 1) || chkinfnan(p, d, 2))) + return; /* already printed nan or inf */ + + GETLOCALEDATA(decpoint, thoussep, grouping); + DEF_PREC(p); +! if (d == 0.) +! j = 0; +! else +! { +! j = log_10(d); +! d = d / pow_10(j); /* get the Mantissa */ +! d = ROUND(d, p); +! } + tmp = dtoa(d, p->precision, &tmp2); + + /* 1 for unit, 1 for the '.', 1 for 'e|E', +*************** +*** 1076,1081 **** +--- 1097,1103 ---- + PUT_CHAR(*tmp, p); + tmp++; + } ++ + PAD_LEFT(p); + } + #endif +*************** +*** 1358,1364 **** + STAR_ARGS(data); + DEF_PREC(data); + d = GETDOUBLE(data); +! i = log_10(d); + /* + * for '%g|%G' ANSI: use f if exponent + * is in the range or [-4,p] exclusively +--- 1380,1386 ---- + STAR_ARGS(data); + DEF_PREC(data); + d = GETDOUBLE(data); +! i = (d != 0.) ? log_10(d) : -1; + /* + * for '%g|%G' ANSI: use f if exponent + * is in the range or [-4,p] exclusively +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-006 b/src/patches/bash/bash32-006 new file mode 100644 index 0000000000..589db9e598 --- /dev/null +++ b/src/patches/bash/bash32-006 @@ -0,0 +1,45 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-006 + +Bug-Reported-by: ebb9@byu.net +Bug-Reference-ID: <45540862.9030900@byu.net> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00017.html + http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00016.html + +Bug-Description: + +In some cases, code that is intended to be used in the presence of multibyte +characters is called when no such characters are present, leading to incorrect +display position calculations and incorrect redisplay. + +Patch: + +*** ../bash-3.2-patched/lib/readline/display.c Thu Sep 14 14:20:12 2006 +--- lib/readline/display.c Mon Nov 13 17:55:57 2006 +*************** +*** 2381,2384 **** +--- 2409,2414 ---- + if (end <= start) + return 0; ++ if (MB_CUR_MAX == 1 || rl_byte_oriented) ++ return (end - start); + + memset (&ps, 0, sizeof (mbstate_t)); +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 6 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-007 b/src/patches/bash/bash32-007 new file mode 100644 index 0000000000..9b86f4af74 --- /dev/null +++ b/src/patches/bash/bash32-007 @@ -0,0 +1,55 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-007 + +Bug-Reported-by: jidanni@jidanni.org +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00039.html + +Bug-Description: + +When removing the current or previous job from the jobs list, bash incorrectly +resets the current job under some circumstances. + +Patch: + +*** ../bash-3.2-patched/jobs.c Sat Jul 29 16:40:48 2006 +--- jobs.c Fri Nov 24 14:50:01 2006 +*************** +*** 985,990 **** + if (temp == 0) + return; +- if (job_index == js.j_current || job_index == js.j_previous) +- reset_current (); + + if ((dflags & DEL_NOBGPID) == 0) +--- 985,988 ---- +*************** +*** 1029,1032 **** +--- 1027,1033 ---- + else if (jobs[js.j_firstj] == 0 || jobs[js.j_lastj] == 0) + reset_job_indices (); ++ ++ if (job_index == js.j_current || job_index == js.j_previous) ++ reset_current (); + } + +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 6 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 7 + + #endif /* _PATCHLEVEL_H_ */ + + diff --git a/src/patches/bash/bash32-008 b/src/patches/bash/bash32-008 new file mode 100644 index 0000000000..7ec07ffe66 --- /dev/null +++ b/src/patches/bash/bash32-008 @@ -0,0 +1,48 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-008 + +Bug-Reported-by: Linda Walsh +Bug-Reference-ID: <456041FD.8000605@tlinx.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00040.html + +Bug-Description: + +When checking pathnames from the command hash table (e.g., when the `checkhash' +shell option is enabled), a bug causes bash to delete and re-lookup each +command. + +Patch: + +*** ../bash-3.2-patched/findcmd.c Wed Aug 17 16:49:54 2005 +--- findcmd.c Fri Nov 24 10:48:37 2006 +*************** +*** 309,313 **** + { + st = file_status (hashed_file); +! if ((st ^ (FS_EXISTS | FS_EXECABLE)) != 0) + { + phash_remove (pathname); +--- 309,313 ---- + { + st = file_status (hashed_file); +! if ((st & (FS_EXISTS|FS_EXECABLE)) != (FS_EXISTS|FS_EXECABLE)) + { + phash_remove (pathname); +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 7 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 8 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-009 b/src/patches/bash/bash32-009 new file mode 100644 index 0000000000..9cfd16e948 --- /dev/null +++ b/src/patches/bash/bash32-009 @@ -0,0 +1,61 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-009 + +Bug-Reported-by: James.M.Botte@lowes.com +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-12/msg00000.html + +Bug-Description: + +When using its built-in replacement for snprintf/asprintf, bash does not +treat the %x, %X, and %o format specifiers as unsigned numbers. + +Patch: + +*** ../bash-3.2-patched/lib/sh/snprintf.c Mon Nov 13 08:58:52 2006 +--- lib/sh/snprintf.c Wed Dec 6 11:15:04 2006 +*************** +*** 669,673 **** + + sd = d; /* signed for ' ' padding in base 10 */ +! flags = (*p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; + if (*p->pf == 'X') + flags |= FL_HEXUPPER; +--- 674,679 ---- + + sd = d; /* signed for ' ' padding in base 10 */ +! flags = 0; +! flags = (*p->pf == 'x' || *p->pf == 'X' || *p->pf == 'o' || *p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; + if (*p->pf == 'X') + flags |= FL_HEXUPPER; +*************** +*** 739,743 **** + + sd = d; /* signed for ' ' padding in base 10 */ +! flags = (*p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; + if (*p->pf == 'X') + flags |= FL_HEXUPPER; +--- 745,749 ---- + + sd = d; /* signed for ' ' padding in base 10 */ +! flags = (*p->pf == 'x' || *p->pf == 'X' || *p->pf == 'o' || *p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; + if (*p->pf == 'X') + flags |= FL_HEXUPPER; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 8 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 9 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-010 b/src/patches/bash/bash32-010 new file mode 100644 index 0000000000..88de5758f4 --- /dev/null +++ b/src/patches/bash/bash32-010 @@ -0,0 +1,207 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-010 + +Bug-Reported-by: Ryan Waldron +Bug-Reference-ID: <20070119065603.546D011E9C@kansas.erebor.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-01/msg00059.html + +Bug-Description: + +The glibc implementation of regcomp/regexec does not allow backslashes to +escape "ordinary" pattern characters when matching. Bash used backslashes +to quote all characters when the pattern argument to the [[ special +command's =~ operator was quoted. This caused the match to fail on Linux +and other systems using GNU libc. + +Patch: + +*** ../bash-3.2.9/pathexp.h Sat Feb 19 17:23:18 2005 +--- pathexp.h Wed Jan 31 22:53:16 2007 +*************** +*** 1,5 **** + /* pathexp.h -- The shell interface to the globbing library. */ + +! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +--- 1,5 ---- + /* pathexp.h -- The shell interface to the globbing library. */ + +! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +*************** +*** 33,36 **** +--- 33,37 ---- + #define QGLOB_CVTNULL 0x01 /* convert QUOTED_NULL strings to '\0' */ + #define QGLOB_FILENAME 0x02 /* do correct quoting for matching filenames */ ++ #define QGLOB_REGEXP 0x04 /* quote an ERE for regcomp/regexec */ + + #if defined (EXTENDED_GLOB) +*** ../bash-3.2.9/pathexp.c Mon May 6 13:43:05 2002 +--- pathexp.c Mon Feb 26 16:59:23 2007 +*************** +*** 1,5 **** + /* pathexp.c -- The shell interface to the globbing library. */ + +! /* Copyright (C) 1995-2002 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +--- 1,5 ---- + /* pathexp.c -- The shell interface to the globbing library. */ + +! /* Copyright (C) 1995-2007 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +*************** +*** 111,114 **** +--- 111,141 ---- + } + ++ /* Return 1 if C is a character that is `special' in a POSIX ERE and needs to ++ be quoted to match itself. */ ++ static inline int ++ ere_char (c) ++ int c; ++ { ++ switch (c) ++ { ++ case '.': ++ case '[': ++ case '\\': ++ case '(': ++ case ')': ++ case '*': ++ case '+': ++ case '?': ++ case '{': ++ case '|': ++ case '^': ++ case '$': ++ return 1; ++ default: ++ return 0; ++ } ++ return (0); ++ } ++ + /* PATHNAME can contain characters prefixed by CTLESC; this indicates + that the character is to be quoted. We quote it here in the style +*************** +*** 143,146 **** +--- 170,175 ---- + if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/') + continue; ++ if ((qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0) ++ continue; + temp[j++] = '\\'; + i++; +*** ../bash-3.2.9/subst.c Tue Nov 7 16:14:41 2006 +--- subst.c Wed Jan 31 23:09:58 2007 +*************** +*** 5,9 **** + beauty, but, hey, you're alright.'' */ + +! /* Copyright (C) 1987-2006 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +--- 5,9 ---- + beauty, but, hey, you're alright.'' */ + +! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +*************** +*** 2647,2655 **** + /* This needs better error handling. */ + /* Expand W for use as an argument to a unary or binary operator in a +! [[...]] expression. If SPECIAL is nonzero, this is the rhs argument + to the != or == operator, and should be treated as a pattern. In +! this case, we quote the string specially for the globbing code. The +! caller is responsible for removing the backslashes if the unquoted +! words is needed later. */ + char * + cond_expand_word (w, special) +--- 2647,2656 ---- + /* This needs better error handling. */ + /* Expand W for use as an argument to a unary or binary operator in a +! [[...]] expression. If SPECIAL is 1, this is the rhs argument + to the != or == operator, and should be treated as a pattern. In +! this case, we quote the string specially for the globbing code. If +! SPECIAL is 2, this is an rhs argument for the =~ operator, and should +! be quoted appropriately for regcomp/regexec. The caller is responsible +! for removing the backslashes if the unquoted word is needed later. */ + char * + cond_expand_word (w, special) +*************** +*** 2659,2662 **** +--- 2660,2664 ---- + char *r, *p; + WORD_LIST *l; ++ int qflags; + + if (w->word == 0 || w->word[0] == '\0') +*************** +*** 2673,2678 **** + else + { + p = string_list (l); +! r = quote_string_for_globbing (p, QGLOB_CVTNULL); + free (p); + } +--- 2675,2683 ---- + else + { ++ qflags = QGLOB_CVTNULL; ++ if (special == 2) ++ qflags |= QGLOB_REGEXP; + p = string_list (l); +! r = quote_string_for_globbing (p, qflags); + free (p); + } +*** ../bash-3.2.9/execute_cmd.c Sat Aug 26 00:23:17 2006 +--- execute_cmd.c Wed Jan 31 23:12:06 2007 +*************** +*** 1,5 **** + /* execute_cmd.c -- Execute a COMMAND structure. */ + +! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +--- 1,5 ---- + /* execute_cmd.c -- Execute a COMMAND structure. */ + +! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +*************** +*** 2547,2551 **** + if (arg1 == 0) + arg1 = nullstr; +! arg2 = cond_expand_word (cond->right->op, patmatch||rmatch); + if (arg2 == 0) + arg2 = nullstr; +--- 2547,2551 ---- + if (arg1 == 0) + arg1 = nullstr; +! arg2 = cond_expand_word (cond->right->op, rmatch ? 2 : (patmatch ? 1 : 0)); + if (arg2 == 0) + arg2 = nullstr; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 9 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 10 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-011 b/src/patches/bash/bash32-011 new file mode 100644 index 0000000000..c021f52f8a --- /dev/null +++ b/src/patches/bash/bash32-011 @@ -0,0 +1,138 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-011 + +Bug-Reported-by: Petr Sumbera +Bug-Reference-ID: <45AF5F4B.1020800@sun.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-01/msg00049.html + +Bug-Description: + +Under certain circumstances (loopback mounts), the bash getcwd does not +return correct results. This patch allows the use of the Solaris libc +getcwd even though it doesn't dynamically allocate memory. + +Run `touch configure' to make sure make doesn't try to run autoconf. +Then run configure with whatever options you like. + +Patch: + +*** ../bash-3.2-patched/configure.in Tue Sep 26 11:05:45 2006 +--- configure.in Wed Jan 31 09:48:00 2007 +*************** +*** 6,10 **** + dnl Process this file with autoconf to produce a configure script. + +! # Copyright (C) 1987-2006 Free Software Foundation, Inc. + + # This program is free software; you can redistribute it and/or modify +--- 6,10 ---- + dnl Process this file with autoconf to produce a configure script. + +! # Copyright (C) 1987-2007 Free Software Foundation, Inc. + + # This program is free software; you can redistribute it and/or modify +*************** +*** 992,996 **** + sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; + sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; +! solaris2.5*) LOCAL_CFLAGS=-DSunOS5 ;; + lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; + linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading +--- 992,997 ---- + sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; + sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; +! solaris2.5*) LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;; +! solaris2*) LOCAL_CFLAGS=-DSOLARIS ;; + lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; + linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading +*** ../bash-3.2-patched/config-bot.h Tue Sep 12 16:43:04 2006 +--- config-bot.h Tue Mar 6 10:41:31 2007 +*************** +*** 2,6 **** + /* modify settings or make new ones based on what autoconf tells us. */ + +! /* Copyright (C) 1989-2002 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +--- 2,6 ---- + /* modify settings or make new ones based on what autoconf tells us. */ + +! /* Copyright (C) 1989-2007 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +*************** +*** 71,77 **** + #endif + +! /* If we have a getcwd(3), but it calls popen(), #undef HAVE_GETCWD so +! the replacement in getcwd.c will be built. */ +! #if defined (HAVE_GETCWD) && defined (GETCWD_BROKEN) + # undef HAVE_GETCWD + #endif +--- 71,79 ---- + #endif + +! /* If we have a getcwd(3), but one that does not dynamically allocate memory, +! #undef HAVE_GETCWD so the replacement in getcwd.c will be built. We do +! not do this on Solaris, because their implementation of loopback mounts +! breaks the traditional file system assumptions that getcwd uses. */ +! #if defined (HAVE_GETCWD) && defined (GETCWD_BROKEN) && !defined (SOLARIS) + # undef HAVE_GETCWD + #endif +*** ../bash-3.2-patched/builtins/common.c Thu Jul 27 09:39:51 2006 +--- builtins/common.c Tue Mar 6 10:43:27 2007 +*************** +*** 1,3 **** +! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +--- 1,3 ---- +! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +*************** +*** 476,480 **** +--- 476,484 ---- + if (the_current_working_directory == 0) + { ++ #if defined (GETCWD_BROKEN) ++ the_current_working_directory = getcwd (0, PATH_MAX); ++ #else + the_current_working_directory = getcwd (0, 0); ++ #endif + if (the_current_working_directory == 0) + { +*** ../bash-3.2-patched/configure Tue Sep 26 11:06:01 2006 +--- configure Tue Mar 6 10:59:20 2007 +*************** +*** 27317,27321 **** + sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; + sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; +! solaris2.5*) LOCAL_CFLAGS=-DSunOS5 ;; + lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; + linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading +--- 27317,27322 ---- + sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; + sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; +! solaris2.5*) LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;; +! solaris2*) LOCAL_CFLAGS=-DSOLARIS ;; + lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; + linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 10 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 11 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-012 b/src/patches/bash/bash32-012 new file mode 100644 index 0000000000..8d669d27c4 --- /dev/null +++ b/src/patches/bash/bash32-012 @@ -0,0 +1,96 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-012 + +Bug-Reported-by: John Wyman +Bug-Reference-ID: <5E7DEFC094C35044B87FAE761D9F0EE20143A3B7@exchange2k.celink.com> +Bug-Reference-URL: + +Bug-Description: + +Some systems (AIX 4.x) don't implement the PRI_xxx macros correctly, +causing syntax errors when attempting to compile bash on those systems. +This patch adds support for the PRI_MACROS_BROKEN define. + +You will need to re-run `configure' after applying the patch. Run +`touch configure' so make doesn't try to run autoconf. + +Patch: + +*** ../bash-3.2.11/config.h.in Tue Sep 12 16:00:54 2006 +--- config.h.in Tue Mar 6 11:17:55 2007 +*************** +*** 1,5 **** + /* config.h -- Configuration file for bash. */ + +! /* Copyright (C) 1987-2006 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +--- 1,5 ---- + /* config.h -- Configuration file for bash. */ + +! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +*************** +*** 414,417 **** +--- 414,419 ---- + #undef HAVE_DECL_STRTOLD + ++ #undef PRI_MACROS_BROKEN ++ + #undef STRTOLD_BROKEN + +*************** +*** 1007,1010 **** +--- 1009,1015 ---- + #undef HAVE_DCGETTEXT + ++ /* Define if you have the `localeconv' function. */ ++ #undef HAVE_LOCALECONV ++ + /* Define if your system has a working `malloc' function. */ + /* #undef HAVE_MALLOC */ +*** ../bash-3.2.11/builtins/printf.def Mon Nov 13 08:58:52 2006 +--- builtins/printf.def Sun Feb 4 13:58:59 2007 +*************** +*** 2,6 **** + It implements the builtin "printf" in Bash. + +! Copyright (C) 1997-2005 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +--- 2,6 ---- + It implements the builtin "printf" in Bash. + +! Copyright (C) 1997-2007 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +*************** +*** 71,74 **** +--- 71,78 ---- + #include "common.h" + ++ #if defined (PRI_MACROS_BROKEN) ++ # undef PRIdMAX ++ #endif ++ + #if !defined (PRIdMAX) + # if HAVE_LONG_LONG +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 11 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 12 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-013 b/src/patches/bash/bash32-013 new file mode 100644 index 0000000000..d47bc1a5f3 --- /dev/null +++ b/src/patches/bash/bash32-013 @@ -0,0 +1,65 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-013 + +Bug-Reported-by: Magnus Svensson +Bug-Reference-ID: <45BDC44D.80609@mysql.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html + +Bug-Description: + +Readline neglects to reallocate the array it uses to keep track of wrapped +screen lines when increasing its size. This will eventually result in +segmentation faults when given sufficiently long input. + +Patch: + +*** ../bash-3.2-patched/lib/readline/display.c Thu Sep 14 14:20:12 2006 +--- lib/readline/display.c Fri Feb 2 20:23:17 2007 +*************** +*** 561,574 **** +--- 561,586 ---- + wrap_offset = prompt_invis_chars_first_line = 0; + } + ++ #if defined (HANDLE_MULTIBYTE) + #define CHECK_INV_LBREAKS() \ + do { \ + if (newlines >= (inv_lbsize - 2)) \ + { \ + inv_lbsize *= 2; \ + inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ ++ _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ + } \ + } while (0) ++ #else ++ #define CHECK_INV_LBREAKS() \ ++ do { \ ++ if (newlines >= (inv_lbsize - 2)) \ ++ { \ ++ inv_lbsize *= 2; \ ++ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ ++ } \ ++ } while (0) ++ #endif /* HANDLE_MULTIBYTE */ + + #if defined (HANDLE_MULTIBYTE) + #define CHECK_LPOS() \ + +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 12 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 13 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-014 b/src/patches/bash/bash32-014 new file mode 100644 index 0000000000..b706505b70 --- /dev/null +++ b/src/patches/bash/bash32-014 @@ -0,0 +1,307 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-014 + +Bug-Reported-by: Brett Stahlman +Bug-Reference-ID: <000701c72d29$a227e0e0$5ec7cf47@computerroom> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-12/msg00065.html + +Bug-Description: + +Bash mishandles word splitting under certain circumstances when IFS is +null (IFS=). Constructs affected include ${param/pat/sub} and others +when expanding arrays (array[@]). + +Patch: + +*** ../bash-3.2-patched/array.c Wed Jun 1 16:39:22 2005 +--- array.c Mon Jan 15 22:58:00 2007 +*************** +*** 121,125 **** + } + +- #ifdef INCLUDE_UNUSED + /* + * Make and return a new array composed of the elements in array A from +--- 121,124 ---- +*************** +*** 142,146 **** + n = array_create_element (element_index(p), element_value(p)); + ADD_BEFORE(a->head, n); +! mi = element_index(ae); + } + a->num_elements = i; +--- 141,145 ---- + n = array_create_element (element_index(p), element_value(p)); + ADD_BEFORE(a->head, n); +! mi = element_index(n); + } + a->num_elements = i; +*************** +*** 148,152 **** + return a; + } +- #endif + + /* +--- 147,150 ---- +*************** +*** 301,304 **** +--- 299,319 ---- + } + ++ ARRAY * ++ array_quote_escapes(array) ++ ARRAY *array; ++ { ++ ARRAY_ELEMENT *a; ++ char *t; ++ ++ if (array == 0 || array_head(array) == 0 || array_empty(array)) ++ return (ARRAY *)NULL; ++ for (a = element_forw(array->head); a != array->head; a = element_forw(a)) { ++ t = quote_escapes (a->value); ++ FREE(a->value); ++ a->value = t; ++ } ++ return array; ++ } ++ + /* + * Return a string whose elements are the members of array A beginning at +*************** +*** 312,318 **** + int starsub, quoted; + { + ARRAY_ELEMENT *h, *p; + arrayind_t i; +! char *ifs, sep[2]; + + p = a ? array_head (a) : 0; +--- 327,334 ---- + int starsub, quoted; + { ++ ARRAY *a2; + ARRAY_ELEMENT *h, *p; + arrayind_t i; +! char *ifs, sep[2], *t; + + p = a ? array_head (a) : 0; +*************** +*** 337,340 **** +--- 353,363 ---- + ; + ++ a2 = array_slice(a, h, p); ++ ++ if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) ++ array_quote(a2); ++ else ++ array_quote_escapes(a2); ++ + if (starsub && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) { + ifs = getifs(); +*************** +*** 344,348 **** + sep[1] = '\0'; + +! return (array_to_string_internal (h, p, sep, quoted)); + } + +--- 367,374 ---- + sep[1] = '\0'; + +! t = array_to_string (a2, sep, 0); +! array_dispose(a2); +! +! return t; + } + +*************** +*** 368,372 **** + + if (mflags & MATCH_QUOTED) +! array_quote (a2); + if (mflags & MATCH_STARSUB) { + ifs = getifs(); +--- 394,400 ---- + + if (mflags & MATCH_QUOTED) +! array_quote(a2); +! else +! array_quote_escapes(a2); + if (mflags & MATCH_STARSUB) { + ifs = getifs(); +*** ../bash-3.2-patched/array.h Sun Jun 1 15:50:30 2003 +--- array.h Mon Jan 15 22:35:35 2007 +*************** +*** 56,59 **** +--- 56,60 ---- + extern int array_shift_element __P((ARRAY *, char *)); + extern ARRAY *array_quote __P((ARRAY *)); ++ extern ARRAY *array_quote_escapes __P((ARRAY *)); + + extern char *array_subrange __P((ARRAY *, arrayind_t, arrayind_t, int, int)); +*** ../bash-3.2-patched/subst.c Fri Mar 2 16:20:50 2007 +--- subst.c Tue Mar 6 11:40:55 2007 +*************** +*** 1888,1892 **** +--- 1889,1899 ---- + #endif + ++ /* XXX -- why call quote_list if ifs == 0? we can get away without doing ++ it now that quote_escapes quotes spaces */ ++ #if 0 + tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0)) ++ #else ++ tlist = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ++ #endif + ? quote_list (list) + : list_quote_escapes (list); +*************** +*** 2922,2926 **** + /* Quote escape characters in string s, but no other characters. This is + used to protect CTLESC and CTLNUL in variable values from the rest of +! the word expansion process after the variable is expanded. */ + char * + quote_escapes (string) +--- 2935,2944 ---- + /* Quote escape characters in string s, but no other characters. This is + used to protect CTLESC and CTLNUL in variable values from the rest of +! the word expansion process after the variable is expanded. If IFS is +! null, we quote spaces as well, just in case we split on spaces later +! (in the case of unquoted $@, we will eventually attempt to split the +! entire word on spaces). Corresponding code exists in dequote_escapes. +! Even if we don't end up splitting on spaces, quoting spaces is not a +! problem. */ + char * + quote_escapes (string) +*************** +*** 2930,2933 **** +--- 2948,2952 ---- + size_t slen; + char *result, *send; ++ int quote_spaces; + DECLARE_MBSTATE; + +*************** +*** 2935,2938 **** +--- 2954,2958 ---- + send = string + slen; + ++ quote_spaces = (ifs_value && *ifs_value == 0); + t = result = (char *)xmalloc ((slen * 2) + 1); + s = string; +*************** +*** 2940,2944 **** + while (*s) + { +! if (*s == CTLESC || *s == CTLNUL) + *t++ = CTLESC; + COPY_CHAR_P (t, s, send); +--- 2960,2964 ---- + while (*s) + { +! if (*s == CTLESC || *s == CTLNUL || (quote_spaces && *s == ' ')) + *t++ = CTLESC; + COPY_CHAR_P (t, s, send); +*************** +*** 2982,2985 **** +--- 3002,3006 ---- + size_t slen; + char *result, *send; ++ int quote_spaces; + DECLARE_MBSTATE; + +*************** +*** 2996,3002 **** + return (strcpy (result, s)); + + while (*s) + { +! if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL)) + { + s++; +--- 3017,3024 ---- + return (strcpy (result, s)); + ++ quote_spaces = (ifs_value && *ifs_value == 0); + while (*s) + { +! if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL || (quote_spaces && s[1] == ' '))) + { + s++; +*************** +*** 4462,4466 **** + RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE); + +! if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || c == CTLESC || c == CTLNUL) + istring[istring_index++] = CTLESC; + +--- 4498,4510 ---- + RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE); + +! /* This is essentially quote_string inline */ +! if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) /* || c == CTLESC || c == CTLNUL */) +! istring[istring_index++] = CTLESC; +! /* Escape CTLESC and CTLNUL in the output to protect those characters +! from the rest of the word expansions (word splitting and globbing.) +! This is essentially quote_escapes inline. */ +! else if (c == CTLESC) +! istring[istring_index++] = CTLESC; +! else if (c == CTLNUL || (c == ' ' && (ifs_value && *ifs_value == 0))) + istring[istring_index++] = CTLESC; + +*************** +*** 5552,5555 **** +--- 5610,5616 ---- + rely on array_subrange to understand how to deal with them). */ + tt = array_subrange (array_cell (v), e1, e2, starsub, quoted); ++ #if 0 ++ /* array_subrange now calls array_quote_escapes as appropriate, so the ++ caller no longer needs to. */ + if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0) + { +*************** +*** 5558,5561 **** +--- 5619,5623 ---- + } + else ++ #endif + temp = tt; + break; +*************** +*** 5808,5811 **** +--- 5870,5876 ---- + case VT_ARRAYVAR: + temp = array_patsub (array_cell (v), p, rep, mflags); ++ #if 0 ++ /* Don't need to do this anymore; array_patsub calls array_quote_escapes ++ as appropriate before adding the space separators. */ + if (temp && (mflags & MATCH_QUOTED) == 0) + { +*************** +*** 5814,5817 **** +--- 5879,5883 ---- + temp = tt; + } ++ #endif + break; + #endif +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 13 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 14 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-015 b/src/patches/bash/bash32-015 new file mode 100644 index 0000000000..d887f6e563 --- /dev/null +++ b/src/patches/bash/bash32-015 @@ -0,0 +1,95 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-015 + +Bug-Reported-by: +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +Under certain circumstances, when using FIFOs for process substitution, +bash fails to unlink the FIFOs. This leaves open file descriptors that +can cause the shell to hang and litters the file system. + +Patch: + +*** ../bash-3.2-patched/execute_cmd.c Fri Mar 2 16:20:50 2007 +--- execute_cmd.c Wed Jan 31 23:12:06 2007 +*************** +*** 3051,3054 **** +--- 3051,3059 ---- + command_line = savestring (the_printed_command_except_trap); + ++ #if defined (PROCESS_SUBSTITUTION) ++ if ((subshell_environment & SUBSHELL_COMSUB) && (simple_command->flags & CMD_NO_FORK) && fifos_pending() > 0) ++ simple_command->flags &= ~CMD_NO_FORK; ++ #endif ++ + execute_disk_command (words, simple_command->redirects, command_line, + pipe_in, pipe_out, async, fds_to_close, +*** ../bash-3.2-patched/subst.c Fri Mar 2 16:20:50 2007 +--- subst.c Tue Mar 6 11:40:55 2007 +*************** +*** 4129,4132 **** +--- 4151,4160 ---- + } + ++ int ++ fifos_pending () ++ { ++ return nfifo; ++ } ++ + static char * + make_named_pipe () +*************** +*** 4178,4181 **** +--- 4206,4215 ---- + } + ++ int ++ fifos_pending () ++ { ++ return 0; /* used for cleanup; not needed with /dev/fd */ ++ } ++ + void + unlink_fifo_list () +*************** +*** 4671,4674 **** +--- 4719,4725 ---- + last_command_exit_value = rc; + rc = run_exit_trap (); ++ #if defined (PROCESS_SUBSTITUTION) ++ unlink_fifo_list (); ++ #endif + exit (rc); + } +*** ../bash-3.2-patched/subst.h Tue Sep 19 08:34:41 2006 +--- subst.h Wed Jan 10 09:46:47 2007 +*************** +*** 223,226 **** +--- 223,227 ---- + extern char *pat_subst __P((char *, char *, char *, int)); + ++ extern int fifos_pending __P((void)); + extern void unlink_fifo_list __P((void)); + +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 14 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 15 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-016 b/src/patches/bash/bash32-016 new file mode 100644 index 0000000000..a0f065ad39 --- /dev/null +++ b/src/patches/bash/bash32-016 @@ -0,0 +1,52 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-016 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1171795523.8021.18.camel@localhost> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html + +Bug-Description: + +When moving the cursor, bash sometimes misplaces the cursor when the prompt +contains two or more multibyte characters. The particular circumstance that +uncovered the problem was having the (multibyte) current directory name in +the prompt string. + +Patch: + +*** ../bash-3.2/lib/readline/display.c Fri Jan 19 13:34:50 2007 +--- lib/readline/display.c Sat Mar 10 17:25:44 2007 +*************** +*** 1745,1749 **** + { + dpos = _rl_col_width (data, 0, new); +! if (dpos > prompt_last_invisible) /* XXX - don't use woff here */ + { + dpos -= woff; +--- 1745,1752 ---- + { + dpos = _rl_col_width (data, 0, new); +! /* Use NEW when comparing against the last invisible character in the +! prompt string, since they're both buffer indices and DPOS is a +! desired display position. */ +! if (new > prompt_last_invisible) /* XXX - don't use woff here */ + { + dpos -= woff; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 15 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 16 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-017 b/src/patches/bash/bash32-017 new file mode 100644 index 0000000000..99e5e70d2b --- /dev/null +++ b/src/patches/bash/bash32-017 @@ -0,0 +1,85 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-017 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1173636022.7039.36.camel@localhost> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html + +Bug-Description: + +When restoring the original prompt after finishing an incremental search, +bash sometimes places the cursor incorrectly if the primary prompt contains +invisible characters. + +Patch: + +*** ../bash-3.2.16/lib/readline/display.c Fri Apr 20 13:30:16 2007 +--- lib/readline/display.c Fri Apr 20 15:17:01 2007 +*************** +*** 1599,1604 **** + if (temp > 0) + { + _rl_output_some_chars (nfd, temp); +! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; + } + } +--- 1599,1618 ---- + if (temp > 0) + { ++ /* If nfd begins at the prompt, or before the invisible ++ characters in the prompt, we need to adjust _rl_last_c_pos ++ in a multibyte locale to account for the wrap offset and ++ set cpos_adjusted accordingly. */ + _rl_output_some_chars (nfd, temp); +! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) +! { +! _rl_last_c_pos += _rl_col_width (nfd, 0, temp); +! if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) +! { +! _rl_last_c_pos -= wrap_offset; +! cpos_adjusted = 1; +! } +! } +! else +! _rl_last_c_pos += temp; + } + } +*************** +*** 1608,1613 **** +--- 1622,1639 ---- + if (temp > 0) + { ++ /* If nfd begins at the prompt, or before the invisible ++ characters in the prompt, we need to adjust _rl_last_c_pos ++ in a multibyte locale to account for the wrap offset and ++ set cpos_adjusted accordingly. */ + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; /* XXX */ ++ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) ++ { ++ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) ++ { ++ _rl_last_c_pos -= wrap_offset; ++ cpos_adjusted = 1; ++ } ++ } + } + lendiff = (oe - old) - (ne - new); +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 16 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 17 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-018 b/src/patches/bash/bash32-018 new file mode 100644 index 0000000000..d729aaf5e6 --- /dev/null +++ b/src/patches/bash/bash32-018 @@ -0,0 +1,98 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-018 + +Bug-Reported-by: osicka@post.cz +Bug-Reference-ID: <228.177-19682-1132061412-1179356692@post.cz> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-05/msg00061.html + +Bug-Description: + +In certain cases, bash can lose the saved status of a background job, though +it should still be reported by `wait'. Bash can also loop infinitely after +creating and waiting for 4096 jobs. + +Patch: + +*** ../bash-20070510/jobs.c Thu Mar 8 16:05:50 2007 +--- jobs.c Fri May 18 11:40:14 2007 +*************** +*** 784,792 **** + { + old = js.j_firstj++; + while (js.j_firstj != old) + { + if (js.j_firstj >= js.j_jobslots) + js.j_firstj = 0; +! if (jobs[js.j_firstj]) + break; + js.j_firstj++; +--- 784,794 ---- + { + old = js.j_firstj++; ++ if (old >= js.j_jobslots) ++ old = js.j_jobslots - 1; + while (js.j_firstj != old) + { + if (js.j_firstj >= js.j_jobslots) + js.j_firstj = 0; +! if (jobs[js.j_firstj] || js.j_firstj == old) /* needed if old == 0 */ + break; + js.j_firstj++; +*************** +*** 798,806 **** + { + old = js.j_lastj--; + while (js.j_lastj != old) + { + if (js.j_lastj < 0) + js.j_lastj = js.j_jobslots - 1; +! if (jobs[js.j_lastj]) + break; + js.j_lastj--; +--- 800,810 ---- + { + old = js.j_lastj--; ++ if (old < 0) ++ old = 0; + while (js.j_lastj != old) + { + if (js.j_lastj < 0) + js.j_lastj = js.j_jobslots - 1; +! if (jobs[js.j_lastj] || js.j_lastj == old) /* needed if old == js.j_jobslots */ + break; + js.j_lastj--; +*************** +*** 964,968 **** + realloc_jobs_list (); + +! return (js.j_lastj); + } + +--- 975,983 ---- + realloc_jobs_list (); + +! #ifdef DEBUG +! itrace("compact_jobs_list: returning %d", (js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0); +! #endif +! +! return ((js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0); + } + +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 17 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 18 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-019 b/src/patches/bash/bash32-019 new file mode 100644 index 0000000000..647bd1fa38 --- /dev/null +++ b/src/patches/bash/bash32-019 @@ -0,0 +1,343 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-019 + +Bug-Reported-by: Thomas Loeber +Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html + +Bug-Description: + +When rl_read_key returns -1, indicating that bash's controlling terminal +has been invalidated for some reason (e.g., receiving a SIGHUP), the error +status was not reported correctly to the caller. This could cause input +loops. + +Patch: + +*** ../bash-3.2-patched/lib/readline/complete.c Fri Jul 28 11:35:49 2006 +--- lib/readline/complete.c Tue Mar 13 08:50:16 2007 +*************** +*** 429,433 **** + if (c == 'n' || c == 'N' || c == RUBOUT) + return (0); +! if (c == ABORT_CHAR) + _rl_abort_internal (); + if (for_pager && (c == NEWLINE || c == RETURN)) +--- 440,444 ---- + if (c == 'n' || c == 'N' || c == RUBOUT) + return (0); +! if (c == ABORT_CHAR || c < 0) + _rl_abort_internal (); + if (for_pager && (c == NEWLINE || c == RETURN)) +*** ../bash-3.2-patched/lib/readline/input.c Wed Aug 16 15:15:16 2006 +--- lib/readline/input.c Wed May 2 16:07:59 2007 +*************** +*** 514,518 **** + int size; + { +! int mb_len = 0; + size_t mbchar_bytes_length; + wchar_t wc; +--- 522,526 ---- + int size; + { +! int mb_len, c; + size_t mbchar_bytes_length; + wchar_t wc; +*************** +*** 521,531 **** + memset(&ps, 0, sizeof (mbstate_t)); + memset(&ps_back, 0, sizeof (mbstate_t)); +! + while (mb_len < size) + { + RL_SETSTATE(RL_STATE_MOREINPUT); +! mbchar[mb_len++] = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + + mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); + if (mbchar_bytes_length == (size_t)(-1)) +--- 529,545 ---- + memset(&ps, 0, sizeof (mbstate_t)); + memset(&ps_back, 0, sizeof (mbstate_t)); +! +! mb_len = 0; + while (mb_len < size) + { + RL_SETSTATE(RL_STATE_MOREINPUT); +! c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ break; ++ ++ mbchar[mb_len++] = c; ++ + mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); + if (mbchar_bytes_length == (size_t)(-1)) +*************** +*** 565,569 **** + c = first; + memset (mb, 0, mlen); +! for (i = 0; i < mlen; i++) + { + mb[i] = (char)c; +--- 579,583 ---- + c = first; + memset (mb, 0, mlen); +! for (i = 0; c >= 0 && i < mlen; i++) + { + mb[i] = (char)c; +*** ../bash-3.2-patched/lib/readline/isearch.c Mon Dec 26 17:18:53 2005 +--- lib/readline/isearch.c Fri Mar 9 14:30:59 2007 +*************** +*** 328,333 **** + + f = (rl_command_func_t *)NULL; +! +! /* Translate the keys we do something with to opcodes. */ + if (c >= 0 && _rl_keymap[c].type == ISFUNC) + { +--- 328,340 ---- + + f = (rl_command_func_t *)NULL; +! +! if (c < 0) +! { +! cxt->sflags |= SF_FAILED; +! cxt->history_pos = cxt->last_found_line; +! return -1; +! } +! +! /* Translate the keys we do something with to opcodes. */ + if (c >= 0 && _rl_keymap[c].type == ISFUNC) + { +*** ../bash-3.2-patched/lib/readline/misc.c Mon Dec 26 17:20:46 2005 +--- lib/readline/misc.c Fri Mar 9 14:44:11 2007 +*************** +*** 147,150 **** +--- 147,152 ---- + rl_clear_message (); + RL_UNSETSTATE(RL_STATE_NUMERICARG); ++ if (key < 0) ++ return -1; + return (_rl_dispatch (key, _rl_keymap)); + } +*** ../bash-3.2-patched/lib/readline/readline.c Wed Aug 16 15:00:36 2006 +--- lib/readline/readline.c Fri Mar 9 14:47:24 2007 +*************** +*** 646,649 **** +--- 669,677 ---- + { + nkey = _rl_subseq_getchar (cxt->okey); ++ if (nkey < 0) ++ { ++ _rl_abort_internal (); ++ return -1; ++ } + r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); + cxt->flags |= KSEQ_DISPATCHED; +*** ../bash-3.2-patched/lib/readline/text.c Fri Jul 28 11:55:27 2006 +--- lib/readline/text.c Sun Mar 25 13:41:38 2007 +*************** +*** 858,861 **** +--- 864,870 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ return -1; ++ + #if defined (HANDLE_SIGNALS) + if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) +*************** +*** 1521,1524 **** +--- 1530,1536 ---- + mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); + ++ if (mb_len <= 0) ++ return -1; ++ + if (count < 0) + return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); +*************** +*** 1537,1540 **** +--- 1549,1555 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ return -1; ++ + if (count < 0) + return (_rl_char_search_internal (-count, bdir, c)); +*** ../bash-3.2-patched/lib/readline/vi_mode.c Sat Jul 29 16:42:28 2006 +--- lib/readline/vi_mode.c Fri Mar 9 15:02:11 2007 +*************** +*** 887,890 **** +--- 887,897 ---- + c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); ++ ++ if (c < 0) ++ { ++ *nextkey = 0; ++ return -1; ++ } ++ + *nextkey = c; + +*************** +*** 903,906 **** +--- 910,918 ---- + c = rl_read_key (); /* real command */ + RL_UNSETSTATE(RL_STATE_MOREINPUT); ++ if (c < 0) ++ { ++ *nextkey = 0; ++ return -1; ++ } + *nextkey = c; + } +*************** +*** 1225,1236 **** + _rl_callback_generic_arg *data; + { + #if defined (HANDLE_MULTIBYTE) +! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! _rl_vi_last_search_char = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + #endif + + _rl_callback_func = 0; + _rl_want_redisplay = 1; +--- 1243,1262 ---- + _rl_callback_generic_arg *data; + { ++ int c; + #if defined (HANDLE_MULTIBYTE) +! c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + #endif + ++ if (c <= 0) ++ return -1; ++ ++ #if !defined (HANDLE_MULTIBYTE) ++ _rl_vi_last_search_char = c; ++ #endif ++ + _rl_callback_func = 0; + _rl_want_redisplay = 1; +*************** +*** 1248,1251 **** +--- 1274,1278 ---- + int count, key; + { ++ int c; + #if defined (HANDLE_MULTIBYTE) + static char *target; +*************** +*** 1294,1302 **** + { + #if defined (HANDLE_MULTIBYTE) +! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! _rl_vi_last_search_char = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + #endif + } +--- 1321,1335 ---- + { + #if defined (HANDLE_MULTIBYTE) +! c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); +! if (c <= 0) +! return -1; +! _rl_vi_last_search_mblen = c; + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); ++ if (c < 0) ++ return -1; ++ _rl_vi_last_search_char = c; + #endif + } +*************** +*** 1468,1471 **** +--- 1501,1507 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ return -1; ++ + #if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) +*************** +*** 1486,1489 **** +--- 1522,1528 ---- + _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); + ++ if (c < 0) ++ return -1; ++ + _rl_callback_func = 0; + _rl_want_redisplay = 1; +*************** +*** 1517,1520 **** +--- 1556,1562 ---- + _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); + ++ if (c < 0) ++ return -1; ++ + return (_rl_vi_change_char (count, c, mb)); + } +*************** +*** 1651,1655 **** + RL_UNSETSTATE(RL_STATE_MOREINPUT); + +! if (ch < 'a' || ch > 'z') + { + rl_ding (); +--- 1693,1697 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + +! if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ + { + rl_ding (); +*************** +*** 1703,1707 **** + return 0; + } +! else if (ch < 'a' || ch > 'z') + { + rl_ding (); +--- 1745,1749 ---- + return 0; + } +! else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ + { + rl_ding (); +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 18 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 19 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-020 b/src/patches/bash/bash32-020 new file mode 100644 index 0000000000..8c7e328907 --- /dev/null +++ b/src/patches/bash/bash32-020 @@ -0,0 +1,183 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-020 + +Bug-Reported-by: Ian A Watson +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +In some cases of error processing, a jump back to the top-level processing +loop from a builtin command would leave the shell in an inconsistent state. + +Patch: + +*** ../bash-3.2-patched/sig.c Wed Jan 25 14:57:59 2006 +--- sig.c Sat Mar 10 11:11:30 2007 +*************** +*** 351,354 **** +--- 351,373 ---- + #undef XHANDLER + ++ /* Run some of the cleanups that should be performed when we run ++ jump_to_top_level from a builtin command context. XXX - might want to ++ also call reset_parser here. */ ++ void ++ top_level_cleanup () ++ { ++ /* Clean up string parser environment. */ ++ while (parse_and_execute_level) ++ parse_and_execute_cleanup (); ++ ++ #if defined (PROCESS_SUBSTITUTION) ++ unlink_fifo_list (); ++ #endif /* PROCESS_SUBSTITUTION */ ++ ++ run_unwind_protects (); ++ loop_level = continuing = breaking = 0; ++ return_catch_flag = 0; ++ } ++ + /* What to do when we've been interrupted, and it is safe to handle it. */ + void +*** ../bash-3.2-patched/sig.h Wed Jan 25 14:50:27 2006 +--- sig.h Sat Mar 10 11:14:18 2007 +*************** +*** 122,125 **** +--- 122,126 ---- + extern void initialize_terminating_signals __P((void)); + extern void reset_terminating_signals __P((void)); ++ extern void top_level_cleanup __P((void)); + extern void throw_to_top_level __P((void)); + extern void jump_to_top_level __P((int)) __attribute__((__noreturn__)); +*** ../bash-3.2-patched/builtins/common.c Tue Apr 3 16:47:13 2007 +--- builtins/common.c Mon Apr 30 15:01:33 2007 +*************** +*** 132,135 **** +--- 132,136 ---- + { + builtin_error (_("too many arguments")); ++ top_level_cleanup (); + jump_to_top_level (DISCARD); + } +*************** +*** 396,400 **** + throw_to_top_level (); + else +! jump_to_top_level (DISCARD); + } + no_args (list->next); +--- 410,417 ---- + throw_to_top_level (); + else +! { +! top_level_cleanup (); +! jump_to_top_level (DISCARD); +! } + } + no_args (list->next); +*** ../bash-3.2-patched/subst.c Tue Apr 3 16:47:19 2007 +--- subst.c Tue Jul 17 09:45:11 2007 +*************** +*** 1279,1283 **** + if (no_longjmp_on_fatal_error == 0) + { /* { */ +! report_error ("bad substitution: no closing `%s' in %s", "}", string); + last_command_exit_value = EXECUTION_FAILURE; + exp_jump_to_top_level (DISCARD); +--- 1290,1294 ---- + if (no_longjmp_on_fatal_error == 0) + { /* { */ +! report_error (_("bad substitution: no closing `%s' in %s"), "}", string); + last_command_exit_value = EXECUTION_FAILURE; + exp_jump_to_top_level (DISCARD); +*************** +*** 7662,7665 **** +--- 7706,7711 ---- + expand_no_split_dollar_star = 0; /* XXX */ + expanding_redir = 0; ++ ++ top_level_cleanup (); /* from sig.c */ + + jump_to_top_level (v); +*************** +*** 7880,7884 **** + { + report_error (_("no match: %s"), tlist->word->word); +! jump_to_top_level (DISCARD); + } + else if (allow_null_glob_expansion == 0) +--- 7927,7931 ---- + { + report_error (_("no match: %s"), tlist->word->word); +! exp_jump_to_top_level (DISCARD); + } + else if (allow_null_glob_expansion == 0) +*** ../bash-3.2-patched/arrayfunc.c Thu Jul 27 09:37:59 2006 +--- arrayfunc.c Thu May 31 11:55:46 2007 +*************** +*** 619,622 **** +--- 619,624 ---- + { + last_command_exit_value = EXECUTION_FAILURE; ++ ++ top_level_cleanup (); + jump_to_top_level (DISCARD); + } +*** ../bash-3.2-patched/expr.c Wed Dec 28 17:47:03 2005 +--- expr.c Tue Apr 24 14:17:59 2007 +*************** +*** 930,933 **** +--- 930,934 ---- + { + expr_unwind (); ++ top_level_cleanup (); + jump_to_top_level (DISCARD); + } +*** ../bash-3.2-patched/variables.c Fri Sep 8 13:33:32 2006 +--- variables.c Tue Jul 17 09:54:59 2007 +*************** +*** 1822,1830 **** + lval = evalexp (oval, &expok); /* ksh93 seems to do this */ + if (expok == 0) +! jump_to_top_level (DISCARD); + } + rval = evalexp (value, &expok); + if (expok == 0) +! jump_to_top_level (DISCARD); + if (flags & ASS_APPEND) + rval += lval; +--- 1855,1869 ---- + lval = evalexp (oval, &expok); /* ksh93 seems to do this */ + if (expok == 0) +! { +! top_level_cleanup (); +! jump_to_top_level (DISCARD); +! } + } + rval = evalexp (value, &expok); + if (expok == 0) +! { +! top_level_cleanup (); +! jump_to_top_level (DISCARD); +! } + if (flags & ASS_APPEND) + rval += lval; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 19 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 20 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-021 b/src/patches/bash/bash32-021 new file mode 100644 index 0000000000..003489c6b8 --- /dev/null +++ b/src/patches/bash/bash32-021 @@ -0,0 +1,72 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-021 + +Bug-Reported-by: BAGSHAW Paul RD-TECH-REN +Bug-Reference-ID: <941BA0BF46DB8F4983FF7C8AFE800BC205EA7D4B@ftrdmel3.rd.francetelecom.fr> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00065.html + +Bug-Description: + +When the parser read a backslash-escaped character that would be treated +internally as an escape, it would double the number of escape characters. + +Patch: + +*** ../bash-3.2-patched/parse.y Mon Oct 30 17:22:00 2006 +--- parse.y Sat Mar 24 17:13:20 2007 +*************** +*** 3377,3381 **** + { + pass_next_character = 0; +! goto got_character; + } + +--- 3377,3381 ---- + { + pass_next_character = 0; +! goto got_escaped_character; + } + +*************** +*** 3651,3660 **** + got_character: + +- all_digit_token &= DIGIT (character); +- dollar_present |= character == '$'; +- + if (character == CTLESC || character == CTLNUL) + token[token_index++] = CTLESC; + + token[token_index++] = character; + +--- 3651,3662 ---- + got_character: + + if (character == CTLESC || character == CTLNUL) + token[token_index++] = CTLESC; + ++ got_escaped_character: ++ ++ all_digit_token &= DIGIT (character); ++ dollar_present |= character == '$'; ++ + token[token_index++] = character; + +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 20 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 21 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-022 b/src/patches/bash/bash32-022 new file mode 100644 index 0000000000..d3679e67f5 --- /dev/null +++ b/src/patches/bash/bash32-022 @@ -0,0 +1,126 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-022 + +Bug-Reported-by: Chet Ramey +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +POSIX specifies that the `read' builtin invoked from an interative shell +must prompt with $PS2 when a line is continued using a backslash while +reading from a terminal. + +Patch: + +*** ../bash-3.2-patched/builtins/read.def Tue Sep 19 08:45:48 2006 +--- builtins/read.def Thu May 24 16:03:30 2007 +*************** +*** 128,133 **** + { + register char *varname; +! int size, i, nr, pass_next, saw_escape, eof, opt, retval, code; +! int input_is_tty, input_is_pipe, unbuffered_read; + int raw, edit, nchars, silent, have_timeout, fd; + unsigned int tmout; +--- 131,136 ---- + { + register char *varname; +! int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; +! int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul; + int raw, edit, nchars, silent, have_timeout, fd; + unsigned int tmout; +*************** +*** 135,139 **** + char c; + char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; +! char *e, *t, *t1; + struct stat tsb; + SHELL_VAR *var; +--- 138,142 ---- + char c; + char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; +! char *e, *t, *t1, *ps2; + struct stat tsb; + SHELL_VAR *var; +*************** +*** 149,152 **** +--- 152,156 ---- + USE_VAR(i); + USE_VAR(pass_next); ++ USE_VAR(print_ps2); + USE_VAR(saw_escape); + USE_VAR(input_is_pipe); +*************** +*** 164,167 **** +--- 168,172 ---- + #endif + USE_VAR(list); ++ USE_VAR(ps2); + + i = 0; /* Index into the string that we are reading. */ +*************** +*** 387,391 **** + #endif + +! for (eof = retval = 0;;) + { + #if defined (READLINE) +--- 394,399 ---- + #endif + +! ps2 = 0; +! for (print_ps2 = eof = retval = 0;;) + { + #if defined (READLINE) +*************** +*** 413,416 **** +--- 421,433 ---- + #endif + ++ if (print_ps2) ++ { ++ if (ps2 == 0) ++ ps2 = get_string_value ("PS2"); ++ fprintf (stderr, "%s", ps2 ? ps2 : ""); ++ fflush (stderr); ++ print_ps2 = 0; ++ } ++ + if (unbuffered_read) + retval = zread (fd, &c, 1); +*************** +*** 441,445 **** + pass_next = 0; + if (c == '\n') +! i--; /* back up over the CTLESC */ + else + goto add_char; +--- 458,466 ---- + pass_next = 0; + if (c == '\n') +! { +! i--; /* back up over the CTLESC */ +! if (interactive && input_is_tty && raw == 0) +! print_ps2 = 1; +! } + else + goto add_char; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 21 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 22 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-023 b/src/patches/bash/bash32-023 new file mode 100644 index 0000000000..34a63947fb --- /dev/null +++ b/src/patches/bash/bash32-023 @@ -0,0 +1,51 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-023 + +Bug-Reported-by: Chet Ramey +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +When an error occurs during the pattern removal word expansion, the shell +can free unallocated memory or free memory multiple times. + +Patch: + +*** ../bash-3.2-patched/subst.c Tue Apr 3 16:47:19 2007 +--- subst.c Tue Jul 17 09:45:11 2007 +*************** +*** 3975,3979 **** + patstr++; + +! pattern = getpattern (patstr, quoted, 1); + + temp1 = (char *)NULL; /* shut up gcc */ +--- 4008,4016 ---- + patstr++; + +! /* Need to pass getpattern newly-allocated memory in case of expansion -- +! the expansion code will free the passed string on an error. */ +! temp1 = savestring (patstr); +! pattern = getpattern (temp1, quoted, 1); +! free (temp1); + + temp1 = (char *)NULL; /* shut up gcc */ +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 22 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 23 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-024 b/src/patches/bash/bash32-024 new file mode 100644 index 0000000000..1575f37a90 --- /dev/null +++ b/src/patches/bash/bash32-024 @@ -0,0 +1,77 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-024 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1178376645.9063.25.camel@localhost> +Bug-Reference-URL: http://bugs.gentoo.org/177095 + +Bug-Description: + +The readline display code miscalculated the screen position when performing +a redisplay in which the new text occupies more screen space that the old, +but takes fewer bytes to do so (e.g., when replacing a shorter string +containing multibyte characters with a longer one containing only ASCII). + +Patch: + +*** ../bash-3.2-patched/lib/readline/display.c Thu Apr 26 11:38:22 2007 +--- lib/readline/display.c Thu Jul 12 23:10:10 2007 +*************** +*** 1519,1527 **** + /* Non-zero if we're increasing the number of lines. */ + int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; + /* Sometimes it is cheaper to print the characters rather than + use the terminal's capabilities. If we're growing the number + of lines, make sure we actually cause the new line to wrap + around on auto-wrapping terminals. */ +! if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) + { + /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and +--- 1568,1596 ---- + /* Non-zero if we're increasing the number of lines. */ + int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; ++ /* If col_lendiff is > 0, implying that the new string takes up more ++ screen real estate than the old, but lendiff is < 0, meaning that it ++ takes fewer bytes, we need to just output the characters starting ++ from the first difference. These will overwrite what is on the ++ display, so there's no reason to do a smart update. This can really ++ only happen in a multibyte environment. */ ++ if (lendiff < 0) ++ { ++ _rl_output_some_chars (nfd, temp); ++ _rl_last_c_pos += _rl_col_width (nfd, 0, temp); ++ /* If nfd begins before any invisible characters in the prompt, ++ adjust _rl_last_c_pos to account for wrap_offset and set ++ cpos_adjusted to let the caller know. */ ++ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) ++ { ++ _rl_last_c_pos -= wrap_offset; ++ cpos_adjusted = 1; ++ } ++ return; ++ } + /* Sometimes it is cheaper to print the characters rather than + use the terminal's capabilities. If we're growing the number + of lines, make sure we actually cause the new line to wrap + around on auto-wrapping terminals. */ +! else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) + { + /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 23 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 24 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-025 b/src/patches/bash/bash32-025 new file mode 100644 index 0000000000..4d53d89d73 --- /dev/null +++ b/src/patches/bash/bash32-025 @@ -0,0 +1,79 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-025 + +Bug-Reported-by: Tom Bjorkholm +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html + +Bug-Description: + +An off-by-one error in readline's input buffering caused readline to drop +each 511th character of buffered input (e.g., when pasting a large amount +of data into a terminal window). + +Patch: + +*** ../bash-3.2-patched/lib/readline/input.c Wed Aug 16 15:15:16 2006 +--- lib/readline/input.c Tue Jul 17 09:24:21 2007 +*************** +*** 134,139 **** + + *key = ibuffer[pop_index++]; +! + if (pop_index >= ibuffer_len) + pop_index = 0; + +--- 134,142 ---- + + *key = ibuffer[pop_index++]; +! #if 0 + if (pop_index >= ibuffer_len) ++ #else ++ if (pop_index > ibuffer_len) ++ #endif + pop_index = 0; + +*************** +*** 251,255 **** + { + k = (*rl_getc_function) (rl_instream); +! rl_stuff_char (k); + if (k == NEWLINE || k == RETURN) + break; +--- 254,259 ---- + { + k = (*rl_getc_function) (rl_instream); +! if (rl_stuff_char (k) == 0) +! break; /* some problem; no more room */ + if (k == NEWLINE || k == RETURN) + break; +*************** +*** 374,378 **** +--- 378,386 ---- + } + ibuffer[push_index++] = key; ++ #if 0 + if (push_index >= ibuffer_len) ++ #else ++ if (push_index > ibuffer_len) ++ #endif + push_index = 0; + +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 24 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 25 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-026 b/src/patches/bash/bash32-026 new file mode 100644 index 0000000000..ba7de50a8d --- /dev/null +++ b/src/patches/bash/bash32-026 @@ -0,0 +1,82 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-026 + +Bug-Reported-by: Chet Ramey +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +This keeps the Apple linker from attempting to link bash against Apple's +readline library "replacement" rather than the one shipped with bash. It +extends the configure workaround to Mac OS X Leopard (10.5). + +As a side effect, the patch updates the copyright date displayed in the +version string. + +You must re-run configure after applying the patch, and before rebuilding +bash. + +Patch: + +*** ../bash-3.2-patched/configure.in 2007-03-06 11:07:38.000000000 -0500 +--- configure.in 2007-11-23 15:37:41.000000000 -0500 +*************** +*** 519,523 **** + # dynamic version + case "${host_os}" in +! darwin8*) READLINE_LIB='${READLINE_LIBRARY}' ;; + *) READLINE_LIB=-lreadline ;; + esac +--- 519,523 ---- + # dynamic version + case "${host_os}" in +! darwin[[89]]*) READLINE_LIB='${READLINE_LIBRARY}' ;; + *) READLINE_LIB=-lreadline ;; + esac +*** ../bash-3.2-patched/configure 2007-03-24 14:51:22.000000000 -0400 +--- configure 2007-11-23 15:46:15.000000000 -0500 +*************** +*** 4872,4876 **** + # dynamic version + case "${host_os}" in +! darwin8*) READLINE_LIB='${READLINE_LIBRARY}' ;; + *) READLINE_LIB=-lreadline ;; + esac +--- 4872,4876 ---- + # dynamic version + case "${host_os}" in +! darwin[89]*) READLINE_LIB='${READLINE_LIBRARY}' ;; + *) READLINE_LIB=-lreadline ;; + esac +*** ../bash-3.2-patched/version.c 2005-05-16 11:58:34.000000000 -0400 +--- version.c 2007-11-23 16:03:40.000000000 -0500 +*************** +*** 80,83 **** + printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE); + if (extended) +! printf (_("Copyright (C) 2005 Free Software Foundation, Inc.\n")); + } +--- 80,83 ---- + printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE); + if (extended) +! printf (_("Copyright (C) 2007 Free Software Foundation, Inc.\n")); + } +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 25 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 26 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-027 b/src/patches/bash/bash32-027 new file mode 100644 index 0000000000..5e110cb96f --- /dev/null +++ b/src/patches/bash/bash32-027 @@ -0,0 +1,85 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-027 + +Bug-Reported-by: dAniel hAhler +Bug-Reference-ID: <4702ED8A.5000503@thequod.de> +Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938 + +Bug-Description: + +When updating the display after displaying, for instance, a list of possible +completions, readline will place the cursor at the wrong position if the +prompt contains invisible characters and a newline. + +Patch: + +*** ../bash-3.2.25/lib/readline/display.c Mon Aug 6 14:26:29 2007 +--- lib/readline/display.c Wed Oct 10 22:43:58 2007 +*************** +*** 1049,1053 **** + else + tx = nleft; +! if (_rl_last_c_pos > tx) + { + _rl_backspace (_rl_last_c_pos - tx); /* XXX */ +--- 1049,1053 ---- + else + tx = nleft; +! if (tx >= 0 && _rl_last_c_pos > tx) + { + _rl_backspace (_rl_last_c_pos - tx); /* XXX */ +*************** +*** 1205,1209 **** + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd; + int current_invis_chars; + int col_lendiff, col_temp; +--- 1205,1209 ---- + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd, o_cpos; + int current_invis_chars; + int col_lendiff, col_temp; +*************** +*** 1466,1469 **** +--- 1466,1471 ---- + } + ++ o_cpos = _rl_last_c_pos; ++ + /* When this function returns, _rl_last_c_pos is correct, and an absolute + cursor postion in multibyte mode, but a buffer index when not in a +*************** +*** 1475,1479 **** + invisible characters in the prompt string. Let's see if setting this when + we make sure we're at the end of the drawn prompt string works. */ +! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars) + cpos_adjusted = 1; + #endif +--- 1477,1483 ---- + invisible characters in the prompt string. Let's see if setting this when + we make sure we're at the end of the drawn prompt string works. */ +! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && +! (_rl_last_c_pos > 0 || o_cpos > 0) && +! _rl_last_c_pos == prompt_physical_chars) + cpos_adjusted = 1; + #endif +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 26 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 27 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-028 b/src/patches/bash/bash32-028 new file mode 100644 index 0000000000..e8182948d6 --- /dev/null +++ b/src/patches/bash/bash32-028 @@ -0,0 +1,60 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-028 + +Bug-Reported-by: dAniel hAhler +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +Under some circumstances, readline will incorrectly display a prompt string +containing invisible characters after the final newline. + +Patch: + +*** ../bash-3.2-patched/lib/readline/display.c 2007-08-25 13:47:08.000000000 -0400 +--- lib/readline/display.c 2007-11-10 17:51:29.000000000 -0500 +*************** +*** 392,396 **** + local_prompt = expand_prompt (p, &prompt_visible_length, + &prompt_last_invisible, +! (int *)NULL, + &prompt_physical_chars); + c = *t; *t = '\0'; +--- 420,424 ---- + local_prompt = expand_prompt (p, &prompt_visible_length, + &prompt_last_invisible, +! &prompt_invis_chars_first_line, + &prompt_physical_chars); + c = *t; *t = '\0'; +*************** +*** 399,403 **** + local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, + (int *)NULL, +! &prompt_invis_chars_first_line, + (int *)NULL); + *t = c; +--- 427,431 ---- + local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, + (int *)NULL, +! (int *)NULL, + (int *)NULL); + *t = c; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 27 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 28 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-029 b/src/patches/bash/bash32-029 new file mode 100644 index 0000000000..9de208584f --- /dev/null +++ b/src/patches/bash/bash32-029 @@ -0,0 +1,52 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-029 + +Bug-Reported-by: Tomas Janousek +Bug-Reference-ID: <20071102104034.GA26893@redhat.com> +Bug-Reference-URL: https://bugzilla.redhat.com/show_bug.cgi?id=286861 + +Bug-Description: + +When the bash arithmetic expression evaluator has temporarily turned off +evalation, such as when parsing a pre- or post-decrement or -increment +operator, and an error occurs, evaluation is not re-enabled. + +Patch: + +*** ../bash-3.2-patched/expr.c 2007-08-25 13:47:05.000000000 -0400 +--- expr.c 2007-10-18 08:08:44.000000000 -0400 +*************** +*** 287,290 **** +--- 287,292 ---- + } + free (expr_stack[expr_depth]); /* free the allocated EXPR_CONTEXT */ ++ ++ noeval = 0; /* XXX */ + } + +*************** +*** 320,323 **** +--- 322,326 ---- + + val = 0; ++ noeval = 0; + + FASTCOPY (evalbuf, oevalbuf, sizeof (evalbuf)); +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 28 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 29 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-030 b/src/patches/bash/bash32-030 new file mode 100644 index 0000000000..3f12c2833c --- /dev/null +++ b/src/patches/bash/bash32-030 @@ -0,0 +1,50 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-030 + +Bug-Reported-by: Paul Eggert Andreas Schwab +Bug-Reference-ID: <877il0nu84.fsf_-_@penguin.cs.ucla.edu> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-11/msg00023.html http://lists.gnu.org/archive/html/bug-bash/2007-11/msg00022.htmlhttp://lists.gnu.org/archive/html/bug-bash/2007-11/msg00022.html + +Bug-Description: + +If redirections attached to a compound command fail, bash does not set the +command's exit status correctly. This only happens when the command is the +first in a sequential list. + +Patch: + +*** ../bash-3.2-patched/execute_cmd.c 2007-03-24 14:51:05.000000000 -0400 +--- execute_cmd.c 2007-11-05 22:31:14.000000000 -0500 +*************** +*** 615,619 **** + redirection_undo_list = (REDIRECT *)NULL; + dispose_exec_redirects (); +! return (EXECUTION_FAILURE); + } + +--- 620,624 ---- + redirection_undo_list = (REDIRECT *)NULL; + dispose_exec_redirects (); +! return (last_command_exit_value = EXECUTION_FAILURE); + } + +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 29 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 30 + + #endif /* _PATCHLEVEL_H_ */ + + diff --git a/src/patches/bash/bash32-031 b/src/patches/bash/bash32-031 new file mode 100644 index 0000000000..6c96fb9d0a --- /dev/null +++ b/src/patches/bash/bash32-031 @@ -0,0 +1,62 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-031 + +Bug-Reported-by: Miroslav Lichvar +Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100 +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html + +Bug-Description: + +In certain cases when outputting characters at the end of the line, +e.g., when displaying the prompt string, readline positions the cursor +incorrectly if the prompt string contains invisible characters and the +text being drawn begins before the last invisible character in the line. + +Patch: + +*** ../bash-3.2-patched/lib/readline/display.c 2007-08-25 13:47:08.000000000 -0400 +--- lib/readline/display.c 2007-11-10 17:51:29.000000000 -0500 +*************** +*** 1566,1574 **** + else + { +- /* We have horizontal scrolling and we are not inserting at +- the end. We have invisible characters in this line. This +- is a dumb update. */ + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; + return; + } +--- 1619,1632 ---- + else + { + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; ++ /* If nfd begins before any invisible characters in the prompt, ++ adjust _rl_last_c_pos to account for wrap_offset and set ++ cpos_adjusted to let the caller know. */ ++ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) ++ { ++ _rl_last_c_pos -= wrap_offset; ++ cpos_adjusted = 1; ++ } + return; + } +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 30 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 31 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-032 b/src/patches/bash/bash32-032 new file mode 100644 index 0000000000..5e53e29198 --- /dev/null +++ b/src/patches/bash/bash32-032 @@ -0,0 +1,47 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-032 + +Bug-Reported-by: Uwe Doering +Bug-Reference-ID: <46F3DD72.2090801@geminix.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html + +Bug-Description: + +There is an off-by-one error in the code that buffers characters received +very quickly in succession, causing characters to be dropped. + +Patch: + +*** ../bash-3.2-patched/lib/readline/input.c 2007-08-25 13:47:10.000000000 -0400 +--- lib/readline/input.c 2007-10-12 22:55:25.000000000 -0400 +*************** +*** 155,159 **** + pop_index--; + if (pop_index < 0) +! pop_index = ibuffer_len - 1; + ibuffer[pop_index] = key; + return (1); +--- 155,159 ---- + pop_index--; + if (pop_index < 0) +! pop_index = ibuffer_len; + ibuffer[pop_index] = key; + return (1); +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 31 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 32 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-033 b/src/patches/bash/bash32-033 new file mode 100644 index 0000000000..0d698108ba --- /dev/null +++ b/src/patches/bash/bash32-033 @@ -0,0 +1,88 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-033 + +Bug-Reported-by: Christophe Martin +Bug-Reference-ID: <465ABA4A.3030805@free.fr> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-05/msg00104.html + +Bug-Description: + +References made within a function to an uninitialized local array variable +using the [*] subscript in a double-quoted string can result in spurious +ASCII 127 characters in the expanded value. + +Patch: + +*** ../bash-3.2-patched/arrayfunc.c 2007-08-25 13:47:05.000000000 -0400 +--- arrayfunc.c 2007-05-31 11:55:46.000000000 -0400 +*************** +*** 723,727 **** + { + if (rtype) +! *rtype = 1; + if (allow_all == 0) + { +--- 723,727 ---- + { + if (rtype) +! *rtype = (t[0] == '*') ? 1 : 2; + if (allow_all == 0) + { +*** ../bash-3.2-patched/subst.c 2007-08-25 13:47:08.000000000 -0400 +--- subst.c 2007-11-14 15:43:00.000000000 -0500 +*************** +*** 4908,4915 **** + intmax_t arg_index; + SHELL_VAR *var; +! int atype; + + ret = 0; + temp = 0; + + /* Handle multiple digit arguments, as in ${11}. */ +--- 4973,4981 ---- + intmax_t arg_index; + SHELL_VAR *var; +! int atype, rflags; + + ret = 0; + temp = 0; ++ rflags = 0; + + /* Handle multiple digit arguments, as in ${11}. */ +*************** +*** 4944,4947 **** +--- 5010,5015 ---- + ? quote_string (temp) + : quote_escapes (temp); ++ else if (atype == 1 && temp && QUOTED_NULL (temp) && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) ++ rflags |= W_HASQUOTEDNULL; + } + #endif +*************** +*** 4971,4974 **** +--- 5039,5043 ---- + ret = alloc_word_desc (); + ret->word = temp; ++ ret->flags |= rflags; + } + return ret; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 32 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 33 + + #endif /* _PATCHLEVEL_H_ */ + diff --git a/src/patches/bash/bash32-034 b/src/patches/bash/bash32-034 new file mode 100644 index 0000000000..4f081624b3 --- /dev/null +++ b/src/patches/bash/bash32-034 @@ -0,0 +1,74 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-034 + +Bug-Reported-by: Ian Campbell +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-10/msg00060.html + +Bug-Description: + +The bash getcwd replacement will write past the end of allocated memory +when it allocates the buffer itself if it uses the buffer size passed as +an argument, and that size is less than the length of the pathname. + +Patch: + +*** ../bash-3.2-patched/lib/sh/getcwd.c 2004-07-21 17:15:19.000000000 -0400 +--- lib/sh/getcwd.c 2007-12-31 19:26:36.000000000 -0500 +*************** +*** 252,268 **** + { + size_t len = pathbuf + pathsize - pathp; + if (buf == NULL) + { +! if (len < (size_t) size) +! len = size; +! buf = (char *) malloc (len); + if (buf == NULL) + goto lose2; + } +! else if ((size_t) size < len) +! { +! errno = ERANGE; +! goto lose2; +! } + (void) memcpy((PTR_T) buf, (PTR_T) pathp, len); + } +--- 287,305 ---- + { + size_t len = pathbuf + pathsize - pathp; ++ if (buf == NULL && size <= 0) ++ size = len; ++ ++ if ((size_t) size < len) ++ { ++ errno = ERANGE; ++ goto lose2; ++ } + if (buf == NULL) + { +! buf = (char *) malloc (size); + if (buf == NULL) + goto lose2; + } +! + (void) memcpy((PTR_T) buf, (PTR_T) pathp, len); + } +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 33 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 34 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-035 b/src/patches/bash/bash32-035 new file mode 100644 index 0000000000..55506baef4 --- /dev/null +++ b/src/patches/bash/bash32-035 @@ -0,0 +1,159 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-035 + +Bug-Reported-by: Ingo Molnar +Bug-Reference-ID: <20071205202901.GA25202@elte.hu> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-12/msg00014.html + +Bug-Description: + +Bash incorrectly puts the second and subsequent children spawned by a +shell forked to run a command substitution in the wrong process group. + +Patch: + +*** ../bash-3.2-patched/subst.c 2007-12-13 22:31:21.000000000 -0500 +--- subst.c 2008-01-17 22:48:15.000000000 -0500 +*************** +*** 4621,4627 **** + + #if defined (JOB_CONTROL) + set_sigchld_handler (); + stop_making_children (); +! pipeline_pgrp = old_pipeline_pgrp; + #else + stop_making_children (); +--- 4721,4728 ---- + + #if defined (JOB_CONTROL) + set_sigchld_handler (); + stop_making_children (); +! if (pid != 0) +! pipeline_pgrp = old_pipeline_pgrp; + #else + stop_making_children (); +*** ../bash-3.2-patched/jobs.c 2007-08-25 13:46:59.000000000 -0400 +--- jobs.c 2007-12-08 16:47:43.000000000 -0500 +*************** +*** 251,254 **** +--- 251,255 ---- + static int set_job_status_and_cleanup __P((int)); + ++ static WAIT job_signal_status __P((int)); + static WAIT raw_job_exit_status __P((int)); + +*************** +*** 2220,2223 **** +--- 2238,2261 ---- + } + ++ static WAIT ++ job_signal_status (job) ++ int job; ++ { ++ register PROCESS *p; ++ WAIT s; ++ ++ p = jobs[job]->pipe; ++ do ++ { ++ s = p->status; ++ if (WIFSIGNALED(s) || WIFSTOPPED(s)) ++ break; ++ p = p->next; ++ } ++ while (p != jobs[job]->pipe); ++ ++ return s; ++ } ++ + /* Return the exit status of the last process in the pipeline for job JOB. + This is the exit status of the entire job. */ +*************** +*** 2302,2310 **** + received, only if one of the jobs run is killed via SIGINT. If + job control is not set, the job will be run in the same pgrp as +! the shell, and the shell will see any signals the job gets. */ + + /* This is possibly a race condition -- should it go in stop_pipeline? */ + wait_sigint_received = 0; +! if (job_control == 0) + { + old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); +--- 2343,2354 ---- + received, only if one of the jobs run is killed via SIGINT. If + job control is not set, the job will be run in the same pgrp as +! the shell, and the shell will see any signals the job gets. In +! fact, we want this set every time the waiting shell and the waited- +! for process are in the same process group, including command +! substitution. */ + + /* This is possibly a race condition -- should it go in stop_pipeline? */ + wait_sigint_received = 0; +! if (job_control == 0 || (subshell_environment&SUBSHELL_COMSUB)) + { + old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); +*************** +*** 2452,2464 **** + the last process in the pipeline. If no process exits due to a + signal, S is left as the status of the last job in the pipeline. */ +! p = jobs[job]->pipe; +! do +! { +! s = p->status; +! if (WIFSIGNALED(s) || WIFSTOPPED(s)) +! break; +! p = p->next; +! } +! while (p != jobs[job]->pipe); + + if (WIFSIGNALED (s) || WIFSTOPPED (s)) +--- 2496,2500 ---- + the last process in the pipeline. If no process exits due to a + signal, S is left as the status of the last job in the pipeline. */ +! s = job_signal_status (job); + + if (WIFSIGNALED (s) || WIFSTOPPED (s)) +*************** +*** 2494,2497 **** +--- 2530,2551 ---- + } + } ++ else if ((subshell_environment & SUBSHELL_COMSUB) && wait_sigint_received) ++ { ++ /* If waiting for a job in a subshell started to do command ++ substitution, simulate getting and being killed by the SIGINT to ++ pass the status back to our parent. */ ++ s = job_signal_status (job); ++ ++ if (WIFSIGNALED (s) && WTERMSIG (s) == SIGINT && signal_is_trapped (SIGINT) == 0) ++ { ++ UNBLOCK_CHILD (oset); ++ restore_sigint_handler (); ++ old_sigint_handler = set_signal_handler (SIGINT, SIG_DFL); ++ if (old_sigint_handler == SIG_IGN) ++ restore_sigint_handler (); ++ else ++ kill (getpid (), SIGINT); ++ } ++ } + + /* Moved here from set_job_status_and_cleanup, which is in the SIGCHLD +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 34 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 35 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-036 b/src/patches/bash/bash32-036 new file mode 100644 index 0000000000..ef22e60e0f --- /dev/null +++ b/src/patches/bash/bash32-036 @@ -0,0 +1,44 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-036 + +Bug-Reported-by: Len Lattanzi +Bug-Reference-ID: <87493131-7AEC-4301-A684-E6CC6D06E3E1@apple.com> +Bug-Reference-URL: + +Bug-Description: + +When initializing a subshell, bash did not reset a sentinel keeping track +of the number of command substitutions, leading to an infinite loop if +an error was encountered in the subshell. + +Patch: + +*** ../bash-3.2-patched/execute_cmd.c 2007-12-13 22:31:14.000000000 -0500 +--- execute_cmd.c 2007-12-20 08:52:34.000000000 -0500 +*************** +*** 3881,3884 **** +--- 3916,3921 ---- + + clear_unwind_protect_list (0); ++ /* XXX -- are there other things we should be resetting here? */ ++ parse_and_execute_level = 0; /* nothing left to restore it */ + + /* We're no longer inside a shell function. */ +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 35 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 36 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-037 b/src/patches/bash/bash32-037 new file mode 100644 index 0000000000..376bd937cd --- /dev/null +++ b/src/patches/bash/bash32-037 @@ -0,0 +1,110 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-037 + +Bug-Reported-by: jared r r spiegel +Bug-Reference-ID: <200801152201.m0FM1lDp021260@iorek.ice-nine.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-01/msg00049.html + +Bug-Description: + +Bash inappropriately evaluates command substitutions while expanding +directory names as part of command substitution. + +Patch: + +*** ../bash-3.2-patched/subst.c 2007-12-13 22:31:21.000000000 -0500 +--- subst.c 2008-01-17 22:48:15.000000000 -0500 +*************** +*** 2815,2821 **** + to jump_to_top_level here so we don't endlessly loop. */ + WORD_LIST * +! expand_prompt_string (string, quoted) + char *string; + int quoted; + { + WORD_LIST *value; +--- 2895,2902 ---- + to jump_to_top_level here so we don't endlessly loop. */ + WORD_LIST * +! expand_prompt_string (string, quoted, wflags) + char *string; + int quoted; ++ int wflags; + { + WORD_LIST *value; +*************** +*** 2825,2829 **** + return ((WORD_LIST *)NULL); + +! td.flags = 0; + td.word = savestring (string); + +--- 2906,2910 ---- + return ((WORD_LIST *)NULL); + +! td.flags = wflags; + td.word = savestring (string); + +*** ../bash-3.2-patched/subst.h 2007-03-24 14:51:05.000000000 -0400 +--- subst.h 2008-01-17 22:46:08.000000000 -0500 +*************** +*** 136,140 **** + + /* Expand a prompt string. */ +! extern WORD_LIST *expand_prompt_string __P((char *, int)); + + /* Expand STRING just as if you were expanding a word. This also returns +--- 137,141 ---- + + /* Expand a prompt string. */ +! extern WORD_LIST *expand_prompt_string __P((char *, int, int)); + + /* Expand STRING just as if you were expanding a word. This also returns +*** ../bash-3.2-patched/parse.y 2007-08-25 13:47:06.000000000 -0400 +--- parse.y 2008-01-17 22:46:30.000000000 -0500 +*************** +*** 4367,4371 **** + { + last_exit_value = last_command_exit_value; +! list = expand_prompt_string (result, Q_DOUBLE_QUOTES); + free (result); + result = string_list (list); +--- 4367,4371 ---- + { + last_exit_value = last_command_exit_value; +! list = expand_prompt_string (result, Q_DOUBLE_QUOTES, 0); + free (result); + result = string_list (list); +*** ../bash-3.2-patched/bashline.c 2006-07-29 16:39:30.000000000 -0400 +--- bashline.c 2008-02-17 12:53:42.000000000 -0500 +*************** +*** 2358,2362 **** + { + new_dirname = savestring (local_dirname); +! wl = expand_prompt_string (new_dirname, 0); /* does the right thing */ + if (wl) + { +--- 2376,2380 ---- + { + new_dirname = savestring (local_dirname); +! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB); /* does the right thing */ + if (wl) + { +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 36 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 37 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-038 b/src/patches/bash/bash32-038 new file mode 100644 index 0000000000..842b1b5019 --- /dev/null +++ b/src/patches/bash/bash32-038 @@ -0,0 +1,80 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-038 + +Bug-Reported-by: Wojciech Puchar +Bug-Reference-ID: <200803131141.m2DBf9vo001136@wojtek.tensor.gdynia.pl> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-03/msg00029.html + +Bug-Description: + +When reading input lines into a single variable using the `read' builtin, +bash did not free the memory it read after assigining it to the named +variable, causing a memory leak noticable when reading large amounts of +data. + + +Patch: + +*** ../bash-3.2-patched/builtins/read.def 2007-08-25 13:47:07.000000000 -0400 +--- builtins/read.def 2008-03-07 12:55:47.000000000 -0500 +*************** +*** 135,139 **** + char c; + char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; +! char *e, *t, *t1, *ps2; + struct stat tsb; + SHELL_VAR *var; +--- 152,156 ---- + char c; + char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; +! char *e, *t, *t1, *ps2, *tofree; + struct stat tsb; + SHELL_VAR *var; +*************** +*** 675,678 **** +--- 728,732 ---- + /* Check whether or not the number of fields is exactly the same as the + number of variables. */ ++ tofree = NULL; + if (*input_string) + { +*************** +*** 680,684 **** + t = get_word_from_string (&input_string, ifs_chars, &e); + if (*input_string == 0) +! input_string = t; + else + input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape); +--- 734,738 ---- + t = get_word_from_string (&input_string, ifs_chars, &e); + if (*input_string == 0) +! tofree = input_string = t; + else + input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape); +*************** +*** 695,698 **** +--- 749,754 ---- + var = bind_read_variable (list->word->word, input_string); + stupidly_hack_special_variables (list->word->word); ++ FREE (tofree); ++ + if (var) + VUNSETATTR (var, att_invisible); +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 37 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 38 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-039 b/src/patches/bash/bash32-039 new file mode 100644 index 0000000000..c225a5af43 --- /dev/null +++ b/src/patches/bash/bash32-039 @@ -0,0 +1,175 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-039 + +Bug-Reported-by: rew@erebor.com +Bug-Reference-ID: <20070119065603.546D011E9C@kansas.erebor.com> +Bug-Reference-URL: + +Bug-Description: + +Bash-3.2 changed the behavior of the [[ command's `=~' operator when the +right-hand side was quoted: it matched the quoted portions as strings. +This patch introduces a new shell option: compat31. When enabled, it +restores the bash-3.1 behavior with respect to evaluating quoted arguments +to the =~ operator. + +Patch: + +*** ../bash-3.2-patched/execute_cmd.c 2007-12-14 21:12:39.000000000 -0500 +--- execute_cmd.c 2008-02-22 21:20:40.000000000 -0500 +*************** +*** 2547,2551 **** + if (arg1 == 0) + arg1 = nullstr; +! arg2 = cond_expand_word (cond->right->op, rmatch ? 2 : (patmatch ? 1 : 0)); + if (arg2 == 0) + arg2 = nullstr; +--- 2552,2557 ---- + if (arg1 == 0) + arg1 = nullstr; +! arg2 = cond_expand_word (cond->right->op, +! (rmatch && shell_compatibility_level > 31) ? 2 : (patmatch ? 1 : 0)); + if (arg2 == 0) + arg2 = nullstr; +*** ../bash-3.2-patched/shell.h 2003-06-01 15:04:36.000000000 -0400 +--- shell.h 2008-02-22 21:16:48.000000000 -0500 +*************** +*** 90,93 **** +--- 90,94 ---- + extern int interactive, interactive_shell; + extern int startup_state; ++ extern int shell_compatibility_level; + + /* Structure to pass around that holds a bitmap of file descriptors +*** ../bash-3.2-patched/version.c 2007-12-14 21:12:29.000000000 -0500 +--- version.c 2008-04-10 08:22:22.000000000 -0400 +*************** +*** 44,47 **** +--- 44,50 ---- + const char *sccs_version = SCCSVERSION; + ++ /* If == 31, shell compatible with bash-3.1, == 32 with bash-3.2, and so on */ ++ int shell_compatibility_level = 32; ++ + /* Functions for getting, setting, and displaying the shell version. */ + +*** ../bash-3.2-patched/builtins/shopt.def 2005-02-19 17:25:03.000000000 -0500 +--- builtins/shopt.def 2008-04-10 08:13:32.000000000 -0400 +*************** +*** 102,105 **** +--- 102,107 ---- + static int set_shellopts_after_change __P((int)); + ++ static int set_compatibility_level __P((int)); ++ + #if defined (RESTRICTED_SHELL) + static int set_restricted_shell __P((int)); +*************** +*** 107,110 **** +--- 109,113 ---- + + static int shopt_login_shell; ++ static int shopt_compat31; + + typedef int shopt_set_func_t __P((int)); +*************** +*** 122,125 **** +--- 125,129 ---- + { "cmdhist", &command_oriented_history, (shopt_set_func_t *)NULL }, + #endif ++ { "compat31", &shopt_compat31, set_compatibility_level }, + { "dotglob", &glob_dot_filenames, (shopt_set_func_t *)NULL }, + { "execfail", &no_exit_on_failed_exec, (shopt_set_func_t *)NULL }, +*************** +*** 460,463 **** +--- 464,479 ---- + } + ++ static int ++ set_compatibility_level (mode) ++ int mode; ++ { ++ /* Need to change logic here as we add more compatibility levels */ ++ if (shopt_compat31) ++ shell_compatibility_level = 31; ++ else ++ shell_compatibility_level = 32; ++ return 0; ++ } ++ + #if defined (RESTRICTED_SHELL) + /* Don't allow the value of restricted_shell to be modified. */ +*** ../bash-3.2-patched/doc/bash.1 2006-09-28 10:26:05.000000000 -0400 +--- doc/bash.1 2008-04-25 12:32:49.000000000 -0400 +*************** +*** 7978,7981 **** +--- 8200,8209 ---- + easy re-editing of multi-line commands. + .TP 8 ++ .B compat31 ++ If set, ++ .B bash ++ changes its behavior to that of version 3.1 with respect to quoted ++ arguments to the conditional command's =~ operator. ++ .TP 8 + .B dotglob + If set, +*** ../bash-20080214/doc/bashref.texi 2008-02-08 21:28:35.000000000 -0500 +--- doc/bashref.texi 2008-02-22 21:44:51.000000000 -0500 +*************** +*** 4053,4056 **** +--- 4061,4069 ---- + easy re-editing of multi-line commands. + ++ @item compat31 ++ If set, Bash ++ changes its behavior to that of version 3.1 with respect to quoted ++ arguments to the conditional command's =~ operator. ++ + @item dotglob + If set, Bash includes filenames beginning with a `.' in +*** ../bash-3.2-patched/tests/shopt.right 2005-02-19 17:46:09.000000000 -0500 +--- tests/shopt.right 2008-04-28 09:13:07.000000000 -0400 +*************** +*** 7,10 **** +--- 7,11 ---- + shopt -u checkwinsize + shopt -s cmdhist ++ shopt -u compat31 + shopt -u dotglob + shopt -u execfail +*************** +*** 54,57 **** +--- 55,59 ---- + shopt -u checkhash + shopt -u checkwinsize ++ shopt -u compat31 + shopt -u dotglob + shopt -u execfail +*************** +*** 78,81 **** +--- 80,84 ---- + checkhash off + checkwinsize off ++ compat31 off + dotglob off + execfail off + +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 38 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 39 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-040 b/src/patches/bash/bash32-040 new file mode 100644 index 0000000000..50b85bbe5f --- /dev/null +++ b/src/patches/bash/bash32-040 @@ -0,0 +1,47 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-040 + +Bug-Reported-by: John McCabe-Dansted +Bug-Reference-ID: +Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/202885 + +Bug-Description: + +When using the `set' builtin to list all shell variables, the shell uses +the wrong variable when computing the length of a variable's value. + +Patch: + +*** ../bash-3.2-patched/array.c 2007-03-24 14:51:03.000000000 -0400 +--- array.c 2008-08-17 13:07:04.000000000 -0400 +*************** +*** 684,688 **** + valstr = element_value (ae) ? sh_double_quote (element_value(ae)) + : (char *)NULL; +! elen = STRLEN (indstr) + 8 + STRLEN (valstr); + RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize); + +--- 809,813 ---- + valstr = element_value (ae) ? sh_double_quote (element_value(ae)) + : (char *)NULL; +! elen = STRLEN (is) + 8 + STRLEN (valstr); + RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize); + +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 39 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 40 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-041 b/src/patches/bash/bash32-041 new file mode 100644 index 0000000000..3c05c04ea8 --- /dev/null +++ b/src/patches/bash/bash32-041 @@ -0,0 +1,154 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-041 + +Bug-Reported-by: Dan Jacobson +Bug-Reference-ID: <873arjs11h.fsf@jidanni.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-02/msg00049.html + +Bug-Description: + +Bash saved and restored the value of `set -o history' while sourcing files, +preventing users from turning off history with `set +o history' in .bashrc. + +Patch: + +*** ../bash-3.2-patched/bashhist.c 2005-12-26 13:31:16.000000000 -0500 +--- bashhist.c 2008-08-17 13:07:40.000000000 -0400 +*************** +*** 81,84 **** +--- 81,85 ---- + becomes zero when we read lines from a file, for example. */ + int remember_on_history = 1; ++ int enable_history_list = 1; /* value for `set -o history' */ + + /* The number of lines that Bash has added to this history session. The +*************** +*** 235,239 **** + history_expansion_inhibited = 1; + #endif +! remember_on_history = interact != 0; + history_inhibit_expansion_function = bash_history_inhibit_expansion; + } +--- 236,240 ---- + history_expansion_inhibited = 1; + #endif +! remember_on_history = enable_history_list = interact != 0; + history_inhibit_expansion_function = bash_history_inhibit_expansion; + } +*** ../bash-3.2-patched/builtins/set.def 2006-07-27 09:41:43.000000000 -0400 +--- builtins/set.def 2008-08-14 16:33:41.000000000 -0400 +*************** +*** 190,194 **** + #endif /* BANG_HISTORY */ + #if defined (HISTORY) +! { "history", '\0', &remember_on_history, bash_set_history, (setopt_get_func_t *)NULL }, + #endif + { "ignoreeof", '\0', &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL }, +--- 198,202 ---- + #endif /* BANG_HISTORY */ + #if defined (HISTORY) +! { "history", '\0', &enable_history_list, bash_set_history, (setopt_get_func_t *)NULL }, + #endif + { "ignoreeof", '\0', &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL }, +*************** +*** 382,385 **** +--- 390,394 ---- + if (on_or_off == FLAG_ON) + { ++ enable_history_list = 1; + bash_history_enable (); + if (history_lines_this_session == 0) +*************** +*** 387,392 **** + } + else +! bash_history_disable (); +! return (1 - remember_on_history); + } + #endif +--- 396,404 ---- + } + else +! { +! enable_history_list = 0; +! bash_history_disable (); +! } +! return (1 - enable_history_list); + } + #endif +*************** +*** 566,570 **** + { + #if defined (HISTORY) +! remember_on_history = 1; + #endif + ignoreeof = 0; +--- 578,582 ---- + { + #if defined (HISTORY) +! remember_on_history = enable_history_list = 1; + #endif + ignoreeof = 0; +*** ../bash-3.2-patched/builtins/evalstring.c 2006-07-28 15:12:16.000000000 -0400 +--- builtins/evalstring.c 2008-11-10 21:17:16.000000000 -0500 +*************** +*** 68,71 **** +--- 68,79 ---- + static int cat_file __P((REDIRECT *)); + ++ #if defined (HISTORY) ++ static void ++ set_history_remembering () ++ { ++ remember_on_history = enable_history_list; ++ } ++ #endif ++ + /* How to force parse_and_execute () to clean up after itself. */ + void +*************** +*** 116,120 **** + + #if defined (HISTORY) +! unwind_protect_int (remember_on_history); /* can be used in scripts */ + # if defined (BANG_HISTORY) + if (interactive_shell) +--- 124,131 ---- + + #if defined (HISTORY) +! if (parse_and_execute_level == 0) +! add_unwind_protect (set_history_remembering, (char *)NULL); +! else +! unwind_protect_int (remember_on_history); /* can be used in scripts */ + # if defined (BANG_HISTORY) + if (interactive_shell) +*** ../bash-3.2-patched/bashhist.h 2005-07-01 15:44:41.000000000 -0400 +--- bashhist.h 2008-08-17 12:51:07.000000000 -0400 +*************** +*** 32,35 **** +--- 32,38 ---- + + extern int remember_on_history; ++ extern int enable_history_list; /* value for `set -o history' */ ++ extern int literal_history; /* controlled by `shopt lithist' */ ++ extern int force_append_history; + extern int history_lines_this_session; + extern int history_lines_in_file; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 40 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 41 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-042 b/src/patches/bash/bash32-042 new file mode 100644 index 0000000000..4c9f4d6df1 --- /dev/null +++ b/src/patches/bash/bash32-042 @@ -0,0 +1,48 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-042 + +Bug-Reported-by: Archimerged Ark Submedes +Bug-Reference-ID: <5ba4bef00804182116g65ff71e0qdffcf672f205e708@mail.gmail.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-04/msg00041.html + +Bug-Description: + +An operator precedence error prevented the bash arithmetic evaluator from +parsing conditional commands correctly. + +Patch: + +*** ../bash-3.2-patched/expr.c 2007-12-13 22:30:43.000000000 -0500 +--- expr.c 2008-08-17 13:09:59.000000000 -0400 +*************** +*** 521,525 **** + noeval++; + } +! val2 = explor (); + if (set_noeval) + noeval--; +--- 521,526 ---- + noeval++; + } +! +! val2 = expcond (); + if (set_noeval) + noeval--; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 41 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 42 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-043 b/src/patches/bash/bash32-043 new file mode 100644 index 0000000000..5a51843d2b --- /dev/null +++ b/src/patches/bash/bash32-043 @@ -0,0 +1,62 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-043 + +Bug-Reported-by: Morita Sho +Bug-Reference-ID: +Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=478096 + +Bug-Description: + +Side effects caused by setting function-local versions of variables bash +handles specially persisted after the function returned. + +Patch: + +*** ../bash-3.2-patched/variables.c 2007-08-25 13:47:05.000000000 -0400 +--- variables.c 2008-11-09 17:47:31.000000000 -0500 +*************** +*** 3459,3465 **** + var->attributes &= ~(att_tempvar|att_propagate); + else +! shell_variables->flags |= VC_HASTMPVAR; + v->attributes |= var->attributes; + } + + dispose_variable (var); +--- 3771,3779 ---- + var->attributes &= ~(att_tempvar|att_propagate); + else +! shell_variables->flags |= VC_HASTMPVAR; + v->attributes |= var->attributes; + } ++ else ++ stupidly_hack_special_variables (var->name); /* XXX */ + + dispose_variable (var); +*************** +*** 3548,3551 **** +--- 3862,3867 ---- + v->attributes |= var->attributes; + } ++ else ++ stupidly_hack_special_variables (var->name); /* XXX */ + + dispose_variable (var); +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 42 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 43 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-044 b/src/patches/bash/bash32-044 new file mode 100644 index 0000000000..3e7a392d43 --- /dev/null +++ b/src/patches/bash/bash32-044 @@ -0,0 +1,150 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-044 + +Bug-Reported-by: slinkp +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html + +Bug-Description: + +The presence of invisible characters in a prompt longer than the screenwidth +with invisible characters on the first and last prompt lines caused readline +to place the cursor in the wrong physical location. + +Patch: + +*** ../bash-3.2-patched/lib/readline/display.c 2007-12-14 21:12:40.000000000 -0500 +--- lib/readline/display.c 2008-10-23 09:39:46.000000000 -0400 +*************** +*** 911,914 **** +--- 944,951 ---- + OFFSET (which has already been calculated above). */ + ++ #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) ++ #define WRAP_OFFSET(line, offset) ((line == 0) \ ++ ? (offset ? INVIS_FIRST() : 0) \ ++ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) + #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) + #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) +*************** +*** 945,949 **** + _rl_last_c_pos > wrap_offset && + o_cpos < prompt_last_invisible) +! _rl_last_c_pos -= wrap_offset; + + /* If this is the line with the prompt, we might need to +--- 982,992 ---- + _rl_last_c_pos > wrap_offset && + o_cpos < prompt_last_invisible) +! _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ +! else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && +! (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && +! cpos_adjusted == 0 && +! _rl_last_c_pos != o_cpos && +! _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) +! _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); + + /* If this is the line with the prompt, we might need to +*************** +*** 1205,1209 **** + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd, o_cpos; + int current_invis_chars; + int col_lendiff, col_temp; +--- 1264,1268 ---- + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd, twidth, o_cpos; + int current_invis_chars; + int col_lendiff, col_temp; +*************** +*** 1221,1225 **** + temp = _rl_last_c_pos; + else +! temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset); + if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode + && _rl_last_v_pos == current_line - 1) +--- 1280,1284 ---- + temp = _rl_last_c_pos; + else +! temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); + if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode + && _rl_last_v_pos == current_line - 1) +*************** +*** 1587,1599 **** + { + _rl_output_some_chars (nfd + lendiff, temp - lendiff); +- #if 1 + /* XXX -- this bears closer inspection. Fixes a redisplay bug + reported against bash-3.0-alpha by Andreas Schwab involving + multibyte characters and prompt strings with invisible + characters, but was previously disabled. */ +! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); +! #else +! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); +! #endif + } + } +--- 1648,1660 ---- + { + _rl_output_some_chars (nfd + lendiff, temp - lendiff); + /* XXX -- this bears closer inspection. Fixes a redisplay bug + reported against bash-3.0-alpha by Andreas Schwab involving + multibyte characters and prompt strings with invisible + characters, but was previously disabled. */ +! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) +! twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); +! else +! twidth = temp - lendiff; +! _rl_last_c_pos += twidth; + } + } +*************** +*** 1789,1793 **** + int cpos, dpos; /* current and desired cursor positions */ + +! woff = W_OFFSET (_rl_last_v_pos, wrap_offset); + cpos = _rl_last_c_pos; + #if defined (HANDLE_MULTIBYTE) +--- 1850,1854 ---- + int cpos, dpos; /* current and desired cursor positions */ + +! woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); + cpos = _rl_last_c_pos; + #if defined (HANDLE_MULTIBYTE) +*************** +*** 1803,1807 **** + prompt string, since they're both buffer indices and DPOS is a + desired display position. */ +! if (new > prompt_last_invisible) /* XXX - don't use woff here */ + { + dpos -= woff; +--- 1864,1872 ---- + prompt string, since they're both buffer indices and DPOS is a + desired display position. */ +! if ((new > prompt_last_invisible) || /* XXX - don't use woff here */ +! (prompt_physical_chars > _rl_screenwidth && +! _rl_last_v_pos == prompt_last_screen_line && +! wrap_offset != woff && +! new > (prompt_last_invisible-_rl_screenwidth-wrap_offset))) + { + dpos -= woff; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 43 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 44 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-045 b/src/patches/bash/bash32-045 new file mode 100644 index 0000000000..68b91ffe10 --- /dev/null +++ b/src/patches/bash/bash32-045 @@ -0,0 +1,50 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-045 + +Bug-Reported-by: Roman Rakus +Bug-Reference-ID: <4864B4A0.1060402@redhat.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-06/msg00098.html + +Bug-Description: + +When short-circuiting execution due to the `break' or `continue' builtins, +bash did not preserve the value of $?. + +Patch: + +*** ../bash-3.2-patched/execute_cmd.c 2008-04-28 22:00:24.000000000 -0400 +--- execute_cmd.c 2008-10-18 14:35:03.000000000 -0400 +*************** +*** 502,507 **** +--- 514,526 ---- + volatile int save_line_number; + ++ #if 0 + if (command == 0 || breaking || continuing || read_but_dont_execute) + return (EXECUTION_SUCCESS); ++ #else ++ if (breaking || continuing) ++ return (last_command_exit_value); ++ if (command == 0 || read_but_dont_execute) ++ return (EXECUTION_SUCCESS); ++ #endif + + QUIT; +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 44 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 45 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-046 b/src/patches/bash/bash32-046 new file mode 100644 index 0000000000..78aaf0176f --- /dev/null +++ b/src/patches/bash/bash32-046 @@ -0,0 +1,47 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-046 + +Bug-Reported-by: Wang Xin +Bug-Reference-ID: <9a73e1570807062042ide16698m10e1b18036c95592@mail.gmail.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-07/msg00014.html + +Bug-Description: + +Bash did not compute the length of multibyte characters correctly when +performing array element length references (e.g., ${#var[subscript]}). + +Patch: + +*** /usr/src/local/bash/bash-3.2-patched/subst.c 2008-04-28 22:00:20.000000000 -0400 +--- subst.c 2008-11-10 22:02:38.000000000 -0500 +*************** +*** 4813,4817 **** + t = (ind == 0) ? value_cell (var) : (char *)NULL; + +! len = STRLEN (t); + return (len); + } +--- 4813,4817 ---- + t = (ind == 0) ? value_cell (var) : (char *)NULL; + +! len = MB_STRLEN (t); + return (len); + } +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 45 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 46 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-047 b/src/patches/bash/bash32-047 new file mode 100644 index 0000000000..b8272b1ee0 --- /dev/null +++ b/src/patches/bash/bash32-047 @@ -0,0 +1,65 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-047 + +Bug-Reported-by: Roman Rakus +Bug-Reference-ID: <48A89EBC.906@redhat.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-08/msg00026.html + +Bug-Description: + +When using the `.' (source) builtin, under certain circumstances bash was +too careful in discarding state to preserve internal consistency. One +effect was that assignments to readonly variables would cause entire scripts +to be aborted instead of execution of the offending command. This behavior +was introduced by bash-3.2 patch 20. + +Patch: + +*** /usr/src/local/chet/src/bash/bash-3.2-patched/subst.c 2008-04-29 21:24:55.000000000 -0400 +--- subst.c 2008-11-13 17:44:25.000000000 -0500 +*************** +*** 138,142 **** + extern int last_command_exit_value, last_command_exit_signal; + extern int subshell_environment; +! extern int subshell_level; + extern int eof_encountered; + extern int return_catch_flag, return_catch_value; +--- 138,142 ---- + extern int last_command_exit_value, last_command_exit_signal; + extern int subshell_environment; +! extern int subshell_level, parse_and_execute_level; + extern int eof_encountered; + extern int return_catch_flag, return_catch_value; +*************** +*** 7673,7677 **** + expanding_redir = 0; + +! top_level_cleanup (); /* from sig.c */ + + jump_to_top_level (v); +--- 7673,7679 ---- + expanding_redir = 0; + +! if (parse_and_execute_level == 0) +! top_level_cleanup (); /* from sig.c */ +! + + jump_to_top_level (v); +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 46 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 47 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-048 b/src/patches/bash/bash32-048 new file mode 100644 index 0000000000..551dadefe2 --- /dev/null +++ b/src/patches/bash/bash32-048 @@ -0,0 +1,56 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-048 + +Bug-Reported-by: Steffen Kiess +Bug-Reference-ID: <1223929957.5383.6.camel@fips> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-10/msg00047.html + +Bug-Description: + +When invoked as `bash -c', bash did not execute an EXIT trap when the last +command in the executed list was a command run from the file system. + +Patch: + +*** /Users/chet/src/bash/bash-3.2-patched/builtins/evalstring.c 2006-07-28 15:12:16.000000000 -0400 +--- builtins/evalstring.c 2008-11-13 18:38:45.000000000 -0500 +*************** +*** 249,252 **** +--- 249,253 ---- + * we're not running a trap AND + * we have parsed the full command (string == '\0') AND ++ * we're not going to run the exit trap AND + * we have a simple command without redirections AND + * the command is not being timed AND +*************** +*** 259,263 **** + *bash_input.location.string == '\0' && + command->type == cm_simple && +! !command->redirects && !command->value.Simple->redirects && + ((command->flags & CMD_TIME_PIPELINE) == 0) && + ((command->flags & CMD_INVERT_RETURN) == 0)) +--- 260,265 ---- + *bash_input.location.string == '\0' && + command->type == cm_simple && +! signal_is_trapped (EXIT_TRAP) == 0 && +! command->redirects == 0 && command->value.Simple->redirects == 0 && + ((command->flags & CMD_TIME_PIPELINE) == 0) && + ((command->flags & CMD_INVERT_RETURN) == 0)) +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 47 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 48 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-049 b/src/patches/bash/bash32-049 new file mode 100644 index 0000000000..469c4c8915 --- /dev/null +++ b/src/patches/bash/bash32-049 @@ -0,0 +1,64 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-049 + +Bug-Reported-by: Len Lattanzi +Bug-Reference-ID: <52B1297F-6675-45CC-B63E-24745337D006@apple.com> +Bug-Reference-URL: + +Bug-Description: + +On systems where mbrtowc() returns -2 when passed a length argument with +value 0, when using a multibyte locale, Readline's emacs-mode forward-char +at the end of a line will leave the point beyond the end of the line. + +Patch: + +*** ../bash-3.2-patched/lib/readline/mbutil.c 2009-05-29 23:09:26.000000000 -0400 +--- lib/readline/mbutil.c 2009-05-29 23:10:12.000000000 -0400 +*************** +*** 78,82 **** + int seed, count, find_non_zero; + { +! size_t tmp; + mbstate_t ps; + int point; +--- 78,82 ---- + int seed, count, find_non_zero; + { +! size_t tmp, len; + mbstate_t ps; + int point; +*************** +*** 99,103 **** + while (count > 0) + { +! tmp = mbrtowc (&wc, string+point, strlen(string + point), &ps); + if (MB_INVALIDCH ((size_t)tmp)) + { +--- 99,106 ---- + while (count > 0) + { +! len = strlen (string + point); +! if (len == 0) +! break; +! tmp = mbrtowc (&wc, string+point, len, &ps); + if (MB_INVALIDCH ((size_t)tmp)) + { +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 48 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 49 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-050 b/src/patches/bash/bash32-050 new file mode 100644 index 0000000000..aef537e18c --- /dev/null +++ b/src/patches/bash/bash32-050 @@ -0,0 +1,56 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-050 + +Bug-Reported-by: Jan Hnatek +Bug-Reference-ID: <4A44991F.8010005@sun.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-06/msg00084.html + +Bug-Description: + +On systems where mbrtowc() returns -2 when passed a length argument with +value 0, when using a multibyte locale, Readline's emacs-mode forward-char +at the end of a line will leave the point beyond the end of the line. + +Patch: + +*** ../bash-3.2-patched/lib/readline/mbutil.c 2009-06-16 11:26:50.000000000 -0400 +--- lib/readline/mbutil.c 2009-01-04 14:32:33.000000000 -0500 +*************** +*** 132,141 **** + { + tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); +! while (tmp > 0 && wcwidth (wc) == 0) + { + point += tmp; + tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); +- if (MB_NULLWCH (tmp) || MB_INVALIDCH (tmp)) +- break; + } + } +--- 130,137 ---- + { + tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); +! while (MB_NULLWCH (tmp) == 0 && MB_INVALIDCH (tmp) == 0 && wcwidth (wc) == 0) + { + point += tmp; + tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); + } + } +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 49 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 50 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-051 b/src/patches/bash/bash32-051 new file mode 100644 index 0000000000..404fbd6463 --- /dev/null +++ b/src/patches/bash/bash32-051 @@ -0,0 +1,46 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 3.2 +Patch-ID: bash32-051 + +Bug-Reported-by: werner@suse.de +Bug-Reference-ID: <201002251238.o1PCcYcg016893@boole.suse.de> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-02/msg00132.html + +Bug-Description: + +When the `read' builtin times out after the timeout specified with -t is +exceeded, it does not reset the flags that tell signal handlers to process +signals immediately instead of deferring their handling. This can result +in unsafe functions being called from signal handlers, which can cause bash +to hang or dump core. + +Patch: + +*** ../bash-3.2-patched/builtins/read.def 2008-04-29 21:25:00.000000000 -0400 +--- builtins/read.def 2010-03-17 09:50:51.000000000 -0400 +*************** +*** 327,330 **** +--- 327,332 ---- + if (code) + { ++ interrupt_immediately--; ++ terminate_immediately = 0; + run_unwind_frame ("read_builtin"); + return (EXECUTION_FAILURE); +*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 +--- patchlevel.h Mon Oct 16 14:22:54 2006 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 50 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 51 + + #endif /* _PATCHLEVEL_H_ */ -- 2.39.5