BASH PATCH REPORT
                            =================

Bash-Release: 3.1
Patch-ID: bash31-017

Bug-Reported-by: [email protected]
Bug-Reference-ID: <[email protected]>
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_ */