From b321e0e9283d644d352f86a9d5f4fe9271a93aa9 Mon Sep 17 00:00:00 2001 From: Weidi Deng Date: Thu, 12 Oct 2023 14:27:11 +0800 Subject: [PATCH] check if there may be multiple placeholders in variadic placeholders --- caddyconfig/caddyfile/importargs.go | 7 +++++++ caddyconfig/caddyfile/parse_test.go | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/caddyconfig/caddyfile/importargs.go b/caddyconfig/caddyfile/importargs.go index 2e21a3652f7..b2eb3e834dd 100644 --- a/caddyconfig/caddyfile/importargs.go +++ b/caddyconfig/caddyfile/importargs.go @@ -52,6 +52,13 @@ func parseVariadic(token Token, argCount int) (bool, int, int) { return false, 0, 0 } + // A valid token may contain several placeholders, and + // they may be separated by ":". It's not variadic. + // https://github.com/caddyserver/caddy/issues/5716 + if strings.Contains(start, "}") || strings.Contains(end, "{") { + return false, 0, 0 + } + var ( startIndex = 0 endIndex = argCount diff --git a/caddyconfig/caddyfile/parse_test.go b/caddyconfig/caddyfile/parse_test.go index b1104edf943..b270f161356 100644 --- a/caddyconfig/caddyfile/parse_test.go +++ b/caddyconfig/caddyfile/parse_test.go @@ -91,6 +91,10 @@ func TestParseVariadic(t *testing.T) { input: "{args[0:10]}", result: true, }, + { + input: "{args[0]}:{args[1]}:{args[2]}", + result: false, + }, } { token := Token{ File: "test",