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_ */