@@ -15,11 +15,12 @@ import (
15
15
log "github.com/sirupsen/logrus"
16
16
)
17
17
18
- var expressionPattern , operatorPattern * regexp.Regexp
18
+ var expressionPattern , operatorPattern , floatPattern * regexp.Regexp
19
19
20
20
func init () {
21
21
expressionPattern = regexp .MustCompile (`\${{\s*(.+?)\s*}}` )
22
22
operatorPattern = regexp .MustCompile ("^[!=><|&]+$" )
23
+ floatPattern = regexp .MustCompile (`-?(?:0|[1-9][0-9]*)\.[0-9]+` )
23
24
}
24
25
25
26
// NewExpressionEvaluator creates a new evaluator
@@ -121,9 +122,10 @@ func (ee *expressionEvaluator) InterpolateWithStringCheck(in string) (string, bo
121
122
// Rewrite tries to transform any javascript property accessor into its bracket notation.
122
123
// For instance, "object.property" would become "object['property']".
123
124
func (ee * expressionEvaluator ) Rewrite (in string ) string {
125
+ floatIndizes := floatPattern .FindAllStringIndex (in , - 1 )
124
126
var buf strings.Builder
125
127
r := strings .NewReader (in )
126
- for {
128
+ for i := 0 ; ; i ++ {
127
129
c , _ , err := r .ReadRune ()
128
130
if err == io .EOF {
129
131
break
@@ -136,14 +138,27 @@ func (ee *expressionEvaluator) Rewrite(in string) string {
136
138
buf .WriteRune (c )
137
139
ee .advString (& buf , r )
138
140
case c == '.' :
139
- buf .WriteString ("['" )
140
- ee .advPropertyName (& buf , r )
141
- buf .WriteString ("']" )
141
+ if ee .isFloat (floatIndizes , i ) {
142
+ buf .WriteRune (c )
143
+ } else {
144
+ buf .WriteString ("['" )
145
+ ee .advPropertyName (& buf , r )
146
+ buf .WriteString ("']" )
147
+ }
142
148
}
143
149
}
144
150
return buf .String ()
145
151
}
146
152
153
+ func (* expressionEvaluator ) isFloat (floatIndizes [][]int , index int ) bool {
154
+ for _ , floatRange := range floatIndizes {
155
+ if floatRange [0 ] < index && floatRange [1 ] > index {
156
+ return true
157
+ }
158
+ }
159
+ return false
160
+ }
161
+
147
162
func (* expressionEvaluator ) advString (w * strings.Builder , r * strings.Reader ) error {
148
163
for {
149
164
c , _ , err := r .ReadRune ()
0 commit comments