1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
#! /bin/sh -e
if [ $# -eq 3 -a "$2" = '-d' ]; then
pdir="-d $3"
elif [ $# -ne 1 ]; then
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
fi
case "$1" in
-patch) patch $pdir -f --no-backup-if-mismatch -p0 < $0;;
-unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 < $0;;
*)
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
esac
exit 0
# DP: Upstream patch bash31-017
BASH PATCH REPORT
=================
Bash-Release: 3.1
Patch-ID: bash31-017
Bug-Reported-by: syphir@syphir.sytes.net
Bug-Reference-ID: <442421F5.3010105@syphir.sytes.net>
Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=358831
Bug-Description:
Array expansion fails with an arithmetic syntax error when the subscript
appears within double quotes. For example: ${a["4"]}.
Patch:
*** ../bash-3.1-patched/subst.c Wed Apr 12 08:47:08 2006
--- subst.c Wed Apr 12 08:49:02 2006
***************
*** 2576,2579 ****
--- 2576,2586 ----
}
+ 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. */
***************
*** 5249,5253 ****
t = (char *)0;
! temp1 = expand_string_if_necessary (substr, Q_DOUBLE_QUOTES, expand_string);
*e1p = evalexp (temp1, &expok);
free (temp1);
--- 5256,5260 ----
t = (char *)0;
! temp1 = expand_arith_string (substr, Q_DOUBLE_QUOTES);
*e1p = evalexp (temp1, &expok);
free (temp1);
***************
*** 5294,5298 ****
t++;
temp2 = savestring (t);
! temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string);
free (temp2);
t[-1] = ':';
--- 5301,5305 ----
t++;
temp2 = savestring (t);
! temp1 = expand_arith_string (temp2, Q_DOUBLE_QUOTES);
free (temp2);
t[-1] = ':';
***************
*** 6436,6440 ****
/* Expand variables found inside the expression. */
! temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string);
free (temp2);
--- 6443,6447 ----
/* Expand variables found inside the expression. */
! temp1 = expand_arith_string (temp2, Q_DOUBLE_QUOTES);
free (temp2);
***************
*** 6478,6482 ****
/* Do initial variable expansion. */
! temp1 = expand_string_if_necessary (temp, Q_DOUBLE_QUOTES, expand_string);
goto arithsub;
--- 6485,6489 ----
/* Do initial variable expansion. */
! temp1 = expand_arith_string (temp, Q_DOUBLE_QUOTES);
goto arithsub;
*** ../bash-3.1-patched/subst.h Sun Nov 7 15:12:28 2004
--- subst.h Mon Mar 27 09:10:38 2006
***************
*** 152,155 ****
--- 152,158 ----
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 *));
*** ../bash-3.1-patched/arrayfunc.c Mon Jul 4 20:25:58 2005
--- arrayfunc.c Mon Mar 27 09:10:47 2006
***************
*** 593,601 ****
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
this_command_name = (char *)NULL;
val = evalexp (t, &expok);
--- 591,595 ----
strncpy (exp, s, len - 1);
exp[len - 1] = '\0';
! t = expand_arith_string (exp, 0);
this_command_name = (char *)NULL;
val = evalexp (t, &expok);
*** ../bash-3.1/patchlevel.h Wed Jul 20 13:58:20 2005
--- patchlevel.h Wed Dec 7 13:48:42 2005
***************
*** 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_ */
|