From f34c553d04a9911e6be71a5b83df3ded5be6e0ba Mon Sep 17 00:00:00 2001 From: Vigilans Date: Thu, 2 May 2024 15:29:00 +0800 Subject: [PATCH] Fix broken block parsing when label prefix contains dots --- generator/generator.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/generator/generator.go b/generator/generator.go index 6cd4ff97..d9130ab7 100644 --- a/generator/generator.go +++ b/generator/generator.go @@ -7,6 +7,7 @@ import ( "net" "os" "regexp" + "strings" "time" "github.com/docker/docker/api/types" @@ -38,7 +39,7 @@ type CaddyfileGenerator struct { // CreateGenerator creates a new generator func CreateGenerator(dockerClients []docker.Client, dockerUtils docker.Utils, options *config.Options) *CaddyfileGenerator { - var labelRegexString = fmt.Sprintf("^%s(_\\d+)?(\\.|$)", options.LabelPrefix) + var labelRegexString = fmt.Sprintf("^%s(_\\d+)?(\\.|$)", regexp.QuoteMeta(options.LabelPrefix)) return &CaddyfileGenerator{ options: options, @@ -284,6 +285,8 @@ func (g *CaddyfileGenerator) filterLabels(labels map[string]string) map[string]s filteredLabels := map[string]string{} for label, value := range labels { if g.labelRegex.MatchString(label) { + // Canonicalize label prefix to "caddy", to prevent any meta characters in the prefix from causing problem in block parsing + label = strings.Replace(label, g.options.LabelPrefix, "caddy", 1) filteredLabels[label] = value } }