aboutsummaryrefslogtreecommitdiffstats
path: root/package/bash/bash31-017
blob: 60e4acdfafafd53382a069be33c891cc2311625b (plain)
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
			     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 *));
*** ../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
--- 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_ */