2006-04-15 04:24:59 +02:00
|
|
|
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/subst.c Wed Apr 12 08:47:08 2006
|
|
|
|
--- bash-3.1/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/subst.h Sun Nov 7 15:12:28 2004
|
|
|
|
--- bash-3.1/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 *));
|
2006-04-15 04:26:01 +02:00
|
|
|
*** bash-3.1/arrayfunc.c Mon Jul 4 20:25:58 2005
|
|
|
|
--- bash-3.1/arrayfunc.c Mon Mar 27 09:10:47 2006
|
2006-04-15 04:24:59 +02:00
|
|
|
***************
|
|
|
|
*** 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
|
|
|
|
--- bash-3.1/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_ */
|