caddyhttp: host labels placeholders endianness from right->left

https://caddy.community/t/labeln-placeholder-endian-issue/5366

(I thought we had this before but it must have gotten lost somewhere)
This commit is contained in:
Matthew Holt 2019-10-14 12:09:43 -06:00
parent bc738991b6
commit acf7dea68f
No known key found for this signature in database
GPG Key ID: 2A349DD577D586A5
2 changed files with 17 additions and 5 deletions

View File

@ -146,14 +146,18 @@ func addHTTPVarsToReplacer(repl caddy.Replacer, req *http.Request, w http.Respon
if err != nil { if err != nil {
return "", false return "", false
} }
hostLabels := strings.Split(req.Host, ".") reqHost, _, err := net.SplitHostPort(req.Host)
if err != nil {
reqHost = req.Host // OK; assume there was no port
}
hostLabels := strings.Split(reqHost, ".")
if idx < 0 { if idx < 0 {
return "", false return "", false
} }
if idx >= len(hostLabels) { if idx > len(hostLabels) {
return "", true return "", true
} }
return hostLabels[idx], true return hostLabels[len(hostLabels)-idx-1], true
} }
// path parts // path parts

View File

@ -61,6 +61,14 @@ func TestHTTPVarReplacement(t *testing.T) {
input: "{http.request.remote.port}", input: "{http.request.remote.port}",
expect: "1234", expect: "1234",
}, },
{
input: "{http.request.host.labels.0}",
expect: "com",
},
{
input: "{http.request.host.labels.1}",
expect: "example",
},
} { } {
actual := repl.ReplaceAll(tc.input, "<empty>") actual := repl.ReplaceAll(tc.input, "<empty>")
if actual != tc.expect { if actual != tc.expect {