@@ -128,8 +128,8 @@ type Mount struct {
128
128
GID * uint64
129
129
}
130
130
131
- func parseMount (value string , expander SingleWordExpander ) (* Mount , error ) {
132
- csvReader := csv .NewReader (strings .NewReader (value ))
131
+ func parseMount (val string , expander SingleWordExpander ) (* Mount , error ) {
132
+ csvReader := csv .NewReader (strings .NewReader (val ))
133
133
fields , err := csvReader .Read ()
134
134
if err != nil {
135
135
return nil , errors .Wrap (err , "failed to parse csv mounts" )
@@ -140,10 +140,10 @@ func parseMount(value string, expander SingleWordExpander) (*Mount, error) {
140
140
roAuto := true
141
141
142
142
for _ , field := range fields {
143
- parts := strings .SplitN (field , "=" , 2 )
144
- key : = strings .ToLower (parts [ 0 ] )
143
+ key , value , ok := strings .Cut (field , "=" )
144
+ key = strings .ToLower (key )
145
145
146
- if len ( parts ) == 1 {
146
+ if ! ok {
147
147
if expander == nil {
148
148
continue // evaluate later
149
149
}
@@ -163,21 +163,18 @@ func parseMount(value string, expander SingleWordExpander) (*Mount, error) {
163
163
} else {
164
164
return nil , errors .Errorf ("unexpected key '%s' for mount type '%s'" , key , m .Type )
165
165
}
166
+ default :
167
+ // any other option requires a value.
168
+ return nil , errors .Errorf ("invalid field '%s' must be a key=value pair" , field )
166
169
}
167
170
}
168
171
169
- if len (parts ) != 2 {
170
- return nil , errors .Errorf ("invalid field '%s' must be a key=value pair" , field )
171
- }
172
-
173
- value := parts [1 ]
174
172
// check for potential variable
175
173
if expander != nil {
176
- processed , err : = expander (value )
174
+ value , err = expander (value )
177
175
if err != nil {
178
176
return nil , err
179
177
}
180
- value = processed
181
178
} else if key == "from" {
182
179
if matched , err := regexp .MatchString (`\$.` , value ); err != nil { //nolint
183
180
return nil , err
@@ -217,11 +214,10 @@ func parseMount(value string, expander SingleWordExpander) (*Mount, error) {
217
214
roAuto = false
218
215
case "required" :
219
216
if m .Type == MountTypeSecret || m .Type == MountTypeSSH {
220
- v , err : = strconv .ParseBool (value )
217
+ m . Required , err = strconv .ParseBool (value )
221
218
if err != nil {
222
219
return nil , errors .Errorf ("invalid value for %s: %s" , key , value )
223
220
}
224
- m .Required = v
225
221
} else {
226
222
return nil , errors .Errorf ("unexpected key '%s' for mount type '%s'" , key , m .Type )
227
223
}
@@ -270,16 +266,16 @@ func parseMount(value string, expander SingleWordExpander) (*Mount, error) {
270
266
271
267
fileInfoAllowed := m .Type == MountTypeSecret || m .Type == MountTypeSSH || m .Type == MountTypeCache
272
268
273
- if m . Mode != nil && ! fileInfoAllowed {
274
- return nil , errors . Errorf ( "mode not allowed for %q type mounts" , m . Type )
275
- }
276
-
277
- if m .UID != nil && ! fileInfoAllowed {
278
- return nil , errors .Errorf ("uid not allowed for %q type mounts" , m .Type )
279
- }
280
-
281
- if m . GID != nil && ! fileInfoAllowed {
282
- return nil , errors . Errorf ( "gid not allowed for %q type mounts" , m . Type )
269
+ if ! fileInfoAllowed {
270
+ if m . Mode != nil {
271
+ return nil , errors . Errorf ( "mode not allowed for %q type mounts" , m . Type )
272
+ }
273
+ if m .UID != nil {
274
+ return nil , errors .Errorf ("uid not allowed for %q type mounts" , m .Type )
275
+ }
276
+ if m . GID != nil {
277
+ return nil , errors . Errorf ( "gid not allowed for %q type mounts" , m . Type )
278
+ }
283
279
}
284
280
285
281
if roAuto {
0 commit comments