Skip to content

Commit 3070297

Browse files
eogns47daengdaengLee
andauthoredOct 2, 2024··
fix(helm): escape consecutive commas in cleanSetParameters (#19269) (#20113)
Signed-off-by: KangManJoo <eogns47@konkuk.ac.kr> Signed-off-by: daengdaengLee <gunho1020@gmail.com> Co-authored-by: daengdaengLee <gunho1020@gmail.com>
1 parent 1a84db5 commit 3070297

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed
 

‎util/helm/cmd.go

+23-6
Original file line numberDiff line numberDiff line change
@@ -342,19 +342,36 @@ type TemplateOpts struct {
342342
SkipCrds bool
343343
}
344344

345-
var (
346-
re = regexp.MustCompile(`([^\\]),`)
347-
apiVersionsRemover = regexp.MustCompile(`(--api-versions [^ ]+ )+`)
348-
)
349-
350345
func cleanSetParameters(val string) string {
351346
// `{}` equal helm list parameters format, so don't escape `,`.
352347
if strings.HasPrefix(val, `{`) && strings.HasSuffix(val, `}`) {
353348
return val
354349
}
355-
return re.ReplaceAllString(val, `$1\,`)
350+
351+
val = replaceAllWithLookbehind(val, ',', `\,`, '\\')
352+
return val
356353
}
357354

355+
func replaceAllWithLookbehind(val string, old rune, new string, lookbehind rune) string {
356+
var result strings.Builder
357+
var prevR rune
358+
for _, r := range val {
359+
if r == old {
360+
if prevR != lookbehind {
361+
result.WriteString(new)
362+
} else {
363+
result.WriteRune(old)
364+
}
365+
} else {
366+
result.WriteRune(r)
367+
}
368+
prevR = r
369+
}
370+
return result.String()
371+
}
372+
373+
var apiVersionsRemover = regexp.MustCompile(`(--api-versions [^ ]+ )+`)
374+
358375
func (c *Cmd) template(chartPath string, opts *TemplateOpts) (string, string, error) {
359376
if callback, err := cleanupChartLockFile(filepath.Clean(path.Join(c.WorkDir, chartPath))); err == nil {
360377
defer callback()

‎util/helm/helm_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ func TestHelmArgCleaner(t *testing.T) {
166166
`not, clean`: `not\, clean`,
167167
`a\,b,c`: `a\,b\,c`,
168168
`{a,b,c}`: `{a,b,c}`,
169+
`,,,,,\,`: `\,\,\,\,\,\,`,
170+
`\,,\\,,`: `\,\,\\,\,`,
169171
} {
170172
cleaned := cleanSetParameters(input)
171173
assert.Equal(t, expected, cleaned)

0 commit comments

Comments
 (0)
Please sign in to comment.